Docs: 07-20 sandbox target dummy session log (planted dummy + GymSub no-director diagnosis)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
# 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<TargetDummyTag>`; 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.
|
||||||
Reference in New Issue
Block a user