diff --git a/docs/LANES/LANE_D_NOTES.md b/docs/LANES/LANE_D_NOTES.md index 37b678d..40d6a7e 100644 --- a/docs/LANES/LANE_D_NOTES.md +++ b/docs/LANES/LANE_D_NOTES.md @@ -6,6 +6,18 @@ _rotOnly/head-bone normalize/upgradeStreetPeople). Measurements on the M3 Ultra --- +## ROUND 15 — v3.0 close: the amp one-liner (ledger #4) + +*PROCITY-D, 2026-07-16. Sole task: move `band.js _addBackline` to C's §3 pose. Everything else (continuity, +ratified sit-clip deferral) is closed.* The R13 amp sat at `z = stage.z + 0.15` (down-stage) — 0.29 m from +the bass rig, interpenetrating the bassist (C's audit caught it). Moved up-stage-right to C's blessed pose +**`(stage.x + w·0.36, deckY, stage.z − d·0.22)`** = (1.44, 0.32, −3.27) at the pub: **0.75 m clear** of the +bass, behind the front line, flanking C's primitive ampStacks. Verified: draw/tri delta **0** (same GLB +moved — pub interior 50 draws · ~183k tris), `?noassets` unaffected (amp is fleet-gated dressing → `props 0`, +band placeholders, no crash). + +--- + ## ROUND 14 — v3.0 release: identity continuity (the ped you followed is in the crowd) *PROCITY-D, 2026-07-16. The last charter promise. Behind `?gigs=1`; files `sim.js`, `band.js`, `queue.js`. diff --git a/web/js/citizens/band.js b/web/js/citizens/band.js index a85365d..eec55ea 100644 --- a/web/js/citizens/band.js +++ b/web/js/citizens/band.js @@ -230,8 +230,10 @@ export class GigCrew { if (!gltf || this._gen !== gen) return; const amp = gltf.scene.clone(true); amp.traverse((o) => { if (o.isMesh) { o.castShadow = false; o.frustumCulled = false; } }); - // off to stage-right of the drum riser, on the deck, facing the crowd (world +Z). Room-local coords. - amp.position.set(stage.x + (stage.w || 3) * 0.32, (stage.deckY || 0), stage.z + 0.15); + // R15 (C's §3 ruling): up-stage-right behind the front line — clears the bass rig and offsets from + // C's primitive ampStacks (at ±w·0.28, z−d·0.18), so GLB + primitive read as a flanking backline. + // The old z+0.15 was down-stage and interpenetrated the bassist. Room-local coords; grille to the crowd. + amp.position.set(stage.x + (stage.w || 3) * 0.36, (stage.deckY || 0), stage.z - (stage.d || 3) * 0.22); roomGroup.add(amp); this.props.push(amp); });