docs(overhaul): verify light insertion order against retail binary

This commit is contained in:
Erik 2026-09-05 13:46:14 +02:00
parent 6c3ffd79ec
commit ad866b7f65

View file

@ -132,3 +132,33 @@ Before the next unattended run, the existing self-gate runner was narrowly
hardened to refuse either client and explicitly use WindowStyle Hidden.
It already uses a real hidden Vulkan window through exact-framebuffer mode.
No route/rendering behavior, graphics profile or quality was changed.
### Selection-order follow-up while checkpoint observation is implemented
Read-only, base6c3ffd79e (production1e376c244). Current
LightManager.MaxGlobalLights is **128**, not64. BuildPointLightSnapshot keeps
qualifying registration order until overflow; only overflow sorts the global
list. SelectForCell then takes the first eight dynamics unconditionally and
uses any remaining slots for statics. Thus a below-128 snapshot with many
dynamics can select distant earlier registrations before nearby later ones.
This is a reachable path, NOT yet an observed cause of Town Network darkness.
Lead read named Render::insert_light0054D1B0 and add_dynamic_light0054D420,
then reran check_exe_pdb.py on the paired Turbine executable: MATCH,
GUID9e847e2f-777c-4bd9-886c-22256bb87f32/age1. PE-section mapping gives:
| VA / raw offset / bytes | SHA256 |
| --- | --- |
| 0054D1B0 / 0014D1B0 / 551 | B429FD860D9E55D9EB39BF177F50DEFCEABA1407C033609867972767D36698EA |
| 0054D420 / 0014D420 / 47 | 23607C447F5BBC78190964132055D169C7F46763559DB2B31E40FBA20F118B91 |
Native insert_light enters its distance-comparison loop whenever count>0,
before testing count against capacity at0054D26F. The x87 comparison/test
sequence includes D898D8000000/DFE0/F6C405/7B07; the insertion position is
therefore not deferred until overflow. add_dynamic_light loads the distinct
dynamic cap from0081EC98 and calls insert_light at0054D446
(E865FDFFFF →0054D1B0). Retail's ranking input in this routine is the supplied
frame origin with player/cell offset, before combining LIGHTINFO.offset;
do not casually equate it with the final light position in a future port.
Neither a nearest-eight-only patch nor a pool redesign is authorized here.
Wait for the actual consumed-light checkpoint; AP-16/AP-35/AP-85 remain open.