docs(render): chunk 3 R5 — the second sky pass is retail's weather pass

GameSky::Draw 0x00506ff0 arg2==1 is the weather pass gated on
SmartBox::is_player_outside 0x00451e80, already modeled by RenderWeather;
chunk 3 only has to keep it after the last land cell.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 07:29:55 +02:00
parent 887f221674
commit edb3278370

View file

@ -408,16 +408,18 @@ edits the same driver).
bisect" wording: the whole-stage terrain event is replaced in THIS chunk
(drawing terrain twice would already hide the punch and make the gate
meaningless), and chunk 4 loses that deletion.
- **R5 — the sky draws TWICE.** `LScape::draw` @0x00506330 calls
`GameSky::Draw(sky, 0)` @0x0050633c BEFORE `draw_check_blocks`, walks the
blocks (`DrawBlock` @0x00506374), and then calls `GameSky::Draw(sky, 1)`
@0x00506396 AFTER every block. acdream emits one `Sky()` event at the
landscape turn's start. The implementer reads `GameSky::Draw` (grep it)
and reports what the second pass (`arg2 == 1`) draws; if it is a real
post-terrain layer (horizon band, celestial sprites, the far fog dome),
chunk 3 adds the second sky event after the last land cell; if it is
empty at retail defaults, the contract records why with the address. Do
not guess — read it.
- **R5 — the sky draws TWICE, and the second pass is the WEATHER.**
`LScape::draw` @0x00506330 calls `GameSky::Draw(sky, 0)` @0x0050633c BEFORE
`draw_check_blocks`, walks the blocks (`DrawBlock` @0x00506374), then calls
`GameSky::Draw(sky, 1)` @0x00506396 AFTER every block. `GameSky::Draw`
@0x00506ff0's `arg2 == 1` is the weather pass, gated on
`SmartBox::is_player_outside` @0x00451e80 (already Ghidra-arbitrated and
modeled by `RetailPViewPassExecutor.DrawLandscapeSliceLate`'s `RenderWeather`
call — see that method's comment). Chunk 3 keeps the sky at the landscape
turn's start and places the weather pass AFTER the last land cell of the
turn (retail order); the implementer confirms where the late landscape
slice runs relative to the new per-cell events and moves the weather call
only if it currently runs before them.
### 9.2 Production behavior change