docs: S4 packet — particles take the retail DrawMesh branch table; #459 names the unconsumed-attribute candidates

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 17:14:57 +02:00
parent 17315f0e7d
commit 6435655d73
2 changed files with 11 additions and 5 deletions

View file

@ -132,10 +132,16 @@ seal/punch color-state row from S4-c1 kept or retired per its decision.
`DrawBlock` call AFTER `DrawSortCell` returns, so chunk 2 adds one leaf
method at the sort-cell EXIT (a `WalkFrameEventKind` of its own, ordered
after the cell's object turn) — not a print-site change.
- Where does the particle submitter's list membership come from — the
particle draw is retail's own `AddMeshToAlphaList` consumer (billboards go
to ALPHA), or is it drawn through the emitter's cell turn immediately?
Check `ParticleRenderer.cs`'s submit site against the spec's §4 table.
- PARTLY SETTLED (2026-09-03): `ParticleRenderer` submits every deferred
particle draw (billboard and mesh kinds alike) to the single queue with a
viewer distance (`queue.Submit(_alphaSource, token, sqrt(DistanceSq))`).
In retail a particle is a `DrawMesh` like any other subset, so its list is
decided by the §4 branch table on the emitter's subset mask and material
(rows 3/4 → ALPHA under the default `0x0E` delay mask; row 1 immediate
while `m_currentlyDrawingSky` is set — the weather emitters). Chunk 2
routes particles through the same branch table, not a particle-specific
rule; the parts capture (`*.parts.log`, `PD`/`DM` lines) is the oracle for
which emitters ever appear as immediate draws.
- SETTLED (2026-09-03): the `alphadepth` captures' `AM` lines carry the list
selector (`AM mesh=… surf=… csurf=… new=… clip=… listSel=…``listSel`
is the list, `new` the first-for-list flag, `clip` the clip-map duplicate,