diff options
Diffstat (limited to 'src/audio/AudioManager.h')
-rw-r--r-- | src/audio/AudioManager.h | 325 |
1 files changed, 136 insertions, 189 deletions
diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index a1aa96f5..a43b4309 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -3,6 +3,7 @@ #include "audio_enums.h" #include "AudioCollision.h" #include "PoliceRadio.h" +#include "VehicleModelInfo.h" class tSound { @@ -28,6 +29,7 @@ public: uint8 m_nLoopsRemaining; bool m_bRequireReflection; // Used for oneshots uint8 m_nOffset; + uint8 field_4C; int32 m_nReleasingVolumeDivider; bool m_bIsProcessed; bool m_bLoopEnded; @@ -35,7 +37,7 @@ public: int8 m_nVolumeChange; }; -VALIDATE_SIZE(tSound, 92); +VALIDATE_SIZE(tSound, 96); class CPhysical; class CAutomobile; @@ -95,19 +97,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; - bool m_bIsPlaying; - 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]; + bool m_bIsPlaying[MISSION_AUDIO_SLOTS]; + 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 @@ -137,6 +144,7 @@ public: class cVehicleParams { public: + eVehicleType m_VehicleType; bool m_bDistanceCalculated; float m_fDistance; CVehicle *m_pVehicle; @@ -173,6 +181,7 @@ public: uint8 m_nActiveSamples; uint8 field_4; // unused bool m_bDynamicAcousticModelingStatus; + int8 field_6; float m_fSpeedOfSound; bool m_bTimerJustReset; int32 m_nTimer; @@ -188,6 +197,14 @@ public: CVector m_avecReflectionsPos[NUM_AUDIO_REFLECTIONS]; float m_afReflectionsDistances[NUM_AUDIO_REFLECTIONS]; cAudioScriptObjectManager m_sAudioScriptObjectManager; + + // miami + uint8 m_bIsPlayerShutUp; + uint8 m_nPlayerMood; + uint32 m_nPlayerMoodTimer; + uint8 field_rest[4]; + uint8 field_4B3C; + cPedComments m_sPedComments; int32 m_nFireAudioEntity; int32 m_nWaterCannonEntity; @@ -197,13 +214,19 @@ public: int32 m_nCollisionEntity; cAudioCollisionManager m_sCollisionManager; int32 m_nProjectileEntity; +#ifdef GTA_BRIDGE int32 m_nBridgeEntity; +#endif + int32 m_nEscalatorEntity; + int32 m_nExtraSoundsEntity; cMissionAudio m_sMissionAudio; + uint8 field_5538; // something related to phone dialogues int32 m_anRandomTable[5]; uint8 m_nTimeSpent; uint8 m_nUserPause; uint8 m_nPreviousUserPause; uint32 m_FrameCounter; + uint32 field_5554; cAudioManager(); ~cAudioManager(); @@ -213,209 +236,129 @@ 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 ShouldDuckMissionAudio() 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); - void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, - uint8 counter, bool notLooping); - void AddReflectionsToRequestedQueue(); - void AddReleasingSounds(); - void AddSampleToRequestedQueue(); - void AgeCrimes(); - - void CalculateDistance(bool &condition, float dist); - bool CheckForAnAudioFileOnCD() const; - void ClearActiveSamples(); - void ClearMissionAudio(); - void ClearRequestedQueue(); - int32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, - float speedMultiplier) const; - int32 ComputePan(float, CVector *); - uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const; - int32 CreateEntity(eAudioType type, void *entity); - - void DestroyAllGameCreatedEntities(); - void DestroyEntity(int32 id); - void DoPoliceRadioCrackle(); + void AddDetailsToRequestedOrderList(uint8 sample); // done (inlined in vc) + void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool notLooping); // done + void AddReflectionsToRequestedQueue(); // done + void AddReleasingSounds(); // done + void AddSampleToRequestedQueue(); // done + void AgeCrimes(); // done (inlined in vc) + + void CalculateDistance(bool &condition, float dist); // done + bool CheckForAnAudioFileOnCD() const; // done + void ClearActiveSamples(); // done + void ClearMissionAudio(uint8 slot); // done + void ClearRequestedQueue(); // done (inlined in vc) + uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const; // done + int32 ComputePan(float, CVector *); // done + uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const; // done + int32 CreateEntity(eAudioType type, void *entity); // done + + void DestroyAllGameCreatedEntities(); // done ? I don't seed pEntity = nil; + void DestroyEntity(int32 id); // done (inlined in vc) ? I not seen id checks + void DoPoliceRadioCrackle(); // done // functions returning talk sfx, // order from GetPedCommentSfx - uint32 GetPlayerTalkSfx(int16 sound); - uint32 GetCopTalkSfx(int16 sound); - uint32 GetSwatTalkSfx(int16 sound); - uint32 GetFBITalkSfx(int16 sound); - uint32 GetArmyTalkSfx(int16 sound); - uint32 GetMedicTalkSfx(int16 sound); - uint32 GetFiremanTalkSfx(int16 sound); - uint32 GetNormalMaleTalkSfx(int16 sound); - uint32 GetTaxiDriverTalkSfx(int16 sound); - uint32 GetPimpTalkSfx(int16 sound); - uint32 GetMafiaTalkSfx(int16 sound); - uint32 GetTriadTalkSfx(int16 sound); - uint32 GetDiabloTalkSfx(int16 sound); - uint32 GetYakuzaTalkSfx(int16 sound); - uint32 GetYardieTalkSfx(int16 sound); - uint32 GetColumbianTalkSfx(int16 sound); - uint32 GetHoodTalkSfx(int16 sound); - uint32 GetBlackCriminalTalkSfx(int16 sound); - uint32 GetWhiteCriminalTalkSfx(int16 sound); - uint32 GetMaleNo2TalkSfx(int16 sound); - uint32 GetBlackProjectMaleTalkSfx(int16 sound, int32 model); - uint32 GetWhiteFatMaleTalkSfx(int16 sound); - uint32 GetBlackFatMaleTalkSfx(int16 sound); - uint32 GetBlackCasualFemaleTalkSfx(int16 sound); - uint32 GetWhiteCasualFemaleTalkSfx(int16 sound); - uint32 GetFemaleNo3TalkSfx(int16 sound); - uint32 GetBlackFatFemaleTalkSfx(int16 sound); - uint32 GetWhiteFatFemaleTalkSfx(int16 sound); - uint32 GetBlackFemaleProstituteTalkSfx(int16 sound); - uint32 GetWhiteFemaleProstituteTalkSfx(int16 sound); - uint32 GetBlackProjectFemaleOldTalkSfx(int16 sound); - uint32 GetBlackProjectFemaleYoungTalkSfx(int16 sound); - uint32 GetChinatownMaleOldTalkSfx(int16 sound); - uint32 GetChinatownMaleYoungTalkSfx(int16 sound); - uint32 GetChinatownFemaleOldTalkSfx(int16 sound); - uint32 GetChinatownFemaleYoungTalkSfx(int16 sound); - uint32 GetLittleItalyMaleTalkSfx(int16 sound); - uint32 GetLittleItalyFemaleOldTalkSfx(int16 sound); - uint32 GetLittleItalyFemaleYoungTalkSfx(int16 sound); - uint32 GetWhiteDockerMaleTalkSfx(int16 sound); - uint32 GetBlackDockerMaleTalkSfx(int16 sound); - uint32 GetScumMaleTalkSfx(int16 sound); - uint32 GetScumFemaleTalkSfx(int16 sound); - uint32 GetWhiteWorkerMaleTalkSfx(int16 sound); - uint32 GetBlackWorkerMaleTalkSfx(int16 sound); - uint32 GetBusinessMaleYoungTalkSfx(int16 sound, int32 model); - uint32 GetBusinessMaleOldTalkSfx(int16 sound); - uint32 GetWhiteBusinessFemaleTalkSfx(int16 sound, int32 model); - uint32 GetBlackBusinessFemaleTalkSfx(int16 sound); - uint32 GetSupermodelMaleTalkSfx(int16 sound); - uint32 GetSupermodelFemaleTalkSfx(int16 sound); - uint32 GetStewardMaleTalkSfx(int16 sound); - uint32 GetStewardFemaleTalkSfx(int16 sound); - uint32 GetFanMaleTalkSfx(int16 sound, int32 model); - uint32 GetFanFemaleTalkSfx(int16 sound); - uint32 GetHospitalMaleTalkSfx(int16 sound); - uint32 GetHospitalFemaleTalkSfx(int16 sound); - uint32 GetWhiteConstructionWorkerTalkSfx(int16 sound); - uint32 GetBlackConstructionWorkerTalkSfx(int16 sound); - uint32 GetShopperFemaleTalkSfx(int16 sound, int32 model); - uint32 GetStudentMaleTalkSfx(int16 sound); - uint32 GetStudentFemaleTalkSfx(int16 sound); - uint32 GetCasualMaleOldTalkSfx(int16 sound); - - uint32 GetSpecialCharacterTalkSfx(int32 modelIndex, int32 sound); - uint32 GetEightTalkSfx(int16 sound); - uint32 GetFrankieTalkSfx(int16 sound); - uint32 GetMistyTalkSfx(int16 sound); - uint32 GetOJGTalkSfx(int16 sound); - uint32 GetCatatalinaTalkSfx(int16 sound); - uint32 GetBomberTalkSfx(int16 sound); - uint32 GetSecurityGuardTalkSfx(int16 sound); - uint32 GetChunkyTalkSfx(int16 sound); - - uint32 GetGenericMaleTalkSfx(int16 sound); - uint32 GetGenericFemaleTalkSfx(int16 sound); + // TODO: miami // end of functions returning talk sfx void GenerateIntegerRandomNumberTable(); char *Get3DProviderName(uint8 id) const; uint8 GetCDAudioDriveLetter() const; int8 GetCurrent3DProviderIndex() const; + int8 AutoDetect3DProviders() const; // done float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // not used float GetCollisionOneShotRatio(int32 a, float b) const; float GetCollisionRatio(float a, float b, float c, float d) const; - float GetDistanceSquared(const CVector &v) const; + float GetDistanceSquared(const CVector &v) const; // done (inlined in vc) int32 GetJumboTaxiFreq() const; - uint8 GetMissionAudioLoadingStatus() const; + uint8 GetMissionAudioLoadingStatus(uint8 slot) const; // done int8 GetMissionScriptPoliceAudioPlayingStatus() const; - uint8 GetNum3DProvidersAvailable() const; + uint8 GetNum3DProvidersAvailable() const; // done int32 GetPedCommentSfx(CPed *ped, int32 sound); void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) const; - float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, - cTransmission *transmission, float velocityChange); - float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, - cTransmission *transmission, float velocityChange); + float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange); + float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange); - bool HasAirBrakes(int32 model) const; + bool HasAirBrakes(int32 model) const; // done - void Initialise(); + void Initialise(); // done void InitialisePoliceRadio(); void InitialisePoliceRadioZones(); - void InterrogateAudioEntities(); + void InterrogateAudioEntities(); // done bool IsAudioInitialised() const; - bool IsMissionAudioSampleFinished(); - bool IsMP3RadioChannelAvailable() const; + bool IsMissionAudioSampleFinished(uint8 slot); + bool IsMP3RadioChannelAvailable() const; // done bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const; - void PlayLoadedMissionAudio(); - void PlayOneShot(int32 index, int16 sound, float vol); - void PlaySuspectLastSeen(float x, float y, float z); - void PlayerJustGotInCar() const; - void PlayerJustLeftCar() const; - void PostInitialiseGameSpecificSetup(); - void PostTerminateGameSpecificShutdown(); - void PreInitialiseGameSpecificSetup() const; - void PreloadMissionAudio(Const char *name); - void PreTerminateGameSpecificShutdown(); + void PlayLoadedMissionAudio(uint8 slot); // done + void PlayOneShot(int32 index, int16 sound, float vol); // done + void PlaySuspectLastSeen(float x, float y, float z); // + void PlayerJustGotInCar() const; // done + void PlayerJustLeftCar() const; // done + void PostInitialiseGameSpecificSetup(); // + void PostTerminateGameSpecificShutdown(); // done + void PreInitialiseGameSpecificSetup() const; // done + void PreloadMissionAudio(uint8 slot, Const char *name); // done + void PreTerminateGameSpecificShutdown(); // done /// processX - main logic of adding new sounds - void ProcessActiveQueues(); + void ProcessActiveQueues(); //done bool ProcessAirBrakes(cVehicleParams *params); - void ProcessAirportScriptObject(uint8 sound); bool ProcessBoatEngine(cVehicleParams *params); bool ProcessBoatMovingOverWater(cVehicleParams *params); +#ifdef GTA_BRIDGE void ProcessBridge(); void ProcessBridgeMotor(); void ProcessBridgeOneShots(); void ProcessBridgeWarning(); - bool ProcessCarBombTick(cVehicleParams *params); - void ProcessCesna(cVehicleParams *params); - void ProcessCinemaScriptObject(uint8 sound); - void ProcessCrane(); - void ProcessDocksScriptObject(uint8 sound); - bool ProcessEngineDamage(cVehicleParams *params); - void ProcessEntity(int32 sound); - void ProcessExplosions(int32 explosion); - void ProcessFireHydrant(); - void ProcessFires(int32 entity); - void ProcessFrontEnd(); - void ProcessGarages(); - bool ProcessHelicopter(cVehicleParams *params); - void ProcessHomeScriptObject(uint8 sound); - void ProcessJumbo(cVehicleParams *); - void ProcessJumboAccel(CPlane *plane); - void ProcessJumboDecel(CPlane *plane); - void ProcessJumboFlying(); - void ProcessJumboLanding(CPlane *plane); - void ProcessJumboTakeOff(CPlane *plane); - void ProcessJumboTaxi(); - void ProcessLaunderetteScriptObject(uint8 sound); - void ProcessLoopingScriptObject(uint8 sound); - void ProcessMissionAudio(); - void ProcessModelCarEngine(cVehicleParams *params); - void ProcessOneShotScriptObject(uint8 sound); - void ProcessPed(CPhysical *ped); - void ProcessPedHeadphones(cPedParams *params); - void ProcessPedOneShots(cPedParams *params); - void ProcessPhysical(int32 id); - void ProcessPlane(cVehicleParams *params); - void ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile *automobile); - void ProcessPoliceCellBeatingScriptObject(uint8 sound); - void ProcessPornCinema(uint8 sound); - void ProcessProjectiles(); - void ProcessRainOnVehicle(cVehicleParams *params); - void ProcessReverb() const; - bool ProcessReverseGear(cVehicleParams *params); - void ProcessSawMillScriptObject(uint8 sound); - void ProcessScriptObject(int32 id); - void ProcessShopScriptObject(uint8 sound); +#endif + bool ProcessCarBombTick(cVehicleParams *params); // done + void ProcessCesna(cVehicleParams *params); // + //void ProcessCrane(); // + bool ProcessEngineDamage(cVehicleParams *params); // done + void ProcessEntity(int32 sound); // done + void ProcessExplosions(int32 explosion); // done + void ProcessFireHydrant(); // done + void ProcessFires(int32 entity); // + void ProcessFrontEnd(); // + void ProcessGarages(); // + void ProcessCarHeli(cVehicleParams* params); // done + void ProcessVehicleFlatTyre(cVehicleParams* params); // done + void ProcessJumbo(cVehicleParams *); // + void ProcessJumboAccel(CPlane *plane); // + void ProcessJumboDecel(CPlane *plane); // + void ProcessJumboFlying(); // + void ProcessJumboLanding(CPlane *plane); // + void ProcessJumboTakeOff(CPlane *plane); // + void ProcessJumboTaxi(); // + void ProcessLoopingScriptObject(uint8 sound); // + void ProcessMissionAudio(); // + void ProcessMissionAudioSlot(uint8 slot); // + void ProcessModelCarEngine(cVehicleParams *params); // + void ProcessOneShotScriptObject(uint8 sound); // + void ProcessPed(CPhysical *ped); // + void ProcessPedOneShots(cPedParams *params); // + void ProcessPhysical(int32 id); // done + void ProcessPlane(cVehicleParams *params); // done + void ProcessPlayersVehicleEngine(cVehicleParams *params, CVehicle* veh); // done + void ProcessProjectiles(); // + void ProcessRainOnVehicle(cVehicleParams *params); // + void ProcessReverb() const; // + bool ProcessReverseGear(cVehicleParams *params); // done + void ProcessScriptObject(int32 id); // done void ProcessSpecial(); +#ifdef GTA_TRAIN bool ProcessTrainNoise(cVehicleParams *params); - void ProcessVehicle(CVehicle *vehicle); - bool ProcessVehicleDoors(cVehicleParams *params); - void ProcessVehicleEngine(cVehicleParams *params); +#endif + void ProcessVehicle(CVehicle *vehicle); //done, but need add model functions + bool ProcessVehicleDoors(cVehicleParams *params); //done + void ProcessVehicleEngine(cVehicleParams *params); //done + void UpdateGasPedalAudio(CVehicle* veh, int vehType); //done void ProcessVehicleHorn(cVehicleParams *params); void ProcessVehicleOneShots(cVehicleParams *params); bool ProcessVehicleReverseWarning(cVehicleParams *params); @@ -423,16 +366,16 @@ public: bool ProcessVehicleSirenOrAlarm(cVehicleParams *params); bool ProcessVehicleSkidding(cVehicleParams *params); void ProcessWaterCannon(int32); - void ProcessWeather(int32 id); + void ProcessWeather(int32 id); //done bool ProcessWetRoadNoise(cVehicleParams *params); - void ProcessWorkShopScriptObject(uint8 sound); + void ProcessEscalators(); //done + void ProcessExtraSounds(); //done int32 RandomDisplacement(uint32 seed) const; - void ReacquireDigitalHandle() const; - void ReleaseDigitalHandle() const; - void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, - float collisionPower, float intensity2); - void ReportCrime(int32 crime, const CVector *pos); + void ReacquireDigitalHandle() const; // done + void ReleaseDigitalHandle() const; // done + void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2); // done + void ReportCrime(int32 crime, const CVector *pos); // done void ResetAudioLogicTimers(uint32 timer); void ResetPoliceRadio(); void ResetTimers(uint32 time); @@ -446,9 +389,10 @@ public: void SetDynamicAcousticModelingStatus(uint8 status); void SetEffectsFadeVol(uint8 volume) const; void SetEffectsMasterVolume(uint8 volume) const; - void SetEntityStatus(int32 id, uint8 status); + void SetMP3BoostVolume(uint8 volume) const; + void SetEntityStatus(int32 id, uint8 status); //done 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 mono); void SetMusicFadeVol(uint8 volume) const; @@ -468,12 +412,15 @@ public: void Terminate(); void TranslateEntity(Const CVector *v1, CVector *v2) const; - void UpdateGasPedalAudio(CAutomobile *automobile); void UpdateReflections(); - bool UsesReverseWarning(int32 model) const; + bool UsesReverseWarning(int32 model) const; //done bool UsesSiren(int32 model) const; bool UsesSirenSwitching(int32 model) const; + CVehicle *FindVehicleOfPlayer(); //done + void SetPedTalkingStatus(CPed *ped, uint8 status); + void SetPlayersMood(uint8 mood, int32 time); + #ifdef GTA_PC // only used in pc void AdjustSamplesVolume(); @@ -482,7 +429,7 @@ public: }; #ifdef AUDIO_MSS -static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error"); +static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error"); #endif extern cAudioManager AudioManager; |