Talk is the oldest system in Shroud of the Avatar and the least examined. Across 148 scenes, 2,302 conversation files hold 32,973 topics and 42,276 answers, every one reachable by typing a word at an NPC, a mechanic the rest of the genre abandoned two decades ago. Thirty days of live telemetry show what the inheritance costs: players typed 2,216 things no NPC understood, five percent of them the name of one man in Highvale that nobody in his own town could point to, and 59 of them addressed to cats and dogs that said nothing back. Behind the window sit 97,951 voice clips in eight languages, a 40-entry per-NPC memory almost nothing reads, and a town clock that 97.9 percent of the world ignores. This page walks the machine end to end, traces forty years of talking NPCs from Ultima IV to the LLM wave, and lays out thirty-three concrete proposals in four tiers. Every card is open for comments and votes below.
In 1985, Ultima IV shipped the idea this whole page rests on: you talk to an NPC by typing a word, every character in the world answers to name, job, and health, and the deeper secrets are words you learn in one conversation and spend in another. Ultima V put the townsfolk on a clock. Ultima VI highlighted the askable words inside NPC speech, the compromise between mystery and mercy that this game's window still uses. Then Ultima VII dropped typing for click lists, and every later branch of the family tree inherited that ceiling: Morrowind's topic hyperlinks, World of Warcraft's gossip pane, the dialogue wheel. The wheel won for reasons that made sense at the time, controller ergonomics and the cost of recording voice for every variation. Both reasons have since inverted. Voice is generated now, not recorded, and the dominant interface of the 2020s is once again a text box you type into. Shroud of the Avatar, built by the man who wrote the 1985 original, is the only live commercial MMO still running the trunk of that tree.
The system underneath is in better shape than its reputation. Conversation resolves entirely on the player's machine, which is why typing at an NPC costs the server nothing at any concurrency. The corpus is enormous and largely sound: an audit for this page parsed every file and found exactly two broken compound gates, one truncated expression, and ten bad action verbs across 42,276 answers. The voice pipeline built this year gives roughly 1,700 NPCs speech in eight languages at a cost per line the 2006 industry could not imagine. And the authoring seat, Conversation Studio, shipped in July with thirty validation rules. The machine works. What the machine lacks is manners, memory, and a wound clock, and the live telemetry says exactly where:
Thirty-three proposals follow, in four tiers. Thirteen defects found during the audit are filed on the tracker (#4618 to #4630) and the cards cite them.
| Tier | Theme | Cards | Cost band | Who asked |
|---|---|---|---|---|
| 1 · Words That Work | The defect ledger: a miss counter that can finally tell bot answers from honest ones, bark dice that respect their own percentages, keyword highlights that actually ship, broken gates repaired, verbs that log instead of throw, replies that open at the top, questions that survive their own timeout, and 592 conversations restored to their own languages | S1–S9 | all small | every player who typed a word no NPC understood, and the tracker issues #4618–#4630 |
| 2 · On Speaking Terms | The forgiving ear: typos land one letter off and still connect, misses come with a map, answers stop repeating, cats answer to woof, street noise learns manners and a mute button by category | S10–S16 | small to medium | the Oracle's typo storm, that_shawn_guy's seven muting reports, and the Cat of Soltown |
| 3 · The Town That Listens | The new capabilities: a clock in the flag grammar, evening rounds town by town, neighbors who can point to Michael, innkeepers who remember you, virtue in your greeting, a conversations journal, street playlets, and the first NPCs a town owner can call their own | S17–S27 | medium to extra large | the index tile's own promise, wishlist threads 179050 and 179344, Takotora's daily requests, and forty years of genre precedent |
| 4 · The Oracle's Table | Six owner rulings with the evidence attached: the fallback bot, the outlander voice, affinity versus flags, the client-side clock, the Oracle's three doors, and the generative docket | S28–S33 | rulings first | the owner; every ruling gates cards above it |
Right-click any townsperson in New Britannia and this window opens. It is the direct descendant of Ultima VI's 1990 compromise: type anything you like, and the words the NPC can expand on glow in their own speech. Every part of it works today, and every part of it carries a proposal.
Innkeeper Abbott: Welcome back, outlander. (1) The stew pot is on and there are rooms upstairs, unless the ferry has already (2) worn you out. You: ferry Innkeeper Abbott: She runs at dawn from the north dock. Captain Kinsey keeps the manifest. ◀ [rooms] [rumors] [ferry] ▶ (3) ▲ hide topics (4) Local: [__________________] [Vendor] [Goodbye] (5)(6)
Every time the parser comes up empty the client writes one log line: the NPC, the scene, and what the player typed. Thirty days of those lines are this page's best witness. Misses are rare in absolute terms, 2,216 against 8,935,775 skill casts in the same window, but they concentrate exactly where they hurt: about 35 percent land in the three starter outskirts plus Soltown, on players deciding whether typing at NPCs is worth their time at all.
The classes decompose almost the whole sample, and each one is a different card. "Michael" was asked of ten different NPCs in Highvale Outskirts, guard and blacksmith and neighbor alike, and nobody in town knows him: card S19 teaches towns their own residents. "yes" and "ok" die because an NPC's question expires after seven minutes and it forgets it asked: card S7. The Oracle collects a private typo storm (est, tets, tesrt, teswt) from players trying to type a word it just asked for: card S10 catches typos one letter off. And the Cat of Soltown outranks most human NPCs for attempted conversation: card S13 is five keywords per animal. None of these numbers can improve until misses are counted somewhere a designer looks, which is card S1, the dead-end ledger.
Everything a player types walks one pipeline, and it has exactly four seams where this catalog plugs in: the match seam, the selection seam, the output seam, and the miss seam. No card below invents a fifth.
flowchart TD IN[Player types in the Local box] --> PRE[Cleanup pass
punctuation stripped, accents folded,
lowercased] PRE --> Q{Is this NPC waiting on
a question it asked?} Q -->|yes, within 7 minutes| QH[Query handler
yes and no variants, saved answers,
name capture] Q -->|no, or the question expired| KW[Keyword walk : MATCH SEAM
substring scan plus wildcard entries
over this NPC's keyword table] KW -->|hit| SEL[Response selection : SELECTION SEAM
three passes: flag-gated, ungated, fallback,
off-duty filter each pass, then a random pick] KW -->|miss| BOT[Fallback : MISS SEAM
chatbot line, or an honest shrug,
either way one identical log line] SEL --> ACT[Actions
set flag, give item, teleport,
directions, about 50 verbs] QH --> ACT ACT --> SAY[Say : OUTPUT SEAM
chat text, overhead bubble, chat log,
voice clip, speech floor, emote] BOT --> SAY style KW stroke-width:3px style SEL stroke-width:3px style SAY stroke-width:3px style BOT stroke-width:3px,stroke-dasharray:5 5
The match seam takes the fuzzy matcher and the verb hygiene. The selection seam takes recency weighting for the 4,710 talks that already carry multiple answers, the new time token, and every memory condition. The output seam takes voice policy, the transcripts tab, and bark discipline. The miss seam, drawn dashed because it is the one that fails players today, takes the hints, the ledger, and the generative last resort. A bot answer and an honest shrug currently write the identical log line, so the game cannot even count its own failures by kind.
The typed-keyword conversation is not a curiosity that survived by accident. It is a design lineage with a paper trail, and this game's founder wrote the first page of it. What follows is the trail: what each generation added, what each fork gave up, and what the current wave changes.
The trunk is Ultima. In 1985, Ultima IV set the floor that made typing viable at all: every NPC in Britannia answers name, job, and health, the parser matches on the first four letters so spelling mercy is built in, and the real quest structure is words themselves, learned from one character and spent on another. The internal authoring sheet Origin used that year survives, and it reads like a design law: give each NPC two pieces of knowledge the player could deduce it knows, and one secret with a price on it. Ultima V put the townsfolk on a real clock, so where and when you caught someone changed what you got. Ultima VI made the pivotal compromise this game still ships: keep the free typing, but paint the askable words red inside the NPC's own speech, so the parser scaffolds itself without giving up its secrets. Then Ultima VII removed typing for click lists, and its towns reached the schedule apex, a lamplighter walking Britain at dusk, a baker who bakes, drinks, and sleeps. The trade was permanent: no Ultima after VI ever let a player spend a word they were not offered.
The MMO branch tells the survival story. Ultima Online carried keyword speech into 1997 and it survives there today as a command grammar: bank, guards, I wish to lock this down. What withered was conversational lore, and the record says why: nothing scaffolded it, so when menus arrived in 2001 they filled a vacuum. The 2002 player-hired barkeep, with owner-set keyword and response pairs, is still cited by players two decades later, and it is the direct precedent for this page's town-owner cards. EverQuest ran the other experiment: NPC dialogue parsed from typed say text, with askable words hinted in brackets inline, and some deliberately unhinted so discovery stayed alive. Its retreat was graceful by design: by 2007 each bracket became a link that types the word for you, and the typed data model survived under a clickable skin. World of Warcraft is the fork's terminal state: conversation became a gossip pane, and by 2008 the engine hid its own flavor text by default, leaving an addon ecosystem whose whole purpose is to skip or salvage what remains. The lesson the branch agrees on: scaffold the parser or lose it.
The craft branch supplies the manners. Infocom's parser doctrine, refined by forty years of interactive fiction, distinguishes three failures that must never share a message: the word is unknown, the answer is refused, and the answer is not available yet. Conflating them is the cardinal sin, and it is the sin the current fallback commits on every miss, because the AIML chatbot bolted onto the parser answers everything with a plausible nothing. That bot's own ancestry runs straight to ELIZA, 1966, whose author spent the rest of his career warning about exactly this effect: canned plausibility teaches people to trust, then to distrust, everything. Morrowind contributes the condition stack worth adopting under a typed surface, priority-ordered responses gated on disposition, faction, and state, with explicit refusals, and also the failure to refuse: a shared response database that turned a hundred mouths into one encyclopedia. Hades contributes the modern selection algorithm, condition-filter then priority-sort then retire, directly applicable to the 4,710 talks here that carry multiple answers and pick between them at uniform random. Disco Elysium proved failure can be the best content in the game if it redirects instead of stonewalling. And Animal Crossing holds the record for emotion per byte: a timestamp, a counter, and a few learned facts behind template lines produce villagers people write essays about missing.
The schedule-and-street canon prices the third tier. Ultima VII did daily routines with a tiny per-NPC data table; Kingdom Come: Deliverance shipped the same shape in 2018, about eight timed activity blocks per NPC, and its honest cost is documented, the wait-by-the-door tax, which this catalog pays in dialogue rather than locked doors. Gothic had already proven the effect years before Oblivion: townsfolk who work, eat, and sleep read as alive even when the acting is stiff. Oblivion's Radiant AI is the cautionary tale with receipts: the famous pre-release autonomy demos were staged or cut, the team's own words explain why ("the AI is so smart it screws up our quests"), and one of its two hard constraints, the cost of storing recorded voice, is precisely the constraint this game's generated-voice pipeline deleted. Skyrim's temper, schedules without autonomy, is the right ceiling. On the street, Rockstar's ambient systems are line pools with context tags and per-line cooldowns, not runtime intelligence; Guild Wars 2's two-NPC playlets on long cooldowns earn the highest praise per authored line in the genre; and The Witcher 3 supplies the negative proof, players installed a mod to amputate repeating chatter rather than keep hearing it.
Then the wave. Large language models put typed conversation back at the center of the industry, and the early record is already legible. What ships and delights: games where the model is load-bearing for play but never for canon, a guard you talk your way past, a story the machine improvises around your nonsense. What fails: unbounded cost (AI Dungeon's hosting bills spiked five figures monthly before its moderation crisis), jailbreaks (which are architectural, not promptable, so consequences must live outside the model), latency that breaks voice, and blanket coverage, a thousand shallow chatbots that bore players inside a minute while one deep character keeps them for hours. The Stanford generative-agents experiment, a town of 25 NPCs with memory streams, reflection, and daily plans, is the blessing this page leans on: its architecture is schedules plus memory plus authored personality, and nearly all of it can be precomputed. This game already built a fenced, fail-open, default-off generative NPC system in July. The docket for turning it on is card S33.
Ten systems, fourteen capabilities. A filled dot is a first-class mechanic, a half dot is partial or conditional, an empty dot is absent. The two highlighted columns are this game, today and if this catalog ships.
| Capability | U4–U7 | UO | EQ | Morrowind | KCD | RDR2 | WoW | LLM wave | SotA today | SotA proposed |
|---|---|---|---|---|---|---|---|---|---|---|
| Typed free-text input | ● | ● | ● | ○ | ○ | ○ | ○ | ● | ● | ● unchanged |
| Clickable topics in NPC text | ◔ U6 on | ○ | ◔ saylinks | ● | ● | ○ | ● | ◔ | ● | ● ships everywhere, S3 |
| Topic journal / discovered list | ◔ | ○ | ◔ 2007 | ● | ● | ○ | ○ | ○ | ◔ 40-entry ring | ● S23 |
| Failure triage (distinct miss messages) | ○ | ○ | ○ | ◔ refusals | ○ | ○ | ○ | ◔ | ○ | ● S11 |
| Fuzzy input match | ◔ 4-letter prefix | ○ | ○ | ○ | ○ | ○ | ○ | ● | ○ | ● S10 |
| NPC daily schedules | ● U5 on | ○ | ○ | ○ | ● | ● | ○ | ◔ | ◔ parts unwired | ● S18 |
| NPC-to-NPC chatter | ◔ | ○ | ○ | ○ | ◔ | ● | ◔ | ● | ◔ 73 entries | ● S24 |
| NPC memory of the player | ◔ | ○ | ◔ | ◔ | ● | ◔ | ○ | ● | ◔ stored, unread | ● S20, S21 |
| Reputation and disposition gates | ◔ | ◔ | ● faction | ● | ● | ● | ◔ | ◔ | ○ | ● S21, ruling S30 |
| Virtue reactions in dialogue | ● U4's core | ○ | ○ | ○ | ○ | ◔ honor | ○ | ○ | ○ engine idle | ● S22 |
| Voice-over at scale | ○ | ○ | ○ | ◔ | ● | ● | ● | ◔ latency | ● 97,951 clips | ● unchanged |
| Localization of dialogue | ○ | ◔ | ◔ | ● | ● | ● | ● | ◔ | ◔ 592 fall back | ● S8 |
| Player-authored NPCs | ○ | ● barkeep 2002 | ○ | ○ | ○ | ○ | ○ | ◔ | ◔ Ink NPCs | ● S27 |
| LLM dialogue, live | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ● | ◔ built, off | ◔ fenced, S33 |
| Animals that answer to woof | ○ | ◔ pet commands | ○ | ○ | ○ | ◔ Greet | ○ | ● | ○ | ● S13 |
Reading notes: the U4 to U7 typed-input dot ends with U7's click lists; the timeline tells that story. SotA's topic-journal half dot is the 40-entry ring; its schedule half dot is a full pantry of shipped ingredients (waypoints, day and night checks, 143 authored closing-time responses, sitting and sleeping animations) that nothing connects; its memory half dot is a flag store that records everything and characterizes nothing. The proposed LLM cell stays a half dot on purpose: fenced flagship characters and offline authoring, never 1,700 live chatbots.
Numbered S1 through S33, in four tiers: the defect ledger first, then the forgiving ear, then the town that listens, then the owner's table. Every card names its cost, its risk, and where it plugs into the shipping data. Thirteen defects found during this page's audit are filed on the tracker as #4618 to #4630 and the cards cite them. Tuning numbers are illustrations for discussion, not commitments; the balance program owns every final value.
The parser logs 2,216 dead ends in 30 days against 8,935,775 skill casts in the same window. Misses are rare, but they concentrate exactly where they hurt: about 35 percent land on brand-new players. This tier is the defect ledger: a truth instrument first, then eight repairs where the code or the data is simply wrong, every one small.
30 days live: 2,216 misses, 990 distinct inputs, bot answers and honest shrugs indistinguishable
The client already logs every parser miss. What it cannot do is tell whether the fallback chatbot improvised an answer or the NPC honestly shrugged, because both paths emit the same log line. This card adds a one-word marker to that line, stands up a weekly top-50 miss report, and adds a Conversation Studio lint for the pattern the data already shows: NPCs that players keep asking buy, sell, help, or name at with no such topic authored. Bancroft in Solace Bridge Outskirts took eight typed "sell" attempts last month; the Watcher took name, job, and help ten times. The report is the permanent content pipeline; every other card in this tier came out of one run of it.
Seen in: Infocom's two-signal failure taxonomy; the modern interactive-fiction practice of mining transcripts for unimplemented nouns; Hades' team reading play data to find starved dialogue buckets.
Marker on the bot branch at Conversation.cs:9187 so the ConvUnknown emit at :9199 carries bot=1|0; BotResponses.GetBotResponse returns a flag alongside the string (#4628). Weekly report reuses the existing log-search sweep recipe. Studio lint cross-references miss telemetry NPC names against corpus keyword lists for the always-listed basics. The data-hygiene chore riding along is #4630. Tests: EditMode on the marker branch; the report script gets a golden-sample test.
one operator: a trigger authored at 30% fires at 100%
The bark trigger rolls its percentage dice, stores the result, then immediately overwrites it with the flag-expression check on the next line. The random gate authored into every one of these triggers has never worked: a trigger set to fire 30 percent of the time fires every time its flags pass. The fix is one character. Expect some scenes to get noticeably quieter, which is the authored behavior finally happening.
Seen in: RDR2 and GTA V per-line cooldown discipline, chatter systems live or die on rate control; the Witcher 3 mod that removes repeating chatter, proof players will amputate an NPC voice rather than hear it fire too often.
NPCBarkTrigger.cs:105: the flag-expression result assigns over the roll computed at :91-103; change assignment to and-equals. The 15-minute recheck window is unaffected. One audit pass of high-traffic trigger scenes after. Test: EditMode on the trigger decision with a stubbed roll.
The loader that regenerates keyword highlight markup opens with a compile guard that makes it editor-only, so the markup files that control keyword presentation in NPC replies never load in the shipped game. Authors preview one conversation and players can get another. Removing the guard, and paying a small load cost on the on-demand conversation path, makes the build match the editor. Highlighted keywords are the scaffolding the whole typed system stands on; shipping them half-applied undercuts every card in Tier 2.
Seen in: Ultima VI's red highlighted keywords, the original scaffold-not-replace compromise; EverQuest's bracket keywords inline in chat; Morrowind's topic hyperlinks, the same affordance with the typing removed.
Dialogue.cs:1411-1413, the editor guard on LoadKeywordResponseMarkup; verify the markup files ride the per-scene conversation bundles, and add them to the bundle manifest if they never did. Tests: EditMode parse of a sample markup file; build-side smoke on the test shard.
corpus audit: 2 broken compound gates, 1 truncated expression, 1 precedence trap, out of 14,220 gate expressions
The corpus audit found exactly two always-listed topics whose unlock conditions use an or-expression, and the code path evaluates them as a single literal flag name, so both silently never unlock. One of the two is doubly broken: the export pipeline truncated its expression at exactly 50 characters, chopping the last flag mid-name. A third entry mixes and-with-or without parentheses and reads differently than authored under the left-to-right evaluator. Fix the evaluation, repair the three data rows, lift the export column limit, and add a Studio lint so no new instances appear. Three data bugs in 14,220 expressions is a very good corpus; this card keeps it that way.
Seen in: Morrowind's classic dialogue-authoring bug, a filter placed above a higher-priority one shadows it forever, silently; Inform 7's named-rule model where every gate is inspectable.
Route the always-list flag check through the full expression parser instead of the singular lookup (#4620); repair Abela talk 40870, Esmeralda talk 33669 with its truncation (#4621), and the Phineas response 35999 parenthesization (#4622); lint any always_flag containing an operator and any mixed expression without parens. The gate evaluation may unlock long-dormant content; check the two questlines once. Tests: EditMode on the expression path (the parser is pure); corpus lint in CI.
10 unknown-verb strings in shipped data, each a runtime exception waiting to fire
The action parser has no tolerance for a verb it does not know: a data typo becomes a player-visible failure instead of a logged authoring bug. One whitelisted verb has no implementation at all, and nine more unknown-verb strings sit in shipped conversation data, four of them attempts to grant experience directly. This card converts the throw to a logged skip, repairs the ten corpus strings, and adds the verb list to the Studio validator so a bad verb never exports again.
Seen in: Infocom's rule that the parser never crashes, it reports; the interactive-fiction principle that vocabulary errors are authoring telemetry, not player punishment.
ParseAction at Conversation.cs:7352: unknown verb becomes log-and-skip; repair the 10 strings (four addxp variants in Blood River among them); snapshot-test the verb whitelist against the implementation table so the two can never drift again (#4623). Tests: EditMode on the unknown-verb path; corpus scan in CI.
When an NPC delivers a long reply the window shows the end of it, and players read the answer backwards; the forum has asked for the fix for years. Separately, an authored and localized conversation help popup exists in the code, disabled entirely because it once fired on every keystroke; the comment reads "DEPRECATED AS SPAMMY". This card scrolls new replies to their start, and revives the help popup behind a once-per-account gate so a brand-new player sees how talking works exactly one time. Both changes live in the window layer; neither touches the parser.
Seen in: EverQuest's NPC Journal Window, added in 2007 specifically because players lost long dialogue in chat scroll; Ultima VI's portrait panel that always framed the reply from its top.
Scroll: the window view's reply append path sets the scroll offset to the new message head (#4627). Help: the commented ShowHelp call inside DoConversation returns behind a help_conversation_seen account flag; the live tutorial-context popups nearby are the working pattern. Review the dormant help text before enabling; it has been dark for years. Tests: EditMode on the once-gate; a manual UI pass.
30 days live: "yes" 37, "ok" 25, all answers to questions the NPC forgot asking
NPC questions expire after seven minutes, and the NPC forgets it ever asked. Players come back from a fight or a bank run, type "yes", and get a dead end: 62 of the last month's misses are exactly this. The fix is small and kind: when an affirmation or a negation arrives with no active question, and the NPC remembers its last one, it asks the question again. No new UI, no new data, one remembered id per conversation, capped at one re-ask so it cannot loop.
Seen in: Ultima IV's yes-and-no questions that stayed live until answered; ELIZA's core trick of restating its own prompt; the interactive-fiction doctrine that a parser reconstructs lost context rather than punishing it.
Store the last expired query id beside the query state; in DoConversation, before the miss path at :9179, intercept affirmation and negation tokens when no query is active and re-issue the remembered query through the path that presented it originally (#4624). Affirmation vocabulary comes from the query system's own positive and negative variants. Fold the counts into the S1 report to verify the 62 disappear. Tests: EditMode on the intercept decision.
592 language-pair suppressions: fr 280, it 198, de 78, es 34, ru 2, pt 0 and likely never scanned
A per-language kill-list forces named conversations to English rather than risk a broken translation, and nobody has burned it down: French players hear English from roughly 160 Ardoris NPCs, and Italian players hear English from about 135 shared archetypes, meaning every generic banker, innkeeper, guard, and The Oracle itself. This card re-runs the localization QA process that generates the list, fixes what it flags, regenerates, and surfaces the per-language count in CI so growth is visible instead of silent. Many entries likely rot from long-fixed translation bugs; the list may shrink dramatically on the first pass.
Seen in: WoW's engine quietly hiding its own flavor text, the cautionary pattern of a game deciding what players do not get to read; this list at least documents its decisions, which is why it can be burned down.
Data lives per language beside the localization tables; the loader forces English per listed scene-and-NPC pair. Locate or reconstruct the generating script credited in the file header, run per language including pt, triage, fix translations (never the English lines: English text is both the localization key and the voice-clip key), regenerate (#4625). CI reports counts per language and fails on growth. Tests: the loader already has a test pattern; the CI count check is new.
Conversations write flags constantly, and each write currently round-trips the player's entire knowledge document through a full database save. With the memory cards in Tier 3 multiplying flag writes, this write amplification becomes the first real server cost on the page. Switching the update to a targeted per-flag write is behavior-preserving and removes the multiplier before the content that depends on it lands.
Seen in: no genre precedent claimed; this is plumbing. The Animal Crossing lesson applies in spirit: tiny per-record memory is the whole trick, so the writes should be tiny too.
The server-side flag update does a full-document save today (#4626); replace with a targeted field update, with one careful review of concurrency semantics (per-flag versus per-document last-writer-wins). Server-only, no contract or operation change; the database migration ledger gets its mandatory row marked no data impact in the same commit. Tests: server-side unit on the update path plus a read-back parity check.
Forty years of parser craft, from Infocom's failure taxonomy to Disco Elysium's failure-as-content, agrees on one thing: the miss message is the whole experience. This tier makes the parser forgiving without making it soft. Everything here is client-local, small to medium, and testable in EditMode.
the Oracle's 30-day typo storm: est, tets, tesrt, teswt, tes, tet
The telemetry shows the typo storm plainly: players trying to type a word the Oracle just asked for, one letter off, dead end every time. Edit-distance-one matching, applied only after exact match fails and logged every time it fires, catches nearly all of these without ever overriding an exact keyword. Non-English keywords in the same log (feuer 13, ayuda 6, hilfe 4) stay out of scope here; they are a localization aliasing question, not a typo one. The alternative design, an opt-in autocomplete on the typing line, was considered and set aside: shipping both would trivialize discovery, and fuzzy matching helps every player while autocomplete helps only those who find the option.
Seen in: Ultima IV's four-letter prefix matching, forgiveness by design in 1985; Infocom's parser error correction, widely regarded as the best of its era; the modern doctrine that the parser meets the player halfway.
ParseKeyword at Conversation.cs:1817 is a pure static unit: after the exact and wildcard passes fail, run bounded edit-distance-one against this NPC's keyword set, minimum keyword length four, tie-break by frequency, emit a fuzzy-hit log line for the S1 report, and never fuzzy-match while a question is active. EditMode tests enumerate the Oracle storm strings. Measure the corpus-wide collision rate against a keyword snapshot before shipping; the threshold claim must be earned, not assumed.
Classic interactive fiction distinguishes three failures: the word is unknown, the answer is refused, and the answer is not available yet, and it holds that conflating them is the cardinal sin. Today all three collapse into one shrug or a bot improvisation. This card makes the honest miss useful: when a keyword misses, the reply names the nearest topic the NPC actually does know, drawn from its own always-listed set so it never leaks gated content. "I could not say. Folk here mostly ask me about the mines." It ships only if the owner rules for honest misses over the default-on bot; with the bot left on, there is nothing for this card to say.
Seen in: Disco Elysium's failure-redirects, failure hands you a different door, never a wall; the Inform community's pattern of naming the exits that do exist; Infocom's vocabulary-miss versus refusal distinction.
The unknown-response path appends a hint chosen from ungated always-listed topics, nearest by edit distance to the typed word, else the NPC's basics. The 1,049 authored per-NPC fallback lines stay the voice; the hint is a suffix template per archetype. Depends on ruling S28; the hint tier and the generative last resort inside S26 never run on the same NPC. Tests: EditMode on hint selection.
4,710 talks carry more than one answer (14.3% of the corpus); the pick among them is uniform random
Thousands of topics carry several authored answers, up to 33 on one Brittany podium, and the pick among them is a fresh uniform roll every time, so players hear the same line twice in a row often enough to notice. Recency-weighted selection, avoiding the last answer or two shown to this player, makes the authored variety that already exists actually land, with zero new content. This is the smallest possible version of the modern selection stack; the full condition-filtered version arrives as the Tier 3 memory cards feed it.
Seen in: Hades' selection architecture, condition-filter then priority-sort then retire, the canonical modern algorithm; RDR2's per-line cooldowns; GW2's long-cooldown ambient scenes.
ReturnResponseObject at Conversation.cs:4149-4244 is the single chokepoint: within the eligible pass, weight against a short per-conversation ring of recently shown response ids, session-local, optionally cross-session via the response-viewed marks the keyword ring already stores. Tests: EditMode with a seeded RNG over a three-answer talk.
30 days live: Cat 31 attempts, Dog 28; woof 14, meow 12, pet 12, pspspspspsps 1
The Cat and the Dog rank fifth and eighth among all NPCs for attempted conversation, and every attempt dies. Players already want to talk to the animals, and the game already has the voice for it: two thirds of conversation prefabs customize what the NPC calls an unknown player, and the animals say meow, grrr, and whuf. Authored five-keyword micro-sets for ambient animals, woof gets a wag, pet gets a purr, food gets begging, are a trivial content pass with outsized charm.
Seen in: Ultima Online's typed pet-command grammar, a tiny living command language; RDR2's universal greet that works on anything with a pulse; Animal Crossing's whole thesis that tiny interactions carry the relationship.
Content only: keyword sets plus emote responses in the ambient-animal conversation files; the emote field is already live on 5,191 responses. Typo neighbors (mrow, wuf) arrive free once S10 ships. Tests: corpus lint that the new sets parse; nothing at runtime.
The per-player bark memory was built and mothballed years ago: the field, the write site, the 20-minute expiry loop, and the call site all sit commented out in the code, while the line-of-sight check that fed it still computes on every bark for nothing. Reviving it gives barks a per-player heard-history, so the same NPC stops repeating the same line at the same player, which is precisely the discipline Witcher 3 players installed a mod to get. The revival either puts the line-of-sight result back to work or deletes the dead computation; today it is pure waste either way.
Seen in: the Witcher 3 chatter-removal mod, players amputating repetition at AAA scale; RDR2's per-player recently-heard ring; GTA V's pedestrian line-pool cooldowns.
Uncomment and modernize the five mothballed pieces (field :727, write :2176-2183, re-init :3432, expiry loop :2538-2553, call site :2701); bound the per-NPC list; the dead line-of-sight work is #4629 and gets a customer or a deletion. The sibling 60-second hello memory shipped and is the working pattern. Crowded-town memory cost is the likely reason it was shelved; the cap plus the 30-unit cull keeps it bounded. Tests: EditMode on the expiry math and the cap.
A bundle of small manners for the conversation and bark layer: a walk-away notice that fires when you actually walk away instead of on your next word, the 60-second bark delay tuned so a fresh conversation is not stepped on, the freeze when two players address one NPC fixed, and emotes queued serially so an NPC does not wave and bow in the same instant. Individually none of these earns a card; together they are the difference between staffed and haunted.
Seen in: GW2's ambient playlets, which pause and resume around player interruptions; RDR2's camp chatter that yields to the player and picks the thread back up.
Walk-away: a distance check in the conversation update against the existing 30-unit cull, with the goodbye delivered through the normal goodbye topics. Bark delay: the cadence bookkeeping at Conversation.cs:2193-2206 respects an in-conversation flag. The two-player freeze needs a first reproduction, which is tester-verify material. Emotes serialize through the existing speech-floor and say seams. Tests: EditMode on cadence math; the rest is a play pass.
Per-NPC muting shipped and players immediately asked for the next size up: the reports (#4381 to #4387, requested by that_shawn_guy) are seven variations of "let me quiet a kind of NPC, not just this one". Category muting extends the existing right-click mute with archetype entries, town criers, guard patrol lines, vendor hawking, while leaving quest and conversation speech untouched. The mute is a personal client preference; nobody else's town goes quiet.
Seen in: WoW's gossip-suppression addon ecosystem, demand made visible; the Witcher 3 chatter mod again, the same player instinct.
Extend the per-NPC mute store with category keys on the same per-character preference surface; bark emission checks category before queueing; the archetype taxonomy starts honest and small, three categories, drawn from the shared archetype conversations that already exist (Banker, Guard, Town Crier). A category row joins the existing mute UI. Tests: EditMode on category resolution.
The schedule ingredients all shipped and were never connected: 143 closing-time responses wait on a clock that never drives them, 4,988 of 5,093 spawners ignore time of day, and the whole memory kit sits unused for characterization. This tier connects what exists: a clock in the flag grammar, evening rounds, people who remember you, and the first NPCs a town owner can call their own.
143 off-duty responses across 86 files, authored and waiting; no time token exists in the gate grammar
No time token exists in the conversation gate grammar today; the window math it needs exists in the codebase, but only chests and doors can reach it. This card adds a time window token to the flag grammar, evaluated on each client against the server-synced world clock, so every observer agrees on the answer. The unlock is immediate: 143 responses across 86 files already carry the off-duty marker, closing-time content written in pockets for years and never driven by a clock. "The forge is cold this late. Come back after dawn." becomes authorable the day this lands, and essential services, banks, healers, innkeepers, simply never gate.
Seen in: Ultima V's real-clock schedules, where when you caught an NPC changed what you got; Morrowind's per-entry condition filters; Kingdom Come's timed activity windows; Hades' condition-tagged line eligibility.
A token branch in the conversation flag evaluator at Conversation.cs:3475, delegating to the existing time-window math (wraparound and morning-evening handling already written) against the server-synced game clock. Deliberately not the off-duty behavior-tree pattern: that flag is set only on the machine that runs the NPC's brain and never replicates, so other players' clients would never see it flip; the token is the consistent path for dialogue. The off-duty response preference is already implemented in the selection pass. Studio gets a token picker. Tests: EditMode on token parse and window math, wraparound included.
of 5,093 dynamic spawners, 4,988 ignore time of day; 14 are day-only, 91 night-only
The world barely uses its own clock. Ultima VII solved daily routines in 1992 with a tiny per-NPC table, and Kingdom Come shipped the same shape in 2018 with about eight timed activities per person. This card is that table for New Britannia: time-windowed waypoint routes plus sitting, eating, and sleeping at the destinations, tavern tables included, run by the machine that already drives each NPC and replicated the way NPC movement already replicates, so every observer watches the same walk. It is the page's largest card, shipped town by town starting with Soltown, quest-critical NPCs exempt, and the availability tax paid in dialogue by S17 and S19 rather than in locked doors.
Seen in: Ultima VII's schedule table, the baker bakes, drinks, and sleeps; Gothic's routines, years before Oblivion; Kingdom Come's eight-block days and its honest wait-by-the-door tax; Skyrim's temper, schedules without autonomy, the right ceiling.
Movement: time windows on waypoint routes evaluated by the existing day-period condition, driving the existing route walker; this runs on the owning machine only and replicates through the shipped movement stream, so remote consistency is by construction. The known seam is ownership handoff mid-route: the walker's state is local, so the new owner restarts the route; add resume-nearest-scheduled-point on ownership gain. Activities wire the shipped chair and bed behaviors and their 20 animation states, retiring a sitting-conversation TODO dated 2015. Pilot: one town, ten NPCs, then measure. Tests: EditMode on window math and resume-nearest selection; the rest is a town soak.
30 days live: "michael" typed 103 times at ten different NPCs in one town, unanswered every time
The single most-typed dead end in the game is one man's name. Players hunt a quest NPC by asking every neighbor, guard and blacksmith included, and nobody in town knows him. The directions system already answers "where is the bank" with 428 place entries across 33 files; this card extends the same convention to townsfolk names, pointing at the person's usual spot today and, once S18 ships, at where they are this hour: "Michael keeps to the north road camp. At this hour try the fire." Whereabouts by the hour and whereis-for-people are one card because they are one mechanism.
Seen in: Ultima IV's cross-NPC breadcrumbing, referral as the quest structure; Ultima VII's town crier; EverQuest's deliberate learn-the-name-from-another-NPC quests.
Extend the per-scene Directions include convention with person entries; the composed "where is" template already routes through the whereis action. While in the area, replace the hardcoded keyword id 634 filters with a data flag, the magic number breaks silently if the keyword table renumbers (#4630). Content starts in the starter corridor, where 35 percent of all dead ends live. Lint person entries against scene NPC rosters so names cannot go stale. Tests: EditMode on person-entry resolution; corpus lint for orphan names.
The memory is already free. A gate on the keyword-ring flag evaluates true for any player who has ever spoken with that NPC, today, with zero code. And the ring already stores your last topic and which answer you saw, surviving relog well enough that its tail is your last subject. This card threads both through the greeting: a stranger hello, a returning hello, and a callback. "Back again. We were speaking of the mines, as I recall." Three archetypes pilot it, innkeeper, banker, guard, before any wide pass. One honest limit is stated on the card: offline mode never saves the ring, so offline players read as strangers.
Seen in: Animal Crossing's villagers commenting on absence and remembering gifts, the highest emotion per byte in games; Hades' met-before greeting tiers; Shadow of Mordor's specific "you again" callouts, simple conversational memory, no nemesis hierarchy claimed.
The greeting seam is the hello selection at Conversation.cs:4128-4147: hello variants gated on ring presence, callback text keyed off the ring tail and its answer-viewed mark. Chronology on reload is approximate, the tail of the non-basic bucket is the last topic; optionally harden by writing the ring on hello and appending an explicit last-topic field. S9 lands first if callback content multiplies flag writes. Tests: EditMode on ring parse and hello selection.
The flag grammar already evaluates numeric comparisons and already expires flags on daily, weekly, and hourly boundaries; nothing uses either for characterization. Visit counters, "Fifth time this week. I should start charging you rent.", are an increment plus a numeric gate. Daily counter-requests are the same counters pointed outward: the fisherman wants five perch today, hands them through the item-exchange transaction conversations already own, and resets at the daily boundary. This is explicitly not a quest: no journal entry, no compass pin, no reward table beyond the NPC's thanks and a small trade. Takotora's daily-crafting-request ask is the pilot.
Seen in: Animal Crossing's villager favors; Kingdom Come's reputation counters read back in shop talk; Ultima IV's bribe-threshold responses, a number gate on a keyword in 1985.
Counters ride the existing numeric-comparison and suffix-expiry evaluation; increments ride the existing flag actions; the exchange rides the conversation exchange transaction with a daily completion flag. New flag names are free; no scope change, no schema change. Cap one request per NPC per day so a favor never becomes a chore loop. Tests: EditMode on counter gates; the transaction has an existing test surface.
The game runs an ethics engine nobody talks back to: virtue accumulates, the Oracle judges, and no street NPC ever notices. The reaction hook for it sits unreferenced in the code, the personality analysis still records every player's recommended path, and a corpus of Oracle judgement lines is authored. This card pilots virtue-gated response variants on three archetypes, guard, priest, beggar: the same keyword, a different answer for the compassionate and the cruel, with refusals said out loud rather than gates failing silently. Planescape proved stat-gated dialogue is content players build characters around; Ultima IV proved conversation is where virtue should bite. Three archetypes, then measure.
Seen in: Ultima IV's in-conversation virtue tests, claiming valor costs you; Planescape: Torment's stat-gated dialogue as the reward loop; Baldur's Gate's reputation-flipped greetings.
Response variants use existing gates on the virtue flags and the recorded path-recommendation flags, selected in the normal response pass; the unreferenced virtue-reaction AI hook wires the reactions section, 56 entries exist, for a visible flinch or bow. Content borrows the authored judgement corpus voice. One verification pass on client-side virtue data freshness first. If the owner rules for a standing number in S30 instead, these gates re-target it unchanged. Tests: EditMode on gate evaluation; content lint.
Players screenshot NPC dialogue because the game forgets it the moment the window closes. A Conversations tab records transcripts on your own machine: per NPC, per day, searchable, with the keywords you used marked. No server storage, no sync, and the privacy answer is structural: the file never leaves your computer. EverQuest added exactly this in 2007 and called it the NPC Journal; its players had been keeping paper notebooks for eight years.
Seen in: EverQuest's NPC Journal Window, an easy way to store and organize quest dialogue; Morrowind's accumulated topic list as a persistent record; the Ultima VI community engine's running keyword list beside the portrait.
Hook the existing chat-log file writer where NPC lines land; persist per character using the established per-character preference surface; the tab is a standard window with the owner-and-view split and no state stored on the window itself. Keyword marks reuse the used-keyword check the chat log already performs. A rotation cap, thirty days, bounds disk. Tests: EditMode on the record format; a UI pass.
the whole world holds 73 NPC-to-NPC lines and 51 replies, pooled in three towns
The NPC-to-NPC machinery shipped and almost nobody used it: 73 opener entries and 51 replies in the entire game, pooled in Kingsport, Braemar, and Ardoris, where Kardan Marbane and Samael run the exemplar comedy act. Guild Wars 2 demonstrated that two-role scripted playlets on long cooldowns are the highest praise-per-line ambient format in MMOs. This is a content pass on an existing system: ten new playlets in the starter corridor, cooldowns long enough that nobody hears one twice in a session, voice pre-generated through the standard pipeline at about a tenth of a cent per clip.
Seen in: GW2's ambient playlets, celebrated by name in community threads; RDR2's camp conversation scenes; the internal exemplar, Kardan and Samael of Ardoris.
Data only: the opener and reply sections in the bark files, paired by id and key, with chance and delay fields already in the schema and a between-barks cooldown knob already used 91 times corpus-wide. The speech floor already serializes the exchange. Author against the fixed dice from S2. Tests: corpus lint on pair integrity, an opener with no reply partner.
The client can already answer "have I ever talked to this NPC" at zero cost: the keyword-ring flag exists if you have, and checking its presence loads nothing. A quiet dot on the nameplate for never-met NPCs gives explorers a reason to work a street without turning the town into a checklist. The honest limit is stated up front: a full "three topics you have not heard" count would force conversation loads for every NPC on screen, so that version waits for a baked topic-count table and is out of scope here.
Seen in: the genre's quest exclamation mark, dialed down to a whisper; Morrowind's topic accumulation as a visible record; this game's own quest visuals, client-local evaluation driving what floats over a head.
Ring-flag presence drives a new element on the nameplate status model, updated in the same late-update path that already refreshes plates; respect the existing plate suppressions for hidden and decoration NPCs; cap draw distance to conversation range against visual noise. The offline-mode ring gap from S20 applies here too. Tests: EditMode on the presence predicate.
The disciplined kit that keeps the parser primary wherever the generative system runs. Three rules in one card. First, generated replies emit clickable authored keywords, so every answer hands the player back to the authored graph instead of terminating the breadcrumb chain the way the old chatbot does. Second, anything the model can cause in the world comes from a vetted allowlist of existing client-side conversation verbs, snapshot-tested, because a jailbreak cannot be patched with a better prompt. Third, on designated NPCs only, a parser miss can fall through to the model primed with that NPC's real keyword list, so even the last resort speaks in authored vocabulary. That last mode never coexists with the S11 hint tier on the same NPC.
Seen in: EverQuest's saylinks, the click literally types the word; Ultima VI's highlights as scaffold; the playtest story of a player talking an AI merchant out of a quest key with one sentence, consequences must live outside the model; the first shipped LLM games' bounded designs.
Keyword emission post-processes generated output through the existing keyword markup renderer, restricted to the NPC's own keyword set. The allowlist is a vetted subset of the client-side action verbs with a snapshot test pinning it; anything outside logs and does nothing, the S5 pattern. The last-resort route sends the miss to the model with the keyword list in the prompt; timeout or moderation trips fall back to the authored unknown line, and the player never sees an error. Tests: EditMode snapshot on the allowlist; the generative runtime model is already a pure testable unit.
The longest-standing player-town ask on the wishlist is people: not vendors, townsfolk. This card ships a roster of authored personas, a keeper, a crier, a fisherman, each with a real keyword set and a voice, that owners place like decorations, plus patrol routes laid as deco paths, capped by lot size. No free-text authoring in the first version: personas are authored content, which keeps voice, localization, and moderation costs where they belong. Ultima Online let players set three keyword-and-response pairs on a hired barkeep in 2002 and players still cite it two decades later; the roster model gives more character per NPC at none of the moderation cost.
Seen in: UO's player-hired barkeep with owner-set keyword responses; UO's name-addressed hireling commands; the Ultima IV authoring rubric, two deducible facts per NPC, applied as roster design law.
New deco archetypes for the roster NPC and route node are a data-contract change with a deploy-coupled export; placement rides existing deco operations; conversation binding maps a roster persona to a conversation prefab on the existing load path. Routes reuse the S18 waypoint machinery and share its one sync verification, ownership handoff included. Six personas at launch, voice pre-generated. Never ships in the same release as the Talking Companion inside S33. Tests: EditMode on route serialization; deco placement has an existing test surface; a town soak.
Six decisions only the owner can make, each with the evidence attached. Some are one-flag reversals of deliberate policy, some set the constitution for everything above. None of these are bugs. All of them gate cards in the tiers above, which is why the table comes last and matters most.
Every fork of the Ultima line traded discovery for convenience, and this game is the only live commercial MMO still running the trunk. This ruling makes that a stated identity rather than an accident, and settles the bot question that hangs off it: today an old chatbot answers most misses with a plausible non-answer, which sounds responsive but sets no flags, grants nothing, and offers no keywords, so players cannot tell fake depth from real topics. The options: keep the bot default-on everywhere; make the honest miss plus hint the default and keep the bot as per-NPC seasoning where authored; or retire it. Recommendation: the middle. The S1 marker will show exactly how often the bot currently speaks for the game before this ruling is due.
Seen in: the ELIZA effect working against the game, players learning to distrust all answers equally; UO and EQ both letting typing wither for want of scaffolding; the wheel's economics, now inverted by generated voice.
One default flip, the bot's use-flag becomes per-NPC opt-in, plus S11. No data migration. The evidence instrument is #4628.
4,169 name-bearing lines, every one already voiced with the NPC's own word for a stranger
Every voiced line containing your name already has a recorded variant, spoken with the NPC's own term for a stranger: outlander, friend, avatar, 91 distinct terms across 2,086 customized NPCs. When the game knows your real name, it deliberately plays nothing rather than let audio contradict the on-screen text. So the more an NPC knows you, the quieter it gets. The reversal is one flag: play the stranger-term clip and accept that the voice says "outlander" where the text shows your name. Recommendation: reverse it, with a per-player setting for anyone the mismatch bothers. Zero new clips either way.
Seen in: the 2006-era voice-storage objection that made per-variation recording impossible, deleted by generated voice; Kingdom Come's lesson that availability beats fidelity; this game's own corpus, already recorded.
The skip is a deliberate one-line policy in the voice manager; the pipeline already bakes every name-bearing line with each NPC's own stranger term, and the term is part of the clip key, so the audio exists per NPC. Reverse behind a per-player audio setting: voice speaks your name as the stranger term, or stays silent. Tests: the voice pipeline's name-render tests already cover the clip side; EditMode on the setting branch.
Three cards in Tier 3, the Innkeeper, the Tally Board, and the Virtue greeting, all extend the existing flag store: names are free, counters and expiries already evaluate, nothing new touches the database. The alternative is a real per-NPC or per-town affinity number, Morrowind-disposition style, cleaner to design against but a new data scope with a migration ledger entry and a tuning treadmill. Recommendation: flags and counters now, revisit a number only if the pilot content strains them. The power budget forbids running standing counters in parallel with an affinity number; pick one.
Seen in: Morrowind's disposition and its flattening cost; Baldur's Gate's reputation greetings; Kingdom Come's propagating shop reputation.
The flags path costs nothing beyond the three cards it gates; all cited mechanisms are live in the flag evaluator today. The number path is a new knowledge field or collection, a ledger row, a migration, and S9 first. Weekly expiry works either way.
The server holds no player positions and conversations resolve on the player's machine, so NPC schedules can never be server-authoritative here without rebuilding the game's spine. The good news is they do not need to be: movement runs on one owning machine and replicates to every observer by construction, and dialogue gates evaluate against the server-synced clock on each client, so everyone sees the same town without the server simulating anyone. This ruling states that ceiling out loud so no future card relitigates it: schedules are believability, never mechanics, and nothing reward-bearing ever keys off an NPC's whereabouts.
Seen in: Ultima VII's deterministic single-player model, the architecture schedules were born in; Oblivion's constraint story, designers need control; GW2's per-map ambient state.
A documentation ruling. The technical basis was verified for this page: owner-side behavior trees, replicated movement, a server-synced clock, and the off-duty flag's owner-locality, which is exactly why dialogue uses the S17 token and never the behavior-tree flip.
Every line of the Oracle's old three-destination departure still exists in the data, gated behind a flag that nothing ever sets: a deliberate soft-delete from the era when the three starting paths were consolidated into one. The personality analysis still runs and still records which path it recommended for every player; only the departure is disabled. Re-enabling is defining one flag and QA on three onboarding paths. Retiring is deleting the dead branch and stating that the Isle of Storms sends everyone through Love by design. Either answer is fine; carrying the limbo forever is the only wrong one.
Seen in: Ultima IV's three-principle character creation, the ancestry of the Oracle's questions; the archaeology itself, the flag's own name documents the change.
The dead branch requires the never-set flag; the live branch prohibits it; the recommendation flags still record each player's analyzed path. Restore is one data line plus onboarding QA per path, and restoring triples the new-player QA surface, so not casually. Retire is stripping the gated rows. Independent of every other card.
A generative NPC system is already built into the game and ships switched off: personas, guardrails, budgets, and a fallback to authored lines when anything goes wrong. The industry record says exactly how far to turn the key. What ships and delights makes the model load-bearing for play but never for canon; costs cap or they spiral; moderation is existential infrastructure; and blanket coverage bores players in a minute while one deep character keeps them for hours. The docket: approve the system on one to five flagged characters, text only, fail-open, per-player daily budget, under the S26 guardrails; sequence the player-placeable Talking Companion behind that retention data, and never in the same release as S27; keep live voice for generated lines deferred, since latency and the clip policy both block it and text turns are the honest first version. Measure before widening. Every time.
Seen in: the first shipped LLM successes, where hallucination is harmless because canon never depends on the model; AI Dungeon's cost and moderation crisis as the pre-mortem; the Skyrim companion mods, one deep character beats a thousand shallow ones; Stanford's generative-agents town, whose architecture is schedules plus memory plus authored personality, mostly precomputable.
A per-NPC flag flip on the built system, budgets and moderation on the existing operation, no new server surface; S26 ships as the enabling kit; the Companion reuses the moderated player-authored dialogue record per its phase-2 design. A kill switch is part of the docket. Tests: the allowlist snapshot, a budget-cap unit, and a soak on one character on the test shard with tester coverage.
The same window, the same innkeeper, after this catalog ships. Nothing about the frame changed: type anything, click what glows. What changed is that the machine now remembers, consults the clock, admits what it does not know, and points somewhere useful when it misses. Every annotation names the card that pays for it.
Innkeeper Abbott: Evening, outlander. Third (1) night this week, that earns a warmer bowl. Last time we spoke of the ferry. Did you find Captain Kinsey at the north dock? You: fery Innkeeper Abbott: The ferry? She runs at (2) dawn. And you have never asked after the manifest, now I think of it. (3) You: where is michael Innkeeper Abbott: Michael keeps the mill past (4) the east bridge. At this hour you will find him at his supper. Innkeeper Abbott: I bar the door at nine (5) bells. Come morning I will be here scrubbing pots if you need me. ◀ [manifest] [Kinsey] [mill] [ferry] ▶ (6) ▲ hide topics Local: [__________________] [Vendor] [Goodbye]
Outside the window, the same catalog changes the street. The dot on a nameplate is the cheapest tier of "this NPC has something you have not heard": one flag lookup the client already holds, no conversation load at all.
● Marge the Baker (1)
"Mind the mud. The rain has
made a soup of the square." (2)
Bentley Porto
"Any word from the bridge,
Porto?"
"Only that the toll man is
in a mood again." (3)
| Phase | Ships | Gate |
|---|---|---|
| 1 · Truth and repairs | S1 through S9; the thirteen tracker issues; the six rulings land on the owner's table | none: defects and counting, zero design risk. S1's marker starts collecting the bot evidence for S28 immediately; S9 lands before any memory content multiplies flag writes |
| 2 · The forgiving ear | S10, S12, S13, S14, S15, S16; S11 when S28 rules | all client-local and EditMode-testable; S1's weekly report measures each one's effect on the miss rate |
| 3 · Free memory | S20, S21, S22, S23, S25 | the S30 ruling, recommendation flags; everything here is flag reads and client UI, and S9 has already landed |
| 4 · Winding the clock | S17 first, then S18 piloting in Soltown, S19 in the starter corridor, S24 once schedules put NPCs in rooms together | the S31 ruling; the waypoint handoff verification before routes widen; S17 unlocks the 143 authored closing-time responses on day one |
| 5 · Frontier and townsfolk | S26 as the enabling kit, S33's rollout per its ruling, then S27; S32 whenever the owner chooses | the S33 ruling; the Companion and S27 never share a release; S27 reuses S18's verified route sync |
flowchart LR S28[S28 fallback ruling] --> S11[S11 miss with a map] S1[S1 dead-end ledger] --> S10[S10 fuzzy tuning] S1 --> S19[S19 ask about people] S31[S31 clock ruling] --> S17[S17 time token] S17 --> S18[S18 evening rounds] S18 --> S24[S24 playlets] S18 -.shared sync verification.- S27[S27 your own townsfolk] S30[S30 memory ruling] --> S20[S20 innkeeper] --> S21[S21 tally board] S30 --> S22[S22 virtue greeting] S9[S9 one save per flag] --> S20 S33[S33 generative ruling] --> S26[S26 follow-up topics] S11 -. never the same NPC .- S26
The power budget, stated once: fuzzy matching and typer autocomplete never ship together; the hint tier and the generative last resort never run on the same NPC; standing counters never run in parallel with an affinity number; the Talking Companion and placeable townsfolk never share a release; and time-of-day waypoints and player patrol routes share one sync verification rather than two.
| Datum | Where it lives, client side |
|---|---|
| 32,973 topics, 42,276 answers, 32,961 keywords, 1,220 questions | per-scene conversation files, 2,302 of them across 148 scene folders, loaded on first talk with an NPC |
| 2,339 barks and the 73 NPC-to-NPC lines | each NPC's companion barks file, 2,303 of them |
| What you have asked an NPC, and which answer you saw | a 40-entry per-NPC ring in the knowledge flag store, written by the client, read today by exactly two cosmetic surfaces |
| Closing-time content | 143 off-duty answers across 86 files, authored and waiting |
| The hour | the server-synced world clock, read client-side, identical for every observer |
| How an NPC addresses a stranger | a per-NPC term on all 3,031 conversation prefabs; 2,086 are customized, across 91 values from friend to meow |
| Voice | 97,951 pre-generated clips keyed by line text, 8 languages, 140 voices; editing a line orphans its clip and 8 translations, new lines are cheap |
| Languages that quietly fall back to English | a per-language suppression report: 592 scene-and-NPC pairs, 280 French including most of Ardoris, 198 Italian including the shared archetypes and The Oracle |
| Dead ends | one log line per parser miss: 2,216 in the thirty days ending August 14, with the class breakdown drawn from a 2,000-line sample, 90 percent of the population |
| Day and night spawns | a per-spawner field in the scenes: 14 day, 91 night, 4,988 any |
| Pure unit | Exists today | What the cards pin |
|---|---|---|
| Keyword matcher | yes | wildcard ordering, exact-before-fuzzy, the verb floor |
| Flag expression parser | yes | compound always-flag evaluation, the repaired data rows, precedence lint cases |
| Keyword strip ordering | yes | unused-first sort, unheard marking |
| Speech floor | yes | one speaker at a time under the new playlet load |
| Generative NPC runtime | yes | the fence, fallback on timeout, the consequence allowlist snapshot |
| Time-window math | new | wraparound windows, morning and evening edges |
| Ring parse and roundtrip | new | tail chronology, the callback greeting's source of truth |
| Weighted response pick | new | recency distribution over the 4,710 multi-answer talks |
| Edit-distance match | new | distance one behind exact, never ahead of it, always logged |
Genre systems consulted, with the primary written sources this page leaned on. The lineage: Ultima IV's dialogue and the 1985 NPC authoring sheet; Ultima V's schedules; Ultima VI's highlighted keywords; Ultima VII and the 1991 conversation-functions design document preserved on the Internet Archive; Ultima Online's NPC speech and the 2002 player barkeep; EverQuest's bracket keywords, the 2007 NPC Journal, and saylinks; the Infocom parser tradition and the modern interactive-fiction failure doctrine; ELIZA and the AIML chatbot line; Morrowind's dialogue database. The moderns: the Radiant AI post-mortem record, Kingdom Come's schedule files, RDR2's ambient systems, Guild Wars 2's ambient scenes, the Witcher 3 chatter mod, Animal Crossing's villager memory, Hades' selection architecture, and Disco Elysium on failure. The wave: the Stanford generative-agents paper, the Skyrim companion mods, and the AI Dungeon cost and moderation record. This game's own record: the conversation corpus, the thirty-day live telemetry, the voice pipeline, and the code, verified line by line for this page.
Player credits: the scroll-to-start and deeper-dialogue requests came through the wishlist sweep batch filed as #3208 to #3217; the category muting request is that_shawn_guy's (#4381 to #4387); the daily crafting requests are Takotora's; the placeable town NPC and custom pathing asks are wishlist threads 179050 and 179344. The thirteen defects this audit filed are #4618 through #4630.
No account needed. Every proposal above also has its own Discussion box for talking about that one alone; this thread is for the plan as a whole. Comments are plain text, held to basic decency, and may be trimmed.