feat(render) Campaign FW1: street fixture retail-exact except flood depth

Three pinned corrections close the outdoor frame: (1) the camera basis
RE-pinned to +Y-forward - the terrace-edge fixture EXTERNAL ground
truth (the ledge faces the F518 vista, east) overrules the walkabout
motion sweep, whose camera was mouse-turned off the run line; (2)
alwaysDrawObjects (.data default 1 @0x00820ed4) drawn into the
DrawSortCell gate - cell contents draw for every cell of an in-view
block; (3) the building portal side decode data-pinned as the INVERSE
of the cell 0x2 bit (the sweep winning arm). Street result: all 13
buildings in retail exact order (a9b3003c in, aab50002 correctly
absent), punches at exactly 001a and 0022 opening the exact first
cells 16e/164. SOLE remaining delta: look-in flood depth (mine 1 cell,
retail 3-4) - the doorway-still fixture adjudicates the interior flood
in isolation next.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-30 11:02:16 +02:00
parent 5f18ba5507
commit 28475d0544
4 changed files with 30 additions and 19 deletions

View file

@ -50,6 +50,11 @@ public sealed class RetailFrameWalk
public WalkPView InteriorPView => _interiorPView;
public WalkPView OutdoorPView => _outdoorPView;
/// <summary>Retail global <c>alwaysDrawObjects</c> (.data default 1
/// @0x00820ed4): cell contents draw for every cell of an in-view block
/// regardless of per-cell visibility.</summary>
public bool AlwaysDrawObjects = true;
/// <summary>The per-frame root (<c>SmartBox::RenderNormalMode</c>).
/// <paramref name="cameraCell"/> may be null only when the camera is
/// outdoors.</summary>
@ -115,10 +120,15 @@ public sealed class RetailFrameWalk
for (int k = 0; k < cellCount; k++)
{
int cellIndex = block.DrawArray[k];
// DrawSortCell runs for in-view cells (alwaysDrawObjects
// default 0); terrain (DrawLandCell) emits no walk event.
if (block.CellInView[cellIndex] == WalkBoundingType.Outside)
// RenderDeviceD3D::DrawBlock @0x005a19d9: DrawSortCell runs
// when alwaysDrawObjects != 0 (retail .data default 1
// @0x00820ed4) OR the cell IsInView; terrain (DrawLandCell)
// emits no walk event.
if (!AlwaysDrawObjects
&& block.CellInView[cellIndex] == WalkBoundingType.Outside)
{
continue;
}
if (block.CellBuildings[cellIndex] is WalkBuilding building)
DrawBuilding(building, activeViews, ctx, sink);
}