Line IDs in all dialogue and monologue pool files renamed from the old location-scoped format (e.g. the-terminal_d_039) to the new NPC-scoped format (e.g. kael-davan_d_001) per the D-035 Sprint 15 amendment. Changes: - 20 dialogue pool files across 3 locations renamed - 14 monologue pool files (detective + smuggler) renamed - Schema descriptions updated in dialogue/monologue schema files - Authoring style guide and design docs updated with new examples - Multi-location NPCs (kael-davan, pc-detective, pc-smuggler) given globally unique cross-file sequences to satisfy XREF uniqueness check The location-scoped scheme already caused a collision (the-terminal_d_039 appearing in multiple NPC files) and would not scale to procedurally generated NPC populations (D-029). Zero content changes — pure ID substitution. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
135 lines
4.5 KiB
JSON
135 lines
4.5 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "dialogue-pool.schema.json",
|
|
"title": "Dialogue Line Pool",
|
|
"description": "Tagged dialogue lines scoped by location + role (D-028, D-035).",
|
|
"type": "object",
|
|
"required": ["location", "role", "lines"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"location": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9-]*$",
|
|
"description": "Location slug this dialogue pool belongs to"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9-]*$",
|
|
"description": "Template role slug (e.g. dock-worker, bar-owner)"
|
|
},
|
|
"lines": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/dialogue_line" },
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"$defs": {
|
|
"dialogue_line": {
|
|
"type": "object",
|
|
"required": ["id", "text", "role", "access", "trust", "situation"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9-]*_d_[0-9]{3}$",
|
|
"description": "Stable line ID: {npc-slug}_d_{###} (e.g. kael-davan_d_001). NPC-scoped per D-035 Sprint 15 amendment — each NPC has an independent sequence starting at _001."
|
|
},
|
|
"text": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9-]*$",
|
|
"description": "Template role this line belongs to"
|
|
},
|
|
"access": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": ["public", "insider", "authority", "peer", "hostile"]
|
|
},
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"description": "Access tiers this line is available at (multi-tier eligibility)"
|
|
},
|
|
"trust": {
|
|
"type": "string",
|
|
"enum": ["surface", "real", "secret"],
|
|
"description": "Minimum trust level required"
|
|
},
|
|
"situation": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"arrival", "shift_start", "shift_end", "shift_transition",
|
|
"bar_evening", "night_shift", "investigation", "confrontation",
|
|
"social", "alone", "emergency", "routine", "observation",
|
|
"greeting"
|
|
]
|
|
},
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"description": "Situation contexts when this line can fire (D-035: list<enum>). greeting added Sprint 8 for PC dialogue pools"
|
|
},
|
|
"topic": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"colleague", "routine", "cargo", "money", "trust",
|
|
"danger", "institution", "personal", "investigation"
|
|
]
|
|
},
|
|
"uniqueItems": true,
|
|
"description": "Topic tags for selection weighting (D-035: list<enum>)"
|
|
},
|
|
"mood": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"anxious", "frustrated", "content", "suspicious",
|
|
"warm", "hostile", "relieved", "focused"
|
|
]
|
|
},
|
|
"uniqueItems": true,
|
|
"description": "Mood tags for selection weighting (D-035: list<enum>). 8 v0.1 values, renamed Sprint 14 to match voice guide vocabulary. Neutral = untagged."
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"description": "Freeform tags for additional filtering"
|
|
},
|
|
"knowledge_grant": {
|
|
"type": "object",
|
|
"description": "Knowledge the player gains from hearing this line",
|
|
"required": ["fact_id", "confidence"],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"fact_id": { "type": "string" },
|
|
"confidence": {
|
|
"type": "string",
|
|
"enum": ["suspects", "knows_of", "knows_details", "direct"]
|
|
}
|
|
}
|
|
},
|
|
"dual_lens": {
|
|
"type": "object",
|
|
"description": "Authoring-only: per-character resonance notes (NOT consumed by engine)",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"smuggler": { "type": "string" },
|
|
"detective": { "type": "string" }
|
|
}
|
|
},
|
|
"notes": {
|
|
"type": "string",
|
|
"description": "Authoring-only: freeform author notes (NOT consumed by engine)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|