acdream/src
Erik afbd241016 feat(physics): S2 chunk 3 - one flood per registration feeds collision rows and render entries
ShadowObjectRegistry computes the CELLARRAY once per registration under
Contract A (cylsphere route from the Setup's collision cylspheres, else the
bbox route over the whole visual part array) and derives BOTH products from
it: the collision rows (_entityToCells/_cells, CShadowObj per cell via
add_shadows_to_cells @0x00514ae0) and the per-part render entries
(AddPartsShadow @0x00517e40). The second, independent collision flood is
gone. A caller that supplies no part array floods from its collision shapes
exactly as before, so every legacy expectation holds byte-for-byte.

The staged SetPosition pipeline now carries the retail part array, cell
array, route, and entries through TryCaptureOwnerState/InstallOwnerState
and publishes them beside the collision cell replacements, honoring the
keep-when-empty rule (SetPositionInternal num_cells gate, pc:283540) for
both products together; two new tests pin a cross-cell move and the
keep-when-empty case. Behavior change, retail-exact: an object with
decorative non-BSP parts now has its collision shapes registered in every
cell those parts reach (pinned by a two-cell fixture); all-BSP objects are
unchanged. Movement paths still take collision cells from the transition
and recompute the retail product separately; chunk 4 unifies them on the
transition's array as retail does. No particle emitter reaches this registry.

Gates (implementer's isolated worktree at identical content): Release
build 0/0; Core 4,961/4,961; App hermetic 6,760/6,760; collision/InstalledDat
fixtures 63/63; Runtime 1,884/1,884; Content 213/213.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 23:02:47 +02:00
..
AcDream.App feat(render): S2 chunk 2 - render statics borrow the registry's retail cell array 2026-09-02 22:31:46 +02:00
AcDream.Bake Optimize prepared asset package v2 2026-08-27 20:09:09 +02:00
AcDream.Cli fix: make locale-independence real, not assumed — parsing, casing, comparison 2026-08-19 20:11:32 +02:00
AcDream.Content feat(physics): S2 chunk 1b - callers supply the visual part array; installed-DAT comparator 2026-09-02 21:52:35 +02:00
AcDream.Core feat(physics): S2 chunk 3 - one flood per registration feeds collision rows and render entries 2026-09-02 23:02:47 +02:00
AcDream.Core.Net fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
AcDream.Headless fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
AcDream.Launcher Optimize prepared asset package v2 2026-08-27 20:09:09 +02:00
AcDream.Launcher.Core feat(content): S1 exact CellStruct surface-index construction, recipe 8 2026-09-02 18:40:33 +02:00
AcDream.Platform feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
AcDream.Plugin.Abstractions feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
AcDream.Plugins.MossTank feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
AcDream.Plugins.Smoke feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
AcDream.Runtime feat(render): S2 chunk 2 - render statics borrow the registry's retail cell array 2026-09-02 22:31:46 +02:00
AcDream.UI.Abstractions fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00