Town wire
NPCs surprise players with news the simulator already knows — heroics, public board quests, and DM notes — scoped to 1–N boundary zones. Live chat may rephrase a canonical bullet; it must not invent extra deeds.
This replaces scheduled Postgres dialog-overlay regen (archived as plan 55). Overlay regen paraphrased static YAML, the sim never posted events, and overlays were unused in deterministic talk.
Model
| Layer | Storage | Who edits |
|---|---|---|
| Authored situations / topics | the content files<npc_id>.yaml, Dialogue tab |
Designers |
| Live chat voice | OpenRouter via npc_live_chat |
Per-NPC / role groups |
| Town wire facts | In-memory GossipStore on the region sim |
Sim emitters + DM inject |
| Wire scope | Boundary zone ids on each fact | Map layout + inject picker |
Pickup
A humanoid NPC hears a fact when their current exterior or home exterior is inside any listed boundary zone. They carry it until TTL.
Sim heroics and public quests also pin civilized town boundaries so Ada in Starter Town can mention a bog kill. DM notes never auto-spread.
Delivery
- Deterministic talk: template mention when greeting or the player asks for news (
news,gossip,heard, …). - Live LLM: up to three canonical bullets in world context, with an explicit “do not invent” rail.
- Cooldown per NPC + listener + fact (
gossip.mention_cooldown_game_hours). - Skip UUID-looking player names.
Kill thresholds: 5 / 10 / 25 plus notable refs (ogre_1, shadow stalker, high-level).