From 4c008d619122aa4549214167d15f6adbf7d22aed Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Fri, 13 Feb 2026 01:19:21 +0100 Subject: [PATCH] data(content): use WantKind enum keywords in NPC profiles Change want.primary from narrative strings to WantKind enum keywords (Safety, Wealth, Knowledge, etc.) across all 20 NPC profiles. Move narrative text to want.description. Add Happiness to WantKind enum. Add enum constraint to npc-profile.schema.json so make validate-content catches invalid values at authoring time. Fixes silent Want component drop where parse_want_kind() returned None for all real NPCs. Co-Authored-By: Claude Opus 4.6 --- content/_schema/npc-profile.schema.json | 2 +- .../krenn/stations/sova/districts/transit/npcs/devra.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/drin.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/harek.yaml | 3 ++- .../stations/sova/districts/transit/npcs/kael-davan.yaml | 3 ++- .../stations/sova/districts/transit/npcs/lera-sessik.yaml | 3 ++- .../stations/sova/districts/transit/npcs/maret-korr.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/naia-tamm.yaml | 3 ++- .../stations/sova/districts/transit/npcs/nils-davan.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/olin.yaml | 3 ++- .../stations/sova/districts/transit/npcs/pc-detective.yaml | 3 ++- .../stations/sova/districts/transit/npcs/pc-smuggler.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/pell.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/renn.yaml | 4 +++- .../krenn/stations/sova/districts/transit/npcs/resha.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/sabel.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/sera-venn.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/sess.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/tav.yaml | 3 ++- .../stations/sova/districts/transit/npcs/torek-lintar.yaml | 3 ++- .../krenn/stations/sova/districts/transit/npcs/voss.yaml | 3 ++- 21 files changed, 42 insertions(+), 21 deletions(-) diff --git a/content/_schema/npc-profile.schema.json b/content/_schema/npc-profile.schema.json index 5b23c3a97..bfa7964b1 100644 --- a/content/_schema/npc-profile.schema.json +++ b/content/_schema/npc-profile.schema.json @@ -38,7 +38,7 @@ "type": "object", "description": "Primary want/need driving this NPC", "properties": { - "primary": { "type": "string" }, + "primary": { "type": "string", "enum": ["Wealth", "Safety", "Knowledge", "Connection", "Power", "Freedom", "Justice", "Revenge", "Happiness"] }, "intensity": { "type": "integer", "minimum": 0, "maximum": 10 }, "description": { "type": "string" } }, diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/devra.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/devra.yaml index 7df338aeb..39236b58a 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/devra.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/devra.yaml @@ -17,9 +17,10 @@ description: > regular seat at The Last Shift. want: - primary: "keep the operation running smoothly and profitably" + primary: "Wealth" intensity: 7 description: > + Keep the operation running smoothly and profitably. Devra is the ring's operational brain. She manages external supply chain coordination, schedules handoffs, and maintains timing between gate transits and dock processing. She is good at this — better than Nils, though she would diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/drin.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/drin.yaml index 7df3e3ac9..0ec31a592 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/drin.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/drin.yaml @@ -18,9 +18,10 @@ description: > commission. want: - primary: "clear the debt and stop looking over his shoulder" + primary: "Freedom" intensity: 8 description: > + Clear the debt and stop looking over his shoulder. Drin wants to return to when the job was just a job — maintenance rounds, dock inspections, clocking out, going home. The work was repetitive and that was fine. Now every inspection cycle carries a second calculation: which containers diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/harek.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/harek.yaml index 160c6afb5..7540684bf 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/harek.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/harek.yaml @@ -18,9 +18,10 @@ description: > because investigating would mean confronting what the card game created. want: - primary: "maintain his comfortable position" + primary: "Happiness" intensity: 4 description: > + Maintain his comfortable position. Harek has a good thing: security officer with a predictable schedule, card games at the bar, social capital. He doesn't want promotions (more responsibility, more visibility). He doesn't want trouble. Secondary want: keep Drin's debt diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/kael-davan.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/kael-davan.yaml index ee0602ebc..35c57edfd 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/kael-davan.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/kael-davan.yaml @@ -20,9 +20,10 @@ description: > contradiction surfaces. want: - primary: "protect the operation and the people in it" + primary: "Safety" intensity: 8 description: > + Protect the operation and the people in it. Two years in, Kael is shifting from "keep things running" to "keep people safe." The operation is escalating — higher volume, tighter margins, more risk. Secondary want: protect Naia from the truth and the consequences. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/lera-sessik.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/lera-sessik.yaml index 7772541f7..7e8aede39 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/lera-sessik.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/lera-sessik.yaml @@ -18,9 +18,10 @@ description: > solvent. want: - primary: "keep the bar viable" + primary: "Wealth" intensity: 7 description: > + Keep the bar viable. The Last Shift operates on thin margins. The after-shift crowd is what keeps the lights on. Lera knows some regulars have grey-market income — she does not ask where the money comes from because the spending keeps her solvent. Secondary diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/maret-korr.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/maret-korr.yaml index 7c7eb2050..d39d4b7b5 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/maret-korr.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/maret-korr.yaml @@ -22,9 +22,10 @@ description: > on her personal lattice storage. want: - primary: "understand the manifest discrepancies" + primary: "Knowledge" intensity: 7 description: > + Understand the manifest discrepancies. Maret processes freight schedules and the numbers are not adding up. Container counts do not reconcile, manifests are revised after Voss's schedule adjustments, Drin's inspection reports are suspiciously clean. She is paralyzed between duty diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/naia-tamm.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/naia-tamm.yaml index 67c69f0c2..2075e46a5 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/naia-tamm.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/naia-tamm.yaml @@ -16,9 +16,10 @@ description: > exactly what she appears to be: a teacher worried about her partner. want: - primary: "understand what is happening with Kael" + primary: "Knowledge" intensity: 8 description: > + Understand what is happening with Kael. Naia and Kael have been together 6 years. It was good — stable, warm, predictable. Then Kael started coming home late. Evasive answers. Money that did not match the hours. Stress that Kael will not explain. Naia does diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/nils-davan.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/nils-davan.yaml index 67f3984a3..6a8cf600b 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/nils-davan.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/nils-davan.yaml @@ -18,8 +18,9 @@ description: > without seeing him. Tier 1 in schema; functionally off-stage (tier 0). want: - primary: "control" + primary: "Power" description: > + Control. Grow the operation. Increase volume. Maintain authority over the ring from a distance. Nils sets volume targets, applies escalation pressure, and makes personnel decisions. The ring's growth imperative comes from Nils; the diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/olin.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/olin.yaml index 5d6658050..94b142458 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/olin.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/olin.yaml @@ -15,8 +15,9 @@ description: > attention, convenience is suspicious. Ambiguity is deliberate and unresolved. want: - primary: "employment" + primary: "Safety" description: > + Employment. Find work. Settle in. Start over. Whether this is genuine or a cover story is left deliberately ambiguous for v0.1. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-detective.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-detective.yaml index 0bcddf0c2..149738648 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-detective.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-detective.yaml @@ -18,9 +18,10 @@ description: > threat to avoid. Second playthrough: "That's me. That's what I was doing." want: - primary: "answers" + primary: "Knowledge" intensity: 5 description: > + Answers. Wants to understand the freight discrepancies. Follows the investigation methodically. Does not make dramatic decisions on the neutral path -- no confrontations, no leverage plays, no dramatic revelations. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-smuggler.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-smuggler.yaml index 04c20b8e4..bd385f8d6 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-smuggler.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pc-smuggler.yaml @@ -19,9 +19,10 @@ description: > neutral path and the player's actual choices IS the narrative distance traveled. want: - primary: "stability" + primary: "Safety" intensity: 4 description: > + Stability. Keep the day smooth. Keep the operation running, the team safe, the shift uneventful. Does not make dramatic decisions on the neutral path. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pell.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pell.yaml index 5d260a9f6..7976ec4bf 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pell.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/pell.yaml @@ -18,9 +18,10 @@ description: > a handler. want: - primary: "get out without getting killed" + primary: "Freedom" intensity: 9 description: > + Get out without getting killed. Pell is past the point of wanting to stay. The escalating volume, the increasing risk, the paranoia — the ring has gone from manageable supplement to existential threat. Secondary want: find someone — anyone — who can offer protection in diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/renn.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/renn.yaml index 356999624..bda51636d 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/renn.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/renn.yaml @@ -18,9 +18,11 @@ description: > wavering to Devra. want: - primary: "stay useful to the ring without getting caught" + primary: "Power" intensity: 6 description: > + Prove loyalty to the ring and earn trust. + Stay useful without getting caught. Renn is the physical courier — lifting, carrying, timing runs through maintenance corridors during Meridian dead spots. Takes pride in the execution. The job feels important. Secondary want: prove loyalty to Nils and Devra. Renn diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/resha.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/resha.yaml index b2c22fd0a..1d908d7fd 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/resha.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/resha.yaml @@ -18,9 +18,10 @@ description: > match what she observes. want: - primary: "prove herself at the job" + primary: "Power" intensity: 5 description: > + Prove herself at the job. Resha wants to be competent, reliable, valued. She studies shift protocols, asks questions about procedures, and takes notes. Some of those questions — about locked bays, irregular schedule changes, containers with routing codes diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sabel.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sabel.yaml index 8374db6d5..b9379a25f 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sabel.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sabel.yaml @@ -17,8 +17,9 @@ description: > ring members' dialogue. want: - primary: "profit" + primary: "Wealth" description: > + Profit. Deliver. Get paid. Maintain the supply chain. If the operation on Sova is compromised, Sabel cuts the connection and finds another distribution point. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sera-venn.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sera-venn.yaml index df1c7b338..2a726615f 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sera-venn.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sera-venn.yaml @@ -21,9 +21,10 @@ description: > evidence from the detective she calls a friend. The quiet life she wanted is gone. want: - primary: "keep her life stable and her friendships intact" + primary: "Connection" intensity: 8 description: > + Keep her life stable and her friendships intact. Sova was supposed to be quiet — routine calibration checks, scheduled inspections, paperwork. For 12 months, it was exactly that. Then Naia started confiding about Kael's late nights, and Sera's competence made her curious, and diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sess.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sess.yaml index bce7a2716..cf54927eb 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sess.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/sess.yaml @@ -14,8 +14,9 @@ description: > full of people with secrets, Sess's lack of hidden agenda is camouflage. want: - primary: "stability" + primary: "Safety" description: > + Stability. Do the job. Go home. Don't get involved. The work is steady, the tips are adequate, the regulars are predictable. No ambitions beyond maintaining this equilibrium. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/tav.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/tav.yaml index 0bf147eb1..e50b72b0b 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/tav.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/tav.yaml @@ -16,8 +16,9 @@ description: > on watch but visibly nervous to anyone who knows what to look for. want: - primary: "belonging" + primary: "Connection" description: > + Belonging. Do the watch. Don't get noticed. Prove useful. The role is simple — watch, signal, move — but it is the first thing Tav has been trusted with and the consequences of failure are immediate and severe. diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/torek-lintar.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/torek-lintar.yaml index 495c99a9d..8852103e3 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/torek-lintar.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/torek-lintar.yaml @@ -17,9 +17,10 @@ description: > without intent. want: - primary: "enjoy the good life while it lasts" + primary: "Wealth" intensity: 5 description: > + Enjoy the good life while it lasts. Torek is young, single, and flush for the first time. He buys rounds, tips well, has a new jacket and lattice accessories. He is performing generosity — and the performance is the problem. In a district where everyone knows everyone's salary, diff --git a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/voss.yaml b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/voss.yaml index ae682fb10..670849133 100644 --- a/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/voss.yaml +++ b/content/campaigns/main/systems/krenn/stations/sova/districts/transit/npcs/voss.yaml @@ -18,9 +18,10 @@ description: > Voss's schedule first. want: - primary: "operational stability" + primary: "Safety" intensity: 6 description: > + Operational stability. Keep his shift running without incident. Clean handoffs, zero incident reports. The smuggling operation introduces variables he cannot control, but the cut he receives smooths the rough edges of a supervisor's salary. Secondary want: