Document the weapon-fire/pick-range investigation, paused per user

Records tonight's finding before stopping this thread: the user correctly
pushed back on an oversimplification (the renderer isn't a purely passive
wire tap -- the protocol has a real synchronous pick-query shape, sect_pixel/
sect_vector, where the board runs its own Moller-Trumbore ray-triangle test
and replies with range+identity). Checked directly against the REAL firmware
(not just the reference software renderer's notes):

- sect_pixel/sect_vector never appear in this capture -- unused by this build.
- Action 0x23 (the notes' fire/pick candidate) gets no reply from the real
  firmware either (checked via the h_reply hook, which fires on ANY
  firmware-issued reply) -- but its payload doesn't match the documented
  FLYK format at all (no screen coords; a counter-tagged discharge-event
  shape instead), and its wire context (list_remove + zone-color + a
  PSFX-shaped 0x1d) reads as a weapon-discharge notification with visual
  consequences, not a pick query.

Net: open question, not resolved. BT4.10/MUNGA's real pick/range mechanism
(if board-side at all) is not yet identified. Paused per the user rather
than continue an open-ended search without a specific pointer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-21 15:58:48 -05:00
co-authored by Claude Opus 4.8
parent 0cc7713865
commit 84ea322a18
+41 -2
View File
@@ -247,7 +247,7 @@ No wire-level investigation done yet. BT411's `gauges-hud.md` /
draw pass? a different coordinate space/orthographic projection? a distinct
wire action type?) before searching the firmware blind.
### 6d. Weapon-fire rendering — not observed, cause NOT YET INVESTIGATED
### 6d. Weapon-fire rendering / board-side pick-range mechanism — PARTIALLY INVESTIGATED, PAUSED
Per BT411 `rendering.md` §"Weapon beams": beams are ordinary TUBE geometry
(`ermlaser.bgf`), muzzle-anchored every frame — i.e. on the wire this should
look like ordinary create/list_add/draw_scene traffic for a thin, elongated
@@ -255,7 +255,46 @@ object, NOT a special ray-trace primitive. Per `combat-damage.md`, the
original game's fire/target-lock mechanism is fully reconstructed and working
in BT411's port, so a live session showing no fire is more likely an input/
session-state gap (RIO fire button not reaching this DOSBox session) than a
missing render path — check that before assuming a rendering gap.
missing render path.
**User's counter-point (2026-07-21), correcting an oversimplification above:**
the renderer is NOT a purely passive tap in the strict protocol sense — there
IS a real query/response shape in the wire protocol (VELOCIRENDER_PROTOCOL.md
`vr_sect_pixel`(4)/`vr_sect_vector`(5): synchronous, blocking, the board runs a
REAL MöllerTrumbore ray-triangle test over its own live scene and replies
with an instance handle — "the exact range to the pixel in the center of the
target and what that pixel is a part of"). Whether the SHIPPED BT4.10/MUNGA
build actually uses this path (vs. computing it host-side, as BT411's own
`HudSimulation`/pick-ray reconstruction does) was the open question.
**Investigated, using this pipeline's unique capability (running the REAL
firmware, not a reimplementation):**
- `sect_pixel`(4)/`sect_vector`(5) never appear on this capture's wire at all
(0 occurrences) — this build doesn't use the 1994-enum pick-query actions.
- Action `0x23` (the notes' "fire/pick" candidate) DOES appear (23 times), and
checked directly against the real firmware's OWN reply mechanism (`h_reply`
hook, which fires on ANY firmware-issued reply regardless of action): NO
reply follows `0x23` in this build either — consistent with the old
fire-and-forget finding, now confirmed against the actual firmware code
rather than just the software reimplementation.
- BUT the `0x23` payload itself does NOT match the documented FLYK format
(`[u:f][v:f][host ptr][-1]`, screen coords) — this build's payload is
`[1][incrementing event ID | 0x30000000][0]`, no screen coordinates. Wire
context around it (`0x23`×2 → `list_remove`×2 → `0x1b`×2 → a 264-byte
`0x1d`, matching the documented PSFX/particle-burst branch ≥160B) reads
like a WEAPON-DISCHARGE NOTIFICATION with visual consequences (a projectile
resolving + effect spawn), NOT a board-side "what's under the crosshair"
query. So `0x23` in BT4.10/MUNGA is very likely NOT the same mechanism the
1994-era FLYK notes describe under the same action number.
**Net conclusion: open.** Either this build's real pick/range mechanism lives
under a still-unidentified action, or BT4.10/MUNGA moved this computation
entirely host-side (matching BT411's own architecture) and `0x23` (whatever
it really is) is unrelated to targeting. Paused here per the user
(2026-07-21) rather than open a broader search without a specific pointer —
resume by identifying what wire traffic accompanies a KNOWN weapon fire in a
fresh, targeted capture (fire once, deliberately, with minimal other action
noise) rather than mining an existing capture for a guessed action number.
### 6e. Cockpit cage — intermittent, NOT YET CROSS-CHECKED
See `emulator/render-bridge/COCKPIT-CAGE-NOTES.md` (the OTHER renderer's