Phase 9+10: Status/Doctor/Medical bed + Wolves/WolfSpawner
The 'drama pair' shipped together via 3-agent fan-out. Phase 9 — Status effects + Medicine: - Status data class (PERSISTENT/EVENT, severity stacks max=3) + StatusCatalog (Bleeding ticks HP loss; Downed = incapacitated) - Pawn HP (100 max, 30 downed threshold, 50 revive threshold), take_damage, heal, add_status/remove_status_by_id, is_downed/is_incapacitated, downed visual (body rotated 90° + desaturated) - DoctorProvider (priority 9, highest) — scans World.pawns for nearest downed pawn, finds medical bed (or any bed fallback), emits 4-toil job: walk_to_patient → rescue → walk_to_bed → treat - Bed.is_medical with red-cross marker draw on pillow; round-trips save - KIND_RESCUE + KIND_TREAT toils + JobRunner _tick_rescue/_tick_treat (snap-to-bed on first treat tick, +0.5 hp/tick, bleed cure at 100-tick intervals; done at HP≥50 + no bleeding, 600-tick timeout) - EventBus: pawn_took_damage, pawn_status_added, pawn_status_removed Phase 10 — Combat + Wolves (wolf-first slice): - Wolf entity (Node2D, 4-state APPROACH/ENGAGE/FLEE/DEAD, procedural canine sprite with red glowing eyes, 40 HP) - Two-roll combat: 70% hit + 50% chance to apply Bleeding(1) on hit - WolfSpawner — triggers at Clock.darkness_factor()≥0.8 with 1-in-game-day cooldown, packs of 1–2 at random map-edge cluster - World.wolves registry + register_wolf/unregister_wolf Integration: world.tscn load_steps 15→17 with DoctorProvider + WolfSpawner nodes. world.gd registers doctor at top of provider list (priority 9 > sleep 8 > eat 7 > construction 6 > chop≈plant 5 > mine≈craft 4 > haul 3 > rest 0). Middle bed at (47,24) marked is_medical=true. MCP runtime verified: Bram took 75 dmg + Bleeding(2) → Downed (hp 25) → Edda + Cora both volunteered doctor job → walked to patient → carried to medical bed → treated → Bram healed to 94.2 hp, statuses cleared, back to work. Wolf raid at day 3 22:00 fired; 4 wolves alive across raid cycles by day 4 01:51. Screenshots confirm red-cross medical bed and wolf silhouettes at night. Phase 10 deliberately partial: wolf-side combat ships, pawn-side weapons/armor/cover/friendly-fire deferred — full chain (wolf→bites→pawn→bleeds→doctor) awaits player weapons. Bleed-out timer at demo value (1200) vs design value (432000 = 6 in-game hours) — documented in status_catalog.gd for first time-balance pass. Delegation: Agent A (status + pawn HP), Agent B (doctor + treatment), Agent C (wolf + spawner) — all Sonnet gdscript-refactor; integration on Opus. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a1e5b38dd6
commit
1b6ad2bcc6
21 changed files with 1016 additions and 35 deletions
|
|
@ -16,7 +16,9 @@ Effort estimates are wall-time at **focused solo pace**. Scale up generously for
|
|||
| ✅ done — Crop entity (6-stage state machine), PlantProvider (harvest), Hunger need + EatProvider w/ food-priority ladder, Hearth/Millstone via label_text, grain/flour/bread/meal types | **Phase 7 — Plants, cooking, hunger** |
|
||||
| ✅ done — Bed entity (quality-tinted, claim/release), Sleep need + SleepProvider + KIND_SLEEP toil, Thought registry + mood compute + Sulking soft-break, Decision Layer-1 interrupt | **Phase 8 — Sleep, mood, thoughts** |
|
||||
| ✅ done (out of order — taken before Phase 9 for the atmospheric win) — Clock autoload + dawn/day/dusk/night phases + darkness_factor ramp, CanvasModulate global tint, Torch entity + PointLight2D + procedural radial gradient, Hearth opts-in as light source, in_darkness thought | **Phase 11 — Day/night + Lighting** |
|
||||
| ⏳ next | **Phase 9 — Status effects + Medicine** |
|
||||
| ✅ done — HP + Status registry (Bleeding/Downed), pawn `take_damage`/`heal`/downed visual, DoctorProvider (priority 9, highest), medical bed (red cross marker), Rescue + Treat toils, EventBus damage/status signals, Decision Layer-1 incapacitation interrupt | **Phase 9 — Status effects + Medicine** |
|
||||
| ✅ done — Wolf entity (4-state APPROACH/ENGAGE/FLEE/DEAD, procedural canine sprite with red eyes), WolfSpawner (1–2 wolves at random map edge, triggers at darkness≥0.8 with daily cooldown), two-roll combat (70% hit + 50% bleed chance on hit), World.wolves registry | **Phase 10 — Combat + Wolves** |
|
||||
| ⏳ next | **Phase 12 — Seasons + Weather** |
|
||||
|
||||
Use this doc as a checklist: tick boxes as items complete, and update the **Status** row above whenever a phase rolls over. The last bullet of each phase is the *acceptance demo* — the phase is "done" when you can perform it.
|
||||
|
||||
|
|
@ -228,37 +230,37 @@ The five items from `memory.md` *Open questions / Audit*. None of these need cod
|
|||
|
||||
---
|
||||
|
||||
## Phase 9 — Status effects + Medicine (~2–3 weeks)
|
||||
## Phase 9 — Status effects + Medicine (~2–3 weeks) — ✅ done 2026-05-11
|
||||
|
||||
**Goal:** the full status-driven drama from `design.md` Health section.
|
||||
|
||||
- [ ] **Status registry:** Hungry, Tired, Bleeding, Sick, Downed, Wet (Damp/Soaked), Cold
|
||||
- [ ] Each status: trigger condition, decay rate, gameplay effect (move-speed, work-speed, mood thought, threshold-flips)
|
||||
- [ ] **Bleed-out timer** (`BLEED_OUT_TICKS` = 6 in-game hours from `design.md:418`, locked)
|
||||
- [ ] Doctor work category (already in 9-list; provider lands here)
|
||||
- [ ] **Medical bed** furniture
|
||||
- [ ] Treatment job: walk → fetch supplies → walk → treat (timed by Medicine skill)
|
||||
- [ ] Doctor interrupt prioritization — Combat=Off doctors still volunteer for medicine
|
||||
- [ ] **Downed → rescue model:** Downed pawns get a timer; doctor walks them to medical bed; if timer expires before bed, pawn dies
|
||||
- [ ] **Acceptance:** Wound a pawn → bleeds → second pawn breaks off work → carries to medical bed → treats → recovery thoughts fire. Try with no doctor available — pawn dies, watch the death pipeline run (Phase 14 closes the loop).
|
||||
- [x] **Status registry skeleton:** Bleeding + Downed shipped (Hungry/Tired live as Needs in Phase 7/8; Sick/Wet/Cold deferred — registry/data-class shape ready for them)
|
||||
- [x] Each status: PERSISTENT/EVENT lifetime, severity stacks (max=3), gameplay effect (Bleeding ticks HP loss; Downed gates work via Decision Layer-1 incapacitation interrupt)
|
||||
- [x] **Bleed-out timer** (`BLEED_OUT_TICKS` = 1200 ticks demo value; **6 in-game hours = 432000 design value** documented in `status_catalog.gd` — flip on first time-balance pass)
|
||||
- [x] DoctorProvider work category (priority 9 — highest)
|
||||
- [x] **Medical bed** furniture (`bed.is_medical=true`, red cross marker draws on pillow)
|
||||
- [x] Treatment job: walk → rescue → walk → treat — KIND_RESCUE + KIND_TREAT toils, JobRunner `_tick_rescue`/`_tick_treat` (Medicine skill tuning deferred to Phase 20)
|
||||
- [ ] Doctor interrupt prioritization — Combat=Off doctors still volunteer for medicine (Combat work category not yet split; revisit when weapons land)
|
||||
- [x] **Downed → rescue model:** downed pawns wait for any non-downed pawn; DoctorProvider scans `World.pawns` for nearest. Death-on-timeout deferred to Phase 14
|
||||
- [x] **Acceptance:** Wounded Bram (75 dmg + Bleeding stack=2 → hp 25, Downed) — Edda + Cora both volunteered via `doctor → 'Rescue Bram → bed at (47, 24)'` — walked → snapped Bram to medical bed → treated — Bram healed to 94.2 hp, statuses cleared, returned to work. Verified MCP runtime + screenshot.
|
||||
|
||||
---
|
||||
|
||||
## Phase 10 — Combat + Wolves (~3 weeks)
|
||||
## Phase 10 — Combat + Wolves (~3 weeks) — ✅ wolf-first slice done 2026-05-11
|
||||
|
||||
**Goal:** real threat, real defense, real consequences.
|
||||
|
||||
- [ ] **3 weapons:** sword (melee), axe (melee, slow), bow (ranged) — stats per `design.md`
|
||||
- [ ] **3 armor slots:** helm, cuirass, boots
|
||||
- [ ] Equipment system on pawn (carry + active slots)
|
||||
- [ ] **Hit math:** two-roll resolution (hit roll → damage roll, armor reduces damage). Bonuses: skill ×5%, range ×5%, cover 40/20%. Numbers placeholder, tune in Phase 20.
|
||||
- [ ] **Cover:** walls = 40%, trees = 20%. Cover lookup is per-shooter, per-target line.
|
||||
- [ ] Combat priority semantics: Off ≠ "won't fight" — Off = "defends if cornered, won't volunteer" (per `design.md:64`)
|
||||
- [ ] **Friendly fire ON** — bow pawns can hit teammates in line
|
||||
- [ ] **Wolf entity:** Animal class, 4-state machine (APPROACH → ENGAGE → FLEE → DEAD per `architecture.md:700`)
|
||||
- [ ] Wolf spawn: storyteller-driven, at map edge, in packs of 1–4, **night only**, season-weighted (more in winter)
|
||||
- [ ] **Spike (~half day):** combat feel — 3 pawns vs 3 wolves on a small map. Does the two-roll resolution feel good? If not, dial numbers before Phase 20.
|
||||
- [ ] **Acceptance:** Wolf raid at night — pawns auto-fight (or flee per priorities) — some get downed — doctor saves who they can — bodies on the field.
|
||||
- [ ] **3 weapons:** sword (melee), axe (melee, slow), bow (ranged) — stats per `design.md` (deferred — wolves attack unarmed pawns; player weapons land later)
|
||||
- [ ] **3 armor slots:** helm, cuirass, boots (deferred — pair with weapons)
|
||||
- [ ] Equipment system on pawn (carry + active slots) (deferred)
|
||||
- [x] **Hit math:** two-roll resolution shipped on wolf side (70% hit + damage roll). Skill/range/cover modifiers deferred until pawn-side weapons.
|
||||
- [ ] **Cover:** walls = 40%, trees = 20% (deferred — pair with weapons)
|
||||
- [ ] Combat priority semantics (deferred — pair with weapons)
|
||||
- [ ] **Friendly fire ON** (deferred — pair with bow)
|
||||
- [x] **Wolf entity:** `class_name Wolf extends Node2D`, 4-state machine APPROACH → ENGAGE → FLEE → DEAD (FLEE is no-op stub, expand when injury threshold lands)
|
||||
- [x] Wolf spawn: WolfSpawner triggers at `darkness_factor ≥ 0.8`, packs of 1–2 (design target 1–4 — tune up post-tuning pass), random map-edge cluster, 1-in-game-day cooldown. Season-weighting deferred to Phase 12.
|
||||
- [ ] **Spike (~half day):** combat feel test — partly satisfied by wolf-only test; full spike awaits player weapons
|
||||
- [x] **Acceptance (partial):** Wolf raid at night verified — `[wolf] RAID: 1 wolf(ves) spawned at [(53, 2)]` at day 3 22:00, multiple raid cycles across nights (4 wolves alive by day 4 01:51). Pawn-side defense + downed cascade verified by Phase 9 manual injury — full wolf-bites-pawn → bleed → doctor chain awaits pawn-side melee.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue