Replace the single shared `npc` stat template (+ npc_card_types) with an `npcs` section: each NPC keyed by a stable id, carrying its own name, description, trigger keys, and its OWN stats block. The AI addresses NPCs as npc.<id>.<stat> (id shown in context), which also fixes the old card-id-guessing problem. On adventure creation each NPC auto-creates a story card (name/keys/desc) for lore + in-scene detection, unless a same-name card already exists. All NPCs instantiate up front. - engine: npcs instantiate/apply/render/reference, npc_name/npc_triggers - builder: _visible_npcs matches each NPC's own keys - create_adventure: auto-create story cards from npcs - WorldStateDrawer: render defined NPCs with their own stats + desc tooltip - demo seed: Gwen (health/trust) + Bandit Leader (health/aggression) - tests updated (34 pass); no new migration (npcs lives in stat_schema JSON) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
567 B
Python
29 lines
567 B
Python
"""Phase 12 — RPG world state: the AI proposes stat/milestone deltas, this
|
|
module validates and clamps them against a scenario's stat_schema."""
|
|
|
|
from .engine import (
|
|
EMIT_RULE,
|
|
apply_delta,
|
|
band_label,
|
|
extract_delta,
|
|
has_schema,
|
|
instantiate,
|
|
npc_name,
|
|
npc_triggers,
|
|
render_reference,
|
|
render_state_section,
|
|
)
|
|
|
|
__all__ = [
|
|
"EMIT_RULE",
|
|
"apply_delta",
|
|
"band_label",
|
|
"extract_delta",
|
|
"has_schema",
|
|
"instantiate",
|
|
"npc_name",
|
|
"npc_triggers",
|
|
"render_reference",
|
|
"render_state_section",
|
|
]
|