aa5247aff4
The 13 vault notes were left dirty by basic-memory back-filling title/type/permalink frontmatter into files written with Write/Edit (it also strips the trailing newline — restored here so future diffs stay clean). Content is unchanged; verified frontmatter-only. packages-lock.json is the com.coplaydev.unity-mcp #main branch ref silently re-resolving. Pinning that dependency lands with the package cleanup batch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
title, type, permalink
| title | type | permalink |
|---|---|---|
| 2026-07-20_Target_Dummy_D | note | 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. EveryEnemyAISystempass (grunt move/attack, lunge, spitter, depenetration nudge, IsLunging enable — 5 queries) excludes it viaWithNone<TargetDummyTag>; since those passes are ALSO whereKnockbackStateintegrates into movement, the dummy is planted for free (knockback stamps land but never move it).TargetDummySpawnSystem(Server, editor-only, plainSimulationSystemGroup,DevSandboxscene-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, neverFromPosition). It dies through the NORMAL path (Dyingcorpse 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.