diff options
Diffstat (limited to 'src/audio/AudioManager.h')
-rw-r--r-- | src/audio/AudioManager.h | 392 |
1 files changed, 227 insertions, 165 deletions
diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index a76ef67b..8708fecd 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -3,17 +3,15 @@ #include "audio_enums.h" #include "AudioCollision.h" #include "PolRadio.h" +#include "VehicleModelInfo.h" +#include "Vehicle.h" class tSound { public: int32 m_nEntityIndex; // audio entity index -#if GTA_VERSION >= GTA3_PC_10 uint32 m_nCounter; // I'm not sure what this is but it looks like a virtual counter to determine the same sound in queue // Values higher than 255 are used by reflections -#else - uint8 m_nCounter; -#endif uint32 m_nSampleIndex; // An index of sample from AudioSamples.h uint8 m_nBankIndex; // A sound bank index. IDK what's the point of it here since samples are hardcoded anyway bool8 m_bIs2D; // If TRUE then sound is played in 2D space (such as frontend or police radio) @@ -31,14 +29,12 @@ public: uint8 m_nEmittingVolume; // The volume in 3D space, provided to 3D audio engine #endif float m_fSpeedMultiplier; // Used for doppler effect. 0.0f - unaffected by doppler -#if GTA_VERSION >= GTA3_PC_10 float m_MaxDistance; // The maximum distance at which sound could be heard. Minimum distance = MaxDistance / 5 or MaxDistance / 4 in case of emitting volume (useless if m_bIs2D == TRUE) -#else - uint32 m_MaxDistance; -#endif bool8 m_bStatic; // If TRUE then sound parameters cannot be changed during playback (frequency, position, etc.) CVector m_vecPos; // Position of sound in 3D space. Unused if m_bIs2D == TRUE +#if !defined(GTA_PS2) || defined(AUDIO_REVERB) // GTA_PS2 because this field exists on mobile but not on PS2 bool8 m_bReverb; // Toggles reverb effect +#endif #ifdef AUDIO_REFLECTIONS uint8 m_nReflectionDelay; // Number of frames before reflection could be played. This is calculated internally by AudioManager and shouldn't be set by queued sample bool8 m_bReflections; // Add sound reflections @@ -47,6 +43,7 @@ public: // 0 = L 100% R 0% // 63 = L 100% R 100% // 127 = L 0% R 100% + uint8 m_nFrontRearPan; // Used on PS2 for surround panning #ifndef FIX_BUGS uint32 m_nFramesToPlay; // Number of frames the sound would be played (if it stops being queued). // This one is being set by queued sample for looping sounds, otherwise calculated inside AudioManager @@ -57,11 +54,6 @@ public: // all fields below are internal to AudioManager calculations and aren't set by queued sample bool8 m_bIsBeingPlayed; // Set to TRUE when the sound was added or changed on current frame to avoid it being overwritten bool8 m_bIsPlayingFinished; // Not sure about the name. Set to TRUE when sampman channel becomes free -#if GTA_VERSION < GTA3_PC_10 - int32 unk; // Only on PS2, used by static non-looped sounds (AFAIK) - // Looks like it's keeping a number of frames left to play with the purpose of setting m_bIsPlayingFinished=TRUE once value reaches 0 - // Default value is -3 for whatever reason -#endif uint32 m_nFinalPriority; // Actual value used to compare priority, calculated using volume and m_nPriority. Lesser value means higher priority int8 m_nVolumeChange; // How much m_nVolume should reduce per each frame. #if defined(FIX_BUGS) && defined(EXTERNAL_3D_SOUND) @@ -69,7 +61,7 @@ public: #endif }; -VALIDATE_SIZE(tSound, 92); +VALIDATE_SIZE(tSound, 96); class CPhysical; class CAutomobile; @@ -111,6 +103,10 @@ public: uint8 m_nIndexMap[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS]; uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS]; uint8 m_nActiveBank; +#ifdef GTA_PC + bool8 m_bDelay; + uint32 m_nDelayTimer; +#endif cPedComments() { @@ -128,7 +124,9 @@ public: void Process(); }; -VALIDATE_SIZE(cPedComments, 1164); +VALIDATE_SIZE(cPedComments, 0x490); + +#define MISSION_AUDIO_SLOTS (2) // name made up class cAudioScriptObjectManager @@ -166,6 +164,7 @@ public: class cVehicleParams { public: + int32 m_VehicleType; bool8 m_bDistanceCalculated; float m_fDistance; CVehicle *m_pVehicle; @@ -175,6 +174,7 @@ public: cVehicleParams() { + m_VehicleType = -1; m_bDistanceCalculated = false; m_fDistance = 0.0f; m_pVehicle = nil; @@ -184,8 +184,9 @@ public: } }; -VALIDATE_SIZE(cVehicleParams, 0x18); +VALIDATE_SIZE(cVehicleParams, 0x1C); +#if GTA_VERSION < GTAVC_PC_10 enum { /* REFLECTION_YMAX = 0, top @@ -202,6 +203,19 @@ enum { REFLECTION_UP, MAX_REFLECTIONS, }; +#else +enum { + REFLECTION_NORTH = 0, + REFLECTION_SOUTH, + REFLECTION_WEST, + REFLECTION_EAST, + REFLECTION_CEIL_NORTH, + REFLECTION_CEIL_SOUTH, + REFLECTION_CEIL_WEST, + REFLECTION_CEIL_EAST, + MAX_REFLECTIONS, +}; +#endif enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED }; enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED }; @@ -210,13 +224,12 @@ class cAudioManager { public: bool8 m_bIsInitialised; - bool8 m_bIsSurround; // unused until VC + bool8 m_bIsSurround; // used on PS2 bool8 m_bReduceReleasingPriority; uint8 m_nActiveSamples; bool8 m_bDoubleVolume; // unused -#if GTA_VERSION >= GTA3_PC_10 bool8 m_bDynamicAcousticModelingStatus; -#endif + uint8 m_nChannelOffset; float m_fSpeedOfSound; bool8 m_bTimerJustReset; int32 m_nTimer; @@ -234,6 +247,14 @@ public: float m_afReflectionsDistances[MAX_REFLECTIONS]; #endif cAudioScriptObjectManager m_sAudioScriptObjectManager; + + // miami + bool8 m_bIsPlayerShutUp; + uint8 m_nPlayerMood; + uint32 m_nPlayerMoodTimer; + uint32 field_4B38_vc; + bool8 m_bGenericSfx; + cPedComments m_sPedComments; int32 m_nFireAudioEntity; int32 m_nWaterCannonEntity; @@ -244,17 +265,25 @@ public: int32 m_nCollisionEntity; cAudioCollisionManager m_sCollisionManager; int32 m_nProjectileEntity; + int32 m_nEscalatorEntity; + int32 m_nExtraSoundsEntity; +#ifdef GTA_BRIDGE int32 m_nBridgeEntity; - +#endif + // Mission audio stuff - CVector m_vecMissionAudioPosition; - bool8 m_bIsMissionAudio2D; - uint32 m_nMissionAudioSampleIndex; - uint8 m_nMissionAudioLoadingStatus; - uint8 m_nMissionAudioPlayStatus; - bool8 m_bIsMissionAudioPlaying; - int32 m_nMissionAudioFramesToPlay; - bool8 m_bIsMissionAudioAllowedToPlay; + // So instead of making an array of struct they've added [MISSION_AUDIO_SLOTS] to every field... + // Only someone with a VERY EXTRAORDINARY mind could have come up with that + CVector m_vecMissionAudioPosition[MISSION_AUDIO_SLOTS]; + bool8 m_bIsMissionAudio2D[MISSION_AUDIO_SLOTS]; + uint32 m_nMissionAudioSampleIndex[MISSION_AUDIO_SLOTS]; + uint8 m_nMissionAudioLoadingStatus[MISSION_AUDIO_SLOTS]; + uint8 m_nMissionAudioPlayStatus[MISSION_AUDIO_SLOTS]; + bool8 m_bIsMissionAudioPlaying[MISSION_AUDIO_SLOTS]; + int32 m_nMissionAudioFramesToPlay[MISSION_AUDIO_SLOTS]; + bool8 m_bIsMissionAudioAllowedToPlay[MISSION_AUDIO_SLOTS]; + bool8 m_bIsMissionAudioPhoneCall[MISSION_AUDIO_SLOTS]; + uint8 m_nGlobalSfxVolumeMultiplier; // used to lower sfx volume during phone calls int32 m_anRandomTable[5]; uint8 m_nTimeSpent; @@ -269,23 +298,25 @@ public: void Terminate(); void Service(); int32 CreateEntity(eAudioType type, void *entity); - void DestroyEntity(int32 id); + void DestroyEntity(int32 id); // inlined in vc bool8 GetEntityStatus(int32 id); void SetEntityStatus(int32 id, bool8 status); void *GetEntityPointer(int32 id); void PlayOneShot(int32 index, uint16 sound, float vol); void SetEffectsMasterVolume(uint8 volume); void SetMusicMasterVolume(uint8 volume); + void SetMP3BoostVolume(uint8 volume); void SetEffectsFadeVol(uint8 volume); void SetMusicFadeVol(uint8 volume); - void SetMonoMode(bool8 mono); + void SetOutputMode(bool8 surround); void ResetTimers(uint32 time); void DestroyAllGameCreatedEntities(); - + #ifdef GTA_PC uint8 GetNum3DProvidersAvailable(); char *Get3DProviderName(uint8 id); int8 GetCurrent3DProviderIndex(); + int8 AutoDetect3DProviders(); int8 SetCurrent3DProvider(uint8 which); void SetSpeakerConfig(int32 conf); bool8 IsMP3RadioChannelAvailable(); @@ -300,29 +331,29 @@ public: #endif void ServiceSoundEffects(); - uint32 FL(float f); // not used uint8 ComputeVolume(uint8 emittingVolume, float maxDistance, float distance); void TranslateEntity(Const CVector *v1, CVector *v2); + int32 ComputeFrontRearMix(float, CVector *); int32 ComputePan(float, CVector *); - uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier); // inlined on PS2 + uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier); int32 RandomDisplacement(uint32 seed); - void InterrogateAudioEntities(); // inlined on PS2 + void InterrogateAudioEntities(); // inlined void AddSampleToRequestedQueue(); - void AddDetailsToRequestedOrderList(uint8 sample); // inlined on PS2 + void AddDetailsToRequestedOrderList(uint8 sample); // inlined in vc #ifdef AUDIO_REFLECTIONS void AddReflectionsToRequestedQueue(); void UpdateReflections(); #endif void AddReleasingSounds(); void ProcessActiveQueues(); - void ClearRequestedQueue(); // inlined on PS2 + void ClearRequestedQueue(); // inlined in vc void ClearActiveSamples(); - void GenerateIntegerRandomNumberTable(); // inlined on PS2 - void LoadBankIfNecessary(uint8 bank); // this is used only on PS2 but technically not a platform code + void GenerateIntegerRandomNumberTable(); + void LoadBankIfNecessary(uint8 bank); #ifdef EXTERNAL_3D_SOUND // actually must have been && AUDIO_MSS as well - void AdjustSamplesVolume(); - uint8 ComputeEmittingVolume(uint8 emittingVolume, float maxDistance, float distance); + void AdjustSamplesVolume(); // inlined + uint8 ComputeEmittingVolume(uint8 emittingVolume, float maxDistance, float distance); // inlined #endif // audio logic @@ -332,145 +363,174 @@ public: void PostTerminateGameSpecificShutdown(); void ResetAudioLogicTimers(uint32 timer); void ProcessReverb(); - float GetDistanceSquared(const CVector &v); + float GetDistanceSquared(const CVector &v); // inlined in vc void CalculateDistance(bool8 &condition, float dist); + CVehicle *FindVehicleOfPlayer(); void ProcessSpecial(); void ProcessEntity(int32 sound); void ProcessPhysical(int32 id); // vehicles void ProcessVehicle(CVehicle *vehicle); + void ProcessCarHeli(cVehicleParams ¶ms); void ProcessRainOnVehicle(cVehicleParams ¶ms); bool8 ProcessReverseGear(cVehicleParams ¶ms); - void ProcessModelCarEngine(cVehicleParams ¶ms); + void ProcessModelHeliVehicle(cVehicleParams ¶ms); + void ProcessModelVehicle(cVehicleParams ¶ms); + void ProcessVehicleFlatTyre(cVehicleParams ¶ms); bool8 ProcessVehicleRoadNoise(cVehicleParams ¶ms); bool8 ProcessWetRoadNoise(cVehicleParams ¶ms); bool8 ProcessVehicleEngine(cVehicleParams ¶ms); - void UpdateGasPedalAudio(CAutomobile *automobile); // inlined on PS2 + void UpdateGasPedalAudio(CVehicle *veh, int vehType); void PlayerJustGotInCar(); void PlayerJustLeftCar(); void AddPlayerCarSample(uint8 emittingVolume, uint32 freq, uint32 sample, uint8 bank, uint8 counter, bool8 notLooping); void ProcessCesna(cVehicleParams ¶ms); - void ProcessPlayersVehicleEngine(cVehicleParams ¶ms, CAutomobile *automobile); + void ProcessPlayersVehicleEngine(cVehicleParams ¶ms, CVehicle *veh); bool8 ProcessVehicleSkidding(cVehicleParams ¶ms); - float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange); - float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange); // inlined on PS2 - void ProcessVehicleHorn(cVehicleParams ¶ms); - bool8 UsesSiren(uint32 model); // inlined on PS2 - bool8 UsesSirenSwitching(uint32 model); // inlined on PS2 + float GetVehicleDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, float gasPedalAudio, cTransmission *transmission, float velocityChange); + float GetVehicleNonDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, cTransmission *transmission, float velocityChange); + bool8 ProcessVehicleHorn(cVehicleParams ¶ms); + bool8 UsesSiren(cVehicleParams ¶ms); + bool8 UsesSirenSwitching(cVehicleParams ¶ms); bool8 ProcessVehicleSirenOrAlarm(cVehicleParams ¶ms); - bool8 UsesReverseWarning(uint32 model); // inlined on PS2 + bool8 UsesReverseWarning(uint32 model); bool8 ProcessVehicleReverseWarning(cVehicleParams ¶ms); bool8 ProcessVehicleDoors(cVehicleParams ¶ms); bool8 ProcessAirBrakes(cVehicleParams ¶ms); - bool8 HasAirBrakes(uint32 model); // inlined on PS2 + bool8 HasAirBrakes(uint32 model); bool8 ProcessEngineDamage(cVehicleParams ¶ms); bool8 ProcessCarBombTick(cVehicleParams ¶ms); void ProcessVehicleOneShots(cVehicleParams ¶ms); +#ifdef GTA_TRAIN bool8 ProcessTrainNoise(cVehicleParams ¶ms); +#endif bool8 ProcessBoatEngine(cVehicleParams ¶ms); bool8 ProcessBoatMovingOverWater(cVehicleParams ¶ms); - bool8 ProcessHelicopter(cVehicleParams ¶ms); - void ProcessPlane(cVehicleParams ¶ms); // inlined on PS2 + void ProcessPlane(cVehicleParams ¶ms); void ProcessJumbo(cVehicleParams ¶ms); - void ProcessJumboTaxi(); // inlined on PS2 + void ProcessJumboTaxi(); void ProcessJumboAccel(CPlane *plane); - void ProcessJumboTakeOff(CPlane *plane); // inlined on PS2 - void ProcessJumboFlying(); // inlined on PS2 - void ProcessJumboLanding(CPlane *plane); // inlined on PS2 - void ProcessJumboDecel(CPlane *plane); // inlined on PS2 + void ProcessJumboTakeOff(CPlane *plane); + void ProcessJumboFlying(); + void ProcessJumboLanding(CPlane *plane); + void ProcessJumboDecel(CPlane *plane); bool8 SetupJumboTaxiSound(uint8 vol); bool8 SetupJumboWhineSound(uint8 emittingVol, uint32 freq); bool8 SetupJumboEngineSound(uint8 vol, uint32 freq); bool8 SetupJumboFlySound(uint8 emittingVol); bool8 SetupJumboRumbleSound(uint8 emittingVol); - int32 GetJumboTaxiFreq(); // inlined on PS2 + int32 GetJumboTaxiFreq(); // inlined in vc // peds - void ProcessPed(CPhysical *ped); // inlined on PS2 - void ProcessPedHeadphones(cPedParams ¶ms); + void ProcessPed(CPhysical *ped); void ProcessPedOneShots(cPedParams ¶ms); + void SetPedTalkingStatus(CPed *ped, bool8 status); + void SetPlayersMood(uint8 mood, uint32 time); + void ProcessPlayerMood(); // ped comments void SetupPedComments(cPedParams ¶ms, uint16 sound); - int32 GetPedCommentSfx(CPed *ped, uint16 sound); - void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset); // inlined on PS2 - uint32 GetPlayerTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetCopTalkSfx(uint16 sound); - uint32 GetSwatTalkSfx(uint16 sound); - uint32 GetFBITalkSfx(uint16 sound); - uint32 GetArmyTalkSfx(uint16 sound); - uint32 GetMedicTalkSfx(uint16 sound); - uint32 GetFiremanTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetBusinessMaleOldTalkSfx(uint16 sound); - uint32 GetBusinessMaleYoungTalkSfx(uint16 sound, uint32 model); - uint32 GetMafiaTalkSfx(uint16 sound); - uint32 GetTriadTalkSfx(uint16 sound); - uint32 GetDiabloTalkSfx(uint16 sound); - uint32 GetYakuzaTalkSfx(uint16 sound); - uint32 GetYardieTalkSfx(uint16 sound); - uint32 GetColumbianTalkSfx(uint16 sound); - uint32 GetHoodTalkSfx(uint16 sound); - uint32 GetBlackCriminalTalkSfx(uint16 sound); - uint32 GetWhiteCriminalTalkSfx(uint16 sound); - uint32 GetCasualMaleOldTalkSfx(uint16 sound); - uint32 GetCasualMaleYoungTalkSfx(uint16 sound); - uint32 GetBlackCasualFemaleTalkSfx(uint16 sound); - uint32 GetWhiteCasualFemaleTalkSfx(uint16 sound); - uint32 GetFemaleNo3TalkSfx(uint16 sound); - uint32 GetWhiteBusinessFemaleTalkSfx(uint16 sound, uint32 model); - uint32 GetBlackFatFemaleTalkSfx(uint16 sound); - uint32 GetWhiteFatMaleTalkSfx(uint16 sound); - uint32 GetBlackFatMaleTalkSfx(uint16 sound); - uint32 GetWhiteFatFemaleTalkSfx(uint16 sound); - uint32 GetBlackFemaleProstituteTalkSfx(uint16 sound); - uint32 GetWhiteFemaleProstituteTalkSfx(uint16 sound); - uint32 GetBlackProjectMaleTalkSfx(uint16 sound, uint32 model); - uint32 GetBlackProjectFemaleOldTalkSfx(uint16 sound); - uint32 GetBlackProjectFemaleYoungTalkSfx(uint16 sound); - uint32 GetChinatownMaleOldTalkSfx(uint16 sound); - uint32 GetChinatownMaleYoungTalkSfx(uint16 sound); - uint32 GetChinatownFemaleOldTalkSfx(uint16 sound); - uint32 GetChinatownFemaleYoungTalkSfx(uint16 sound); - uint32 GetLittleItalyMaleTalkSfx(uint16 sound); - uint32 GetLittleItalyFemaleOldTalkSfx(uint16 sound); - uint32 GetLittleItalyFemaleYoungTalkSfx(uint16 sound); - uint32 GetWhiteDockerMaleTalkSfx(uint16 sound); - uint32 GetBlackDockerMaleTalkSfx(uint16 sound); - uint32 GetScumMaleTalkSfx(uint16 sound); - uint32 GetScumFemaleTalkSfx(uint16 sound); - uint32 GetWhiteWorkerMaleTalkSfx(uint16 sound); - uint32 GetBlackWorkerMaleTalkSfx(uint16 sound); - uint32 GetBlackBusinessFemaleTalkSfx(uint16 sound); - uint32 GetSupermodelMaleTalkSfx(uint16 sound); - uint32 GetSupermodelFemaleTalkSfx(uint16 sound); - uint32 GetStewardMaleTalkSfx(uint16 sound); - uint32 GetStewardFemaleTalkSfx(uint16 sound); - uint32 GetFanMaleTalkSfx(uint16 sound, uint32 model); - uint32 GetFanFemaleTalkSfx(uint16 sound); - uint32 GetHospitalMaleTalkSfx(uint16 sound); - uint32 GetHospitalFemaleTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetWhiteConstructionWorkerTalkSfx(uint16 sound); - uint32 GetBlackConstructionWorkerTalkSfx(uint16 sound); - uint32 GetShopperFemaleTalkSfx(uint16 sound, uint32 model); - uint32 GetStudentMaleTalkSfx(uint16 sound); - uint32 GetStudentFemaleTalkSfx(uint16 sound); - - uint32 GetSpecialCharacterTalkSfx(uint32 modelIndex, uint16 sound); - uint32 GetEightBallTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetSalvatoreTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetMistyTalkSfx(uint16 sound); - uint32 GetOldJapTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetCatalinaTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetBomberTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetSecurityGuardTalkSfx(uint16 sound); - uint32 GetChunkyTalkSfx(uint16 sound); // inlined on PS2 - - uint32 GetAsianTaxiDriverTalkSfx(uint16 sound); // inlined on PS2 - uint32 GetPimpTalkSfx(uint16 sound); - uint32 GetNormalMaleTalkSfx(uint16 sound); - uint32 GetGenericMaleTalkSfx(uint16 sound); - uint32 GetGenericFemaleTalkSfx(uint16 sound); + uint32 GetPedCommentSfx(CPed *ped, uint16 sound); + void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset); + uint32 GetPlayerTalkSfx(CPed *ped, uint16 sound); + uint32 GetGenericMaleTalkSfx(CPed *ped, uint16 sound); // inlined in vc + uint32 GetGenericFemaleTalkSfx(CPed *ped, uint16 sound); // inlined in vc + uint32 GetDefaultTalkSfx(CPed *ped, uint16 sound); + uint32 GetCopTalkSfx(CPed *ped, uint16 sound); + uint32 GetSwatTalkSfx(CPed *ped, uint16 sound); + uint32 GetFBITalkSfx(CPed *ped, uint16 sound); + uint32 GetArmyTalkSfx(CPed *ped, uint16 sound); + uint32 GetMedicTalkSfx(CPed *ped, uint16 sound); + uint32 GetFiremanTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYG1TalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYG2TalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetHMYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetHMOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetHFORITalkSfx(CPed *ped, uint16 sound); + uint32 GetHMYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetHMORITalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetHFOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetHMYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetHMOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYBUTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYMDTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYCGTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFYPRTalkSfx(CPed *ped, uint16 sound); + uint32 GetHFOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetHMOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetHMOCATalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYCRTalkSfx(CPed *ped, uint16 sound); + uint32 GetBFYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetBFOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetBMOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetBFYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetBFORITalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetBFYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetBFOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetBMOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYBUTalkSfx(CPed *ped, uint16 sound); + uint32 GetBFYPRTalkSfx(CPed *ped, uint16 sound); + uint32 GetBFOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetBMOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYPITalkSfx(CPed *ped, uint16 sound); + uint32 GetBMYBBTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYCRTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYSKTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYSKTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOSTTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetWFORITalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYRITalkSfx(CPed *ped, uint16 sound); + uint32 GetWMORITalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYBETalkSfx(CPed *ped, uint16 sound); + uint32 GetWFOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOBETalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYCWTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYGOTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFOGOTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOGOTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYLGTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYLGTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYBUTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYBUTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOBUTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYPRTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOTRTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYPITalkSfx(CPed *ped, uint16 sound); + uint32 GetWMOCATalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYSHTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFOSHTalkSfx(CPed *ped, uint16 sound); + uint32 GetJFOTOTalkSfx(CPed *ped, uint16 sound); + uint32 GetJMOTOTalkSfx(CPed *ped, uint16 sound); + uint32 GetHNTalkSfx(CPed *ped, uint16 sound); + uint32 GetBKTalkSfx(CPed *ped, uint16 sound); + uint32 GetCBTalkSfx(CPed *ped, uint16 sound); + uint32 GetSGTalkSfx(CPed *ped, uint16 sound); + uint32 GetCLTalkSfx(CPed *ped, uint16 sound); + uint32 GetGDTalkSfx(CPed *ped, uint16 sound); + uint32 GetPGTalkSfx(CPed *ped, uint16 sound); + uint32 GetViceWhiteTalkSfx(CPed *ped, uint16 sound); + uint32 GetViceBlackTalkSfx(CPed *ped, uint16 sound); + uint32 GetBMODKTalkSfx(CPed *ped, uint16 sound); + uint32 GetHMYAPTalkSfx(CPed *ped, uint16 sound); + uint32 GetWFYJGTalkSfx(CPed *ped, uint16 sound); + uint32 GetWMYJGTalkSfx(CPed *ped, uint16 sound); + uint32 GetSpecialCharacterTalkSfx(CPed *ped, int32 model, uint16 sound); + + void DebugPlayPedComment(int32 sound); // particles void ProcessExplosions(int32 explosion); @@ -478,51 +538,46 @@ public: void ProcessWaterCannon(int32); // script objects - void ProcessScriptObject(int32 id); // inlined on PS2 + void ProcessScriptObject(int32 id); void ProcessOneShotScriptObject(uint8 sound); void ProcessLoopingScriptObject(uint8 sound); - void ProcessPornCinema(uint8 sound); - void ProcessWorkShopScriptObject(uint8 sound); - void ProcessSawMillScriptObject(uint8 sound); - void ProcessLaunderetteScriptObject(uint8 sound); - void ProcessShopScriptObject(uint8 sound); - void ProcessAirportScriptObject(uint8 sound); - void ProcessCinemaScriptObject(uint8 sound); - void ProcessDocksScriptObject(uint8 sound); - void ProcessHomeScriptObject(uint8 sound); - void ProcessPoliceCellBeatingScriptObject(uint8 sound); // misc void ProcessWeather(int32 id); void ProcessFrontEnd(); - void ProcessCrane(); + //void ProcessCrane(); void ProcessProjectiles(); + void ProcessEscalators(); + void ProcessExtraSounds(); void ProcessGarages(); void ProcessFireHydrant(); - // bridge - void ProcessBridge(); // inlined on PS2 +#ifdef GTA_BRIDGE + void ProcessBridge(); void ProcessBridgeWarning(); void ProcessBridgeMotor(); void ProcessBridgeOneShots(); +#endif // mission audio + const char *GetMissionAudioLoadedLabel(uint8 slot); bool8 MissionScriptAudioUsesPoliceChannel(uint32 soundMission); - void PreloadMissionAudio(Const char *name); - uint8 GetMissionAudioLoadingStatus(); - void SetMissionAudioLocation(float x, float y, float z); - void PlayLoadedMissionAudio(); - bool8 IsMissionAudioSampleFinished(); - bool8 IsMissionAudioSamplePlaying() { return m_nMissionAudioPlayStatus == PLAY_STATUS_PLAYING; } - bool8 ShouldDuckMissionAudio() { return IsMissionAudioSamplePlaying(); } - void ClearMissionAudio(); + void PreloadMissionAudio(uint8 slot, Const char *name); + uint8 GetMissionAudioLoadingStatus(uint8 slot); + void SetMissionAudioLocation(uint8 slot, float x, float y, float z); + void PlayLoadedMissionAudio(uint8 slot); + bool8 ShouldDuckMissionAudio(uint8 slot); + bool8 IsMissionAudioSamplePlaying(uint8 slot); + bool8 IsMissionAudioSampleFinished(uint8 slot); + void ClearMissionAudio(uint8 slot); // inlined in vc + void ProcessMissionAudioSlot(uint8 slot); void ProcessMissionAudio(); // police radio void InitialisePoliceRadioZones(); void InitialisePoliceRadio(); void ResetPoliceRadio(); - void SetMissionScriptPoliceAudio(uint32 sfx); + void SetMissionScriptPoliceAudio(uint32 sfx); // inlined and optimized int8 GetMissionScriptPoliceAudioPlayingStatus(); void DoPoliceRadioCrackle(); void ServicePoliceRadio(); @@ -531,7 +586,7 @@ public: void SetupSuspectLastSeenReport(); void ReportCrime(eCrimeType crime, const CVector &pos); void PlaySuspectLastSeen(float x, float y, float z); - void AgeCrimes(); // inlined on PS2 + void AgeCrimes(); // inlined in vc // collision stuff void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2); @@ -541,7 +596,9 @@ public: uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision); float GetCollisionOneShotRatio(uint32 a, float b); float GetCollisionLoopingRatio(uint32 a, uint32 b, float c); // not used - float GetCollisionRatio(float a, float b, float c, float d); // inlined on PS2 + float GetCollisionRatio(float a, float b, float c, float d); // inlined in vc + + float Sqrt(float v) const { return v <= 0.0f ? 0.0f : ::Sqrt(v); } }; /* @@ -570,9 +627,14 @@ public: #else #define SET_SOUND_REFLECTION(b) #endif +#ifdef AUDIO_REVERB +#define SET_SOUND_REVERB(b) m_sQueueSample.m_bReverb = b +#else +#define SET_SOUND_REVERB(b) +#endif #if defined(AUDIO_MSS) && !defined(PS2_AUDIO_CHANNELS) -static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error"); +static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error"); #endif extern cAudioManager AudioManager; |