From e0114c1311b585543a6a38f3a6cc225f706a4e5b Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:36:16 +0530 Subject: [PATCH 1/8] Add fieldnames inplace of placeholders in CAEAudioTrackManager.h Radio modifications can make use of the fields - including one of mine. --- plugin_sa/game_sa/CAERadioTrackManager.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index c66eefd8c..088fa377c 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -83,12 +83,12 @@ VALIDATE_SIZE(tMusicTrackHistory, 0x14); class PLUGIN_API CAERadioTrackManager { public: - unsigned char field_0; - unsigned char field_1; - unsigned char field_2; - unsigned char field_3; - unsigned char field_4; - unsigned char field_5; + bool m_bInitialised; + bool m_bDisplayStationName; + char m_prev; + bool m_bEnabledInPauseMode; + bool m_bBassEnhance; + bool m_bPauseMode; bool m_bRetuneJustStarted; bool m_bRadioAutoSelect; char field_8[14]; @@ -130,12 +130,12 @@ class PLUGIN_API CAERadioTrackManager { // 11 structures static tMusicTrackHistory *m_nMusicTrackIndexHistory; }; -VALIDATE_OFFSET(CAERadioTrackManager, field_0, 0x0); -VALIDATE_OFFSET(CAERadioTrackManager, field_1, 0x1); -VALIDATE_OFFSET(CAERadioTrackManager, field_2, 0x2); -VALIDATE_OFFSET(CAERadioTrackManager, field_3, 0x3); -VALIDATE_OFFSET(CAERadioTrackManager, field_4, 0x4); -VALIDATE_OFFSET(CAERadioTrackManager, field_5, 0x5); +VALIDATE_OFFSET(CAERadioTrackManager, m_bInitialised, 0x0); +VALIDATE_OFFSET(CAERadioTrackManager, m_bDisplayStationName, 0x1); +VALIDATE_OFFSET(CAERadioTrackManager, m_prev, 0x2); +VALIDATE_OFFSET(CAERadioTrackManager, m_bEnabledInPauseMode, 0x3); +VALIDATE_OFFSET(CAERadioTrackManager, m_bBassEnhance, 0x4); +VALIDATE_OFFSET(CAERadioTrackManager, m_bPauseMode, 0x5); VALIDATE_OFFSET(CAERadioTrackManager, m_bRetuneJustStarted, 0x6); VALIDATE_OFFSET(CAERadioTrackManager, m_bRadioAutoSelect, 0x7); VALIDATE_OFFSET(CAERadioTrackManager, field_8, 0x8); From e74b19bced3671eb51570a52b295d30b1f6e1560 Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:14:42 +0530 Subject: [PATCH 2/8] Updated field names for the rest. --- plugin_sa/game_sa/CAERadioTrackManager.h | 158 +++++++++++------------ 1 file changed, 75 insertions(+), 83 deletions(-) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index 088fa377c..a0e784e88 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -10,69 +10,61 @@ #include "CAEVehicleAudioEntity.h" struct PLUGIN_API tRadioSettings { - int m_djIndex[4]; - int field_10; - int trackId; - int field_18; - int trackPlayTime; - int trackLength; - char field_24; - char m_nCurrentRadioStation; + int TrackQueue[5]; + int CurrTrackID; + int PrevTrackID; + int PlayTime; + int TrackLengthMs; + char TrackFlags; + eRadioID m_nCurrentRadioStation; char m_nBassSet; - char _pad; float m_fBassGain; - char currRadioBC_[4]; - char field_30; - char field_31; - char m_musicTrackIndices[10]; + char TrackTypes[5]; + char CurrTrackType; + char PrevTrackType; + char TrackIndices[5]; + char CurrTrackIdx; + char PrevTrackIdx; + char _pad[2]; }; -VALIDATE_OFFSET(tRadioSettings, m_djIndex, 0x0); -VALIDATE_OFFSET(tRadioSettings, field_10, 0x10); -VALIDATE_OFFSET(tRadioSettings, trackId, 0x14); -VALIDATE_OFFSET(tRadioSettings, field_18, 0x18); -VALIDATE_OFFSET(tRadioSettings, trackPlayTime, 0x1C); -VALIDATE_OFFSET(tRadioSettings, trackLength, 0x20); -VALIDATE_OFFSET(tRadioSettings, field_24, 0x24); + +VALIDATE_OFFSET(tRadioSettings, TrackQueue, 0x0); +VALIDATE_OFFSET(tRadioSettings, CurrTrackID, 0x14); +VALIDATE_OFFSET(tRadioSettings, PrevTrackID, 0x18); +VALIDATE_OFFSET(tRadioSettings, PlayTime, 0x1C); +VALIDATE_OFFSET(tRadioSettings, TrackLengthMs, 0x20); +VALIDATE_OFFSET(tRadioSettings, TrackFlags, 0x24); VALIDATE_OFFSET(tRadioSettings, m_nCurrentRadioStation, 0x25); VALIDATE_OFFSET(tRadioSettings, m_nBassSet, 0x26); -VALIDATE_OFFSET(tRadioSettings, _pad, 0x27); VALIDATE_OFFSET(tRadioSettings, m_fBassGain, 0x28); -VALIDATE_OFFSET(tRadioSettings, currRadioBC_, 0x2C); -VALIDATE_OFFSET(tRadioSettings, field_30, 0x30); -VALIDATE_OFFSET(tRadioSettings, field_31, 0x31); -VALIDATE_OFFSET(tRadioSettings, m_musicTrackIndices, 0x32); +VALIDATE_OFFSET(tRadioSettings, TrackTypes, 0x2C); +VALIDATE_OFFSET(tRadioSettings, CurrTrackType, 0x31); +VALIDATE_OFFSET(tRadioSettings, PrevTrackType, 0x32); +VALIDATE_OFFSET(tRadioSettings, TrackIndices, 0x33); +VALIDATE_OFFSET(tRadioSettings, CurrTrackIdx, 0x38); +VALIDATE_OFFSET(tRadioSettings, PrevTrackIdx, 0x39); +VALIDATE_OFFSET(tRadioSettings, _pad, 0x3A); VALIDATE_SIZE(tRadioSettings, 0x3C); struct PLUGIN_API tRadioStationData { - int field_0; - int field_4; - int field_8; - int m_nTimeRetuneStopped; - int lastPlayingTime; - int trackPlayTime; - int field_18; - int field_1C; - int field_20; - char field_24; - char field_25; - char field_26; - char lastGameClockDays; - int lastGameClockHours; + int m_aElapsed[3]; + int m_iTimeInPauseModeInMs; + int m_iTimeInMs; + int m_iTrackPlayTime; + int m_aTrackQueue[3]; + char m_aTrackTypes[3]; + char m_nGameClockDays; + int m_nGameClockHours; }; -VALIDATE_OFFSET(tRadioStationData, field_0, 0x0); -VALIDATE_OFFSET(tRadioStationData, field_4, 0x4); -VALIDATE_OFFSET(tRadioStationData, field_8, 0x8); -VALIDATE_OFFSET(tRadioStationData, m_nTimeRetuneStopped, 0xC); -VALIDATE_OFFSET(tRadioStationData, lastPlayingTime, 0x10); -VALIDATE_OFFSET(tRadioStationData, trackPlayTime, 0x14); -VALIDATE_OFFSET(tRadioStationData, field_18, 0x18); -VALIDATE_OFFSET(tRadioStationData, field_1C, 0x1C); -VALIDATE_OFFSET(tRadioStationData, field_20, 0x20); -VALIDATE_OFFSET(tRadioStationData, field_24, 0x24); -VALIDATE_OFFSET(tRadioStationData, field_25, 0x25); -VALIDATE_OFFSET(tRadioStationData, field_26, 0x26); -VALIDATE_OFFSET(tRadioStationData, lastGameClockDays, 0x27); -VALIDATE_OFFSET(tRadioStationData, lastGameClockHours, 0x28); + +VALIDATE_OFFSET(tRadioStationData, m_aElapsed, 0x0); +VALIDATE_OFFSET(tRadioStationData, m_iTimeInPauseModeInMs, 0xC); +VALIDATE_OFFSET(tRadioStationData, m_iTimeInMs, 0x10); +VALIDATE_OFFSET(tRadioStationData, m_iTrackPlayTime, 0x14); +VALIDATE_OFFSET(tRadioStationData, m_aTrackQueue, 0x18); +VALIDATE_OFFSET(tRadioStationData, m_aTrackTypes, 0x24); +VALIDATE_OFFSET(tRadioStationData, m_nGameClockDays, 0x27); +VALIDATE_OFFSET(tRadioStationData, m_nGameClockHours, 0x28); VALIDATE_SIZE(tRadioStationData, 0x2C); struct PLUGIN_API tMusicTrackHistory { @@ -91,24 +83,24 @@ class PLUGIN_API CAERadioTrackManager { bool m_bPauseMode; bool m_bRetuneJustStarted; bool m_bRadioAutoSelect; - char field_8[14]; - unsigned char m_nMonthDay; - unsigned char m_nClockHours; - int m_anPlayerStats[14]; + char m_nTracksInARow[14]; + unsigned char m_nSavedGameClockDays; + unsigned char m_nSavedGameClockHours; + int m_aListenTimes[14]; unsigned int m_nTimeRadioStationRetuned; unsigned int m_nTimeToDisplayRadioName; - int field_58; - int field_5C; + int m_nSavedTimeMs; + int m_nRetuneStartedTime; int field_60; - int field_64; - int field_68; + int m_HwClientHandle; + int m_nMode; int m_nStationsListed; int m_nStationsListDown; - unsigned long field_74; - unsigned long field_78; - unsigned long field_7C; - unsigned long field_80; - unsigned long field_84; + int m_nSavedRadioStationId; + int m_iRadioStationMenuRequest; + int m_iRadioStationScriptRequest; + float m_f80; + float m_f84; tRadioSettings m_TempSettings; tRadioSettings m_Settings; tRadioStationData m_RadioStationsData[13]; @@ -120,16 +112,16 @@ class PLUGIN_API CAERadioTrackManager { public: bool IsVehicleRadioActive(); - char *GetRadioStationName(signed char id); + char* GetRadioStationName(signed char id); void StartRadio(int stationId, float bass, int arg, char unused); void StopRadio(tVehicleAudioSettings* settings, char arg); static void Load(); static void Save(); - // 11 structures - static tMusicTrackHistory *m_nMusicTrackIndexHistory; + static tMusicTrackHistory* m_nMusicTrackIndexHistory; }; + VALIDATE_OFFSET(CAERadioTrackManager, m_bInitialised, 0x0); VALIDATE_OFFSET(CAERadioTrackManager, m_bDisplayStationName, 0x1); VALIDATE_OFFSET(CAERadioTrackManager, m_prev, 0x2); @@ -138,24 +130,24 @@ VALIDATE_OFFSET(CAERadioTrackManager, m_bBassEnhance, 0x4); VALIDATE_OFFSET(CAERadioTrackManager, m_bPauseMode, 0x5); VALIDATE_OFFSET(CAERadioTrackManager, m_bRetuneJustStarted, 0x6); VALIDATE_OFFSET(CAERadioTrackManager, m_bRadioAutoSelect, 0x7); -VALIDATE_OFFSET(CAERadioTrackManager, field_8, 0x8); -VALIDATE_OFFSET(CAERadioTrackManager, m_nMonthDay, 0x16); -VALIDATE_OFFSET(CAERadioTrackManager, m_nClockHours, 0x17); -VALIDATE_OFFSET(CAERadioTrackManager, m_anPlayerStats, 0x18); +VALIDATE_OFFSET(CAERadioTrackManager, m_nTracksInARow, 0x8); +VALIDATE_OFFSET(CAERadioTrackManager, m_nSavedGameClockDays, 0x16); +VALIDATE_OFFSET(CAERadioTrackManager, m_nSavedGameClockHours, 0x17); +VALIDATE_OFFSET(CAERadioTrackManager, m_aListenTimes, 0x18); VALIDATE_OFFSET(CAERadioTrackManager, m_nTimeRadioStationRetuned, 0x50); VALIDATE_OFFSET(CAERadioTrackManager, m_nTimeToDisplayRadioName, 0x54); -VALIDATE_OFFSET(CAERadioTrackManager, field_58, 0x58); -VALIDATE_OFFSET(CAERadioTrackManager, field_5C, 0x5C); +VALIDATE_OFFSET(CAERadioTrackManager, m_nSavedTimeMs, 0x58); +VALIDATE_OFFSET(CAERadioTrackManager, m_nRetuneStartedTime, 0x5C); VALIDATE_OFFSET(CAERadioTrackManager, field_60, 0x60); -VALIDATE_OFFSET(CAERadioTrackManager, field_64, 0x64); -VALIDATE_OFFSET(CAERadioTrackManager, field_68, 0x68); +VALIDATE_OFFSET(CAERadioTrackManager, m_HwClientHandle, 0x64); +VALIDATE_OFFSET(CAERadioTrackManager, m_nMode, 0x68); VALIDATE_OFFSET(CAERadioTrackManager, m_nStationsListed, 0x6C); VALIDATE_OFFSET(CAERadioTrackManager, m_nStationsListDown, 0x70); -VALIDATE_OFFSET(CAERadioTrackManager, field_74, 0x74); -VALIDATE_OFFSET(CAERadioTrackManager, field_78, 0x78); -VALIDATE_OFFSET(CAERadioTrackManager, field_7C, 0x7C); -VALIDATE_OFFSET(CAERadioTrackManager, field_80, 0x80); -VALIDATE_OFFSET(CAERadioTrackManager, field_84, 0x84); +VALIDATE_OFFSET(CAERadioTrackManager, m_nSavedRadioStationId, 0x74); +VALIDATE_OFFSET(CAERadioTrackManager, m_iRadioStationMenuRequest, 0x78); +VALIDATE_OFFSET(CAERadioTrackManager, m_iRadioStationScriptRequest, 0x7C); +VALIDATE_OFFSET(CAERadioTrackManager, m_f80, 0x80); +VALIDATE_OFFSET(CAERadioTrackManager, m_f84, 0x84); VALIDATE_OFFSET(CAERadioTrackManager, m_TempSettings, 0x88); VALIDATE_OFFSET(CAERadioTrackManager, m_Settings, 0xC4); VALIDATE_OFFSET(CAERadioTrackManager, m_RadioStationsData, 0x100); @@ -166,6 +158,6 @@ VALIDATE_OFFSET(CAERadioTrackManager, field_36C, 0x36C); VALIDATE_OFFSET(CAERadioTrackManager, field_36D, 0x36D); VALIDATE_SIZE(CAERadioTrackManager, 0x370); -extern CAERadioTrackManager &AERadioTrackManager; +extern CAERadioTrackManager& AERadioTrackManager; VALIDATE_SIZE(CAERadioTrackManager, 0x370); From 9da304d8ddeeeed49a00c63faa026124683f21ff Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:28:19 +0530 Subject: [PATCH 3/8] Remove duplicate validation --- plugin_sa/game_sa/CAERadioTrackManager.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index a0e784e88..fac25fd52 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -70,6 +70,7 @@ VALIDATE_SIZE(tRadioStationData, 0x2C); struct PLUGIN_API tMusicTrackHistory { char m_indices[20]; }; + VALIDATE_OFFSET(tMusicTrackHistory, m_indices, 0x0); VALIDATE_SIZE(tMusicTrackHistory, 0x14); @@ -159,5 +160,3 @@ VALIDATE_OFFSET(CAERadioTrackManager, field_36D, 0x36D); VALIDATE_SIZE(CAERadioTrackManager, 0x370); extern CAERadioTrackManager& AERadioTrackManager; - -VALIDATE_SIZE(CAERadioTrackManager, 0x370); From 55393f95907fb2154e7205fb4458edd32f99d592 Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:35:48 +0530 Subject: [PATCH 4/8] Add padding before float BassGain --- plugin_sa/game_sa/CAERadioTrackManager.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index fac25fd52..81ebb3b1c 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -18,6 +18,7 @@ struct PLUGIN_API tRadioSettings { char TrackFlags; eRadioID m_nCurrentRadioStation; char m_nBassSet; + char _pad27; float m_fBassGain; char TrackTypes[5]; char CurrTrackType; @@ -36,6 +37,7 @@ VALIDATE_OFFSET(tRadioSettings, TrackLengthMs, 0x20); VALIDATE_OFFSET(tRadioSettings, TrackFlags, 0x24); VALIDATE_OFFSET(tRadioSettings, m_nCurrentRadioStation, 0x25); VALIDATE_OFFSET(tRadioSettings, m_nBassSet, 0x26); +VALIDATE_OFFSET(tRadioSettings, _pad27, 0x27); VALIDATE_OFFSET(tRadioSettings, m_fBassGain, 0x28); VALIDATE_OFFSET(tRadioSettings, TrackTypes, 0x2C); VALIDATE_OFFSET(tRadioSettings, CurrTrackType, 0x31); From 72b6da35971ca4ab1aa1a2eb96ef9df25f1968b3 Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:40:45 +0530 Subject: [PATCH 5/8] Removed newline between VALIDATE_OFFSET and struct. --- plugin_sa/game_sa/CAERadioTrackManager.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index 81ebb3b1c..46a338f42 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -28,7 +28,6 @@ struct PLUGIN_API tRadioSettings { char PrevTrackIdx; char _pad[2]; }; - VALIDATE_OFFSET(tRadioSettings, TrackQueue, 0x0); VALIDATE_OFFSET(tRadioSettings, CurrTrackID, 0x14); VALIDATE_OFFSET(tRadioSettings, PrevTrackID, 0x18); @@ -124,7 +123,6 @@ class PLUGIN_API CAERadioTrackManager { static tMusicTrackHistory* m_nMusicTrackIndexHistory; }; - VALIDATE_OFFSET(CAERadioTrackManager, m_bInitialised, 0x0); VALIDATE_OFFSET(CAERadioTrackManager, m_bDisplayStationName, 0x1); VALIDATE_OFFSET(CAERadioTrackManager, m_prev, 0x2); From e6cc92a21890f880d4b5f8d03f9f262a83bdeaf6 Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 17:42:35 +0530 Subject: [PATCH 6/8] Removed more newlines between VALIDATE_OFFSET and structure. --- plugin_sa/game_sa/CAERadioTrackManager.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index 46a338f42..b2a52dcae 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -57,7 +57,6 @@ struct PLUGIN_API tRadioStationData { char m_nGameClockDays; int m_nGameClockHours; }; - VALIDATE_OFFSET(tRadioStationData, m_aElapsed, 0x0); VALIDATE_OFFSET(tRadioStationData, m_iTimeInPauseModeInMs, 0xC); VALIDATE_OFFSET(tRadioStationData, m_iTimeInMs, 0x10); @@ -71,7 +70,6 @@ VALIDATE_SIZE(tRadioStationData, 0x2C); struct PLUGIN_API tMusicTrackHistory { char m_indices[20]; }; - VALIDATE_OFFSET(tMusicTrackHistory, m_indices, 0x0); VALIDATE_SIZE(tMusicTrackHistory, 0x14); From db69aef2fdb54f65461f5fe7a45a1e860fe7230d Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 18:43:00 +0530 Subject: [PATCH 7/8] Updated breaking changes. --- README_breaking_changes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README_breaking_changes.md b/README_breaking_changes.md index 91c93426f..755c407fa 100644 --- a/README_breaking_changes.md +++ b/README_breaking_changes.md @@ -1,3 +1,8 @@ +## v.1005 from 2026-08-10 + +- CAERadioTrackManager refector + - Updated field names and offset validation of CAERadioTrackManager class and structs based on reversed classes. + ## v.1004 from 2026-04-18 - III, VC, SA enums refactor From 403e8a100ce1f93a3450ec1e45f195f929345ffb Mon Sep 17 00:00:00 2001 From: Abu Murugesan <45307264+abumsd7@users.noreply.github.com> Date: Sun, 9 Aug 2026 21:46:21 +0530 Subject: [PATCH 8/8] Added more details --- README_breaking_changes.md | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/README_breaking_changes.md b/README_breaking_changes.md index 755c407fa..1c5406ce2 100644 --- a/README_breaking_changes.md +++ b/README_breaking_changes.md @@ -2,6 +2,48 @@ - CAERadioTrackManager refector - Updated field names and offset validation of CAERadioTrackManager class and structs based on reversed classes. +* **Structure: `tRadioSettings`** + * `m_djIndex[4]` & `field_10` replaced with `TrackQueue[5]` + * `trackId` renamed to `CurrTrackID` + * `field_18` renamed to `PrevTrackID` + * `trackPlayTime` renamed to `PlayTime` + * `trackLength` renamed to `TrackLengthMs` + * `field_24` renamed to `TrackFlags` + * `_pad` renamed to `_pad27` + * `currRadioBC_[4]` & `field_30` replaced with `TrackTypes[5]` + * `field_31` renamed to `CurrTrackType` + * `m_musicTrackIndices[10]` replaced with `PrevTrackType`, `TrackIndices[5]`, `CurrTrackIdx`, `PrevTrackIdx`, and `_pad[2]` + +* **Structure: `tRadioStationData`** + * `field_0`, `field_4`, `field_8` replaced with `m_aElapsed[3]` + * `m_nTimeRetuneStopped` renamed to `m_iTimeInPauseModeInMs` + * `lastPlayingTime` renamed to `m_iTimeInMs` + * `trackPlayTime` renamed to `m_iTrackPlayTime` + * `field_18`, `field_1C`, `field_20` replaced with `m_aTrackQueue[3]` + * `field_24`, `field_25`, `field_26` replaced with `m_aTrackTypes[3]` + * `lastGameClockDays` renamed to `m_nGameClockDays` + * `lastGameClockHours` renamed to `m_nGameClockHours` + +* **Structure: `CAERadioTrackManager`** + * `field_0` replaced with `m_bInitialised` + * `field_1` replaced with `m_bDisplayStationName` + * `field_2` replaced with `m_prev` + * `field_3` replaced with `m_bEnabledInPauseMode` + * `field_4` replaced with `m_bBassEnhance` + * `field_5` replaced with `m_bPauseMode` + * `field_8[14]` renamed to `m_nTracksInARow[14]` + * `m_nMonthDay` renamed to `m_nSavedGameClockDays` + * `m_nClockHours` renamed to `m_nSavedGameClockHours` + * `m_anPlayerStats[14]` renamed to `m_aListenTimes[14]` + * `field_58` renamed to `m_nSavedTimeMs` + * `field_5C` renamed to `m_nRetuneStartedTime` + * `field_64` renamed to `m_HwClientHandle` + * `field_68` renamed to `m_nMode` + * `field_74` replaced with `m_nSavedRadioStationId` + * `field_78` replaced with `m_iRadioStationMenuRequest` + * `field_7C` replaced with `m_iRadioStationScriptRequest` + * `field_80` replaced with `m_f80` + * `field_84` replaced with `m_f84` ## v.1004 from 2026-04-18