Files
Project-M/Docs/Vault/07_Sessions/2026/2026-07-20_Target_Dummy_D.md
T
kronic aa5247aff4 Docs: commit basic-memory frontmatter backfill + resolved MCP lock hash
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>
2026-08-07 10:09:39 -07:00

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. 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.