From e62962f337270815cd3936654b1419a3c4e0b4a6 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sun, 19 Apr 2026 02:43:50 -0700 Subject: [PATCH] Ground event retagger trigger materializations --- crates/rrt-runtime/src/smp.rs | 11 +++++++++++ docs/rehost-queue.md | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/crates/rrt-runtime/src/smp.rs b/crates/rrt-runtime/src/smp.rs index b47fe44..31cc25b 100644 --- a/crates/rrt-runtime/src/smp.rs +++ b/crates/rrt-runtime/src/smp.rs @@ -9535,6 +9535,9 @@ fn parse_event_runtime_collection_summary_with_tag_width( control_lane_notes.push( "the post-load name-driven retagger is narrower than a bulk trigger-kind materializer too: direct disassembly of 0x00442c30 (called from 0x00443a50 at 0x00444b50) shows a hardcoded scenario-name patch table over already-live records in 0x0062be18/0x0062bae0, and the checked cases mostly tweak modifier bytes [event+0x7f9/+0x7fa] or nested payload scalars on records that already carry concrete kinds such as 7 ('Open Aus', 'The American'), 6 ('Test connections'), 5 ('Win - Gold'), and 1 ('Win - Silver' / 'Win - Bronze')".to_string(), ); + control_lane_notes.push( + "direct disassembly now boxes in the explicit trigger-kind materializations inside that same retagger too: the 'SP - GOLD' branch at 0x00443526 rewrites [event+0x7ef] from 1 to 5 on live runtime-event id 1 when the scenario flag [world+0x66de] is set and payload-root kind 7 carries subtype byte 5, while the 'Labor' branch at 0x00443601 rewrites [event+0x7ef] from 0 to 2 on live runtime-event id 0x0d when the same scenario flag is set and the checked 0x3c -> 0x3d child payload pair carries the matching negative scalar sentinel".to_string(), + ); } if records_with_trigger_kind != 0 { control_lane_notes.push(format!( @@ -22386,6 +22389,14 @@ mod tests { && line.contains("Win - Gold") && line.contains("Win - Silver") })); + assert!(summary.control_lane_notes.iter().any(|line| { + line.contains("SP - GOLD") + && line.contains("0x00443526") + && line.contains("1 to 5") + && line.contains("Labor") + && line.contains("0x00443601") + && line.contains("0 to 2") + })); assert!(summary.control_lane_notes.iter().any(|line| { line.contains("0x00431b20 dispatch-strip opcodes present in decoded grouped rows = [4]") })); diff --git a/docs/rehost-queue.md b/docs/rehost-queue.md index 3168baf..d395f00 100644 --- a/docs/rehost-queue.md +++ b/docs/rehost-queue.md @@ -297,6 +297,12 @@ Working rule: remaining trigger-kind frontier is no longer “maybe the name sweep bulk-materializes null kinds”; it is the smaller set of scenario-specific records where that sweep explicitly writes `[event+0x7ef]` itself or a still-later owner does. + - two explicit trigger-kind materializations are now grounded inside that retagger: + the `SP - GOLD` branch at `0x00443526` rewrites `[event+0x7ef]` from `1 -> 5` on live + runtime-event id `1` when `[world+0x66de]` is set and the checked root payload is kind `7` + with subtype byte `5`, while the `Labor` branch at `0x00443601` rewrites `[event+0x7ef]` + from `0 -> 2` on live runtime-event id `0x0d` when the same scenario flag is set and the + checked `0x3c -> 0x3d` child payload pair carries the matching negative scalar sentinel. - cross-map probing now gives a better static-analysis lead too: `British Isles.gmp` shows no current `0x00431b20` dispatch-strip rows, `Germany.gmp` stays on `Game Variable 1` plus `Company Variable 3..4`, while `Texas Tea.gmp` adds `Economic Status`