Schema and Rust Mood enum renamed for author-friendly vocabulary: fond→warm, comfortable→content, worried→anxious, concerned→frustrated. Dropped: analytical (merged into focused), conflicted (modeled as suspicious+warm collision). Added: hostile. Final 8 moods: anxious, frustrated, content, suspicious, warm, hostile, relieved, focused. Neutral = untagged. Resolves Gestalt's blocking issue on #121. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
135 lines
4.4 KiB
JSON
135 lines
4.4 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: {location_slug}_d_{###}"
|
|
},
|
|
"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)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|