--- title: 2026-07-20_Target_Dummy_D type: note permalink: gamevault/07-sessions/2026/2026-07-20-target-dummy-d --- # 2026-07-20 (D) — Sandbox target dummy (planted combat-test target) **Operator:** enemies don't work in the DevSandbox — replace with a target dummy for combat testing. **Diagnosis (recorded, not fixed per operator's "anyways"):** `GymSub.unity` bakes **no WaveDirector** — only the Game arena's `Gameplay.unity` has one — so nothing ever spawns enemies in the sandbox (and Force Next Wave has no director to force). ## What shipped - **`TargetDummyTag`** (Simulation, server-only, never replicated): marks a real enemy ghost as a PLANTED dummy. Every `EnemyAISystem` pass (grunt move/attack, lunge, spitter, depenetration nudge, IsLunging enable — 5 queries) excludes it via `WithNone`; since those passes are ALSO where `KnockbackState` integrates into movement, the dummy is planted for free (knockback stamps land but never move it). - **`TargetDummySpawnSystem`** (Server, editor-only, plain `SimulationSystemGroup`, `DevSandbox` scene-name gate — the established dev-script convention): keeps exactly ONE dummy alive at the first player's spawn + (3, 0, 1.5), 400 HP (≈4 full chains), instantiated from a grunt-shaped baked enemy prefab (`WithPosition`, never `FromPosition`). It dies through the NORMAL path (`Dying` corpse window → destroy → kill pop) and respawns 1.5 s after the corpse clears — the corpse window delays the timer for free. Client sees a normal interpolated enemy: health bar, hit flash, damage numbers, death feedback all exercise the real pipeline. - **★ EnemyTag-reuse audit** (the CLAUDE.md re-audit rule): damage paths MUST see the dummy (the point); AI excluded; markers/telemetry count it (cosmetic); wave/room cleared-checks WOULD count it — acceptable only because the spawner is sandbox-gated where no director runs. If a dummy ever ships outside the sandbox, re-audit cleared-checks first. Composes with the tuning bench: the sandbox now always has a target for eyes-on swings; `CombatProbe` still spawns its own tracked 100k-HP dummy for measured runs (both can coexist — the probe reads its own entity). **Validation:** console clean; suite deferred mid-session (operator entered Play while it queued — their live session doubles as the visual validation); dummy presence verified live server-side.