Activity Selection Rules¶
The learning/session engine selects the activity. The child experiences a story problem; the system decides the educational form.
Decision inputs¶
Child learning state
- mastered / struggling / recently seen words
- reading level · confidence level · activity history
Session context
- current destination · NPC · story stage
- available world objects · required progression
- required activity type (if any)
Product rules
- avoid repeating same activity too often
- mix confidence and challenge
- do not block story on voice if mic unavailable
- prefer shorter activity for first session
- avoid too many new mechanics at once
Selection flow¶
Player interacts with NPC
↓
Check NPC relationship stage + story chapter
↓
Select eligible NPC jobs
↓
Learning engine selects activity type + words
↓
Story wrapper applied → activity served
↓
Attempts saved → world updates → relationship updates → reward/drop check
Rules¶
Rule 1 — Story can require a specific job¶
Example: first merchant job required for boat.
required_story_job:
npc: merchant
job: repair_box_labels
unlocks: boat_access
Exact words still chosen by learning engine.
Rule 2 — Activity type usually flexible¶
Same job may support several types:
job:
id: wet_crate_labels
supported_activity_types:
- missing_letter
- spelling
- single_word
Rule 3 — Voice activities need fallback¶
If speech unavailable: reading without speech, tap-to-confirm, spelling alternative, adult-assisted mode (later).
No child blocked from story progress because microphone fails.
Rule 4 — Control first-time mechanics¶
- First island: Missing Letter (+ maybe simple Spelling)
- Lighthouse: Reading or Read Aloud
- Whale Bay: Reading Boss / sentence reading
- Later: multi-word challenges
Rule 5 — Cooldowns on repeated jobs¶
job_cooldown:
repair_box_labels: 5 sessions
wet_price_tags: 3 sessions
Job selection priority¶
- Required main story job
- Unseen first-time NPC introduction
- Relationship progression job
- Learning need job
- Living world repeat job
- Optional collectible-eligible job
Main story always wins over random living world jobs.
Anti-repetition tracking¶
Track recent: npc_id, job_id, activity_type, world_verb, target_object, served_at.
Avoid:
- same NPC too many times in a row
- same verb / opening line / object every session
- same activity type 3× in a row (unless learning requires it)