Docs: destructible-cover Build Spec + session log Part K — PHASE 1.5 COMPLETE
CLAUDE.md: the enemy anti-stuck nudge is now cover-aware (budget 38.5 KB). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -107,7 +107,7 @@ Long-form originals + the milestone each came from: `Docs/Vault/_Meta/CLAUDE_Bui
|
||||
- **A dark-lit screenshot MASKS material bugs — verify material *values*.** `shader.GetPropertyType(idx)`-guard before `GetColor`/`GetFloat`/`GetTexture` (`S_General`'s `_BaseColorMultiply` is a float → `GetColor` returns black). Gate emission on the `_Emissive` flag + a fixture name; keep converted env metallic low (0.1–0.2).
|
||||
- **VolumeProfile.Add persistence + the URP `m_AssetVersion` build blocker** → archive 2026-07-06 (+ native memory `urp-global-settings-version-blocks-build`).
|
||||
- **`LocalTransform.FromPosition()` resets Scale=1** — server spawners read the prefab's baked `LocalTransform`, override only Position (Scale is a `[GhostField]` → consistent-but-wrong).
|
||||
- **Static decor → gameplay subscene** (EG renders only baked entities); **strip colliders from cosmetic props** + no `GhostAuthoring` on scenery (classic-URP colliders are inert to the DOTS PhysicsWorld). **World collision = subscene-only ★:** `Environment`-layer boundary ring + landmark colliders (player blocked via the layer matrix); enemies slide via a server `CollisionWorld.SphereCast` in `EnemyAISystem`. **★ enemy slide has NO pathfinding — a near-vertical wall normal or an embedded spawn FROZE Husks on cover rocks (soft-locks a room on one leftover); fixed 07-07 via `EnemyMoveUtil.Depenetrate` + tangent-slide + an `EnemyNavState` nudge backstop. Re-validate movers aren't frozen when adding Environment cover.** Boundary = `SM_Env_Rock_Cliff` rim. See [[2026-06-08_World_Collision_HUD_Scaling]].
|
||||
- **Static decor → gameplay subscene** (EG renders only baked entities); **strip colliders from cosmetic props** + no `GhostAuthoring` on scenery (classic-URP colliders are inert to the DOTS PhysicsWorld). **World collision = subscene-only ★:** `Environment`-layer boundary ring + landmark colliders (player blocked via the layer matrix); enemies slide via a server `CollisionWorld.SphereCast` in `EnemyAISystem`. **★ enemy slide has NO pathfinding — a near-vertical wall normal or an embedded spawn FROZE Husks on cover rocks (soft-locks a room on one leftover); fixed 07-07 via `EnemyMoveUtil.Depenetrate` + tangent-slide + an `EnemyNavState` nudge backstop. Re-validate movers aren't frozen when adding Environment cover. 07-10: the nudge is COVER-AWARE — a live destructible-cover ghost (`BlightClutter` carrier) SUPPRESSES the phase-through (breakable ⇒ no soft-lock); static wedges still nudge.** Boundary = `SM_Env_Rock_Cliff` rim. See [[2026-06-08_World_Collision_HUD_Scaling]].
|
||||
- **A GA "projectile" prefab self-propels** — strip to particles before `Start` (`CombatFeedbackSystem.StripCosmetic`); verify *components*, not the name.
|
||||
|
||||
### Aim controls
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Destructible_Cover_Build_Spec
|
||||
type: note
|
||||
permalink: gamevault/03-design/destructible-cover-build-spec
|
||||
---
|
||||
|
||||
# Destructible Cover — Build Spec (Phase 1.5 long-term #8, review-hardened, SHIPPED `bbf418e77`)
|
||||
|
||||
Review: `wf_e14dd739-069` (3 lenses, 28 agents). The session limit killed 18 verifiers mid-run, but the 7
|
||||
completed verifications covered every DISTINCT load-bearing finding (both HIGHs + the boss/scatter/copy-paste/
|
||||
HitRadius/spawn-window MEDs); the dead verifiers were lens-duplicates of the same issues. **Deliberate call:
|
||||
folded without a third verify pass**, with the unverified leftovers reasoned-closed below — recorded per
|
||||
[[ask-before-deferring-during-implementation]].
|
||||
|
||||
## Core architecture: cover IS clutter with a collider
|
||||
|
||||
`CoverRock.prefab` = a `BlightClutter` ghost (Variant **4**) whose root carries a baked **Environment-layer
|
||||
BoxCollider**: the runtime-spawned ghost's collider joins `BuildPhysicsWorld` every tick → blocks the player
|
||||
CC AND the enemy sweep (both filter on the env mask) while alive, and the gap opens the instant the entity
|
||||
dies. Both hit paths break it for free (the clutter chassis); chip feedback/teardown/relevancy inherited.
|
||||
Values: `Remaining=8` (8 hits to carve), `ScrapPerHit=0`, `HitRadius=1.2`, Model = `SM_Env_Rocks_Spikey_03`
|
||||
@1.7 (the old cover visual; Read/Write already enabled).
|
||||
|
||||
## The two HIGH folds
|
||||
|
||||
1. **The 07-07 anti-stuck nudge deliberately phases enemies through cover rocks** (it exists to prevent room
|
||||
soft-locks) — "cover blocks enemies" contradicted the shipped backstop. Fold: the nudge is **cover-aware**
|
||||
(EnemyAISystem, the arm site): a 1.8 u SphereCast toward the target identifies the blocker; if it carries
|
||||
`BlightClutter` (a LIVE, destructible ghost — no soft-lock possible) the phase is SUPPRESSED and the stuck
|
||||
counter stays primed; static-geometry wedges nudge exactly as before.
|
||||
2. **Yield==durability coupling** made tanky cover a 64-scrap/room faucet. Fold: deposit DECOUPLED from the
|
||||
decrement at BOTH hit sites — `deposit = perHit > 0 ? max(1,(int)perHit) : 0` — zero means ZERO (cover),
|
||||
any positive still credits ≥1 (the B1 immortal-sink regression test caught the first cut truncating 0.5→0;
|
||||
the dual contract is now: fractional-positive floors to 1, exact-zero deposits nothing).
|
||||
|
||||
## Confirmed-MED folds
|
||||
|
||||
- `HitRadius=1.2` (visual core): the collider footprint would have made each rock a ~5 u shot-eating disc
|
||||
(ResourceHarvest consumes any surviving projectile whose segment grazes HitRadius).
|
||||
- **No cover in Boss rooms**: the boss moves only via SweptMove — NO depenetration backstop exists for it
|
||||
(`EnemyAISystem`'s pass excludes BossState with a comment wrongly claiming BossAISystem owns it).
|
||||
- Scatter keep-out ≥7 u from the room origin (player landing at origin+1.5·idx, portal at z−5), bounded
|
||||
8-attempt resample, piece dropped on failure. Count=3/room (`CoverFieldSpawner`, optional singleton).
|
||||
- `Variant=4` set on the prefab and NEVER rerolled (the clutter block's 25% explosive reroll is a copy-paste
|
||||
trap — the cover spawn block instantiates the prefab proto untouched).
|
||||
- Old static layer REMOVED: 8 `WorldColliders_RoomCover` subscene colliders + the `RoomCover_Visuals` root in
|
||||
Game.unity (double-collision + double-visual otherwise). ColliderFitTools' FitCover section is vestigial
|
||||
(empty group → KEEP logs).
|
||||
|
||||
## Reasoned-closed (verifiers lost to the session limit; dispositions)
|
||||
|
||||
- *CC misprediction window on runtime-spawned blockers*: rocks spawn at room entry ≥7 u from the landing
|
||||
point; the ghost replicates long before a player can cross 7 u — no practical mispredict window.
|
||||
- *Depenetrate vertical-normal on hull tops*: unchanged behavior class vs the old static hulls; the fallback
|
||||
chain (nudge) still exists for non-cover geometry.
|
||||
- *Melee cone tests target CENTER*: rock center reachable at HitRadius 1.2 + cone range 2.6 — chippable
|
||||
point-blank.
|
||||
- *NodeFeedback shrink keys on Remaining*: cover shrinking as it is chipped reads as crumbling — kept.
|
||||
- *Projectiles ignore colliders* (confirmed structurally): v1 cover blocks MOVEMENT, not shots — both sides'
|
||||
projectiles fly over the waist-high rocks. True shot-blocking = a follow-up (cover in both projectile
|
||||
sweeps). Enemy-hits-win ordering is deterministic: ProjectileDamage (predicted group, immediate playback)
|
||||
runs before ResourceHarvest (plain group) — a projectile consumed on an enemy is gone before the harvest
|
||||
sweep can double-destroy it.
|
||||
- *Charger smashes through cover*: deliberate follow-up (contact damage from lunging chargers to cover).
|
||||
|
||||
## Live validation (all passed, 2026-07-10)
|
||||
|
||||
3 cover ghosts spawned (Variant 4, Remaining 8) with SOLID baked colliders in the CollisionWorld ·
|
||||
**BLOCK**: `NudgeUntilTick` stayed 0 across 3.5 s of forced zero-progress (the old code arms at 1.5 s) ·
|
||||
**DEPENETRATE**: an enemy shoved inside a live rock exited to 1.7 u · **CARVE**: the rock died to the real
|
||||
projectile sweep and the spot probed OPEN (not solid) · 470/470 EditMode · console clean.
|
||||
@@ -150,8 +150,11 @@ attacks/animations/effects**. Art direction deliberately UNDECIDED — lighting
|
||||
the client cue, strobing red glow) then radius-damages BOTH sides (bait mechanic; escapable). Zero new
|
||||
replication. Geysers/trap tiles = later hazard variants on the same HazardExplosionSystem chassis.
|
||||
See [[Exploding_Barrels_Build_Spec]].
|
||||
8. **Destructible cover:** in-room cover rocks take damage and crumble (Charger smashes through, players carve LOS).
|
||||
Structures already have Health; **re-validate the enemy stuck-fix backstop when cover can disappear mid-fight.**
|
||||
8. **Destructible cover — SHIPPED (2026-07-10, `bbf418e77`, review-first `wf_e14dd739-069`): PHASE 1.5 IS
|
||||
COMPLETE.** Cover = BlightClutter ghosts (Variant 4) with baked env-layer colliders — genuinely block
|
||||
(the anti-stuck nudge is now cover-aware) until carved (8 hits, zero yield — deposit decoupled from
|
||||
durability); no cover in Boss rooms; backstop re-validated live (block/depenetrate/carve all proven).
|
||||
Follow-ups: Charger smashes cover; true projectile-blocking. See [[Destructible_Cover_Build_Spec]].
|
||||
|
||||
**Gate:** operator playtest says "no longer static"; node harvest feedback visibly works; art direction LOCKED.
|
||||
|
||||
|
||||
@@ -229,13 +229,31 @@ Verified: 470/470 (4 new tests) · live smoke: client OBSERVED the fuse cue on t
|
||||
enemy took exactly 26 (30→4), walk-out escape confirmed (fuse is escapable by design — first unpinned bait
|
||||
simply left the radius) · console clean.
|
||||
|
||||
## Part K — destructible cover SHIPPED (`bbf418e77`); **PHASE 1.5 COMPLETE** (07-10)
|
||||
|
||||
The last 1.5 item, review-first (`wf_e14dd739-069`; the limit ate 18 duplicate verifiers — the 7 completed
|
||||
ones covered every DISTINCT finding; folded without a third pass, leftovers reasoned-closed in
|
||||
[[Destructible_Cover_Build_Spec]]). **Architecture: cover IS clutter with a collider** — a `BlightClutter`
|
||||
ghost (Variant 4) whose baked env-layer BoxCollider joins BuildPhysicsWorld → blocks the player CC + the
|
||||
enemy sweep while alive, opens the instant it dies; both hit paths carve it (8 hits, ZERO yield). The two
|
||||
HIGH folds: (1) **the 07-07 anti-stuck nudge is now COVER-AWARE** (a SphereCast identifies the blocker; a
|
||||
live destructible ghost suppresses the phase-through — breakable ⇒ no soft-lock; statics still nudge; also
|
||||
now a CLAUDE.md line); (2) **deposit decoupled from durability** at both hit sites — zero yields nothing,
|
||||
fractional-positive still floors to 1 (the B1 immortal-sink test caught the first cut truncating 0.5→0 —
|
||||
a real regression the suite stopped). MEDs: HitRadius 1.2, NO cover in Boss rooms (boss has no depenetrate
|
||||
backstop), ≥7 u origin keep-out, Variant never rerolled, old static cover colliders + RoomCover_Visuals
|
||||
REMOVED. Live-verified: 3 solid cover ghosts · BLOCK (NudgeUntilTick 0 across 3.5 s forced-stuck) ·
|
||||
DEPENETRATE (embedded enemy exits to 1.7 u) · CARVE (real-sweep kill → spot probes OPEN) · 470/470 · console
|
||||
clean. Follow-ups queued: Charger smashes cover · true projectile-blocking cover.
|
||||
|
||||
## Next-session intent
|
||||
|
||||
Phase 1.5 remaining: **destructible cover** (the last long-term item — design-review-first, MUST re-validate
|
||||
the enemy stuck-fix backstop when cover can vanish mid-fight) → then the 1.5 gate lap → **Phase 1.7 boon
|
||||
overhaul** (design review required — replicated ability swaps). Queued taste items: re-enable curated base
|
||||
flora · arid brightness · craters call · B5 split-panels smoke · barrel VFX polish (authored explosion
|
||||
prefab instead of the procedural burst).
|
||||
**Phase 1.5 is COMPLETE** (collision · lighting · art-look LOCKED clean dark-Synty · ambient motion ·
|
||||
breakables · attack distinctness · exploding barrels · destructible cover). Next per the locked order:
|
||||
**the operator's 1.5 gate lap** ("no longer static"?) → **Phase 1.7 boon overhaul** (~12 mechanic-changers
|
||||
on existing hooks; design-review-FIRST — replicated ability swaps) → Phase 2 hub-ification. Taste queue:
|
||||
re-enable curated base flora (barren hub) · arid brightness · craters call · B5 split-panels smoke · barrel
|
||||
explosion VFX polish · cover damage-crack visuals.
|
||||
|
||||
Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Workflow_Consolidation]] ·
|
||||
[[2026-07-07_Expedition_Enemy_Stuck_Harvest_Feedback]]
|
||||
|
||||
Reference in New Issue
Block a user