From 36a6d124aa4ef679a9429c990874576ce2ec27f1 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 8 Jun 2020 10:34:31 +0300 Subject: Mission audio slots --- src/audio/AudioManager.h | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'src/audio/AudioManager.h') diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index b64b8bac..e30c1068 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -95,19 +95,24 @@ VALIDATE_SIZE(cPedComments, 1164); class CEntity; +#define MISSION_AUDIO_SLOTS (2) + +// So instead of doing cMissionAudio [2] they've added [2] to every field of the struct... +// Only someone with a VERY EXTRAORDINARY mind could have come up with that class cMissionAudio { public: - CVector m_vecPos; - bool m_bPredefinedProperties; - int32 m_nSampleIndex; - uint8 m_nLoadingStatus; - uint8 m_nPlayStatus; - uint8 field_22; // todo find a name - int32 m_nMissionAudioCounter; - bool m_bIsPlayed; + CVector m_vecPos[MISSION_AUDIO_SLOTS]; + bool m_bPredefinedProperties[MISSION_AUDIO_SLOTS]; + int32 m_nSampleIndex[MISSION_AUDIO_SLOTS]; + uint8 m_nLoadingStatus[MISSION_AUDIO_SLOTS]; + uint8 m_nPlayStatus[MISSION_AUDIO_SLOTS]; + uint8 field_22[MISSION_AUDIO_SLOTS]; // todo find a name + int32 m_nMissionAudioCounter[MISSION_AUDIO_SLOTS]; + bool m_bIsPlayed[MISSION_AUDIO_SLOTS]; + bool m_bIsMobile[MISSION_AUDIO_SLOTS]; }; -VALIDATE_SIZE(cMissionAudio, 32); +VALIDATE_SIZE(cMissionAudio, 0x38); // name made up class cAudioScriptObjectManager @@ -199,6 +204,7 @@ public: int32 m_nProjectileEntity; int32 m_nBridgeEntity; cMissionAudio m_sMissionAudio; + uint8 field_5538; // something related to phone dialogues int32 m_anRandomTable[5]; uint8 m_nTimeSpent; uint8 m_nUserPause; @@ -213,7 +219,8 @@ public: float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; } int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; } int32 GetRandomNumberInRange(int32 idx, int32 low, int32 high) const { return (m_anRandomTable[idx] % (high - low + 1)) + low; } - bool IsMissionAudioPlaying() const { return m_sMissionAudio.m_nPlayStatus == 1; } + bool IsMissionAudioSamplePlaying(uint8 slot) const;// { return m_sMissionAudio.m_nPlayStatus == 1; } + bool ShouldDuckMissionAudio(uint8 slot) const; // "Should" be in alphabetic order, except "getXTalkSfx" void AddDetailsToRequestedOrderList(uint8 sample); @@ -227,7 +234,7 @@ public: void CalculateDistance(bool &condition, float dist); bool CheckForAnAudioFileOnCD() const; void ClearActiveSamples(); - void ClearMissionAudio(); + void ClearMissionAudio(uint8 slot); void ClearRequestedQueue(); int32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const; @@ -253,7 +260,7 @@ public: float GetCollisionRatio(float a, float b, float c, float d) const; float GetDistanceSquared(const CVector &v) const; int32 GetJumboTaxiFreq() const; - uint8 GetMissionAudioLoadingStatus() const; + uint8 GetMissionAudioLoadingStatus(uint8 slot) const; int8 GetMissionScriptPoliceAudioPlayingStatus() const; uint8 GetNum3DProvidersAvailable() const; int32 GetPedCommentSfx(CPed *ped, int32 sound); @@ -270,12 +277,12 @@ public: void InitialisePoliceRadioZones(); void InterrogateAudioEntities(); bool IsAudioInitialised() const; - bool IsMissionAudioSampleFinished(); + bool IsMissionAudioSampleFinished(uint8 slot); bool IsMP3RadioChannelAvailable() const; bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const; - void PlayLoadedMissionAudio(); + void PlayLoadedMissionAudio(uint8 slot); void PlayOneShot(int32 index, int16 sound, float vol); void PlaySuspectLastSeen(float x, float y, float z); void PlayerJustGotInCar() const; @@ -283,7 +290,7 @@ public: void PostInitialiseGameSpecificSetup(); void PostTerminateGameSpecificShutdown(); void PreInitialiseGameSpecificSetup() const; - void PreloadMissionAudio(const char *name); + void PreloadMissionAudio(uint8 slot, Const char *name); void PreTerminateGameSpecificShutdown(); /// processX - main logic of adding new sounds void ProcessActiveQueues(); @@ -316,6 +323,7 @@ public: void ProcessJumboTaxi(); void ProcessLoopingScriptObject(uint8 sound); void ProcessMissionAudio(); + void ProcessMissionAudioSlot(uint8 slot); void ProcessModelCarEngine(cVehicleParams *params); void ProcessOneShotScriptObject(uint8 sound); void ProcessPed(CPhysical *ped); @@ -366,7 +374,7 @@ public: void SetEffectsMasterVolume(uint8 volume) const; void SetEntityStatus(int32 id, uint8 status); uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision); - void SetMissionAudioLocation(float x, float y, float z); + void SetMissionAudioLocation(uint8 slot, float x, float y, float z); void SetMissionScriptPoliceAudio(int32 sfx) const; void SetMonoMode(uint8); // todo (mobile) void SetMusicFadeVol(uint8 volume) const; @@ -400,7 +408,7 @@ public: }; #ifdef AUDIO_MSS -static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error"); +//static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error"); #endif extern cAudioManager AudioManager; -- cgit v1.2.3