feat(render) Campaign FW1: flood decomp appendix + the visibility math port

The second decomp round (flood bookkeeping/propagation, view-clip
support, landscape visibility) is archived Ghidra-arbitrated - it caught
a load-bearing BN inversion (InsCellTodoList pops NEAREST-first, which
is what makes the draw list far-to-near) and three more traps (the 192m
elided constant, the min/max double positional swap, the copy_view
cross order - the walk doc section 6 is corrected). WalkVisibilityMath
ports get_pt_limit @0x0054b840, get_clip_height @0x0054cff0,
corner/block_plane_check @0x0054b930/@0x0054d060, block_check
@0x0054dc50, and viewconeCheck @0x0054c250 with retail boundary
semantics (strict cull, inclusive partial, touch-out=Outside /
touch-in=EntirelyInside) under 23 focused tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-30 09:44:49 +02:00
parent 0926b55eaf
commit 368c480bc2
4 changed files with 1138 additions and 2 deletions

View file

@ -206,8 +206,12 @@ unreachable (every listed cell was `curr_view_push`ed).
- `Render::copy_view` @0x0054dfc0 — appends ONE view: perspective-divided
screen points (drop near-duplicates/collinear within ~1 px; <3
survivors ⇒ reject; cap 31), bounds, and per-edge WORLD-space planes
(`N = normalize(cross(ray_i, ray_i+1))`, `d = dot(N, viewpoint)`).
`copy_view(dest, null, 4)` = the full-viewport root quad.
(`N = normalize(cross(ray[k+1], ray[k]))` — NEXT × CURRENT, corrected
2026-08-30 by the flood-read appendix against Ghidra; an earlier
revision of this line had the operands reversed —
`d = dot(N, viewpoint)`). `copy_view(dest, null, n)` = the
full-viewport root quad (count ignored). Full extraction:
`2026-08-30-fw-flood-pseudocode-appendix.md`.
- `PView::GetClip` @0x005a4320 — projects the portal polygon
(`xformStart`), reverses winding for NEGATIVE side, and (do_clip)
clips via `ACRender::polyClipFinish` against the installed view. ≤32