diff --git a/README_breaking_changes.md b/README_breaking_changes.md index 91c93426..1c5406ce 100644 --- a/README_breaking_changes.md +++ b/README_breaking_changes.md @@ -1,3 +1,50 @@ +## v.1005 from 2026-08-10 + +- 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 - III, VC, SA enums refactor diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index c66eefd8..b2a52dca 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; + char _pad27; 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, _pad27, 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 { @@ -83,32 +75,32 @@ 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]; - 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,42 +112,41 @@ 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, 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); -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 +157,4 @@ VALIDATE_OFFSET(CAERadioTrackManager, field_36C, 0x36C); VALIDATE_OFFSET(CAERadioTrackManager, field_36D, 0x36D); VALIDATE_SIZE(CAERadioTrackManager, 0x370); -extern CAERadioTrackManager &AERadioTrackManager; - -VALIDATE_SIZE(CAERadioTrackManager, 0x370); +extern CAERadioTrackManager& AERadioTrackManager;