From 358ac14b06cb30be199213fcb09b99c4adafd7f4 Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Mon, 6 Jul 2026 18:19:53 -0700 Subject: [PATCH] Docs: Slice B folded design (15 code-verified review findings, hand-synthesized) Co-Authored-By: Claude Fable 5 --- .../06_Roadmap/Iteration_2026-07_CoopHades.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md b/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md index 7f93fb697..936cf381f 100644 --- a/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md +++ b/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md @@ -61,6 +61,41 @@ after a playtest gate). **Blender scope: hero props + decals.** No time estimate **Gate:** one honest solo campaign to Victory + one 2-instance LAN lap with the overlay open. +### Slice B folded design (design-review `wf_fd177263-b67`, 2026-07-06 — 3 lenses done, 15 verify verdicts ALL isReal=true; synthesis died on session limit, folded by hand from the verified findings) + +- **B3 Dying window:** server-only `Dying{uint UntilTick}` (TickUtil.NonZero, stamp ONCE on the 0-crossing in + HealthApplyDamageSystem for EnemyTag; destroy after ~54 ticks via Temp ECB). At the mark: zero the REPLICATED + `AttackWindup`, disable `IsLunging`, zero `KnockbackState` (else corpses keep live telegraphs). CONFIRMED: no AI + pass self-health-gates today and EVERY count edge counts entities — gate the actor passes (EnemyAI/BossAI move, + windup, contact) and make every count LIVING-only: RoomEnemyDirectorSystem :48/:68 (room clear + MaxAlive fit), + ExpeditionObjective.Remaining, boss-summon cap, base-siege cleared checks, aggro snapshots, ProjectileDamageSystem + :83-91 target snapshot + gamepad auto-aim (no Health>0 filter today — corpses become shields/aim magnets). Client: + EnemyAnimationDriveSystem writes `IsDead = Health.Current<=0` (param exists, never written); CombatFeedbackSystem + fires the kill CRUNCH at the 0-crossing (today it fires at prune — would land ~1 s late), prune keeps only a + cleanup puff; hide health bars at <=0. +- **B1 separation:** a pass INSIDE EnemyAISystem (sole-position-writer invariant; BossAISystem only has + [UpdateAfter(EnemyAISystem)]). Pairwise among LIVING enemies, skip lunging/knocked/Dying receivers, boss immovable + (others push out of its radius), displacement through the swept EnemyMoveUtil move (no wall-shoving). Player + pushout radius SMALL (< melee range, ~HitRadius+0.35) or grunts can't strike + Spitter cornered-hold re-breaks. +- **B2 poise:** the windup-cancel is the knockback CONTINUE branch (EnemyAISystem :119-133 grunt, :234-248 charger). + Threshold on the EXISTING `KnockbackState.Speed` channel (no per-kind data): below it, kb velocity nudges but the + windup/lunge survives; at/above it, stagger as today. Make the finisher + Warrior cone stamp a higher kb Speed so + the channel actually distinguishes (light 6 / heavy 9, threshold ~7). +- **B4 boss lunge:** BossState gains a server-only attack byte; lunge = reposition move (no unique damage — the + slam stays the damage beat). Telegraph rides `AttackWindup` + the boss's already-baked `IsLunging` ghost bit; + the client boss-ring override SKIPS the slam ring while IsLunging (draws the standard Charger lunge tell). The + windup-elapse branch keys on the state byte (today it would deal SLAM AoE on any elapse). +- **B5 party HP scale:** in the RoomEnemyDirectorSystem boss branch (sole spawn site), scale Health by LIVING + EXPEDITION players (RegionTag+Health>0), NOT RunParticipant (dead-respawned keep the tag at base). +- **B6 run-failed banner:** client-only; cache Charge + a wentInRun flag at launch; on the (in-run)->Staging + transition with Charge unchanged -> "EXPEDITION FAILED" banner. NEVER key on Returning (1-tick transient, and the + bank lands one tick after it). Launching->Staging aborts don't count (wentInRun gate). +- **B7 fire-anim pulse:** stateless absolute window derived from AbilityCooldown (the SwingActive idiom) — no + cached edges (rollback/join-unsafe). +- **Hygiene:** bytes not enums in Bursted systems; no new [UpdateBefore/After] edges; ~54-tick window + stagger + threshold + separation strength as live TuningConfig knobs. ⚠ Bursted query-set edits on an UNFOCUSED editor can + leave a stale Burst binary — have the editor focused for the compile, or expect the restart cure. + ## 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