Characters that build trust, hold grudges, and gossip about your players. Drop-in API for Unity, Unreal, and any game engine.
Players save the world, and the blacksmith still says "Looking to protect yourself?" for the 47th time.
Characters have relationships, share gossip, and guard secrets. Click any node to see how information flows.
Define who knows who, their opinions, and what triggers gossip between them. When a player insults the barkeep, her friend the blacksmith hears about it.
// Martha knows Iron Tom - they're old friends await verbum.npcs.addRelationship('valdoria', 'npc_barkeep', { target_id: 'npc_blacksmith', target_name: 'Iron Tom', relation: 'old friend', opinion: 'Trust him with my life', gossip_triggers: ['weapons', 'forge', 'trouble'] }); // She's suspicious of the merchant await verbum.npcs.addRelationship('valdoria', 'npc_barkeep', { target_id: 'npc_merchant', target_name: 'Silken', relation: 'business acquaintance', opinion: 'Something off about him', gossip_triggers: ['gold', 'deals', 'secrets'] });
Engrams are fragments of knowledge that NPCs can reveal. Each has a trust threshold— players must earn the right to learn secrets.
// A world secret - the prince's location await verbum.engrams.create('valdoria', { id: 'eng_prince_location', keywords: ['prince', 'missing', 'heir', 'royal'], fragments: [ 'The prince isn\'t dead.', 'He\'s hidden in the old monastery.', 'The church helped him escape.' ], trust_required: 0.7, // Need to be allies engram_type: 'world' }); // Give this knowledge to the barkeep await verbum.npcs.addKnowledge( 'valdoria', 'npc_barkeep', ['eng_prince_location'] );
When players interact with NPCs, word spreads through the relationship network. Track who knows what about the player across your entire world.
// Get everything NPCs know about a player const intel = await verbum.players.getIntelligence( 'valdoria', 'player_42' ); console.log(intel.stats); // { // total_npcs_met: 12, // allies: 3, // neutral: 7, // enemies: 2, // avg_trust: 0.45 // } console.log(intel.reputation); // [ // { // from_npc_name: "Martha", // sentiment: "positive", // summary: "Helped defend the tavern", // heard_by: ["Iron Tom", "Old Sage"] // } // ]
NPCs don't just talk—they interact with your game world. Define tools once, assign them to any NPC.
// Register a tool once verbum.tools.register({ name: 'grant_title', description: 'Grant noble title to player', handler: async (args, ctx) => { await game.player.setTitle(ctx.player_id, args.title); } }); // Assign to NPCs await verbum.npcs.create('valdoria', { name: 'King Aldric', tools: ['grant_title', 'declare_war'], tool_requirements: { 'declare_war': { min_trust: 0.9 } } });
Trust, memory, gossip, and secrets form an interconnected system.
Builds over conversations. Each NPC has a max trust ceiling— some will never fully open up.
Significant moments are remembered and recalled naturally in future conversations.
Inner worlds with beliefs, fears, desires. A paranoid NPC behaves differently than an optimist.
Configure attentiveness, retention, and self-absorption. Some NPCs forget quickly; others never do.
NPCs respond differently based on time of day. The barkeep is friendlier at night.
Built-in protection keeps NPCs in character. Players can't trick them into breaking role.
Send a message, get a response. Everything else happens automatically.
import { VerbumClient } from '@verbum/sdk'; const verbum = new VerbumClient('https://api.verbum.dev'); // Have a conversation const response = await verbum.converse('valdoria', { npc_id: 'npc_barkeep', player_id: 'player_42', message: 'What do you know about the prince?', hour: 22 // Late night }); console.log(response); // { // text: "Keep your voice down...", // trust: 0.23, // engram_hit: null // Secret not unlocked yet // }
Full type safety with exported interfaces for all API types.
npm install @verbum/sdk Use from any language. OpenAPI spec available.
POST /api/worlds/:id/converse Unity and Unreal plugins in development.
Coming Q2 2025 Join studios building the next generation of immersive game worlds.