diff --git a/plugin_sa/game_sa/AudioTypes.h b/plugin_sa/game_sa/AudioTypes.h new file mode 100644 index 00000000..67204882 --- /dev/null +++ b/plugin_sa/game_sa/AudioTypes.h @@ -0,0 +1,38 @@ +/* + Plugin-SDK (Grand Theft Auto San Andreas) header file + Authors: GTA Community. See more here + https://github.com/DK22Pac/plugin-sdk + Do not delete this comment block. Respect others' work! +*/ +#pragma once +#include "PluginBase.h" + +struct tBeat { + UInt32 time; + UInt32 key; +}; +VALIDATE_OFFSET(tBeat, time, 0x0); +VALIDATE_OFFSET(tBeat, key, 0x4); +VALIDATE_SIZE(tBeat, 0x8); + +struct tBeatInfo { + tBeat beatWindow[20]; + Int32 isBeatInfoPresent; + Int32 beatTypeThisFrame; + Int32 beatNumber; +}; +VALIDATE_OFFSET(tBeatInfo, beatWindow, 0x0); +VALIDATE_OFFSET(tBeatInfo, isBeatInfoPresent, 0xA0); +VALIDATE_OFFSET(tBeatInfo, beatTypeThisFrame, 0xA4); +VALIDATE_OFFSET(tBeatInfo, beatNumber, 0xA8); +VALIDATE_SIZE(tBeatInfo, 0xAC); + +struct tTrackInfo { + tBeat beats[1000]; + UInt32 field_1F40[16]; + UInt16 field_1F80; +}; +VALIDATE_OFFSET(tTrackInfo, beats, 0x0); +VALIDATE_OFFSET(tTrackInfo, field_1F40, 0x1F40); +VALIDATE_OFFSET(tTrackInfo, field_1F80, 0x1F80); +VALIDATE_SIZE(tTrackInfo, 0x1F84); diff --git a/plugin_sa/game_sa/CAEAudioHardware.h b/plugin_sa/game_sa/CAEAudioHardware.h index 50c90b71..a603d5cc 100644 --- a/plugin_sa/game_sa/CAEAudioHardware.h +++ b/plugin_sa/game_sa/CAEAudioHardware.h @@ -13,11 +13,11 @@ class PLUGIN_API CAEAudioHardware { public: - unsigned char field_0; - char m_bDisableEffectsLoading; - char field_2; - char field_3; - char field_4; + bool m_bInitialised; + bool m_bDisableEffectsLoading; + bool m_bPrevMaxSecondarySlowFadeout; + bool m_bPrevMaxGlobalSlowFadeout; + bool m_bHardwareMixAvailable; char m_nReverbEnvironment; short m_awChannelFlags[64]; short field_86; @@ -26,16 +26,16 @@ class PLUGIN_API CAEAudioHardware { unsigned short m_nNumChannels; short m_anNumSoundsInSlot[64]; float m_afChannelVolumes[64]; - int field_210[64]; + float m_afChannelGains[64]; // linear volume gain (10 ^ (dB / 20)) float m_afChannelsFrqScalingFactor[64]; float m_fMusicMasterScalingFactor; float m_fEffectMasterScalingFactor; float m_fMusicFaderScalingFactor; float m_fEffectsFaderScalingFactor; float m_fStreamFaderScalingFactor; - float m_fNonStreamFaderScalingFactor; - float field_428; - float field_42C; + float m_fNonStreamFaderScalingFactor; // order swapped with m_fStreamFaderScalingFactor? + float m_fPrevMaxVolumeSecondary; + float m_fPrevMaxVolumeGlobal; short m_aBankSlotIds[300]; short m_aSoundTypes[300]; short m_anVirtualChannelSoundLoopStartTimes[300]; @@ -64,11 +64,11 @@ class PLUGIN_API CAEAudioHardware { public: int GetActiveTrackID(); }; -VALIDATE_OFFSET(CAEAudioHardware, field_0, 0x0); +VALIDATE_OFFSET(CAEAudioHardware, m_bInitialised, 0x0); VALIDATE_OFFSET(CAEAudioHardware, m_bDisableEffectsLoading, 0x1); -VALIDATE_OFFSET(CAEAudioHardware, field_2, 0x2); -VALIDATE_OFFSET(CAEAudioHardware, field_3, 0x3); -VALIDATE_OFFSET(CAEAudioHardware, field_4, 0x4); +VALIDATE_OFFSET(CAEAudioHardware, m_bPrevMaxSecondarySlowFadeout, 0x2); +VALIDATE_OFFSET(CAEAudioHardware, m_bPrevMaxGlobalSlowFadeout, 0x3); +VALIDATE_OFFSET(CAEAudioHardware, m_bHardwareMixAvailable, 0x4); VALIDATE_OFFSET(CAEAudioHardware, m_nReverbEnvironment, 0x5); VALIDATE_OFFSET(CAEAudioHardware, m_awChannelFlags, 0x6); VALIDATE_OFFSET(CAEAudioHardware, field_86, 0x86); @@ -77,7 +77,7 @@ VALIDATE_OFFSET(CAEAudioHardware, m_wNumAvailableChannels, 0x8C); VALIDATE_OFFSET(CAEAudioHardware, m_nNumChannels, 0x8E); VALIDATE_OFFSET(CAEAudioHardware, m_anNumSoundsInSlot, 0x90); VALIDATE_OFFSET(CAEAudioHardware, m_afChannelVolumes, 0x110); -VALIDATE_OFFSET(CAEAudioHardware, field_210, 0x210); +VALIDATE_OFFSET(CAEAudioHardware, m_afChannelGains, 0x210); VALIDATE_OFFSET(CAEAudioHardware, m_afChannelsFrqScalingFactor, 0x310); VALIDATE_OFFSET(CAEAudioHardware, m_fMusicMasterScalingFactor, 0x410); VALIDATE_OFFSET(CAEAudioHardware, m_fEffectMasterScalingFactor, 0x414); @@ -85,8 +85,8 @@ VALIDATE_OFFSET(CAEAudioHardware, m_fMusicFaderScalingFactor, 0x418); VALIDATE_OFFSET(CAEAudioHardware, m_fEffectsFaderScalingFactor, 0x41C); VALIDATE_OFFSET(CAEAudioHardware, m_fStreamFaderScalingFactor, 0x420); VALIDATE_OFFSET(CAEAudioHardware, m_fNonStreamFaderScalingFactor, 0x424); -VALIDATE_OFFSET(CAEAudioHardware, field_428, 0x428); -VALIDATE_OFFSET(CAEAudioHardware, field_42C, 0x42C); +VALIDATE_OFFSET(CAEAudioHardware, m_fPrevMaxVolumeSecondary, 0x428); +VALIDATE_OFFSET(CAEAudioHardware, m_fPrevMaxVolumeGlobal, 0x42C); VALIDATE_OFFSET(CAEAudioHardware, m_aBankSlotIds, 0x430); VALIDATE_OFFSET(CAEAudioHardware, m_aSoundTypes, 0x688); VALIDATE_OFFSET(CAEAudioHardware, m_anVirtualChannelSoundLoopStartTimes, 0x8E0); diff --git a/plugin_sa/game_sa/CAERadioTrackManager.cpp b/plugin_sa/game_sa/CAERadioTrackManager.cpp index 2a539dd5..47a81ce9 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.cpp +++ b/plugin_sa/game_sa/CAERadioTrackManager.cpp @@ -18,8 +18,8 @@ char *CAERadioTrackManager::GetRadioStationName(signed char id) return ((char *(__thiscall *)(CAERadioTrackManager *, signed char))0x4E9E10)(this, id); } -void CAERadioTrackManager::StartRadio(int stationId, float bass, int arg, char unused) { - plugin::CallMethod<0x4EB3C0, CAERadioTrackManager*, int, float, int, char>(this, stationId, bass, arg, unused); +void CAERadioTrackManager::StartRadio(eRadioID stationId, float bass, int arg, char unused) { + plugin::CallMethod<0x4EB3C0, CAERadioTrackManager*, eRadioID, float, int, char>(this, stationId, bass, arg, unused); } void CAERadioTrackManager::StopRadio(tVehicleAudioSettings* settings, char arg) { diff --git a/plugin_sa/game_sa/CAERadioTrackManager.h b/plugin_sa/game_sa/CAERadioTrackManager.h index 6230134e..a43af44d 100644 --- a/plugin_sa/game_sa/CAERadioTrackManager.h +++ b/plugin_sa/game_sa/CAERadioTrackManager.h @@ -8,6 +8,7 @@ #include "PluginBase.h" #include "CAEVehicleAudioEntity.h" +#include "eRadioID.h" struct PLUGIN_API tRadioSettings { Int32 TrackIDs[5]; @@ -16,7 +17,7 @@ struct PLUGIN_API tRadioSettings { Int32 PlayTime; Int32 TrackLengthMs; UInt8 TrackFlags; - Int8 StationID; // eRadioID + eRadioID StationID; Int8 BassSetting; Int8 _pad27; float BassFactor; @@ -110,7 +111,7 @@ class PLUGIN_API CAERadioTrackManager { public: bool IsVehicleRadioActive(); char* GetRadioStationName(signed char id); - void StartRadio(int stationId, float bass, int arg, char unused); + void StartRadio(eRadioID stationId, float bass, int arg, char unused); void StopRadio(tVehicleAudioSettings* settings, char arg); static void Load(); diff --git a/plugin_sa/game_sa/CAudioEngine.cpp b/plugin_sa/game_sa/CAudioEngine.cpp index 733da50d..0c4136d5 100644 --- a/plugin_sa/game_sa/CAudioEngine.cpp +++ b/plugin_sa/game_sa/CAudioEngine.cpp @@ -37,8 +37,8 @@ void CAudioEngine::SetRadioAutoRetuneOnOff(bool on) { plugin::CallMethod<0x506F80, CAudioEngine*, bool>(this, on); } -void CAudioEngine::RetuneRadio(char stationId) { - plugin::CallMethod<0x507E10, CAudioEngine*, char>(this, stationId); +void CAudioEngine::RetuneRadio(eRadioID stationId) { + plugin::CallMethod<0x507E10, CAudioEngine*, eRadioID>(this, stationId); } CReference* CAudioEngine::ReportFrontendAudioEvent(int id, float volume, float speed) { @@ -58,8 +58,8 @@ void CAudioEngine::ServiceLoadingTune(float fade) { plugin::CallMethod<0x5078A0, CAudioEngine*, float>(this, fade); } -void CAudioEngine::StartRadio(int radioStation, char arg) { - plugin::CallMethod<0x507DC0, CAudioEngine*, int, char>(this, radioStation, arg); +void CAudioEngine::StartRadio(eRadioID radioStation, char arg) { + plugin::CallMethod<0x507DC0, CAudioEngine*, eRadioID, char>(this, radioStation, arg); } void CAudioEngine::StopRadio(tVehicleAudioSettings* settings, bool arg) { diff --git a/plugin_sa/game_sa/CAudioEngine.h b/plugin_sa/game_sa/CAudioEngine.h index 03479735..5f9f772a 100644 --- a/plugin_sa/game_sa/CAudioEngine.h +++ b/plugin_sa/game_sa/CAudioEngine.h @@ -6,6 +6,7 @@ */ #pragma once #include "PluginBase.h" +#include "AudioTypes.h" #include "CAEFrontendAudioEntity.h" #include "CAEPedlessSpeechAudioEntity.h" #include "CAETwinLoopSoundEntity.h" @@ -13,19 +14,16 @@ #include "CAECollisionAudioEntity.h" #include "CAEVehicleAudioEntity.h" #include "eAudioEvents.h" +#include "eRadioID.h" class PLUGIN_API CAudioEngine { public: - char field_0; - char field_1; - char m_nCurrentRadiostationId; - char field_3; - int field_4; - char field_8[152]; - char field_A0; - char field_A1[15]; - char field_B0; - char field_B1[3]; + bool m_bPlayingMissionCompleteTrack; + bool m_bStoppingMissionCompleteTrack; + eRadioID m_nCurrentRadiostationId; + eRadioID m_nSavedRadioStationId; + int m_nBackgroundAudioChannel; + tBeatInfo m_beatInfo; CAEFrontendAudioEntity m_FrontendAudio; CAETwinLoopSoundEntity field_150; CAETwinLoopSoundEntity field_1F8; @@ -44,12 +42,12 @@ class PLUGIN_API CAudioEngine { void SetMusicMasterVolume(char volume); void SetBassEnhanceOnOff(bool on); void SetRadioAutoRetuneOnOff(bool on); - void RetuneRadio(char stationId); + void RetuneRadio(eRadioID stationId); CReference* ReportFrontendAudioEvent(int id, float volume, float speed); void ReportMissionAudioEvent(eAudioEvents audioEvent, CVector const* coords); void Service(); void ServiceLoadingTune(float fade); - void StartRadio(int radioStation, char arg); + void StartRadio(eRadioID radioStation, char arg); void StopRadio(tVehicleAudioSettings* settings, bool arg); bool IsRadioRetuneInProgress(); bool IsLoadingTuneActive(); @@ -62,16 +60,12 @@ class PLUGIN_API CAudioEngine { void SetMusicFaderScalingFactor(float value); void SetEffectsFaderScalingFactor(float value); }; -VALIDATE_OFFSET(CAudioEngine, field_0, 0x0); -VALIDATE_OFFSET(CAudioEngine, field_1, 0x1); +VALIDATE_OFFSET(CAudioEngine, m_bPlayingMissionCompleteTrack, 0x0); +VALIDATE_OFFSET(CAudioEngine, m_bStoppingMissionCompleteTrack, 0x1); VALIDATE_OFFSET(CAudioEngine, m_nCurrentRadiostationId, 0x2); -VALIDATE_OFFSET(CAudioEngine, field_3, 0x3); -VALIDATE_OFFSET(CAudioEngine, field_4, 0x4); -VALIDATE_OFFSET(CAudioEngine, field_8, 0x8); -VALIDATE_OFFSET(CAudioEngine, field_A0, 0xA0); -VALIDATE_OFFSET(CAudioEngine, field_A1, 0xA1); -VALIDATE_OFFSET(CAudioEngine, field_B0, 0xB0); -VALIDATE_OFFSET(CAudioEngine, field_B1, 0xB1); +VALIDATE_OFFSET(CAudioEngine, m_nSavedRadioStationId, 0x3); +VALIDATE_OFFSET(CAudioEngine, m_nBackgroundAudioChannel, 0x4); +VALIDATE_OFFSET(CAudioEngine, m_beatInfo, 0x8); VALIDATE_OFFSET(CAudioEngine, m_FrontendAudio, 0xB4); VALIDATE_OFFSET(CAudioEngine, field_150, 0x150); VALIDATE_OFFSET(CAudioEngine, field_1F8, 0x1F8);