Docs: 2026-07-09 session log — B4d tail settled + collision-fidelity grounding
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
---
|
||||
title: 2026-07-09_B4d_Tail_Collision_Grounding
|
||||
type: note
|
||||
permalink: gamevault/07-sessions/2026/2026-07-09-b4d-tail-collision-grounding
|
||||
---
|
||||
|
||||
# 2026-07-09 — B4d hygiene tail settled + Phase 1.5 collision-fidelity grounding
|
||||
|
||||
**Driver:** operator ask — "continue with the next phase of work." Grounding HEAD found an UNCOMMITTED,
|
||||
UNLOGGED working tree (20 files + new `Server/PlayerResolve.cs`) — the tail of the 07-08 hygiene
|
||||
continuation that never got verified/committed (the [[verify-tree-against-session-log]] class, again).
|
||||
|
||||
## Part A — uncommitted hygiene tail: verified, split, committed (`813c82942`)
|
||||
|
||||
The tree held three strands; verification (466/466 EditMode on the final tree, console clean vs baseline,
|
||||
live Play smoke with Burst on) split them:
|
||||
|
||||
- **KEPT — `PlayerResolve.TryResolve`** (new `Server/PlayerResolve.cs`): single-sources the RPC
|
||||
`SourceConnection` → `NetworkId` → conn→player-map resolve at the 3 byte-identical sites
|
||||
(ClassSelectReceive / PrepPurchase / DebugCommandReceive). `EntityManager` reads keep it source-gen-safe
|
||||
from Bursted receivers. The other ~7 resolve sites stay inline per the original B4 deferral (they sit
|
||||
inside compound source-gen query conditions).
|
||||
- **KEPT — `ecb.Dispose()` after `Playback`** in 9 Temp-ECB systems (explicit-lifetime hygiene).
|
||||
- **REVERTED — `TuningConfig.GetOrDefault(ref state)`** (7 call sites + the helper): the Play smoke caught
|
||||
Entities logging **"creates a query during OnUpdate. Please create queries in OnCreate"** per system per
|
||||
world (Dash + MeleeCombo, both worlds) — `state.GetEntityQuery` inside `[BurstCompile]` OnUpdate is an
|
||||
engine anti-pattern diagnostic even though the query is cached. The consumers' existing
|
||||
`SystemAPI.TryGetSingleton<TuningConfig>(...) ? cfg : Defaults()` idiom is already source-gen-optimal
|
||||
(query created at OnCreate by codegen, zero warnings). **The original B4 "deliberately deferred —
|
||||
doesn't factor out of source-gen" judgment was CORRECT; do not re-attempt a runtime-query helper for
|
||||
singleton reads in ISystems.** Files reverted via `git checkout` + `refresh_unity scope=scripts
|
||||
mode=force compile=request` (external-write recompile rule held).
|
||||
|
||||
Suite green (466 at the time) pre- and post-revert; only console residue = benign bridge noise + the known
|
||||
unfocused-editor server tick-batching warnings.
|
||||
|
||||
## Part B — Phase 1.5 stabilize #2 (collision fidelity): grounding complete, plan GATED
|
||||
|
||||
Read-only audit of the collision surface (subscene YAML parse + live scene walk via `execute_code`):
|
||||
|
||||
- **All Environment (layer 8) colliders are invisible primitive boxes in the Gameplay SUBSCENE**; all
|
||||
visuals are classic GameObjects in **Game.unity** (BaseBiome/ExpeditionBiome) — two disconnected trees,
|
||||
which is exactly how fidelity drifted. Inventory: `WorldColliders_BaseRing` 16 segs (13.46×5×1.5, r≈30) ·
|
||||
`WorldColliders_ExpeditionRing` + `_Slot1` 24 segs each (15.61×5×1.5, r≈52, ring centers X+1000/X+1500) ·
|
||||
`WorldColliders_Landmarks` 11 boxes · `WorldColliders_RoomCover` 8 boxes (uniform 4.2×3.2×4.2).
|
||||
- **Cover rocks have DEDICATED visuals** (`CoverRock_S0_0`…): render bounds differ per instance from the
|
||||
uniform box — e.g. `CoverRock_S0_3` visual 5.3×5.7 XZ vs box 4.2×4.2 (player clips into visible rock);
|
||||
boxes are also axis-aligned vs rounded rocks (invisible corner walls).
|
||||
- **Landmark mismatches are large in both directions:** Cabin visual 9.6×10.1 vs box 6×6 and Tent 6.4×6.4
|
||||
vs 4×4 (walk INTO the visible building); Well 1.9×2.0 vs 3×3 and Artefact 2.4×1.5 vs 3×3 (invisible
|
||||
wall); Warpgate footprint 8.3×6.8 vs 8×2.5.
|
||||
- **Missing colliders on solid props:** meadow-tree trunks at the base hub, the survey-camp wind-turbine
|
||||
pole, sci-fi crates, satellite dish — all walk-through today (adjacent scope; gameplay-affecting for
|
||||
enemy nav → presented as a fork, not auto-included).
|
||||
- **Rings:** cliff visual pieces cluster r≈54–78 (AABB-inflated) vs collider ring r≈52 — needs per-segment
|
||||
sampled fit, not a uniform radius bump.
|
||||
|
||||
**Planned approach (awaiting gate):** new Editor tool `ColliderFitTools` (menu-driven, EnvArtTools style) —
|
||||
temp MeshColliders on cliff/rock LOD0 visuals → sampled raycast fit per ring segment (inner face = innermost
|
||||
visible rock surface) · convex `MeshCollider` from the actual `CoverRock_*` render mesh for the 8 cover
|
||||
boxes · per-landmark fitted boxes from the named prop's render bounds (multi-box where needed: warpgate
|
||||
base + rings) · optional missing-collider adds per the fork. Save subscene (expected re-bake; **no ghost /
|
||||
RPC / ordering surface**). Validation ladder: baked `CollisionWorld` raycast sampling vs visual surface ·
|
||||
enemy backstop re-validation (spawned Husks near refit cover keep moving — the Depenetrate/tangent-slide
|
||||
was tuned on the OLD shapes) · suite + operator feel pass.
|
||||
|
||||
## Next-session intent
|
||||
|
||||
Execute the collision-fidelity pass per the gate answer → lighting/atmosphere pass → art-look decision
|
||||
gate (pixel filter ON/OFF side-by-sides). The B5 split-panels focused Play VISUAL smoke is still pending
|
||||
operator eyes (unfocused editor can't drive it).
|
||||
|
||||
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