Rehost company dividend and bonus save lanes

This commit is contained in:
Jan Petykiewicz 2026-04-17 20:33:45 -07:00
commit 77377c67a0
4 changed files with 93 additions and 0 deletions

View file

@ -5048,8 +5048,11 @@ mod tests {
cached_share_price_raw_u32: 0x42200000,
chairman_salary_baseline: 24,
chairman_salary_current: 30,
chairman_bonus_year: 1832,
chairman_bonus_amount: 900,
founding_year: 1831,
last_bankruptcy_year: 0,
last_dividend_year: 1837,
current_issue_calendar_word: 5,
prior_issue_calendar_word: 4,
city_connection_latch: true,
@ -5088,8 +5091,11 @@ mod tests {
cached_share_price_raw_u32: 0x41f80000,
chairman_salary_baseline: 20,
chairman_salary_current: 22,
chairman_bonus_year: 0,
chairman_bonus_amount: 0,
founding_year: 1833,
last_bankruptcy_year: 0,
last_dividend_year: 0,
current_issue_calendar_word: 3,
prior_issue_calendar_word: 2,
city_connection_latch: false,
@ -6371,8 +6377,11 @@ mod tests {
cached_share_price_raw_u32: 0x42180000,
chairman_salary_baseline: 21,
chairman_salary_current: 24,
chairman_bonus_year: 1836,
chairman_bonus_amount: 600,
founding_year: 1834,
last_bankruptcy_year: 0,
last_dividend_year: 1838,
current_issue_calendar_word: 4,
prior_issue_calendar_word: 3,
city_connection_latch: false,

View file

@ -67,10 +67,16 @@ pub struct RuntimeCompanyMarketState {
#[serde(default)]
pub chairman_salary_current: u32,
#[serde(default)]
pub chairman_bonus_year: u32,
#[serde(default)]
pub chairman_bonus_amount: i32,
#[serde(default)]
pub founding_year: u32,
#[serde(default)]
pub last_bankruptcy_year: u32,
#[serde(default)]
pub last_dividend_year: u32,
#[serde(default)]
pub current_issue_calendar_word: u32,
#[serde(default)]
pub prior_issue_calendar_word: u32,

View file

@ -2333,8 +2333,11 @@ pub struct SmpSaveCompanyRecordAnalysisEntry {
pub cached_share_price_f32: f32,
pub chairman_salary_baseline: u32,
pub chairman_salary_current: u32,
pub chairman_bonus_year: u32,
pub chairman_bonus_amount: i32,
pub founding_year: u32,
pub last_bankruptcy_year: u32,
pub last_dividend_year: u32,
pub city_connection_latch: bool,
pub linked_transit_latch: bool,
pub merger_cooldown_year: u32,
@ -3013,6 +3016,14 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
&bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_CURRENT_OFFSET,
)?;
let chairman_bonus_year = read_u32_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_YEAR_OFFSET,
)?;
let chairman_bonus_amount = read_i32_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_AMOUNT_OFFSET,
)?;
let founding_year = read_u32_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET,
@ -3021,6 +3032,10 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
&bytes,
record_offset + SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET,
)?;
let last_dividend_year = read_u32_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET,
)?;
let city_connection_latch = read_u8_at(
&bytes,
record_offset + SAVE_COMPANY_RECORD_CITY_CONNECTION_LATCH_OFFSET,
@ -3063,8 +3078,11 @@ pub fn inspect_save_company_and_chairman_analysis_bytes(
cached_share_price_f32,
chairman_salary_baseline,
chairman_salary_current,
chairman_bonus_year,
chairman_bonus_amount,
founding_year,
last_bankruptcy_year,
last_dividend_year,
city_connection_latch,
linked_transit_latch,
merger_cooldown_year,
@ -3428,12 +3446,15 @@ const SAVE_COMPANY_RECORD_BOND_COUNT_OFFSET: usize = 0x5b;
const SAVE_COMPANY_RECORD_BOND_TABLE_OFFSET: usize = 0x5f;
const SAVE_COMPANY_RECORD_BOND_SLOT_STRIDE: usize = 12;
const SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_BASELINE_OFFSET: usize = 0x14f;
const SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_YEAR_OFFSET: usize = 0x34f;
const SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_AMOUNT_OFFSET: usize = 0x353;
const SAVE_COMPANY_RECORD_MERGER_COOLDOWN_OFFSET: usize = 0x15f;
const SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET: usize = 0x157;
const SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET: usize = 0x163;
const SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET: usize = 0x16b;
const SAVE_COMPANY_RECORD_PRIOR_ISSUE_CALENDAR_OFFSET: usize = 0x173;
const SAVE_COMPANY_RECORD_TAKEOVER_COOLDOWN_OFFSET: usize = 0x289;
const SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET: usize = 0x0d2d;
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;
@ -3551,6 +3572,14 @@ fn parse_save_company_roster_probe(
bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_CURRENT_OFFSET,
)?;
let chairman_bonus_year = read_u32_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_YEAR_OFFSET,
)?;
let chairman_bonus_amount = read_i32_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_AMOUNT_OFFSET,
)?;
let founding_year = read_u32_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET,
@ -3559,6 +3588,10 @@ fn parse_save_company_roster_probe(
bytes,
record_offset + SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET,
)?;
let last_dividend_year = read_u32_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET,
)?;
let current_issue_calendar_word = read_u32_at(
bytes,
record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET,
@ -3608,8 +3641,11 @@ fn parse_save_company_roster_probe(
cached_share_price_raw_u32,
chairman_salary_baseline,
chairman_salary_current,
chairman_bonus_year,
chairman_bonus_amount,
founding_year,
last_bankruptcy_year,
last_dividend_year,
current_issue_calendar_word,
prior_issue_calendar_word,
city_connection_latch,
@ -15709,8 +15745,11 @@ mod tests {
cached_share_price_raw_u32,
chairman_salary_baseline,
chairman_salary_current,
chairman_bonus_year,
chairman_bonus_amount,
founding_year,
last_bankruptcy_year,
last_dividend_year,
current_issue_calendar_word,
prior_issue_calendar_word,
city_connection_latch,
@ -15732,8 +15771,11 @@ mod tests {
0x426c0000u32,
24u32,
31u32,
1849u32,
1250i32,
1842u32,
1851u32,
1848u32,
7u32,
6u32,
true,
@ -15754,8 +15796,11 @@ mod tests {
0x42780000u32,
28u32,
36u32,
0u32,
0i32,
1845u32,
0u32,
1850u32,
3u32,
2u32,
false,
@ -15817,12 +15862,21 @@ mod tests {
bytes[record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_CURRENT_OFFSET
..record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_SALARY_CURRENT_OFFSET + 4]
.copy_from_slice(&chairman_salary_current.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_YEAR_OFFSET
..record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_YEAR_OFFSET + 4]
.copy_from_slice(&chairman_bonus_year.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_AMOUNT_OFFSET
..record_offset + SAVE_COMPANY_RECORD_CHAIRMAN_BONUS_AMOUNT_OFFSET + 4]
.copy_from_slice(&chairman_bonus_amount.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET
..record_offset + SAVE_COMPANY_RECORD_FOUNDING_YEAR_OFFSET + 4]
.copy_from_slice(&founding_year.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET
..record_offset + SAVE_COMPANY_RECORD_LAST_BANKRUPTCY_YEAR_OFFSET + 4]
.copy_from_slice(&last_bankruptcy_year.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET
..record_offset + SAVE_COMPANY_RECORD_LAST_DIVIDEND_YEAR_OFFSET + 4]
.copy_from_slice(&last_dividend_year.to_le_bytes());
bytes[record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET
..record_offset + SAVE_COMPANY_RECORD_CURRENT_ISSUE_CALENDAR_OFFSET + 4]
.copy_from_slice(&current_issue_calendar_word.to_le_bytes());
@ -15897,8 +15951,11 @@ mod tests {
assert_eq!(market_state.cached_share_price_raw_u32, 0x426c0000);
assert_eq!(market_state.chairman_salary_baseline, 24);
assert_eq!(market_state.chairman_salary_current, 31);
assert_eq!(market_state.chairman_bonus_year, 1849);
assert_eq!(market_state.chairman_bonus_amount, 1250);
assert_eq!(market_state.founding_year, 1842);
assert_eq!(market_state.last_bankruptcy_year, 1851);
assert_eq!(market_state.last_dividend_year, 1848);
assert_eq!(market_state.current_issue_calendar_word, 7);
assert_eq!(market_state.prior_issue_calendar_word, 6);
assert!(market_state.city_connection_latch);
@ -15912,6 +15969,9 @@ mod tests {
.market_state
.as_ref()
.expect("second company market state should load");
assert_eq!(second_market_state.chairman_bonus_year, 0);
assert_eq!(second_market_state.chairman_bonus_amount, 0);
assert_eq!(second_market_state.last_dividend_year, 1850);
assert_eq!(second_market_state.current_issue_calendar_word, 3);
assert_eq!(second_market_state.prior_issue_calendar_word, 2);
assert!(!second_market_state.city_connection_latch);

View file

@ -49,6 +49,9 @@ pub struct RuntimeSummary {
pub selected_company_outstanding_shares: Option<u32>,
pub selected_company_cached_share_price_value_f32_text: Option<String>,
pub selected_company_mutable_support_scalar_value_f32_text: Option<String>,
pub selected_company_last_dividend_year: Option<u32>,
pub selected_company_chairman_bonus_year: Option<u32>,
pub selected_company_chairman_bonus_amount: Option<i32>,
pub player_count: usize,
pub chairman_profile_count: usize,
pub active_chairman_profile_count: usize,
@ -246,6 +249,15 @@ impl RuntimeSummary {
.map(|market_state| {
raw_u32_to_f32_text(market_state.mutable_support_scalar_raw_u32)
}),
selected_company_last_dividend_year: selected_company_market_state
.map(|market_state| market_state.last_dividend_year)
.filter(|year| *year != 0),
selected_company_chairman_bonus_year: selected_company_market_state
.map(|market_state| market_state.chairman_bonus_year)
.filter(|year| *year != 0),
selected_company_chairman_bonus_amount: selected_company_market_state
.map(|market_state| market_state.chairman_bonus_amount)
.filter(|amount| *amount != 0),
player_count: state.players.len(),
chairman_profile_count: state.chairman_profiles.len(),
active_chairman_profile_count: state
@ -1869,8 +1881,11 @@ mod tests {
cached_share_price_raw_u32: 0x42200000,
chairman_salary_baseline: 24,
chairman_salary_current: 30,
chairman_bonus_year: 1842,
chairman_bonus_amount: 750,
founding_year: 1831,
last_bankruptcy_year: 0,
last_dividend_year: 1841,
current_issue_calendar_word: 5,
prior_issue_calendar_word: 4,
city_connection_latch: true,
@ -1892,5 +1907,8 @@ mod tests {
summary.selected_company_mutable_support_scalar_value_f32_text,
Some("1.000000".to_string())
);
assert_eq!(summary.selected_company_last_dividend_year, Some(1841));
assert_eq!(summary.selected_company_chairman_bonus_year, Some(1842));
assert_eq!(summary.selected_company_chairman_bonus_amount, Some(750));
}
}