Docs: Co-op Hades iteration plan + dev-loop session log + tour screenshots

Direction locked 2026-07-06: trunk fixes + full Co-op Hades conversion
(mothball tower-defense, win expedition-side, hub base, mechanic-changer
boons, 2nd ability, node types, 2nd boss, revive), depth folded in now,
Blender at hero-props+decals scope. Evidence: 9-agent analysis workflow +
live play tour (screenshots referenced by the plan doc).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 12:27:05 -07:00
parent 7c1fee097e
commit fefd7168ec
24 changed files with 1496 additions and 0 deletions
@@ -0,0 +1,108 @@
---
title: Iteration 2026-07 — Co-op Hades Conversion (Trunk + Hub-ification + Depth + Blender)
date: 2026-07-06
tags: [roadmap, iteration, coop-hades, direction, plan]
permalink: gamevault/06-roadmap/iteration-2026-07-coophades
---
# Iteration 2026-07 — Co-op Hades Conversion
**Operator decision (2026-07-06, dev-loop iteration session):** commit the *Fix-the-Fight-in-Place trunk* PLUS the full
*Co-op Hades* direction — cut/mothball the tower-defense layer, base becomes a Hades-house hub, boons become
mechanic-changers, kit gains a second ability, real node types, second boss, co-op revive. **Depth folds in now** (not
after a playtest gate). **Blender scope: hero props + decals.** No time estimates (operator directive). Grounded by a
9-agent analysis workflow (`wf_8afc6e5a-b9e`, 9/9 clean) + a live end-to-end play tour with screenshots
(`Assets/Screenshots/iter_*.png`).
## Evidence base (why this direction)
- Live tour findings: half of all rooms (sub-slot X+1500) have **no ground/colliders/decor**; enemies interpenetrate
into a blob and spawn converges on the player; HUD header reads "AT BASE" inside expedition rooms; boon offer
contained a strictly-dominated pair (-25% vs -15% ability cooldown); portal beacon renders as a blown-out white egg;
storage crate floats; **save-persisted `RunRuntime.WasAllReady=1` deadlocks the next session's launch** (un-ready →
re-ready is the only escape).
- Critique consensus: every reward is a flat stat mod (zero mechanic-changers/synergies); kit = 3 verbs/class with 1
distinct ability; run 2 ≡ run 1; threat is walk-out-able (boss slam escape needs 4.07 u/s vs 5.1 available; melee
knockback stunlocks all trash; death = free heal + re-conscription); the boss is a 1.6× Charger with one attack.
The code-side feel layer (cones, slash arcs, hit-stop, flashes) is STRONG — the gap is the asset/scene layer under it.
- Market: Windblown's chart-topping demo = 1 biome + 1 boss (loop is demo-sized already); Cult of the Lamb = the
base↔run tie done right, Moonlighter = the cautionary tale; HoH2's retention lever = every run banks something;
Synty-look ceiling proven by Death Scourges / RoR2 / Soulstone Survivors (dynamic-light-first, dark ambient).
## Phase 0 — Stabilize (bugs found live, do first)
1. Commit the working-tree portal fix (incl. the `_portalMat` comment-swallow NRE repair applied 2026-07-06 — the NRE
killed CombatFeedbackSystem every session and auto-paused the editor via Error Pause). Re-run 456 EditMode first.
2. ~~`WasAllReady` save deadlock~~ **RETRACTED (2026-07-06):** misdiagnosis caused by frozen-world polling (the
`execute_code` main-thread-sleep hazard) — `CycleDirectorSpawnSystem`'s restore builds `RunRuntime` fresh (HostSalt
only, WasAllReady=0) and nothing persists it; the observed "deadlock" was a run that had already launched between
MCP calls. Lesson reinforced: never sleep-poll; check `isPaused` first.
3. Lifecycle-aware HUD header (kill "AT BASE" in rooms; kill stale "choose your boon" after pick — the location-line
switch had NO RoomExplore case, so the RoomReward text stuck through the loot window).
4. Ground the floating storage crate (**root cause: `GridOrigin.y=1` is the CC capsule-center plane** —
`CellToWorld` returns it; center-pivot meshes (Turret/Wall) look grounded there, base-pivot meshes (crate) float
1 u. Watch this on every future grid-placed base-pivot mesh); tame the portal-beacon HDR (2.6/3.4 bloomed to a
white egg) + ground the beacon (its `pos.y` was the capsule plane too).
## Phase 1 — Trunk (direction-agnostic physical/feel/teaching layer)
1. **Rooms become places:** fix the X+1500 void (ground + collider ring + decor for sub-slot 1); seed 36 collidable
Environment-layer props per room so cover/LOS/Charger-baiting exist; readable room edge.
2. **Enemy separation** (server-side repulsion, MaxAlive=12 so O(n²) is fine) + soft player pushout; no standing
inside the boss. Verify spawn ring staggering reads (spawn VFX).
3. **Animation triage:** Synty Sword/Bow Combat anim packs (shared Generic skeleton, no retarget) — death clips +
corpse window, spawn, hit-react, ranged-fire, dash; creature locomotion for monsters (stop human jog on Husks).
4. **Threat repair:** poise byte (light hits stop stunlocking trash); boss second attack (re-enable its baked Charger
lunge) + party-size HP scaling.
5. **Live knobs:** promote all Boss*/enemy/grace-timer knobs into the TuningConfig overlay + values-to-clipboard.
6. **Teaching:** RMB class ability + dash coach-marks; fix stale copy (StartingOre 50→90 etc.); run-failed banner.
7. **Clarity swaps:** distinct spit/pickup/harvest meshes (Synty interim), class weapon meshes on the hand bone,
ground darkening + character rim/outline, point lights on projectiles (RoR2 trick).
**Gate:** one honest solo campaign to Victory + one 2-instance LAN lap with the overlay open.
## Phase 2 — Hub-ification (structural; adversarial design-review REQUIRED before coding)
- **Mothball, don't delete:** sieges/CoreIntegrity/turret-ammo retired from the flow via baked toggles (the
`ScheduleEnabled` pattern); code + tests keep compiling for reversibility.
- **Win condition moves fully into the expedition** (N boss-clears / final-boss Victory; `GoalReachedSystem` +
`RunOutcome` rework; SaveData v7 additive).
- **Base = hub:** class/prep/meta/ready + deposit; visible growth (unlocks at Charge milestones); staging HUD →
progressive disclosure (5 dense panels → contextual).
- **Economy simplification** (4 currencies is bureaucracy; turret-ammo Charge frees up) — scope at the design review.
**Gate:** returning player goes staging→launch in <60 s; hub reads as prep+growth, not friction.
## Phase 3 — Depth (folded in now; design-review per netcode-heavy slice)
- **Kit:** second ability slot + one new active per class (reuse AbilityRef catalog + predicted-input review).
- **Boons → ~12 mechanic-changers** on existing hooks: dash damage trail, finisher AoE detonation, projectile
pierce/fork/chain, ability-SWAP boons (replicated AbilityRef byte via the ClassSwapUtil pattern), knockback→pull…
plus synergy tags, duplicate/dominated-offer protection.
- **Real node types:** Elite (affixed alphas via the boss spawn-stamp pattern), Shrine (combat-free choice), Survive,
Cursed.
- **Second boss chassis** (Spitter artillery) so lap 2 differs.
- **Co-op:** downed/revive (ex-MC-5), duo boons, party-scaled spawns/HP; death-cost design lands here (with revive in,
death = run stakes, killing the suicide-heal exploit).
**Gate:** two consecutive runs feel different (build + path + boss); a duo playtest yields a clutch-revive moment.
## Phase 4 — Blender workstream (parallel from Phase 1; hero props + decals)
Portal gate ring · hub Core crystal centerpiece · boss bone-socket armor/spike kitbash (no new rig) + second-boss
silhouette parts · distinct projectile/pickup/harvest meshes · class weapons · ground decal/telegraph quad set.
Pipeline (validated + researched): UV new geometry onto the existing Synty atlas for style match (or Imphenzia palette
PNG); FBX for anything skinned (glTFast Mecanim-clip issues), glb via gltfast for statics; Apply Scalings = FBX Units
Scale; Key All Bones for clips; realize geo-nodes instances before export; Play-verify materials (dark-frame hazard).
## Phase 5 — Dev tooling (woven through)
New DebugOps: KillRoom (death-path kill — ClearEnemies destroys without kill credit), SkipToRoom/SpawnBoss, GrantBoon,
run-state line in the overlay · pause-proof screenshot rig (MCP bridge `ScreenshotUtility` calls `EditorApplication.Step()`
and leaves the editor PAUSED — unpause after every capture; never `Thread.Sleep`-poll in `execute_code`, it freezes the
sim) · encounter-composition buttons in DevSandbox · WasAllReady regression test.
## Consolidation notes
Supersedes the DR-042 "final beat = base siege" lock (win moves fully expedition-side). DR-034 Core / EB-1/2 siege
systems → mothballed, not deleted. The "present forks" ritual re-runs at each phase's design review.