Rehost save-world governance issue byte strip

This commit is contained in:
Jan Petykiewicz 2026-04-17 22:14:08 -07:00
commit d99b7eb5c0
9 changed files with 242 additions and 15 deletions

View file

@ -1538,6 +1538,14 @@ pub struct SmpSaveWorldIssue37Probe {
pub payload_offset: usize,
pub payload_len: usize,
pub payload_len_hex: String,
pub issue_37_raw_u8: u8,
pub issue_37_raw_hex: String,
pub issue_38_raw_u8: u8,
pub issue_38_raw_hex: String,
pub issue_39_raw_u8: u8,
pub issue_39_raw_hex: String,
pub issue_3a_raw_u8: u8,
pub issue_3a_raw_hex: String,
pub issue_value_lane: SmpSaveDwordCandidate,
pub multiplier_lane: SmpSaveDwordCandidate,
pub evidence: Vec<String>,
@ -2203,6 +2211,12 @@ pub struct SmpLoadedWorldIssue37State {
pub semantic_family: String,
pub issue_value: u32,
pub issue_value_hex: String,
pub issue_38_value: u32,
pub issue_38_value_hex: String,
pub issue_39_value: u32,
pub issue_39_value_hex: String,
pub issue_3a_value: u32,
pub issue_3a_value_hex: String,
pub multiplier_raw_u32: u32,
pub multiplier_raw_hex: String,
pub multiplier_value_f32_text: String,
@ -3414,6 +3428,12 @@ fn derive_loaded_world_issue_37_state_from_probe(
semantic_family: probe.semantic_family.clone(),
issue_value: probe.issue_value_lane.raw_u32,
issue_value_hex: probe.issue_value_lane.raw_u32_hex.clone(),
issue_38_value: u32::from(probe.issue_38_raw_u8),
issue_38_value_hex: probe.issue_38_raw_hex.clone(),
issue_39_value: u32::from(probe.issue_39_raw_u8),
issue_39_value_hex: probe.issue_39_raw_hex.clone(),
issue_3a_value: u32::from(probe.issue_3a_raw_u8),
issue_3a_value_hex: probe.issue_3a_raw_hex.clone(),
multiplier_raw_u32: probe.multiplier_lane.raw_u32,
multiplier_raw_hex: probe.multiplier_lane.raw_u32_hex.clone(),
multiplier_value_f32_text: format!("{:.6}", probe.multiplier_lane.value_f32),
@ -8798,6 +8818,22 @@ fn parse_save_world_issue_37_probe(
"issue_0x37_value",
RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET,
)?;
let issue_37_raw_u8 = read_u8_at(
bytes,
payload_offset + RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET,
)?;
let issue_38_raw_u8 = read_u8_at(
bytes,
payload_offset + RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET + 1,
)?;
let issue_39_raw_u8 = read_u8_at(
bytes,
payload_offset + RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET + 2,
)?;
let issue_3a_raw_u8 = read_u8_at(
bytes,
payload_offset + RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET + 3,
)?;
let multiplier_lane = build_save_dword_candidate(
bytes,
payload_offset,
@ -8812,6 +8848,14 @@ fn parse_save_world_issue_37_probe(
payload_offset,
payload_len: RT3_SAVE_WORLD_BLOCK_LEN,
payload_len_hex: format!("0x{:x}", RT3_SAVE_WORLD_BLOCK_LEN),
issue_37_raw_u8,
issue_37_raw_hex: format!("0x{issue_37_raw_u8:02x}"),
issue_38_raw_u8,
issue_38_raw_hex: format!("0x{issue_38_raw_u8:02x}"),
issue_39_raw_u8,
issue_39_raw_hex: format!("0x{issue_39_raw_u8:02x}"),
issue_3a_raw_u8,
issue_3a_raw_hex: format!("0x{issue_3a_raw_u8:02x}"),
issue_value_lane,
multiplier_lane,
evidence: vec![
@ -8829,6 +8873,15 @@ fn parse_save_world_issue_37_probe(
"multiplier lane uses payload +0x{:x} ([world+0x29]); atlas notes tie 0x004339b0 to one companion scalar at that lane before company share-price refresh",
RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_MULTIPLIER_RELATIVE_OFFSET
),
format!(
"the adjacent byte strip at payload +0x{:x}..+0x{:x} carries raw issue slots 0x37..0x3a as {:02x} {:02x} {:02x} {:02x}",
RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET,
RT3_SAVE_WORLD_BLOCK_ISSUE_0X37_VALUE_RELATIVE_OFFSET + 3,
issue_37_raw_u8,
issue_38_raw_u8,
issue_39_raw_u8,
issue_3a_raw_u8
),
],
});
}
@ -15638,6 +15691,14 @@ mod tests {
assert_eq!(probe.payload_offset, payload_offset);
assert_eq!(probe.issue_value_lane.relative_offset_hex, "0x29");
assert_eq!(probe.issue_value_lane.value_i32, 3);
assert_eq!(probe.issue_37_raw_u8, 3);
assert_eq!(probe.issue_37_raw_hex, "0x03");
assert_eq!(probe.issue_38_raw_u8, 0);
assert_eq!(probe.issue_38_raw_hex, "0x00");
assert_eq!(probe.issue_39_raw_u8, 0);
assert_eq!(probe.issue_39_raw_hex, "0x00");
assert_eq!(probe.issue_3a_raw_u8, 0);
assert_eq!(probe.issue_3a_raw_hex, "0x00");
assert_eq!(probe.multiplier_lane.relative_offset_hex, "0x25");
assert!((probe.multiplier_lane.value_f32 - 0.06).abs() < f32::EPSILON);
}
@ -15765,6 +15826,14 @@ mod tests {
payload_offset: 0x3d2,
payload_len: RT3_SAVE_WORLD_BLOCK_LEN,
payload_len_hex: format!("0x{:x}", RT3_SAVE_WORLD_BLOCK_LEN),
issue_37_raw_u8: 3,
issue_37_raw_hex: "0x03".to_string(),
issue_38_raw_u8: 1,
issue_38_raw_hex: "0x01".to_string(),
issue_39_raw_u8: 2,
issue_39_raw_hex: "0x02".to_string(),
issue_3a_raw_u8: 4,
issue_3a_raw_hex: "0x04".to_string(),
issue_value_lane: SmpSaveDwordCandidate {
label: "issue_0x37_value".to_string(),
relative_offset: 0x29,
@ -15895,6 +15964,9 @@ mod tests {
.world_issue_37_state
.expect("world issue-0x37 state should load");
assert_eq!(issue_37_state.issue_value, 3);
assert_eq!(issue_37_state.issue_38_value, 1);
assert_eq!(issue_37_state.issue_39_value, 2);
assert_eq!(issue_37_state.issue_3a_value, 4);
assert_eq!(issue_37_state.multiplier_raw_hex, "0x3d75c28f");
assert_eq!(issue_37_state.multiplier_value_f32_text, "0.060000");
let tuning_state = slice