NPC Jobs and Activities¶
Principle¶
NPCs should not directly own "activities".
NPCs own story problems. The system maps problems → activity types.
Bad model¶
- Merchant → Missing Letter only
- Fisherman → Read Aloud only
- Lighthouse Keeper → Spelling only
Becomes repetitive and brittle.
Better model¶
Merchant has a box label problem. That problem can be solved with Missing Letter, Spelling, or Reading depending on session need.
Same story setup → multiple learning modes.
Job structure (conceptual)¶
npc_job:
id: merchant_repair_box_labels
npc_id: merchant_mara
story_stage: first_meeting
world_verb: repair
target_object: crate_labels
supported_activity_types:
- missing_letter
- spelling
min_rounds: 3
max_rounds: 5
required_for_progression: true
unlocks:
- boat_access
Job categories per NPC¶
Every NPC should have:
| Category | Purpose |
|---|---|
| Main story jobs | Limited, handcrafted, required |
| Relationship jobs | Limited but optional |
| Repeatable jobs | Reusable with variation |
| Collectible jobs | Eligible for optional keepsakes |
Example complete NPC — Merchant Mara¶
See [[NPC and Job Data Model#Example — merchant_mara]] for full YAML-style definition including:
first_interactionjob- repeatable jobs (
wet_labels,shipping_manifest,single_crate) - deterministic reward
merchant_boat_access - optional drops (
small_wooden_crate,old_market_photo)
What Godot receives¶
Godot does not invent the activity. It receives a served job:
- NPC identity + story copy (opening / request / success)
activity.type, rounds, words- world verb + target objects + completion effects
- reward result after server save
→ Godot Server Split - NPC Pipeline