Expose company periodic side-latch trio

This commit is contained in:
Jan Petykiewicz 2026-04-18 07:13:49 -07:00
commit 05e5ade1d8
6 changed files with 49 additions and 2 deletions

View file

@ -5300,6 +5300,7 @@ mod tests {
management_attitude: 58,
takeover_cooldown_year: Some(1839),
merger_cooldown_year: Some(1838),
preferred_locomotive_engine_type_raw_u8: Some(2),
market_state: Some(crate::RuntimeCompanyMarketState {
outstanding_shares: 20_000,
bond_count: 2,
@ -5359,6 +5360,7 @@ mod tests {
management_attitude: 31,
takeover_cooldown_year: None,
merger_cooldown_year: None,
preferred_locomotive_engine_type_raw_u8: Some(0),
market_state: Some(crate::RuntimeCompanyMarketState {
outstanding_shares: 18_000,
bond_count: 1,

View file

@ -2352,6 +2352,8 @@ pub struct SmpLoadedCompanyRosterEntry {
#[serde(default)]
pub merger_cooldown_year: Option<u32>,
#[serde(default)]
pub preferred_locomotive_engine_type_raw_u8: Option<u8>,
#[serde(default)]
pub market_state: Option<RuntimeCompanyMarketState>,
}
@ -2465,6 +2467,8 @@ pub struct SmpSaveCompanyRecordAnalysisEntry {
pub founding_year: u32,
pub last_bankruptcy_year: u32,
pub last_dividend_year: u32,
pub preferred_locomotive_engine_type_raw_u8: u8,
pub preferred_locomotive_engine_type_raw_hex: String,
pub city_connection_latch: bool,
pub linked_transit_latch: bool,
pub merger_cooldown_year: u32,
@ -3183,6 +3187,10 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
&bytes,
record_offset + SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET,
)?;
let preferred_locomotive_engine_type_raw_u8 = read_u8_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_PREFERRED_LOCOMOTIVE_ENGINE_TYPE_OFFSET,
)?;
let city_connection_latch = read_u8_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET,
@ -3254,6 +3262,10 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
founding_year,
last_bankruptcy_year,
last_dividend_year,
preferred_locomotive_engine_type_raw_u8,
preferred_locomotive_engine_type_raw_hex: format!(
"0x{preferred_locomotive_engine_type_raw_u8:02x}"
),
city_connection_latch,
linked_transit_latch,
merger_cooldown_year,
@ -3724,6 +3736,7 @@ const SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET: usize = 0x173;
const SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2: usize = 0x177;
const SAVE_COMPANY_RECORD_TAKEOVER_COOLDOWN_OFFSET: usize = 0x289;
const SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET: usize = 0x0d2d;
const SAVE_COMPANY_RECORD_PREFERRED_LOCOMOTIVE_ENGINE_TYPE_OFFSET: usize = 0x0d17;
const SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET: usize = 0x0d18;
const SAVE_COMPANY_RECORD_SUPPORT_PROGRESS_OFFSET: usize = 0x0d07;
const SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_CURRENT_OFFSET: usize = 0x0d59;
@ -3920,6 +3933,10 @@ fn parse_save_company_roster_probe(
bytes,
record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2,
)?;
let preferred_locomotive_engine_type_raw_u8 = read_u8_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_PREFERRED_LOCOMOTIVE_ENGINE_TYPE_OFFSET,
)?;
let city_connection_latch = read_u8_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET,
@ -4007,6 +4024,7 @@ fn parse_save_company_roster_probe(
management_attitude: 0,
takeover_cooldown_year,
merger_cooldown_year,
preferred_locomotive_engine_type_raw_u8: Some(preferred_locomotive_engine_type_raw_u8),
market_state: Some(RuntimeCompanyMarketState {
outstanding_shares,
bond_count,
@ -16534,6 +16552,7 @@ mod tests {
current_issue_calendar_word_2,
prior_issue_calendar_word,
prior_issue_calendar_word_2,
preferred_locomotive_engine_type_raw_u8,
city_connection_latch,
linked_transit_latch,
),
@ -16562,6 +16581,7 @@ mod tests {
8u32,
6u32,
7u32,
2u8,
true,
false,
),
@ -16589,6 +16609,7 @@ mod tests {
4u32,
2u32,
3u32,
1u8,
false,
true,
),
@ -16683,6 +16704,8 @@ mod tests {
bytes[record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2
..record_offset + SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET_2 + 4]
.copy_from_slice(&prior_issue_calendar_word_2.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_PREFERRED_LOCOMOTIVE_ENGINE_TYPE_OFFSET] =
preferred_locomotive_engine_type_raw_u8;
bytes[record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET] =
u8::from(city_connection_latch);
bytes[record_offset + SAVE_COMPANY_RECORD_LINKED_TRANSIT_LATCH_OFFSET] =
@ -16781,6 +16804,10 @@ mod tests {
assert_eq!(market_state.current_issue_calendar_word_2, 8);
assert_eq!(market_state.prior_issue_calendar_word, 6);
assert_eq!(market_state.prior_issue_calendar_word_2, 7);
assert_eq!(
roster.entries[0].preferred_locomotive_engine_type_raw_u8,
Some(2)
);
assert!(market_state.city_connection_latch);
assert!(!market_state.linked_transit_latch);
assert_eq!(
@ -16828,6 +16855,10 @@ mod tests {
assert_eq!(second_market_state.current_issue_calendar_word_2, 4);
assert_eq!(second_market_state.prior_issue_calendar_word, 2);
assert_eq!(second_market_state.prior_issue_calendar_word_2, 3);
assert_eq!(
roster.entries[1].preferred_locomotive_engine_type_raw_u8,
Some(1)
);
assert!(!second_market_state.city_connection_latch);
assert!(second_market_state.linked_transit_latch);
}