NPC Details

generateNPCDetails

Fires once when an AI-created NPC first appears in scene with only minimal first-pass data. Generates the full basicInfo, hiddenInfo, personality, and abilities record. Distinct from generateCharacterBackground, which generates the player character's backstory and appearance during character creation.

In the editor

"NPC Details Instructions"

Editor location
Files → AI → NPC Details
Editor type
Edit in Studio + View JSON
Size limits
  • Each string leaf under a task (aiInstructions.<task>.<key>)5,000
  • aiInstructions.generateNPCDetails total26,000

Schema

json
{
  "aiInstructions": {
    "generateNPCDetails": {
      "<key>": "string"
    }
  }
}

Example

json
{
  "aiInstructions": {
    "generateNPCDetails": {
      "custom": "## HIDDEN INFO STRUCTURE\nAll NPCs are SENTIENT. Write hiddenInfo as three labelled fields in dense behavioural prose. Use this exact format:\n\nFormat: \"hiddenInfo\": \"Background: ...\\n\\nPersonality: ...\\n\\nCombat: ...\"\n\nBackground (6-8 sentences): Name, age, origin/clan, rank or skill tier; how they reached their current level; at least one defined relationship; current objective or pressure; personal view on their role or world.\n\nPersonality (7-9 sentences): Speech style and tone; default behaviour and how it shifts under pressure; routine and idle tendencies; behaviour toward higher vs lower status; what they hide vs reveal; one defining belief or trait outside combat.\n\nCombat (4-5 sentences): Fighting style tied to their training and specialisation; preferred range and engagement style; triggers for escalation or disengagement; reaction to injury or disadvantage; one distinct combat habit.\n\n## ABILITIES (MANDATORY)\nAll NPCs must have 6-10 abilities. Abilities must be broad systems, not single techniques; must reflect rank and specialisation; must explain practical combat or utility use.\nFormat: (TYPE) Ability Name: Description. Types: attack, combat, utility.\n\n## ARCHETYPE FIRST\nNPCs must be immediately readable on first encounter. Each rank or class should carry a one-line silhouette: 'reactive, learning' / 'composed, dependable' / 'commanding, experienced' / 'silent, efficient, lethal' / 'authoritative, dominant'. Match observable behaviour to the silhouette.\n\n## CHARACTER PHILOSOPHY\nDefine characters by what they want — ambitions, loyalties, drives — not by what they have lost. Lead with desire, not damage.\n\n## KNOWLEDGE LIMITS\nNPCs volunteer only what their role and position would plausibly allow. Hidden information surfaces through play, observation, or earned trust — never through narrator convenience.\n\n## BANNED TYPES\nNo bureaucrats, pedants, worriers, sticklers, moralists, or procedural personalities. Any record-keeper should be dangerous or funny, not procedural.",
      "style": "## Style\n* Plain, period-appropriate language\n* No anachronisms; nothing that sounds modern in a pre-industrial setting",
      "cliche_avoidance": "## Cliche Avoidance\n* No retired mercenaries, chosen ones, or amnesiacs",
      "faction_affiliation": "## Faction Affiliation\n- Assign a faction only when the NPC would plausibly be known to it"
    }
  }
}

A worked pattern with labelled hiddenInfo sections — replace world-specific tokens:

Fields

Each key replaces one section of the prompt the engine ships for this task. Set only the sections you want to change; every key you leave out keeps Voyage's own text.

custom

Free-form rules layered over the whole pass rather than one section.

character_creator_instructions

The opening brief: what the task is producing and that the world background sets genre, tone, style, and setting.

personality_archetype_information

How to use archetype guidance when the engine supplies it, and what to do for lower-tier characters that arrive without any.

style

Prose register for the whole NPC: plain language, grounded and flawed people, tropes subverted by ordinary human weakness, nothing anachronistic to the setting.

cliche_avoidance

Backstories to refuse outright. Voyage's default rules out retired mercenaries, former servants of the king, orphans, and fallen nobles.

basic_info

The short public-facing description: appearance, gender, approximate age, bearing, demeanour. Voyage's default keeps it evergreen and bars anything situational.

hidden_info

The private brief written as narrative: who they are, the event that shaped them and what they took from it, and the specific thing they care about that drives their choices.

personality

The comma-separated trait list, mixing plain adjectives with descriptive phrases and pairing outward traits with inner motivation. Voyage's default asks for a contradiction and rules out quirks and verbal tics.

abilities

Shape of the ability list, including how many, the (TYPE) NAME: DESCRIPTION format, and that they stay useful in combat or conflict.

faction_affiliation

When to attach a faction. Voyage's default treats it as optional, restricts it to factions the world already defines, and assigns one only where the NPC's occupation, values, or goals line up.

Note: generateNPCDetails runs on AI-improvised, authored, and quest-spawned NPCs alike, on each NPC's first meaningful appearance — not only AI-created ones.

Authoring pattern

  • Labelled hiddenInfo sections with explicit sentence counts. Telling the model Background (6-8 sentences) / Personality (7-9 sentences) / Combat (4-5 sentences) produces consistent depth across all generated NPCs. The labels themselves anchor the model's output structure.
  • Format: directive with literal escaped newlines. Showing the exact intended output string — "Background: ...\n\nPersonality: ...\n\nCombat: ..." — pins the model to the format rather than asking it to infer.
  • Mandatory abilities count + format spec. 6-10 abilities plus Format: (TYPE) Name: Description plus the enum of types prevents the model from producing one-line ability strings or skipping the count.
  • Archetype-first design. A one-line silhouette per rank/class makes generated NPCs immediately readable on first encounter. The model uses the silhouette as the seed and fills outward.
  • Character philosophy and knowledge limits as cross-cutting rules. These apply regardless of which archetype the NPC falls into. Keep them short and prescriptive — Lead with desire, not damage is more useful than three paragraphs about motivation theory.
  • Banned-types list to suppress default tropes. Without an explicit ban the model defaults toward procedural, anxious, or worry-coded characters. Naming what NOT to produce is more effective than describing what TO produce.

How personality manifests physically: posture, speech patterns, how the character moves. "Confident" is a label; "speaks over the ends of other people's sentences" is a manifestation. Apply this rule to every Personality block.

Age and energy default: younger characters (late teens / twenties human equivalent). Older characters should be vital and dynamic, not efficient and weathered.

Note: To enforce a baseline depth floor (a minimum character count) on generated hiddenInfo, see Minimum output depth in the Advanced AI Techniques appendix.