From 2fabbc3b4cab40220986f402569af64673cb4cd9 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Fri, 16 Aug 2019 20:17:15 +0200 Subject: [PATCH] More more more audio --- eax/eax-util.cpp | 26 +- eax/eax-util.h | 22 +- src/animation/AnimBlendAssocGroup.cpp | 4 +- src/animation/AnimBlendAssocGroup.h | 2 +- src/animation/AnimBlendAssociation.cpp | 4 +- src/animation/AnimBlendHierarchy.cpp | 2 +- src/animation/AnimManager.cpp | 54 +- src/animation/AnimManager.h | 8 +- src/audio/AudioManager.cpp | 1699 +++++++++++++++++------- src/audio/AudioManager.h | 208 +-- src/audio/sampman.cpp | 35 +- src/control/CarCtrl.cpp | 22 +- src/control/CarGen.cpp | 2 +- src/control/Garages.cpp | 6 +- src/control/Garages.h | 2 +- src/control/PathFind.cpp | 69 +- src/control/Replay.cpp | 60 +- src/control/Script.cpp | 6 +- src/core/Camera.cpp | 10 +- src/core/Collision.cpp | 8 +- src/core/FileMgr.cpp | 8 +- src/core/FileMgr.h | 4 +- src/core/Frontend.cpp | 6 +- src/core/General.h | 2 +- src/core/IniFile.cpp | 4 +- src/core/Pad.cpp | 4 +- src/core/Streaming.cpp | 42 +- src/core/Wanted.cpp | 2 +- src/core/common.h | 10 +- src/core/main.cpp | 2 +- src/core/re3.cpp | 4 +- src/entities/Physical.cpp | 40 +- src/modelinfo/ClumpModelInfo.h | 4 +- src/modelinfo/VehicleModelInfo.cpp | 2 +- src/peds/Ped.cpp | 16 +- src/peds/Ped.h | 2 +- src/peds/PedPlacement.cpp | 2 +- src/render/Clouds.cpp | 8 +- src/render/Coronas.cpp | 20 +- src/render/Fluff.cpp | 2 +- src/render/Fluff.h | 2 +- src/render/Hud.cpp | 20 +- src/render/Lights.cpp | 28 +- src/render/ParticleMgr.cpp | 2 +- src/render/PointLights.cpp | 2 +- src/render/Shadows.cpp | 26 +- src/render/Timecycle.cpp | 6 +- src/render/VisibilityPlugins.cpp | 16 +- src/render/WaterLevel.cpp | 10 +- src/skel/win/win.cpp | 2 +- src/vehicles/Automobile.cpp | 58 +- src/vehicles/Boat.cpp | 2 +- src/vehicles/HandlingMgr.cpp | 8 +- src/vehicles/Heli.cpp | 12 +- src/vehicles/Plane.cpp | 4 +- src/vehicles/Vehicle.cpp | 8 +- 56 files changed, 1675 insertions(+), 964 deletions(-) diff --git a/eax/eax-util.cpp b/eax/eax-util.cpp index 44425957..42eef738 100644 --- a/eax/eax-util.cpp +++ b/eax/eax-util.cpp @@ -119,7 +119,7 @@ bool EAX3ListenerInterpolate(LPEAXLISTENERPROPERTIES lpStart, LPEAXLISTENERPROPE if (lpStart->flReflectionsDelay == lpFinish->flReflectionsDelay) lpResult->flReflectionsDelay = lpStart->flReflectionsDelay; else - lpResult->flReflectionsDelay = (float)exp( (log(lpStart->flReflectionsDelay+0.0001) * flInvRatio) + (log(lpFinish->flReflectionsDelay+0.0001) * flRatio) ); + lpResult->flReflectionsDelay = (float)exp( (log(lpStart->flReflectionsDelay+0.0001f) * flInvRatio) + (log(lpFinish->flReflectionsDelay+0.0001f) * flRatio) ); // Reflections Pan @@ -155,7 +155,7 @@ bool EAX3ListenerInterpolate(LPEAXLISTENERPROPERTIES lpStart, LPEAXLISTENERPROPE if (lpStart->flReverbDelay == lpFinish->flReverbDelay) lpResult->flReverbDelay = lpStart->flReverbDelay; else - lpResult->flReverbDelay = (float)exp( (log(lpStart->flReverbDelay+0.0001) * flInvRatio) + (log(lpFinish->flReverbDelay+0.0001) * flRatio) ); + lpResult->flReverbDelay = (float)exp( (log(lpStart->flReverbDelay+0.0001f) * flInvRatio) + (log(lpFinish->flReverbDelay+0.0001f) * flRatio) ); // Reverb Pan @@ -354,7 +354,7 @@ void Clamp(EAXVECTOR *eaxVector) // Array of scenario names // ////////////////////////////////////////////////////// -char* EAX30_SCENARIO_NAMES[] = +const char* EAX30_SCENARIO_NAMES[] = { "Castle", "Factory", @@ -376,7 +376,7 @@ char* EAX30_SCENARIO_NAMES[] = // Array of standardised location names // ////////////////////////////////////////////////////// -char* EAX30_LOCATION_NAMES[] = +const char* EAX30_LOCATION_NAMES[] = { "Hall", "Large Room", @@ -410,7 +410,7 @@ EAXLISTENERPROPERTIES EAX30_STANDARD_PRESETS[EAX30_NUM_STANDARD_SCENARIOS][EAX30 // Array of original environment names // ////////////////////////////////////////////////////// -char* EAX30_ORIGINAL_PRESET_NAMES[] = +const char* EAX30_ORIGINAL_PRESET_NAMES[] = { "Generic", "Padded Cell", @@ -480,7 +480,7 @@ EAXLISTENERPROPERTIES EAX30_ORIGINAL_PRESETS[] = // Array of sport environment names // ////////////////////////////////////////////////////// -char* EAX30_SPORTS_PRESET_NAMES[] = +const char* EAX30_SPORTS_PRESET_NAMES[] = { "Empty Stadium", "Full Stadium", @@ -512,7 +512,7 @@ EAXLISTENERPROPERTIES EAX30_SPORTS_PRESETS[] = // Array of prefab environment names // ////////////////////////////////////////////////////// -char* EAX30_PREFAB_PRESET_NAMES[] = +const char* EAX30_PREFAB_PRESET_NAMES[] = { "Workshop", "School Room", @@ -540,7 +540,7 @@ EAXLISTENERPROPERTIES EAX30_PREFAB_PRESETS[] = // Array of Domes & Pipes environment names // ////////////////////////////////////////////////////// -char* EAX30_DOMESNPIPES_PRESET_NAMES[] = +const char* EAX30_DOMESNPIPES_PRESET_NAMES[] = { "Domed Tomb", "Saint Paul's Dome", @@ -570,7 +570,7 @@ EAXLISTENERPROPERTIES EAX30_DOMESNPIPES_PRESETS[] = // Array of Outdoors environment names // ////////////////////////////////////////////////////// -char* EAX30_OUTDOORS_PRESET_NAMES[] = +const char* EAX30_OUTDOORS_PRESET_NAMES[] = { "Backyard", "Rolling Plains", @@ -598,7 +598,7 @@ EAXLISTENERPROPERTIES EAX30_OUTDOORS_PRESETS[] = // Array of Mood environment names // ////////////////////////////////////////////////////// -char* EAX30_MOOD_PRESET_NAMES[] = +const char* EAX30_MOOD_PRESET_NAMES[] = { "Heaven", "Hell", @@ -622,7 +622,7 @@ EAXLISTENERPROPERTIES EAX30_MOOD_PRESETS[] = // Array of driving environment names // ////////////////////////////////////////////////////// -char* EAX30_DRIVING_PRESET_NAMES[] = +const char* EAX30_DRIVING_PRESET_NAMES[] = { "Race Commentator", "Pit Garage", @@ -656,7 +656,7 @@ EAXLISTENERPROPERTIES EAX30_DRIVING_PRESETS[] = // Array of City environment names // ////////////////////////////////////////////////////// -char* EAX30_CITY_PRESET_NAMES[] = +const char* EAX30_CITY_PRESET_NAMES[] = { "City Streets", "Subway", @@ -686,7 +686,7 @@ EAXLISTENERPROPERTIES EAX30_CITY_PRESETS[] = // Array of Misc environment names // ////////////////////////////////////////////////////// -char* EAX30_MISC_PRESET_NAMES[] = +const char* EAX30_MISC_PRESET_NAMES[] = { "Dusty Box Room", "Chapel", diff --git a/eax/eax-util.h b/eax/eax-util.h index 204582aa..441f0115 100644 --- a/eax/eax-util.h +++ b/eax/eax-util.h @@ -372,7 +372,7 @@ EAX30_SCENARIO; // Array of scenario names // ////////////////////////////////////////////////////// -extern char* EAX30_SCENARIO_NAMES[]; +extern const char* EAX30_SCENARIO_NAMES[]; ////////////////////////////////////////////////////// // Standardised Locations enumerated // @@ -402,7 +402,7 @@ EAX30_LOCATION; // Array of standardised location names // ////////////////////////////////////////////////////// -extern char* EAX30_LOCATION_NAMES[]; +extern const char* EAX30_LOCATION_NAMES[]; ////////////////////////////////////////////////////// // Number of effects in each scenario // @@ -471,7 +471,7 @@ EAX30_ORIGINAL_PRESET_ENUMS; // Array of original environment names // ////////////////////////////////////////////////////// -extern char* EAX30_ORIGINAL_PRESET_NAMES[]; +extern const char* EAX30_ORIGINAL_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Original effects matrix // @@ -501,7 +501,7 @@ EAX30_SPORTS_PRESET_ENUMS; // Array of sport environment names // ////////////////////////////////////////////////////// -extern char* EAX30_SPORTS_PRESET_NAMES[]; +extern const char* EAX30_SPORTS_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Sports effects matrix // @@ -529,7 +529,7 @@ EAX30_PREFAB_PRESET_ENUMS; // Array of prefab environment names // ////////////////////////////////////////////////////// -char* EAX30_PREFAB_PRESET_NAMES[]; +extern const char* EAX30_PREFAB_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Prefab effects matrix // @@ -558,7 +558,7 @@ EAX30_DOMESNPIPES_PRESET_ENUMS; // Array of Domes & Pipes environment names // ////////////////////////////////////////////////////// -extern char* EAX30_DOMESNPIPES_PRESET_NAMES[]; +extern const char* EAX30_DOMESNPIPES_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Domes & Pipes effects matrix // @@ -586,7 +586,7 @@ EAX30_OUTDOORS_PRESET_ENUMS; // Array of Outdoors environment names // ////////////////////////////////////////////////////// -extern char* EAX30_OUTDOORS_PRESET_NAMES[]; +extern const char* EAX30_OUTDOORS_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Outdoors effects matrix // @@ -612,7 +612,7 @@ EAX30_MOOD_PRESET_ENUMS; // Array of Mood environment names // ////////////////////////////////////////////////////// -extern char* EAX30_MOOD_PRESET_NAMES[]; +extern const char* EAX30_MOOD_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Mood effects matrix // @@ -643,7 +643,7 @@ EAX30_DRIVING_PRESET_ENUMS; // Array of driving environment names // ////////////////////////////////////////////////////// -extern char* EAX30_DRIVING_PRESET_NAMES[]; +extern const char* EAX30_DRIVING_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Driving effects matrix // @@ -672,7 +672,7 @@ EAX30_CITY_PRESET_ENUMS; // Array of City environment names // ////////////////////////////////////////////////////// -extern char* EAX30_CITY_PRESET_NAMES[]; +extern const char* EAX30_CITY_PRESET_NAMES[]; ////////////////////////////////////////////////////// // City effects matrix // @@ -699,7 +699,7 @@ EAX30_MISC_PRESET_ENUMS; // Array of Misc environment names // ////////////////////////////////////////////////////// -extern char* EAX30_MISC_PRESET_NAMES[]; +extern const char* EAX30_MISC_PRESET_NAMES[]; ////////////////////////////////////////////////////// // Misc effects matrix // diff --git a/src/animation/AnimBlendAssocGroup.cpp b/src/animation/AnimBlendAssocGroup.cpp index 05f9a06a..72c90233 100644 --- a/src/animation/AnimBlendAssocGroup.cpp +++ b/src/animation/AnimBlendAssocGroup.cpp @@ -129,7 +129,7 @@ CAnimBlendAssocGroup::CreateAssociations(const char *name) // Create associations from hierarchies for a given clump void -CAnimBlendAssocGroup::CreateAssociations(const char *blockName, RpClump *clump, char **animNames, int numAssocs) +CAnimBlendAssocGroup::CreateAssociations(const char *blockName, RpClump *clump, const char **animNames, int numAssocs) { int i; CAnimBlock *animBlock; @@ -157,5 +157,5 @@ STARTPATCHES InjectHook(0x401420, (CAnimBlendAssociation *(CAnimBlendAssocGroup::*)(uint32))&CAnimBlendAssocGroup::CopyAnimation, PATCH_JUMP); InjectHook(0x4013E0, (CAnimBlendAssociation *(CAnimBlendAssocGroup::*)(const char*))&CAnimBlendAssocGroup::CopyAnimation, PATCH_JUMP); InjectHook(0x401130, (void (CAnimBlendAssocGroup::*)(const char*))&CAnimBlendAssocGroup::CreateAssociations, PATCH_JUMP); - InjectHook(0x401220, (void (CAnimBlendAssocGroup::*)(const char*, RpClump*, char**, int))&CAnimBlendAssocGroup::CreateAssociations, PATCH_JUMP); + InjectHook(0x401220, (void (CAnimBlendAssocGroup::*)(const char*, RpClump*, const char**, int))&CAnimBlendAssocGroup::CreateAssociations, PATCH_JUMP); ENDPATCHES diff --git a/src/animation/AnimBlendAssocGroup.h b/src/animation/AnimBlendAssocGroup.h index 708a3cdd..aa58b0d3 100644 --- a/src/animation/AnimBlendAssocGroup.h +++ b/src/animation/AnimBlendAssocGroup.h @@ -16,5 +16,5 @@ public: CAnimBlendAssociation *CopyAnimation(uint32 id); CAnimBlendAssociation *CopyAnimation(const char *name); void CreateAssociations(const char *name); - void CreateAssociations(const char *blockName, RpClump *clump, char **animNames, int numAssocs); + void CreateAssociations(const char *blockName, RpClump *clump, const char **animNames, int numAssocs); }; diff --git a/src/animation/AnimBlendAssociation.cpp b/src/animation/AnimBlendAssociation.cpp index d94fe2c1..d2214057 100644 --- a/src/animation/AnimBlendAssociation.cpp +++ b/src/animation/AnimBlendAssociation.cpp @@ -185,7 +185,7 @@ CAnimBlendAssociation::UpdateBlend(float timeDelta) if(blendAmount <= 0.0f && blendDelta < 0.0f){ // We're faded out and are not fading in blendAmount = 0.0f; - blendDelta = max(0.0, blendDelta); + blendDelta = Max(0.0f, blendDelta); if(flags & ASSOC_DELETEFADEDOUT){ if(callbackType == CB_FINISH || callbackType == CB_DELETE) callback(this, callbackArg); @@ -197,7 +197,7 @@ CAnimBlendAssociation::UpdateBlend(float timeDelta) if(blendAmount > 1.0f){ // Maximally faded in, clamp values blendAmount = 1.0f; - blendDelta = min(0.0, blendDelta); + blendDelta = Min(0.0f, blendDelta); } return true; diff --git a/src/animation/AnimBlendHierarchy.cpp b/src/animation/AnimBlendHierarchy.cpp index e4bcdc69..e594e5d8 100644 --- a/src/animation/AnimBlendHierarchy.cpp +++ b/src/animation/AnimBlendHierarchy.cpp @@ -36,7 +36,7 @@ CAnimBlendHierarchy::CalcTotalTime(void) float seqTime = 0.0f; for(j = 0; j < sequences[i].numFrames; j++) seqTime += sequences[i].GetKeyFrame(j)->deltaTime; - totalTime = max(totalTime, seqTime); + totalTime = Max(totalTime, seqTime); } totalLength = totalTime; } diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp index 6ad63e49..444ae93d 100644 --- a/src/animation/AnimManager.cpp +++ b/src/animation/AnimManager.cpp @@ -198,7 +198,7 @@ AnimAssocDesc aStdAnimDescsSide[] = { { ANIM_IDLE_STANCE, ASSOC_REPEAT }, { ANIM_WALK_START, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION }, }; -char *aStdAnimations[] = { +char const *aStdAnimations[] = { "walk_civi", "run_civi", "sprint_panic", @@ -373,162 +373,162 @@ char *aStdAnimations[] = { "PHONE_out", "PHONE_talk", }; -char *aPlayerAnimations[] = { +char const *aPlayerAnimations[] = { "walk_player", "run_player", "SPRINT_civi", "IDLE_STANCE", "walk_start", }; -char *aPlayerWithRocketAnimations[] = { +char const *aPlayerWithRocketAnimations[] = { "walk_rocket", "run_rocket", "run_rocket", "idle_rocket", "walk_start_rocket", }; -char *aPlayer1ArmedAnimations[] = { +char const *aPlayer1ArmedAnimations[] = { "walk_player", "run_1armed", "SPRINT_civi", "IDLE_STANCE", "walk_start", }; -char *aPlayer2ArmedAnimations[] = { +char const *aPlayer2ArmedAnimations[] = { "walk_player", "run_armed", "run_armed", "idle_stance", "walk_start", }; -char *aPlayerBBBatAnimations[] = { +char const *aPlayerBBBatAnimations[] = { "walk_player", "run_player", "run_player", "IDLE_STANCE", "walk_start", }; -char *aShuffleAnimations[] = { +char const *aShuffleAnimations[] = { "WALK_shuffle", "RUN_civi", "SPRINT_civi", "IDLE_STANCE", }; -char *aOldAnimations[] = { +char const *aOldAnimations[] = { "walk_old", "run_civi", "sprint_civi", "idle_stance", }; -char *aGang1Animations[] = { +char const *aGang1Animations[] = { "walk_gang1", "run_gang1", "sprint_civi", "idle_stance", }; -char *aGang2Animations[] = { +char const *aGang2Animations[] = { "walk_gang2", "run_gang1", "sprint_civi", "idle_stance", }; -char *aFatAnimations[] = { +char const *aFatAnimations[] = { "walk_fat", "run_civi", "woman_runpanic", "idle_stance", }; -char *aOldFatAnimations[] = { +char const *aOldFatAnimations[] = { "walk_fatold", "run_fatold", "woman_runpanic", "idle_stance", }; -char *aStdWomanAnimations[] = { +char const *aStdWomanAnimations[] = { "woman_walknorm", "woman_run", "woman_runpanic", "woman_idlestance", }; -char *aWomanShopAnimations[] = { +char const *aWomanShopAnimations[] = { "woman_walkshop", "woman_run", "woman_run", "woman_idlestance", }; -char *aBusyWomanAnimations[] = { +char const *aBusyWomanAnimations[] = { "woman_walkbusy", "woman_run", "woman_runpanic", "woman_idlestance", }; -char *aSexyWomanAnimations[] = { +char const *aSexyWomanAnimations[] = { "woman_walksexy", "woman_run", "woman_runpanic", "woman_idlestance", }; -char *aOldWomanAnimations[] = { +char const *aOldWomanAnimations[] = { "woman_walkold", "woman_run", "woman_runpanic", "woman_idlestance", }; -char *aFatWomanAnimations[] = { +char const *aFatWomanAnimations[] = { "walk_fat", "woman_run", "woman_runpanic", "woman_idlestance", }; -char *aPanicChunkyAnimations[] = { +char const *aPanicChunkyAnimations[] = { "run_fatold", "woman_runpanic", "woman_runpanic", "idle_stance", }; -char *aPlayerStrafeBackAnimations[] = { +char const *aPlayerStrafeBackAnimations[] = { "walk_player_back", "run_player_back", "run_player_back", "IDLE_STANCE", "walk_start_back", }; -char *aPlayerStrafeLeftAnimations[] = { +char const *aPlayerStrafeLeftAnimations[] = { "walk_player_left", "run_left", "run_left", "IDLE_STANCE", "walk_start_left", }; -char *aPlayerStrafeRightAnimations[] = { +char const *aPlayerStrafeRightAnimations[] = { "walk_player_right", "run_right", "run_right", "IDLE_STANCE", "walk_start_right", }; -char *aRocketStrafeBackAnimations[] = { +char const *aRocketStrafeBackAnimations[] = { "walk_rocket_back", "run_rocket_back", "run_rocket_back", "idle_rocket", "walkst_rocket_back", }; -char *aRocketStrafeLeftAnimations[] = { +char const *aRocketStrafeLeftAnimations[] = { "walk_rocket_left", "run_rocket_left", "run_rocket_left", "idle_rocket", "walkst_rocket_left", }; -char *aRocketStrafeRightAnimations[] = { +char const *aRocketStrafeRightAnimations[] = { "walk_rocket_right", "run_rocket_right", "run_rocket_right", "idle_rocket", "walkst_rocket_right", }; -AnimAssocDefinition CAnimManager::ms_aAnimAssocDefinitions[NUM_ANIM_ASSOC_GROUPS] = { +const AnimAssocDefinition CAnimManager::ms_aAnimAssocDefinitions[NUM_ANIM_ASSOC_GROUPS] = { { "man", "ped", MI_COP, 173, aStdAnimations, aStdAnimDescs }, { "player", "ped", MI_COP, 5, aPlayerAnimations, aStdAnimDescs }, { "playerrocket", "ped", MI_COP, 5, aPlayerWithRocketAnimations, aStdAnimDescs }, @@ -749,7 +749,7 @@ CAnimManager::LoadAnimFiles(void) RpClump *clump = (RpClump*)mi->CreateInstance(); RpAnimBlendClumpInit(clump); CAnimBlendAssocGroup *group = &CAnimManager::ms_aAnimAssocGroups[i]; - AnimAssocDefinition *def = &CAnimManager::ms_aAnimAssocDefinitions[i]; + const AnimAssocDefinition *def = &CAnimManager::ms_aAnimAssocDefinitions[i]; group->CreateAssociations(def->blockName, clump, def->animNames, def->numAnims); for(j = 0; j < group->numAssociations; j++) group->GetAnimation(j)->flags |= def->animDescs[j].flags; diff --git a/src/animation/AnimManager.h b/src/animation/AnimManager.h index 3a7c057c..d2e85c06 100644 --- a/src/animation/AnimManager.h +++ b/src/animation/AnimManager.h @@ -231,17 +231,17 @@ struct AnimAssocDesc struct AnimAssocDefinition { - char *name; - char *blockName; + char const *name; + char const *blockName; int32 modelIndex; int32 numAnims; - char **animNames; + char const **animNames; AnimAssocDesc *animDescs; }; class CAnimManager { - static AnimAssocDefinition ms_aAnimAssocDefinitions[NUM_ANIM_ASSOC_GROUPS]; + static const AnimAssocDefinition ms_aAnimAssocDefinitions[NUM_ANIM_ASSOC_GROUPS]; static CAnimBlock *ms_aAnimBlocks; //[2] static CAnimBlendHierarchy *ms_aAnimations; //[250] static int32 &ms_numAnimBlocks; diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index e08efbc6..e1860698 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -22,6 +22,7 @@ #include "Replay.h" #include "Stats.h" #include "SurfaceTable.h" +#include "Train.h" #include "Transmission.h" #include "Vehicle.h" #include "Weather.h" @@ -29,6 +30,11 @@ #include "ZoneCull.h" #include "sampman.h" +cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; + +constexpr int totalAudioEntitiesSlots = 200; +constexpr int maxVolume = 127; + uint32 *audioLogicTimers = (uint32 *)0x6508A0; // TODO: where is this used? Is this the right file? @@ -111,26 +117,117 @@ cPedComments::Add(tPedComment *com) uint8 index; if(nrOfCommentsInBank[activeBank] >= 20u) { - index = field_1120[activeBank][19]; + index = indexMap[activeBank][19]; if(m_asPedComments[activeBank][index].m_bVolume > com->m_bVolume) return; } else { index = nrOfCommentsInBank[activeBank]++; } - m_asPedComments[activeBank][index] = *com; + + m_asPedComments[activeBank][index].m_nSampleIndex = com->m_nSampleIndex; + m_asPedComments[activeBank][index].m_entityIndex = com->m_entityIndex; + m_asPedComments[activeBank][index].m_vecPos = com->m_vecPos; + m_asPedComments[activeBank][index].m_fDistance = com->m_fDistance; + m_asPedComments[activeBank][index].m_bVolume = com->m_bVolume; uint32 i = 0; if(index != 0) { for(i = 0; i < index; i++) { - if(m_asPedComments[activeBank][field_1120[activeBank][i]].m_bVolume < + if(m_asPedComments[activeBank][indexMap[activeBank][i]].m_bVolume < m_asPedComments[activeBank][index].m_bVolume) { - memmove(&field_1120[activeBank][i + 1], &field_1120[activeBank][i], - 19 - i); break; } } + + if(i < index) + memmove(&indexMap[activeBank][i + 1], &indexMap[activeBank][i], 19 - i); } - field_1120[activeBank][i] = index; + indexMap[activeBank][i] = index; +} + +void +cPedComments::Process() +{ + int sampleIndex; + uint8 actualUsedBank; + tPedComment *comment; + + if(!AudioManager.m_bUserPause) { + if(nrOfCommentsInBank[activeBank]) { + sampleIndex = + m_asPedComments[activeBank][indexMap[activeBank][0]].m_nSampleIndex; + if(!SampleManager.IsPedCommentLoaded(sampleIndex)) + SampleManager.LoadPedComment(sampleIndex); + + AudioManager.m_sQueueSample.m_nEntityIndex = + m_asPedComments[activeBank][indexMap[activeBank][0]].m_entityIndex; + AudioManager.m_sQueueSample.m_counter = 0; + AudioManager.m_sQueueSample.m_nSampleIndex = sampleIndex; + AudioManager.m_sQueueSample.m_bBankIndex = 1; + AudioManager.m_sQueueSample.field_16 = 3; + AudioManager.m_sQueueSample.m_bVolume = + m_asPedComments[activeBank][indexMap[activeBank][0]].m_bVolume; + AudioManager.m_sQueueSample.m_fDistance = + m_asPedComments[activeBank][indexMap[activeBank][0]].m_fDistance; + AudioManager.m_sQueueSample.m_nLoopCount = 1; + AudioManager.m_sQueueSample.m_nLoopStart = 0; + AudioManager.m_sQueueSample.m_nLoopEnd = -1; + AudioManager.m_sQueueSample.m_bEmittingVolume = maxVolume; + AudioManager.m_sQueueSample.field_48 = 3.0f; + switch(sampleIndex) { + case AUDIO_SAMPLE_POLICE_HELI_FOUND_PLAYER_1: + case AUDIO_SAMPLE_POLICE_HELI_FOUND_PLAYER_2: + case AUDIO_SAMPLE_POLICE_HELI_FOUND_PLAYER_3: + AudioManager.m_sQueueSample.m_fSoundIntensity = 400.0f; + break; + default: AudioManager.m_sQueueSample.m_fSoundIntensity = 50.0f; break; + } + AudioManager.m_sQueueSample.field_56 = 1; + AudioManager.m_sQueueSample.m_vecPos = + m_asPedComments[activeBank][indexMap[activeBank][0]].m_vecPos; + + if((sampleIndex - AUDIO_SAMPLE_AMMUNATION_WELCOME_1) > 1 && + sampleIndex != AUDIO_SAMPLE_AMMUNATION_WELCOME_3) { + AudioManager.m_sQueueSample.m_bReverbFlag = 1; + AudioManager.m_sQueueSample.m_bRequireReflection = 1; + } else { + AudioManager.m_sQueueSample.m_bReverbFlag = 0; + AudioManager.m_sQueueSample.m_bRequireReflection = 0; + } + + AudioManager.m_sQueueSample.m_bIsDistant = 0; + AudioManager.m_sQueueSample.m_nFrequency = + SampleManager.GetSampleBaseFrequency( + AudioManager.m_sQueueSample.m_nSampleIndex) + + AudioManager.RandomDisplacement(750u); + if(CTimer::GetIsSlowMotionActive()) + AudioManager.m_sQueueSample.m_nFrequency = + AudioManager.m_sQueueSample.m_nFrequency >> 1; + m_asPedComments[activeBank][indexMap[activeBank][0]].field_25 = -1; + AudioManager.AddSampleToRequestedQueue(); + } + + // Switch bank + if(activeBank) { + actualUsedBank = 1; + activeBank = 0; + } else { + actualUsedBank = 0; + activeBank = 1; + } + comment = m_asPedComments[actualUsedBank]; + for(uint32 i = 0; i < nrOfCommentsInBank[actualUsedBank]; i++) { + if(m_asPedComments[actualUsedBank][indexMap[actualUsedBank][i]].field_25 > + 0) { + --m_asPedComments[actualUsedBank][indexMap[actualUsedBank][i]] + .field_25; + Add(&comment[indexMap[actualUsedBank][i]]); + } + } + + for(uint32 i = 0; i < 20; i++) { indexMap[actualUsedBank][i] = 20; } + nrOfCommentsInBank[actualUsedBank] = 0; + } } void * @@ -154,11 +251,6 @@ cAudioScriptObject::operator delete(void *p, int handle) CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p); } -cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; - -constexpr int totalAudioEntitiesSlots = 200; -constexpr int maxVolume = 127; - char &g_nMissionAudioPlayingStatus = *(char *)0x60ED88; void @@ -184,11 +276,11 @@ cAudioManager::AddDetailsToRequestedOrderList(uint8 sample) void cAudioManager::AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 unk1, - uint8 unk2, bool notLooping) + uint8 counter, bool notLooping) { m_sQueueSample.m_bVolume = ComputeVolume(emittingVolume, 50.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = unk2; + m_sQueueSample.m_counter = counter; m_sQueueSample.m_nSampleIndex = sample; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -234,7 +326,7 @@ cAudioManager::AddReflectionsToRequestedQueue() ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume > emittingVolume >> 4) { - m_sQueueSample.field_4 += ((i + 1) << 8); + m_sQueueSample.m_counter += ((i + 1) << 8); if(m_sQueueSample.m_nLoopCount) { noise = RandomDisplacement( m_sQueueSample.m_nFrequency >> 5); @@ -244,9 +336,7 @@ cAudioManager::AddReflectionsToRequestedQueue() m_sQueueSample.m_nFrequency -= noise; } m_sQueueSample.field_16 += 20; - m_sQueueSample.m_vecPos.x = m_avecReflectionsPos[i].x; - m_sQueueSample.m_vecPos.y = m_avecReflectionsPos[i].y; - m_sQueueSample.m_vecPos.z = m_avecReflectionsPos[i].z; + m_sQueueSample.m_vecPos = m_avecReflectionsPos[i]; AddSampleToRequestedQueue(); } } @@ -268,7 +358,6 @@ void cAudioManager::AddSampleToRequestedQueue() { int32 calculatedVolume; - tActiveSample *sample; uint8 sampleIndex; bool bReflections; @@ -300,33 +389,7 @@ cAudioManager::AddSampleToRequestedQueue() if(!m_bDynamicAcousticModelingStatus) m_sQueueSample.m_bReverbFlag = 0; - sample = &m_asSamples[m_bActiveSampleQueue][sampleIndex]; - sample->m_nEntityIndex = m_sQueueSample.m_nEntityIndex; - sample->field_4 = m_sQueueSample.field_4; - sample->m_nSampleIndex = m_sQueueSample.m_nSampleIndex; - sample->m_bBankIndex = m_sQueueSample.m_bBankIndex; - sample->m_bIsDistant = m_sQueueSample.m_bIsDistant; - sample->field_16 = m_sQueueSample.field_16; - sample->m_nFrequency = m_sQueueSample.m_nFrequency; - sample->m_bVolume = m_sQueueSample.m_bVolume; - sample->m_fDistance = m_sQueueSample.m_fDistance; - sample->m_nLoopCount = m_sQueueSample.m_nLoopCount; - sample->m_nLoopStart = m_sQueueSample.m_nLoopStart; - sample->m_nLoopEnd = m_sQueueSample.m_nLoopEnd; - sample->m_bEmittingVolume = m_sQueueSample.m_bEmittingVolume; - sample->field_48 = m_sQueueSample.field_48; - sample->m_fSoundIntensity = m_sQueueSample.m_fSoundIntensity; - sample->field_56 = m_sQueueSample.field_56; - sample->m_vecPos = m_sQueueSample.m_vecPos; - sample->m_bReverbFlag = m_sQueueSample.m_bReverbFlag; - sample->m_bLoopsRemaining = m_sQueueSample.m_bLoopsRemaining; - sample->m_bRequireReflection = m_sQueueSample.m_bRequireReflection; - sample->m_bOffset = m_sQueueSample.m_bOffset; - sample->field_76 = m_sQueueSample.field_76; - sample->m_bIsProcessed = m_sQueueSample.m_bIsProcessed; - sample->m_bLoopEnded = m_sQueueSample.m_bLoopEnded; - sample->calculatedVolume = m_sQueueSample.calculatedVolume; - sample->field_88 = m_sQueueSample.field_88; + m_asSamples[m_bActiveSampleQueue][sampleIndex] = m_sQueueSample; AddDetailsToRequestedOrderList(sampleIndex); if(bReflections) AddReflectionsToRequestedQueue(); @@ -340,14 +403,6 @@ cAudioManager::AgeCrimes() EAXJMP(0x580AF0); } -int8 -cAudioManager::GetCurrent3DProviderIndex() -{ - if(m_bIsInitialised) return SampleManager.GetCurrent3DProviderIndex(); - - return -1; -} - void cAudioManager::CalculateDistance(bool *ptr, float dist) { @@ -358,7 +413,7 @@ cAudioManager::CalculateDistance(bool *ptr, float dist) } bool -cAudioManager::CheckForAnAudioFileOnCD() +cAudioManager::CheckForAnAudioFileOnCD() const { return SampleManager.CheckForAnAudioFileOnCD(); } @@ -388,18 +443,18 @@ cAudioManager::ClearRequestedQueue() int32 cAudioManager::ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, - float speedMultiplier) + float speedMultiplier) const { uint32 newFreq = oldFreq; if(!TheCamera.Get_Just_Switched_Status() && speedMultiplier != 0.0f) { float dist = position2 - position1; if(dist != 0.0f) { float speedOfSource = (dist / field_19195) * speedMultiplier; - if(speedOfSound > fabsf(speedOfSource)) { + if(speedOfSound > Abs(speedOfSource)) { if(speedOfSource < 0.0f) { - speedOfSource = max(speedOfSource, -1.5f); + speedOfSource = Max(speedOfSource, -1.5f); } else { - speedOfSource = min(speedOfSource, 1.5f); + speedOfSource = Min(speedOfSource, 1.5f); } newFreq = (oldFreq * speedOfSound) / (speedOfSource + speedOfSound); } @@ -416,7 +471,7 @@ cAudioManager::ComputePan(float, CVector *) } uint32 -cAudioManager::ComputeVolume(int emittingVolume, float soundIntensity, float distance) +cAudioManager::ComputeVolume(int emittingVolume, float soundIntensity, float distance) const { float newSoundIntensity; if(soundIntensity <= 0.0f) return 0; @@ -445,7 +500,7 @@ cAudioManager::CreateEntity(int32 type, void *entity) m_asAudioEntities[i].m_awAudioEvent[1] = SOUND_TOTAL_PED_SOUNDS; m_asAudioEntities[i].m_awAudioEvent[2] = SOUND_TOTAL_PED_SOUNDS; m_asAudioEntities[i].m_awAudioEvent[3] = SOUND_TOTAL_PED_SOUNDS; - m_asAudioEntities[i].field_24 = 0; + m_asAudioEntities[i].m_Loops = 0; m_anAudioEntityIndices[m_nAudioEntitiesTotal++] = i; return i; } @@ -467,7 +522,7 @@ cAudioManager::DestroyAllGameCreatedEntities() case AUDIOTYPE_WEATHER: case AUDIOTYPE_CRANE: case AUDIOTYPE_GARAGE: - case AUDIOTYPE_FIREHYDRANT: cAudioManager::DestroyEntity(i); break; + case AUDIOTYPE_FIREHYDRANT: DestroyEntity(i); break; case AUDIOTYPE_SCRIPTOBJECT: entity = (cAudioScriptObject *)m_asAudioEntities[i].m_pEntity; @@ -506,7 +561,7 @@ void cAudioManager::DoPoliceRadioCrackle() { m_sQueueSample.m_nEntityIndex = m_nPoliceChannelEntity; - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_POLICE_SCANNER_CRACKLE; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 1; @@ -532,15 +587,8 @@ cAudioManager::GenerateIntegerRandomNumberTable() for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } } -float -cAudioManager::GetDistanceSquared(CVector *v) -{ - const CVector &c = TheCamera.GetPosition(); - return sq(v->x - c.x) + sq(v->y - c.y) + sq((v->z - c.z) * 0.2f); -} - void -cAudioManager::TranslateEntity(CVector *v1, CVector *v2) +cAudioManager::TranslateEntity(CVector *v1, CVector *v2) const { const RwMatrix &cM = TheCamera.GetMatrix().m_matrix; const CVector &cV = TheCamera.GetPosition(); @@ -555,24 +603,27 @@ cAudioManager::TranslateEntity(CVector *v1, CVector *v2) } void -cAudioManager::Initialise() +cAudioManager::ResetAudioLogicTimers(int32 timer) { - if(!m_bIsInitialised) { - PreInitialiseGameSpecificSetup(); - m_bIsInitialised = SampleManager.Initialise(); - if(m_bIsInitialised) { - m_bActiveSamples = SampleManager.GetMaximumSupportedChannels(); - if(m_bActiveSamples <= 1u) { - Terminate(); - } else { - --m_bActiveSamples; - PostInitialiseGameSpecificSetup(); - InitialisePoliceRadioZones(); - InitialisePoliceRadio(); - MusicManager.Initialise(); + audioLogicTimers[0] = timer; + audioLogicTimers[8] = timer; + audioLogicTimers[1] = timer; + audioLogicTimers[7] = timer; + audioLogicTimers[2] = timer; + audioLogicTimers[6] = timer; + audioLogicTimers[3] = timer; + audioLogicTimers[5] = timer; + audioLogicTimers[4] = timer; + for(int32 i = 0; i < m_nAudioEntitiesTotal; i++) { + if(m_asAudioEntities[m_anAudioEntityIndices[i]].m_nType == AUDIOTYPE_PHYSICAL) { + CPed *ped = (CPed *)m_asAudioEntities[m_anAudioEntityIndices[i]].m_pEntity; + if(ped->IsPed()) { + ped->m_lastSoundStart = timer; + ped->m_soundStart = timer + m_anRandomTable[0] % 3000u; } } } +<<<<<<< HEAD } void @@ -623,6 +674,10 @@ void cAudioManager::ResetAudioLogicTimers(int32 timer) { EAXJMP(0x569650); +======= + ClearMissionAudio(); + SampleManager.StopChannel(28); +>>>>>>> More more more audio } void @@ -651,29 +706,15 @@ cAudioManager::Terminate() } } -char -cAudioManager::GetMissionScriptPoliceAudioPlayingStatus() -{ - return g_nMissionAudioPlayingStatus; -} - -bool -cAudioManager::GetMissionAudioLoadingStatus() -{ - if(m_bIsInitialised) return m_sMissionAudio.m_bLoadingStatus; - - return true; -} - uint8 -cAudioManager::GetNum3DProvidersAvailable() +cAudioManager::GetNum3DProvidersAvailable() const { if(m_bIsInitialised) return SampleManager.GetNum3DProvidersAvailable(); return 0; } bool -cAudioManager::IsMP3RadioChannelAvailable() +cAudioManager::IsMP3RadioChannelAvailable() const { if(m_bIsInitialised) return SampleManager.IsMP3RadioChannelAvailable(); @@ -681,7 +722,7 @@ cAudioManager::IsMP3RadioChannelAvailable() } uint8 -cAudioManager::GetCDAudioDriveLetter() +cAudioManager::GetCDAudioDriveLetter() const { if(m_bIsInitialised) return SampleManager.GetCDAudioDriveLetter(); @@ -689,31 +730,31 @@ cAudioManager::GetCDAudioDriveLetter() } void -cAudioManager::SetEffectsMasterVolume(uint8 volume) +cAudioManager::SetEffectsMasterVolume(uint8 volume) const { SampleManager.SetEffectsMasterVolume(volume); } void -cAudioManager::SetMusicMasterVolume(uint8 volume) +cAudioManager::SetMusicMasterVolume(uint8 volume) const { SampleManager.SetMusicMasterVolume(volume); } void -cAudioManager::SetEffectsFadeVolume(uint8 volume) +cAudioManager::SetEffectsFadeVolume(uint8 volume) const { SampleManager.SetEffectsFadeVolume(volume); } void -cAudioManager::SetMusicFadeVolume(uint8 volume) +cAudioManager::SetMusicFadeVolume(uint8 volume) const { SampleManager.SetMusicFadeVolume(volume); } void -cAudioManager::SetSpeakerConfig(int32 conf) +cAudioManager::SetSpeakerConfig(int32 conf) const { SampleManager.SetSpeakerConfig(conf); } @@ -724,7 +765,7 @@ bool cAudioManager::SetupJumboEngineSound(uint8, int32) { EAXJMP(0x56F140); } int32 *BankStartOffset = (int32 *)0x6FAB70; //[2] void -cAudioManager::PreInitialiseGameSpecificSetup() +cAudioManager::PreInitialiseGameSpecificSetup() const { BankStartOffset[0] = AUDIO_SAMPLE_VEHICLE_HORN_0; BankStartOffset[1] = AUDIO_SAMPLE_POLICE_COP_1_ARREST_1; @@ -733,7 +774,7 @@ cAudioManager::PreInitialiseGameSpecificSetup() int32 &g_nMissionAudioSfx = *(int32 *)0x60ED84; void -cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) +cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) const { if(m_bIsInitialised) { if(g_nMissionAudioPlayingStatus != 1) { @@ -744,7 +785,7 @@ cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) } bool -cAudioManager::UsesSiren(int32 model) +cAudioManager::UsesSiren(int32 model) const { switch(model) { case FIRETRUK: @@ -758,7 +799,7 @@ cAudioManager::UsesSiren(int32 model) } bool -cAudioManager::UsesSirenSwitching(int32 model) +cAudioManager::UsesSirenSwitching(int32 model) const { switch(model) { case AMBULAN: @@ -769,28 +810,8 @@ cAudioManager::UsesSirenSwitching(int32 model) } } -bool -cAudioManager::MissionScriptAudioUsesPoliceChannel(int32 soundMission) -{ - switch(soundMission) { - case STREAMED_SOUND_MISSION_J6_D: - case STREAMED_SOUND_MISSION_T4_A: - case STREAMED_SOUND_MISSION_S1_H: - case STREAMED_SOUND_MISSION_S3_B: - case STREAMED_SOUND_MISSION_EL3_A: - case STREAMED_SOUND_MISSION_A3_A: - case STREAMED_SOUND_MISSION_A5_A: - case STREAMED_SOUND_MISSION_K1_A: - case STREAMED_SOUND_MISSION_R1_A: - case STREAMED_SOUND_MISSION_R5_A: - case STREAMED_SOUND_MISSION_LO2_A: - case STREAMED_SOUND_MISSION_LO6_A: return true; - default: return false; - } -} - char * -cAudioManager::Get3DProviderName(uint8 id) +cAudioManager::Get3DProviderName(uint8 id) const { if(!m_bIsInitialised) return 0; if(id >= SampleManager.GetNum3DProvidersAvailable()) return 0; @@ -802,13 +823,13 @@ cAudioManager::SetupJumboFlySound(uint8 emittingVol) { int32 vol; - if(m_sQueueSample.m_fDistance >= 440.0) return 0; + if(m_sQueueSample.m_fDistance >= 440.0f) return 0; vol = ComputeVolume(emittingVol, 440.0f, m_sQueueSample.m_fDistance); m_sQueueSample.m_bVolume = vol; if(m_sQueueSample.m_bVolume) { m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_FLY_SOUND; - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.field_16 = 1; @@ -838,7 +859,7 @@ cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 240.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 5; + m_sQueueSample.m_counter = 5; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_RUMBLE_SOUND; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 1; @@ -859,10 +880,10 @@ cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) m_sQueueSample.m_bReverbFlag = 1; m_sQueueSample.m_bRequireReflection = 0; AddSampleToRequestedQueue(); - m_sQueueSample.field_4 = 6; + m_sQueueSample.m_counter = 6; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_RUMBLE_SOUND; m_sQueueSample.m_nFrequency += 200; - m_sQueueSample.m_bOffset = 127; + m_sQueueSample.m_bOffset = maxVolume; AddSampleToRequestedQueue(); } return 1; @@ -884,7 +905,7 @@ cAudioManager::SetupJumboTaxiSound(uint8 vol) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 180.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 1; + m_sQueueSample.m_counter = 1; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_TAXI_SOUND; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -915,7 +936,7 @@ cAudioManager::SetupJumboWhineSound(uint8 emittingVol, int32 freq) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 170.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 2; + m_sQueueSample.m_counter = 2; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_WHINE_SOUND; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -938,15 +959,6 @@ cAudioManager::SetupJumboWhineSound(uint8 emittingVol, int32 freq) return 1; } -void -cAudioManager::PlayLoadedMissionAudio() -{ - if(m_bIsInitialised && m_sMissionAudio.m_nSampleIndex != NO_SAMPLE && - m_sMissionAudio.m_bLoadingStatus == 1 && !m_sMissionAudio.m_bPlayStatus) { - m_sMissionAudio.m_bIsPlayed = true; - } -} - void cAudioManager::SetMissionAudioLocation(float x, float y, float z) { @@ -967,54 +979,15 @@ cAudioManager::ResetPoliceRadio() } } -void -cAudioManager::InterrogateAudioEntities() -{ - for(int32 i = 0; i < m_nAudioEntitiesTotal; i++) { - ProcessEntity(m_anAudioEntityIndices[i]); - m_asAudioEntities[m_anAudioEntityIndices[i]].field_24 = 0; - } -} - bool -cAudioManager::UsesReverseWarning(int32 model) +cAudioManager::UsesReverseWarning(int32 model) const { return model == LINERUN || model == FIRETRUK || model == TRASH || model == BUS || - model == COACH; // fix -} - -bool -cAudioManager::HasAirBrakes(int32 model) -{ - return model == LINERUN || model == FIRETRUK || model == TRASH || model == BUS || - model == COACH; // fix + model == COACH; } int32 -cAudioManager::GetJumboTaxiFreq() -{ - return (60.833f * m_sQueueSample.m_fDistance) + 22050; -} - -bool -cAudioManager::IsMissionAudioSampleFinished() -{ - if(m_bIsInitialised) return m_sMissionAudio.m_bPlayStatus == 2; - - static int32 cPretendFrame = 1; - - return (cPretendFrame++ & 63) == 0; -} - -WRAPPER -void -cAudioManager::InitialisePoliceRadio() -{ - EAXJMP(0x57EEC0); -} - -int32 -cAudioManager::RandomDisplacement(uint32 seed) +cAudioManager::RandomDisplacement(uint32 seed) const { int32 value; @@ -1032,13 +1005,13 @@ cAudioManager::RandomDisplacement(uint32 seed) } void -cAudioManager::ReleaseDigitalHandle() +cAudioManager::ReleaseDigitalHandle() const { if(m_bIsInitialised) { SampleManager.ReleaseDigitalHandle(); } } void -cAudioManager::ReacquireDigitalHandle() +cAudioManager::ReacquireDigitalHandle() const { if(m_bIsInitialised) { SampleManager.ReacquireDigitalHandle(); } } @@ -1064,60 +1037,7 @@ cAudioManager::SetEntityStatus(int32 id, bool status) } void -cAudioManager::PreTerminateGameSpecificShutdown() -{ - if(m_nBridgeEntity >= 0) { - DestroyEntity(m_nBridgeEntity); - m_nBridgeEntity = -5; - } - if(m_nPoliceChannelEntity >= 0) { - DestroyEntity(m_nPoliceChannelEntity); - m_nPoliceChannelEntity = -5; - } - if(m_nWaterCannonEntity >= 0) { - DestroyEntity(m_nWaterCannonEntity); - m_nWaterCannonEntity = -5; - } - if(m_nFireAudioEntity >= 0) { - DestroyEntity(m_nFireAudioEntity); - m_nFireAudioEntity = -5; - } - if(m_nCollisionEntity >= 0) { - DestroyEntity(m_nCollisionEntity); - m_nCollisionEntity = -5; - } - if(m_nFrontEndEntity >= 0) { - DestroyEntity(m_nFrontEndEntity); - m_nFrontEndEntity = -5; - } - if(m_nProjectileEntity >= 0) { - DestroyEntity(m_nProjectileEntity); - m_nProjectileEntity = -5; - } -} - -void -cAudioManager::PostTerminateGameSpecificShutdown() -{ - ; -} - -bool &bPlayerJustEnteredCar = *(bool *)0x6508C4; - -void -cAudioManager::PlayerJustGotInCar() -{ - if(m_bIsInitialised) { bPlayerJustEnteredCar = true; } -} - -void -cAudioManager::PlayerJustLeftCar(void) -{ - // UNUSED: This is a perfectly empty function. -} - -void -cAudioManager::GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) +cAudioManager::GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) const { *phrase = sample + m_anRandomTable[m_sQueueSample.m_nEntityIndex & 3] % maxOffset; @@ -1130,7 +1050,7 @@ cAudioManager::GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint uint8 &jumboVolOffset = *(uint8 *)0x6508ED; void -cAudioManager::DoJumboVolOffset() +cAudioManager::DoJumboVolOffset() const { if(!(m_FrameCounter % (m_anRandomTable[0] % 6u + 3))) jumboVolOffset = m_anRandomTable[1] % 60u; @@ -1258,9 +1178,7 @@ cAudioManager::GetCopTalkSfx(int16 sound) if(sound == SOUND_PED_ARREST_COP) { GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_COP_1_ARREST_1, 6u); } else { - if(sound != SOUND_PED_PURSUIT_COP) { - return cAudioManager::GetGenericMaleTalkSfx(sound); - } + if(sound != SOUND_PED_PURSUIT_COP) { return GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) @@ -1281,9 +1199,7 @@ cAudioManager::GetSwatTalkSfx(int16 sound) if(sound == SOUND_PED_ARREST_SWAT) { GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_SWAT_1_PURSUIT_ARREST_1, 6u); } else { - if(sound != SOUND_PED_PURSUIT_SWAT) { - return cAudioManager::GetGenericMaleTalkSfx(sound); - } + if(sound != SOUND_PED_PURSUIT_SWAT) { return GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) @@ -1304,9 +1220,7 @@ cAudioManager::GetFBITalkSfx(int16 sound) if(sound == SOUND_PED_ARREST_FBI) { GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_FBI_1_PURSUIT_ARREST_1, 6u); } else { - if(sound != SOUND_PED_PURSUIT_FBI) { - return cAudioManager::GetGenericMaleTalkSfx(sound); - } + if(sound != SOUND_PED_PURSUIT_FBI) { return GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) @@ -1324,7 +1238,7 @@ cAudioManager::GetArmyTalkSfx(int16 sound) PedState pedState; static uint32 lastSfx = NO_SAMPLE; - if(sound != SOUND_PED_PURSUIT_ARMY) { return cAudioManager::GetGenericMaleTalkSfx(sound); } + if(sound != SOUND_PED_PURSUIT_ARMY) { return GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) @@ -1356,7 +1270,7 @@ cAudioManager::GetMedicTalkSfx(int16 sound) case SOUND_PED_FLEE_RUN: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_FLEE_RUN_1, 6u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 37 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1364,7 +1278,7 @@ cAudioManager::GetMedicTalkSfx(int16 sound) uint32 cAudioManager::GetFiremanTalkSfx(int16 sound) { - return cAudioManager::GetGenericMaleTalkSfx(sound); + return GetGenericMaleTalkSfx(sound); } uint32 @@ -1398,7 +1312,7 @@ cAudioManager::GetNormalMaleTalkSfx(int16 sound) case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_1, 25u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return sfx; } @@ -1412,8 +1326,7 @@ cAudioManager::GetTaxiDriverTalkSfx(int16 sound) if(sound == SOUND_PED_CAR_JACKED) { GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_JACKED_1, 7u); } else { - if(sound != SOUND_PED_CAR_COLLISION) - return cAudioManager::GetGenericMaleTalkSfx(sound); + if(sound != SOUND_PED_CAR_COLLISION) return GetGenericMaleTalkSfx(sound); GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_COLLISION_1, 6u); } return 13 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; @@ -1441,7 +1354,7 @@ cAudioManager::GetPimpTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CHAT_EVENT_1, 2u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CHAT_1, 17u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return sfx; } @@ -1472,7 +1385,7 @@ cAudioManager::GetMafiaTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CHAT_1, 7u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 30 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } @@ -1506,7 +1419,7 @@ cAudioManager::GetTriadTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CHAT_1, 8u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return sfx; } @@ -1523,7 +1436,7 @@ cAudioManager::GetDiabloTalkSfx(int16 sound) break; case SOUND_PED_HANDS_COWER: sound = SOUND_PED_FLEE_SPRINT; - return cAudioManager::GetGenericMaleTalkSfx(sound); + return GetGenericMaleTalkSfx(sound); break; case SOUND_PED_CAR_JACKING: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CAR_JACKING_1, 2u); @@ -1544,7 +1457,7 @@ cAudioManager::GetDiabloTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CHAT_SEXY_1, 4u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CHAT_1, 5u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 30 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1572,7 +1485,7 @@ cAudioManager::GetYakuzaTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_CHAT_1, 5u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 24 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1602,7 +1515,7 @@ cAudioManager::GetYardieTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_CHAT_SEXY_1, 2u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_CHAT_1, 8u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 31 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1633,7 +1546,7 @@ cAudioManager::GetColumbianTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_CHAT_SEXY_1, 2u); break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_CHAT_1, 5u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return 27 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1668,7 +1581,7 @@ cAudioManager::GetHoodTalkSfx(int16 sound) break; case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CHAT_1, 6u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; + default: return GetGenericMaleTalkSfx(sound); break; } return 35 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -1696,7 +1609,7 @@ cAudioManager::GetBlackCriminalTalkSfx(int16 sound) case SOUND_PED_CAR_COLLISION: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_CAR_COLLISION_1, 5u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; + default: return GetGenericMaleTalkSfx(sound); break; } return sfx; } @@ -1724,7 +1637,7 @@ cAudioManager::GetWhiteCriminalTalkSfx(int16 sound) case SOUND_PED_CAR_COLLISION: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_CAR_COLLISION_1, 4u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; + default: return GetGenericMaleTalkSfx(sound); break; } return sfx; } @@ -1737,8 +1650,7 @@ cAudioManager::GetMaleNo2TalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CAR_JACKED_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CAR_JACKED_1, 3u); break; case SOUND_PED_ROBBED: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_ROBBED_1, 4u); @@ -1750,8 +1662,7 @@ cAudioManager::GetMaleNo2TalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_SEXY: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CHAT_SEXY_1, 5u); @@ -1759,7 +1670,7 @@ cAudioManager::GetMaleNo2TalkSfx(int16 sound) case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CHAT_1, 7u); break; - default: return cAudioManager::GetGenericMaleTalkSfx(sound); + default: return GetGenericMaleTalkSfx(sound); } return sfx; } @@ -2122,9 +2033,8 @@ cAudioManager::GetBlackProjectFemaleOldTalkSfx(int16 sound) 6u); break; case SOUND_PED_CAR_COLLISION: - cAudioManager::GetPhrase( - &sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_EVENT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CHAT_EVENT_1, @@ -2146,9 +2056,8 @@ cAudioManager::GetBlackProjectFemaleYoungTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - cAudioManager::GetPhrase( - &sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_HANDS_COWER_1, - 4u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_HANDS_COWER_1, 4u); break; case SOUND_PED_CAR_JACKED: sfx = AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_JACKED_1; @@ -2162,9 +2071,8 @@ cAudioManager::GetBlackProjectFemaleYoungTalkSfx(int16 sound) 5u); break; case SOUND_PED_CAR_COLLISION: - cAudioManager::GetPhrase( - &sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_EVENT: GetPhrase(&sfx, &lastSfx, @@ -3173,17 +3081,15 @@ cAudioManager::GetEightTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_HANDS_UP_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_HANDS_UP_1, 2u); break; case SOUND_PED_ROBBED: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_ATTACK_1, 6u); - break; - case SOUND_PED_EVADE: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_EVADE_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_ATTACK_1, 6u); break; + case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_EVADE_1, 7u); break; default: return GetGenericMaleTalkSfx(sound); } return sfx; @@ -3333,24 +3239,208 @@ cAudioManager::GetGenericFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_DEATH: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_DEATH_1, 10u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_DEATH_1, 10u); break; case SOUND_PED_BULLET_HIT: case SOUND_PED_DEFEND: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_INJURED_PED_FEMALE_OUCH_1, - 11u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_INJURED_PED_FEMALE_OUCH_1, 11u); break; case SOUND_PED_BURNING: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_BURNING_1, 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_BURNING_1, 9u); break; case SOUND_PED_FLEE_SPRINT: - cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_FLEE_SPRINT_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_FLEE_SPRINT_1, 8u); break; default: return NO_SAMPLE; } return sfx; } +int8 +cAudioManager::GetCurrent3DProviderIndex() const +{ + if(m_bIsInitialised) return SampleManager.GetCurrent3DProviderIndex(); + + return -1; +} + +float +cAudioManager::GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const +{ + return GetCollisionRatio(c, 0.0f, 0.02f, 0.02f); +} + +float +cAudioManager::GetCollisionOneShotRatio(uint32 a, float b) const +{ + float result; + + switch(a) { + case 0u: + case 1u: + case 5u: + case 26u: + case 31u: result = GetCollisionRatio(b, 10.0, 60.0, 50.0); break; + case 2u: + case 3u: + case 4u: + case 30u: result = GetCollisionRatio(b, 0.0, 2.0, 2.0); break; + case 6u: result = GetCollisionRatio(b, 6.0, 50.0, 44.0); break; + case 7u: + case 16u: result = GetCollisionRatio(b, 0.1, 10.0, 9.9); break; + case 8u: + case 11u: result = GetCollisionRatio(b, 30.0, 130.0, 100.0); break; + case 9u: result = GetCollisionRatio(b, 20.0, 100.0, 80.0); break; + case 10u: result = GetCollisionRatio(b, 0.0, 4.0, 4.0); break; + case 12u: + case 13u: + case 32u: result = GetCollisionRatio(b, 1.0, 10.0, 9.0); break; + case 14u: result = GetCollisionRatio(b, 1.0, 15.0, 14.0); break; + case 15u: result = GetCollisionRatio(b, 8.0, 50.0, 42.0); break; + case 17u: result = GetCollisionRatio(b, 0.0, 20.0, 20.0); break; + case 18u: + case 19u: + case 23u: + case 29u: result = GetCollisionRatio(b, 0.0, 10.0, 10.0); break; + case 20u: result = GetCollisionRatio(b, 1.0, 4.0, 3.0); break; + case 21u: result = GetCollisionRatio(b, 0.1, 5.0, 4.9); break; + case 22u: result = GetCollisionRatio(b, 0.1, 40.0, 39.9); break; + case 24u: result = GetCollisionRatio(b, 0.1, 4.0, 3.9); break; + case 25u: result = GetCollisionRatio(b, 0.0, 0.5, 0.5); break; + case 27u: result = GetCollisionRatio(b, 4.0, 40.0, 36.0); break; + case 28u: result = GetCollisionRatio(b, 0.0, 5.0, 5.0); break; + default: result = 0.0; break; + } + return result; +} + +float +cAudioManager::GetCollisionRatio(float a, float b, float c, float d) const +{ + float e; + e = a; + if(a <= b) return 0.0f; + if(c <= a) e = c; + return (e - b) / d; +} + +float +cAudioManager::GetDistanceSquared(CVector *v) const +{ + const CVector &c = TheCamera.GetPosition(); + return sq(v->x - c.x) + sq(v->y - c.y) + sq((v->z - c.z) * 0.2f); +} + +int32 +cAudioManager::GetJumboTaxiFreq() const +{ + return (60.833f * m_sQueueSample.m_fDistance) + 22050; +} + +bool +cAudioManager::GetMissionAudioLoadingStatus() const +{ + if(m_bIsInitialised) return m_sMissionAudio.m_bLoadingStatus; + + return true; +} + +char +cAudioManager::GetMissionScriptPoliceAudioPlayingStatus() const +{ + return g_nMissionAudioPlayingStatus; +} + +bool +cAudioManager::HasAirBrakes(int32 model) const +{ + return model == LINERUN || model == FIRETRUK || model == TRASH || model == BUS || + model == COACH; +} + +void +cAudioManager::Initialise() +{ + if(!m_bIsInitialised) { + PreInitialiseGameSpecificSetup(); + m_bIsInitialised = SampleManager.Initialise(); + if(m_bIsInitialised) { + m_bActiveSamples = SampleManager.GetMaximumSupportedChannels(); + if(m_bActiveSamples <= 1u) { + Terminate(); + } else { + --m_bActiveSamples; + PostInitialiseGameSpecificSetup(); + InitialisePoliceRadioZones(); + InitialisePoliceRadio(); + MusicManager.Initialise(); + } + } + } +} + +WRAPPER +void +cAudioManager::InitialisePoliceRadio() +{ + EAXJMP(0x57EEC0); +} + +WRAPPER +void +cAudioManager::InitialisePoliceRadioZones() +{ + EAXJMP(0x57EAC0); +} + +void +cAudioManager::InterrogateAudioEntities() +{ + for(int32 i = 0; i < m_nAudioEntitiesTotal; i++) { + ProcessEntity(m_anAudioEntityIndices[i]); + m_asAudioEntities[m_anAudioEntityIndices[i]].m_Loops = 0; + } +} + +bool +cAudioManager::IsMissionAudioSampleFinished() +{ + if(m_bIsInitialised) return m_sMissionAudio.m_bPlayStatus == 2; + + static int32 cPretendFrame = 1; + + return (cPretendFrame++ & 63) == 0; +} + +bool +cAudioManager::MissionScriptAudioUsesPoliceChannel(int32 soundMission) const +{ + switch(soundMission) { + case STREAMED_SOUND_MISSION_J6_D: + case STREAMED_SOUND_MISSION_T4_A: + case STREAMED_SOUND_MISSION_S1_H: + case STREAMED_SOUND_MISSION_S3_B: + case STREAMED_SOUND_MISSION_EL3_A: + case STREAMED_SOUND_MISSION_A3_A: + case STREAMED_SOUND_MISSION_A5_A: + case STREAMED_SOUND_MISSION_K1_A: + case STREAMED_SOUND_MISSION_R1_A: + case STREAMED_SOUND_MISSION_R5_A: + case STREAMED_SOUND_MISSION_LO2_A: + case STREAMED_SOUND_MISSION_LO6_A: return true; + default: return false; + } +} + +void +cAudioManager::PlayLoadedMissionAudio() +{ + if(m_bIsInitialised && m_sMissionAudio.m_nSampleIndex != NO_SAMPLE && + m_sMissionAudio.m_bLoadingStatus == 1 && !m_sMissionAudio.m_bPlayStatus) { + m_sMissionAudio.m_bIsPlayed = true; + } +} + WRAPPER void cAudioManager::PlayOneShot(int32 index, int16 sound, float vol) @@ -3358,6 +3448,95 @@ cAudioManager::PlayOneShot(int32 index, int16 sound, float vol) EAXJMP(0x57A500); } +bool &bPlayerJustEnteredCar = *(bool *)0x6508C4; + +void +cAudioManager::PlayerJustGotInCar() const +{ + if(m_bIsInitialised) { bPlayerJustEnteredCar = true; } +} + +void +cAudioManager::PlayerJustLeftCar(void) const +{ + // UNUSED: This is a perfectly empty function. +} + +void +cAudioManager::PostInitialiseGameSpecificSetup() +{ + m_nFireAudioEntity = + CreateEntity(AUDIOTYPE_FIRE, + (CPhysical *)0x8F31D0); // last is addr of firemanager @todo change + if(m_nFireAudioEntity >= 0) SetEntityStatus(m_nFireAudioEntity, 1); + + m_nCollisionEntity = CreateEntity(AUDIOTYPE_COLLISION, (CPhysical *)1); + if(m_nCollisionEntity >= 0) SetEntityStatus(m_nCollisionEntity, 1); + + m_nFrontEndEntity = CreateEntity(AUDIOTYPE_FRONTEND, (CPhysical *)1); + if(m_nFrontEndEntity >= 0) SetEntityStatus(m_nFrontEndEntity, 1); + + m_nProjectileEntity = CreateEntity(AUDIOTYPE_PROJECTILE, (CPhysical *)1); + if(m_nProjectileEntity >= 0) SetEntityStatus(m_nProjectileEntity, 1); + + m_nWaterCannonEntity = CreateEntity(AUDIOTYPE_WATER_CANNON, (CPhysical *)1); + if(m_nWaterCannonEntity >= 0) SetEntityStatus(m_nWaterCannonEntity, 1); + + m_nPoliceChannelEntity = CreateEntity(AUDIOTYPE_D, (CPhysical *)1); + if(m_nPoliceChannelEntity >= 0) SetEntityStatus(m_nPoliceChannelEntity, 1); + + m_nBridgeEntity = CreateEntity(AUDIOTYPE_BRIDGE, (CPhysical *)1); + if(m_nBridgeEntity >= 0) SetEntityStatus(m_nBridgeEntity, 1); + + m_sMissionAudio.m_nSampleIndex = NO_SAMPLE; + m_sMissionAudio.m_bLoadingStatus = 0; + m_sMissionAudio.m_bPlayStatus = 0; + m_sMissionAudio.field_22 = 0; + m_sMissionAudio.m_bIsPlayed = 0; + m_sMissionAudio.field_12 = 1; + m_sMissionAudio.field_24 = 0; + ResetAudioLogicTimers((int32)CTimer::GetTimeInMilliseconds); +} + +void +cAudioManager::PostTerminateGameSpecificShutdown() +{ + ; +} + +void +cAudioManager::PreTerminateGameSpecificShutdown() +{ + if(m_nBridgeEntity >= 0) { + DestroyEntity(m_nBridgeEntity); + m_nBridgeEntity = -5; + } + if(m_nPoliceChannelEntity >= 0) { + DestroyEntity(m_nPoliceChannelEntity); + m_nPoliceChannelEntity = -5; + } + if(m_nWaterCannonEntity >= 0) { + DestroyEntity(m_nWaterCannonEntity); + m_nWaterCannonEntity = -5; + } + if(m_nFireAudioEntity >= 0) { + DestroyEntity(m_nFireAudioEntity); + m_nFireAudioEntity = -5; + } + if(m_nCollisionEntity >= 0) { + DestroyEntity(m_nCollisionEntity); + m_nCollisionEntity = -5; + } + if(m_nFrontEndEntity >= 0) { + DestroyEntity(m_nFrontEndEntity); + m_nFrontEndEntity = -5; + } + if(m_nProjectileEntity >= 0) { + DestroyEntity(m_nProjectileEntity); + m_nProjectileEntity = -5; + } +} + #if 1 WRAPPER @@ -3390,7 +3569,7 @@ cAudioManager::ProcessAirBrakes(cVehicleParams *params) rand = m_anRandomTable[0] % 10u + 70; m_sQueueSample.m_bVolume = ComputeVolume(rand, 30.0f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 13; + m_sQueueSample.m_counter = 13; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_VEHICLE_AIR_BRAKES; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_VEHICLE_AIR_BRAKES); @@ -3447,7 +3626,7 @@ cAudioManager::ProcessAirportScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_4 = counter++; + m_sQueueSample.m_counter = counter++; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -3485,7 +3664,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume(80u, 50.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 39; + m_sQueueSample.m_counter = 39; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_MOTOR; m_sQueueSample.m_nFrequency = 10386; m_sQueueSample.m_nFrequency += @@ -3535,7 +3714,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 50.f, m_sQueueSample.m_fDistance); if(!m_sQueueSample.m_bVolume) return 1; - m_sQueueSample.field_4 = 40; + m_sQueueSample.m_counter = 40; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BOAT_ENGINE; m_sQueueSample.m_nFrequency += (m_sQueueSample.m_nEntityIndex << 16) % 1000; m_sQueueSample.m_bBankIndex = 0; @@ -3562,7 +3741,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) if(padAccelerate <= 20) { emittingVol = 45 - 45 * padAccelerate / 40; m_sQueueSample.m_nFrequency = 100 * padAccelerate + 11025; - m_sQueueSample.field_4 = 39; + m_sQueueSample.m_counter = 39; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BOAT_ENGINE_IDLE; if(LastAccel > 20) { @@ -3577,7 +3756,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) if(!boat->m_bIsAnchored) m_sQueueSample.m_nFrequency = 11 * m_sQueueSample.m_nFrequency / 10u; - m_sQueueSample.field_4 = 40; + m_sQueueSample.m_counter = 40; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BOAT_ENGINE; } LastVol = emittingVol; @@ -3587,7 +3766,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) if(gasPedal > 0.0f) { m_sQueueSample.m_nFrequency = 11025; emittingVol = 45; - m_sQueueSample.field_4 = 39; + m_sQueueSample.m_counter = 39; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BOAT_ENGINE_IDLE; } else { @@ -3596,7 +3775,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams *params) if(!boat->m_bIsAnchored) m_sQueueSample.m_nFrequency = 11 * m_sQueueSample.m_nFrequency / 10u; - m_sQueueSample.field_4 = 40; + m_sQueueSample.m_counter = 40; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BOAT_ENGINE; } } @@ -3639,13 +3818,13 @@ cAudioManager::ProcessBoatMovingOverWater(cVehicleParams *params) velocityChange = Abs(params->m_fVelocityChange); if(velocityChange <= 0.0005f && params->m_pVehicle->GetPosition().y) return 1; - velocityChange = min(0.75f, velocityChange); + velocityChange = Min(0.75f, velocityChange); multiplier = (velocityChange - 0.0005f) * 1.3342f; CalculateDistance((bool *)params, params->m_fDistance); vol = (30.f * multiplier); m_sQueueSample.m_bVolume = ComputeVolume(vol, 50.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 38; + m_sQueueSample.m_counter = 38; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_LOOPING_WATER; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -3700,16 +3879,17 @@ void cAudioManager::ProcessBridgeMotor() { if(m_sQueueSample.m_fDistance < 400.f) { - m_sQueueSample.m_bVolume = ComputeVolume(127, 400.f, m_sQueueSample.m_fDistance); + m_sQueueSample.m_bVolume = + ComputeVolume(maxVolume, 400.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 1; + m_sQueueSample.m_counter = 1; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_MOTOR; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.field_16 = 1; m_sQueueSample.m_nFrequency = 5500; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bEmittingVolume = 127; + m_sQueueSample.m_bEmittingVolume = maxVolume; m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nLoopEnd = @@ -3756,7 +3936,7 @@ cAudioManager::ProcessBridgeOneShots() m_sQueueSample.m_bVolume = ComputeVolume(maxVolume, maxDist, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 2; + m_sQueueSample.m_counter = 2; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.field_16 = 1; @@ -3782,7 +3962,7 @@ cAudioManager::ProcessBridgeWarning() if(CStats::CommercialPassed && m_sQueueSample.m_fDistance < 450.f) { m_sQueueSample.m_bVolume = ComputeVolume(100u, 450.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_nSampleIndex = 457; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -3817,7 +3997,7 @@ cAudioManager::ProcessCarBombTick(cVehicleParams *params) CalculateDistance((bool *)params, params->m_fDistance); m_sQueueSample.m_bVolume = ComputeVolume(60u, 40.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 35; + m_sQueueSample.m_counter = 35; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_CAR_BOMB_TICK; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -3830,8 +4010,8 @@ cAudioManager::ProcessCarBombTick(cVehicleParams *params) SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_48 = 2.0; - m_sQueueSample.m_fSoundIntensity = 40.0; + m_sQueueSample.field_48 = 2.0f; + m_sQueueSample.m_fSoundIntensity = 40.0f; m_sQueueSample.field_56 = 0; m_sQueueSample.field_76 = 3; m_sQueueSample.m_bReverbFlag = 1; @@ -3884,7 +4064,7 @@ cAudioManager::ProcessCinemaScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency >> 2); - m_sQueueSample.field_4 = counter++; + m_sQueueSample.m_counter = counter++; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -3945,7 +4125,7 @@ cAudioManager::ProcessDocksScriptObject(uint8 sound) SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_DOCKS); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency >> 3); - m_sQueueSample.field_4 = counter++; + m_sQueueSample.m_counter = counter++; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -3991,7 +4171,7 @@ cAudioManager::ProcessEngineDamage(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume(emittingVolume, 40.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 28; + m_sQueueSample.m_counter = 28; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; @@ -4000,8 +4180,8 @@ cAudioManager::ProcessEngineDamage(cVehicleParams *params) SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_48 = 2.0; - m_sQueueSample.m_fSoundIntensity = 40.0; + m_sQueueSample.field_48 = 2.0f; + m_sQueueSample.m_fSoundIntensity = 40.0f; m_sQueueSample.field_56 = 0; m_sQueueSample.field_76 = 3; m_sQueueSample.m_bReverbFlag = 1; @@ -4146,9 +4326,7 @@ cAudioManager::ProcessExplosions(int32 explosion) break; } pos = CExplosion::GetExplosionPosition(i); - m_sQueueSample.m_vecPos.x = pos->x; - m_sQueueSample.m_vecPos.y = pos->y; - m_sQueueSample.m_vecPos.z = pos->z; + m_sQueueSample.m_vecPos = *pos; distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos); if(distSquared < maxDist) { m_sQueueSample.m_fDistance = Sqrt(distSquared); @@ -4156,7 +4334,7 @@ cAudioManager::ProcessExplosions(int32 explosion) ComputeVolume(maxVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = i; + m_sQueueSample.m_counter = i; m_sQueueSample.field_48 = 2.0f; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; @@ -4187,7 +4365,7 @@ cAudioManager::ProcessFireHydrant() CalculateDistance(&something, distSquared); m_sQueueSample.m_bVolume = ComputeVolume(40u, 35.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_JUMBO_TAXI_SOUND; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -4225,7 +4403,7 @@ cAudioManager::ProcessFrontEnd() static uint32 counter = 0; - for(uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].field_24; i++) { + for(uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_Loops; i++) { processed = 0; switch( m_asAudioEntities[0].m_awAudioEvent[i + 20 * m_sQueueSample.m_nEntityIndex]) { @@ -4348,7 +4526,7 @@ cAudioManager::ProcessFrontEnd() SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); } m_sQueueSample.m_bVolume = 110; - m_sQueueSample.field_4 = counter++; + m_sQueueSample.m_counter = counter++; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; m_sQueueSample.m_bBankIndex = 0; @@ -4366,8 +4544,8 @@ cAudioManager::ProcessFrontEnd() AddSampleToRequestedQueue(); if(processed) { ++m_sQueueSample.m_nSampleIndex; - m_sQueueSample.field_4 = counter++; - m_sQueueSample.m_bOffset = 127 - m_sQueueSample.m_bOffset; + m_sQueueSample.m_counter = counter++; + m_sQueueSample.m_bOffset = maxVolume - m_sQueueSample.m_bOffset; AddSampleToRequestedQueue(); } } @@ -4418,7 +4596,7 @@ cAudioManager::ProcessHelicopter(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume( emittingVol, gHeliSfxRanges[i].m_fMaxDistance, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = i + 65; + m_sQueueSample.m_counter = i + 65; m_sQueueSample.m_nSampleIndex = i + AUDIO_SAMPLE_HELI_FAR; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -4432,7 +4610,7 @@ cAudioManager::ProcessHelicopter(cVehicleParams *params) SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_48 = 6.0; + m_sQueueSample.field_48 = 6.0f; m_sQueueSample.m_fSoundIntensity = gHeliSfxRanges[i].m_fMaxDistance; m_sQueueSample.field_56 = 0; m_sQueueSample.field_76 = 3; @@ -4481,7 +4659,7 @@ cAudioManager::ProcessHomeScriptObject(uint8 sound) m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency >> 4); - m_sQueueSample.field_4 = counter++; + m_sQueueSample.m_counter = counter++; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -4546,7 +4724,7 @@ cAudioManager::ProcessJumboAccel(CPlane *plane) if(SetupJumboFlySound(20u)) { modificator = (plane->m_fSpeed - 0.10334f) * 1.676f; if(modificator > 1.0f) modificator = 1.0f; - if(cAudioManager::SetupJumboRumbleSound(maxVolume * modificator) && + if(SetupJumboRumbleSound(maxVolume * modificator) && SetupJumboTaxiSound((1.0f - modificator) * 75.f)) { if(modificator < 0.2f) { whineSoundFreq = modificator * 5.f * 14600.0f + 29500; @@ -4579,7 +4757,7 @@ cAudioManager::ProcessJumboDecel(CPlane *plane) void cAudioManager::ProcessJumboFlying() { - if(SetupJumboFlySound(127u)) SetupJumboEngineSound(63u, 22050); + if(SetupJumboFlySound(maxVolume)) SetupJumboEngineSound(63u, 22050); } void @@ -4598,12 +4776,12 @@ cAudioManager::ProcessJumboLanding(CPlane *plane) void cAudioManager::ProcessJumboTakeOff(CPlane *plane) { - double modificator = (PlanePathPosition[plane->m_nPlaneId] - TakeOffPoint) * 0.0033333f; + float modificator = (PlanePathPosition[plane->m_nPlaneId] - TakeOffPoint) * 0.0033333f; - if(cAudioManager::SetupJumboFlySound((107.f * modificator) + 20) && - cAudioManager::SetupJumboRumbleSound(maxVolume * (1.f - modificator))) { - if(cAudioManager::SetupJumboEngineSound(127u, 22050)) - cAudioManager::SetupJumboWhineSound(18.f * (1.f - modificator), 44100); + if(SetupJumboFlySound((107.f * modificator) + 20) && + SetupJumboRumbleSound(maxVolume * (1.f - modificator))) { + if(SetupJumboEngineSound(maxVolume, 22050)) + SetupJumboWhineSound(18.f * (1.f - modificator), 44100); } } @@ -4639,7 +4817,7 @@ cAudioManager::ProcessLaunderetteScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_LAUNDERETTE_1); - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -4661,7 +4839,7 @@ cAudioManager::ProcessLaunderetteScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_LAUNDERETTE_2); - m_sQueueSample.field_4 = 1; + m_sQueueSample.m_counter = 1; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -4692,7 +4870,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_1); m_sQueueSample.field_16 = 3; @@ -4704,7 +4882,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_1); m_sQueueSample.field_16 = 3; @@ -4716,7 +4894,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_2); m_sQueueSample.field_16 = 3; @@ -4728,7 +4906,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_2); m_sQueueSample.field_16 = 3; @@ -4740,7 +4918,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_3; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_3); m_sQueueSample.field_16 = 3; @@ -4752,7 +4930,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_3; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_3); m_sQueueSample.field_16 = 3; @@ -4764,7 +4942,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_4; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_4); m_sQueueSample.field_16 = 3; @@ -4776,7 +4954,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_4; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_4); m_sQueueSample.field_16 = 3; @@ -4788,7 +4966,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_5; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_5); m_sQueueSample.field_16 = 3; @@ -4800,7 +4978,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_5; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_5); m_sQueueSample.field_16 = 3; @@ -4812,7 +4990,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_6; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_6); m_sQueueSample.field_16 = 3; @@ -4824,7 +5002,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_6; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_6); m_sQueueSample.field_16 = 3; @@ -4836,7 +5014,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_7; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_7); m_sQueueSample.field_16 = 3; @@ -4848,7 +5026,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_7; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_7); m_sQueueSample.field_16 = 3; @@ -4860,7 +5038,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_8; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_8); m_sQueueSample.field_16 = 3; @@ -4872,7 +5050,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_8; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_8); m_sQueueSample.field_16 = 3; @@ -4884,7 +5062,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_9; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_9); m_sQueueSample.field_16 = 3; @@ -4896,7 +5074,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_9; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_9); m_sQueueSample.field_16 = 3; @@ -4908,7 +5086,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_10; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_10); m_sQueueSample.field_16 = 3; @@ -4920,7 +5098,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_10; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_10); m_sQueueSample.field_16 = 3; @@ -4932,7 +5110,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_11; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_11); m_sQueueSample.field_16 = 3; @@ -4944,7 +5122,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_11; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_11); m_sQueueSample.field_16 = 3; @@ -4956,7 +5134,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_12; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_12); m_sQueueSample.field_16 = 3; @@ -4968,7 +5146,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_12; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_12); m_sQueueSample.field_16 = 3; @@ -4980,7 +5158,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_13; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_13); m_sQueueSample.field_16 = 3; @@ -4992,7 +5170,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_13; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_13); m_sQueueSample.field_16 = 3; @@ -5004,7 +5182,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_STRIP_CLUB_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_STRIP_CLUB_1); m_sQueueSample.field_16 = 3; @@ -5016,7 +5194,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_STRIP_CLUB_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_STRIP_CLUB_1); m_sQueueSample.field_16 = 3; @@ -5028,7 +5206,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_STRIP_CLUB_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_STRIP_CLUB_2); m_sQueueSample.field_16 = 3; @@ -5040,7 +5218,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_STRIP_CLUB_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_STRIP_CLUB_2); m_sQueueSample.field_16 = 3; @@ -5048,11 +5226,9 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.field_48 = 2.0f; break; case SCRIPT_SOUND_WORK_SHOP_LOOP_S: - case SCRIPT_SOUND_WORK_SHOP_LOOP_L: - cAudioManager::ProcessWorkShopScriptObject(sound); - return; + case SCRIPT_SOUND_WORK_SHOP_LOOP_L: ProcessWorkShopScriptObject(sound); return; case SCRIPT_SOUND_SAWMILL_LOOP_S: - case SCRIPT_SOUND_SAWMILL_LOOP_L: cAudioManager::ProcessSawMillScriptObject(sound); return; + case SCRIPT_SOUND_SAWMILL_LOOP_L: ProcessSawMillScriptObject(sound); return; case SCRIPT_SOUND_38: maxDist = 900.f; m_sQueueSample.m_fSoundIntensity = 30.0f; @@ -5182,15 +5358,15 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) case SCRIPT_SOUND_CINEMA_LOOP_S: case SCRIPT_SOUND_CINEMA_LOOP_L: ProcessCinemaScriptObject(sound); return; case SCRIPT_SOUND_DOCKS_LOOP_S: - case SCRIPT_SOUND_DOCKS_LOOP_L: cAudioManager::ProcessDocksScriptObject(sound); return; + case SCRIPT_SOUND_DOCKS_LOOP_L: ProcessDocksScriptObject(sound); return; case SCRIPT_SOUND_HOME_LOOP_S: - case SCRIPT_SOUND_HOME_LOOP_L: cAudioManager::ProcessHomeScriptObject(sound); return; + case SCRIPT_SOUND_HOME_LOOP_L: ProcessHomeScriptObject(sound); return; case SCRIPT_SOUND_FRANKIE_PIANO: maxDist = 900.f; m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_FRANKIE_PIANO; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_FRANKIE_PIANO); m_sQueueSample.field_16 = 3; @@ -5202,7 +5378,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PARTY_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_PARTY_1); m_sQueueSample.field_16 = 3; @@ -5246,7 +5422,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_POLICE_BALL; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_POLICE_BALL); m_sQueueSample.field_16 = 2; @@ -5258,7 +5434,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_POLICE_BALL; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_POLICE_BALL); m_sQueueSample.field_16 = 2; @@ -5270,7 +5446,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_INDUSTRIAL; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_RAVE_INDUSTRIAL); m_sQueueSample.field_16 = 3; @@ -5282,7 +5458,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_INDUSTRIAL; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_RAVE_INDUSTRIAL); m_sQueueSample.field_16 = 3; @@ -5291,7 +5467,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) break; case SCRIPT_SOUND_POLICE_CELL_BEATING_LOOP_S: case SCRIPT_SOUND_POLICE_CELL_BEATING_LOOP_L: - cAudioManager::ProcessPoliceCellBeatingScriptObject(sound); + ProcessPoliceCellBeatingScriptObject(sound); return; case SCRIPT_SOUND_RAVE_1_LOOP_S: case SCRIPT_SOUND_RAVE_2_LOOP_S: @@ -5299,7 +5475,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.field_16 = 3; @@ -5312,7 +5488,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_1; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.field_16 = 3; @@ -5324,7 +5500,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_RAVE_2); m_sQueueSample.field_16 = 3; @@ -5336,7 +5512,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_RAVE_2; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_RAVE_2); m_sQueueSample.field_16 = 3; @@ -5364,7 +5540,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_bVolume = ComputeVolume( emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -5380,6 +5556,155 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) } } +bool &g_bMissionAudioLoadFailed = *(bool *)0x95CD8E; + +void +cAudioManager::ProcessMissionAudio() +{ + float dist; + uint8 emittingVol; + uint8 pan; + float distSquared; + CVector vec; + + static uint8 nCheckPlayingDelay = 0; + static uint8 nFramesUntilFailedLoad = 0; + static uint8 nFramesForPretendPlaying = 0; + + if(this->m_bIsInitialised) { + if(m_sMissionAudio.m_nSampleIndex != 3033) { + switch(this->m_sMissionAudio.m_bLoadingStatus) { + case 0: + SampleManager.PreloadStreamedFile(m_sMissionAudio.m_nSampleIndex, + 1u); + m_sMissionAudio.m_bLoadingStatus = 1; + nFramesUntilFailedLoad = 0; + return; + case 1: + if(!this->m_sMissionAudio.m_bIsPlayed) return; + if(g_bMissionAudioLoadFailed) { + if(this->m_bTimerJustReset) { + ClearMissionAudio(); + SampleManager.StopStreamedFile(1u); + nFramesForPretendPlaying = 0; + nCheckPlayingDelay = 0; + nFramesUntilFailedLoad = 0; + } else if(!m_bUserPause) { + if(++nFramesForPretendPlaying < 120u) { + this->m_sMissionAudio.m_bPlayStatus = 1; + } else { + this->m_sMissionAudio.m_bPlayStatus = 2; + this->m_sMissionAudio.m_nSampleIndex = 3033; + } + } + } else { + if(m_sMissionAudio.m_bPlayStatus) { + if(m_sMissionAudio.m_bPlayStatus != 1) return; + if(this->m_bTimerJustReset) { + ClearMissionAudio(); + SampleManager.StopStreamedFile(1u); + return; + } + if(MissionScriptAudioUsesPoliceChannel( + m_sMissionAudio.m_nSampleIndex)) { + if(!m_bUserPause) { + if(nCheckPlayingDelay) { + --nCheckPlayingDelay; + } else if( + GetMissionScriptPoliceAudioPlayingStatus() == + 2 || + --m_sMissionAudio.field_24) { + m_sMissionAudio + .m_bPlayStatus = 2; + m_sMissionAudio + .m_nSampleIndex = 3033; + SampleManager + .StopStreamedFile(1u); + m_sMissionAudio.field_24 = + 0; + } + } + } else if(m_sMissionAudio.field_22) { + if(SampleManager.IsStreamPlaying(1u) || + m_bUserPause || m_bPreviousUserPause) { + if(m_bUserPause) + SampleManager.PauseStream( + 1, 1u); + else + SampleManager.PauseStream( + 0, 1u); + } else { + m_sMissionAudio.m_bPlayStatus = 2; + m_sMissionAudio.m_nSampleIndex = + 3033; + SampleManager.StopStreamedFile(1u); + m_sMissionAudio.field_24 = 0; + } + } else { + if(m_bUserPause) return; + if(nCheckPlayingDelay--) { + if(!SampleManager.IsStreamPlaying( + 1u)) + return; + nCheckPlayingDelay = 0; + } + m_sMissionAudio.field_22 = 1; + } + } else { + if(MissionScriptAudioUsesPoliceChannel( + m_sMissionAudio.m_nSampleIndex)) { + SetMissionScriptPoliceAudio( + m_sMissionAudio.m_nSampleIndex); + } else { + if(m_bUserPause) + SampleManager.PauseStream(1, 1u); + if(m_sMissionAudio.field_12) { + SampleManager + .SetStreamedVolumeAndPan( + 80u, 63u, 1, 1u); + } else { + distSquared = GetDistanceSquared( + &m_sMissionAudio.m_vecPos); + if(distSquared >= 2500.f) { + emittingVol = 0; + pan = 63; + } else { + dist = Sqrt(distSquared); + emittingVol = ComputeVolume( + 80u, 50.0f, dist); + TranslateEntity( + &m_sMissionAudio + .m_vecPos, + &vec); + pan = + ComputePan(50.f, &vec); + } + SampleManager + .SetStreamedVolumeAndPan( + emittingVol, pan, 1, 1u); + } + SampleManager.StartPreloadedStreamedFile( + 1u); + } + m_sMissionAudio.m_bPlayStatus = 1; + nCheckPlayingDelay = 30; + } + } + break; + case 2: + if(++nFramesUntilFailedLoad >= 90u) { + nFramesForPretendPlaying = 0; + g_bMissionAudioLoadFailed = 1; + nFramesUntilFailedLoad = 0; + this->m_sMissionAudio.m_bLoadingStatus = 1; + } + return; + default: return; + } + } + } +} + void cAudioManager::ProcessModelCarEngine(cVehicleParams *params) { @@ -5413,7 +5738,7 @@ cAudioManager::ProcessModelCarEngine(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume( emittingVol, 30.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 2; + m_sQueueSample.m_counter = 2; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_MODEL_VEHICLE_ACCELERATING; m_sQueueSample.m_bBankIndex = 0; @@ -5431,8 +5756,8 @@ cAudioManager::ProcessModelCarEngine(cVehicleParams *params) m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset( m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_48 = 3.0; - m_sQueueSample.m_fSoundIntensity = 30.0; + m_sQueueSample.field_48 = 3.0f; + m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.field_56 = 0; m_sQueueSample.field_76 = 3; m_sQueueSample.m_bReverbFlag = 1; @@ -5464,14 +5789,14 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) male.m_pPed = nil; male.m_bDistanceCalculated = 0; male.m_fDistance = GetDistanceSquared(&m_sQueueSample.m_vecPos); - cAudioManager::SetupPedComments(&male, SOUND_INJURED_PED_MALE_OUCH); + SetupPedComments(&male, SOUND_INJURED_PED_MALE_OUCH); return; case SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_S: case SCRIPT_SOUND_INJURED_PED_FEMALE_OUCH_L: female.m_pPed = nil; female.m_bDistanceCalculated = 0; female.m_fDistance = GetDistanceSquared(&m_sQueueSample.m_vecPos); - cAudioManager::SetupPedComments(&female, SOUND_INJURED_PED_FEMALE); + SetupPedComments(&female, SOUND_INJURED_PED_FEMALE); return; case SCRIPT_SOUND_GATE_START_CLUNK: case SCRIPT_SOUND_GATE_STOP_CLUNK: @@ -5512,7 +5837,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 80.0f; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_389; m_sQueueSample.m_bBankIndex = 0; - emittingVolume = 127; + emittingVolume = maxVolume; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_389); m_sQueueSample.field_16 = 0; @@ -5663,7 +5988,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; m_sQueueSample.m_bEmittingVolume = emittingVolume; @@ -5708,7 +6033,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_bVolume = ComputeVolume( emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; m_sQueueSample.m_bEmittingVolume = emittingVolume; @@ -5768,7 +6093,7 @@ cAudioManager::ProcessPedHeadphones(cPedParams *params) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 7.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = 64; + m_sQueueSample.m_counter = 64; m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HEADPHONES; m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_bIsDistant = 0; @@ -5795,6 +6120,14 @@ cAudioManager::ProcessPedHeadphones(cPedParams *params) } } +#if 1 +WRAPPER +void +cAudioManager::ProcessPedOneShots(cPedParams *params) +{ + EAXJMP(0x56F650); +} +#else void cAudioManager::ProcessPedOneShots(cPedParams *params) { @@ -5812,11 +6145,11 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) static uint8 iSound = 21; weapon = nil; - for(uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].field_24; i++) { + for(uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_Loops; i++) { noReflection = 0; processed = 0; m_sQueueSample.m_bRequireReflection = 0; - sound = m_asAudioEntities[0].m_awAudioEvent[i + 20 * m_sQueueSample.m_nEntityIndex]; + sound = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i]; switch(sound) { case SOUND_STEP_START: case SOUND_STEP_END: @@ -5875,9 +6208,9 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) } m_sQueueSample.m_nSampleIndex = sampleIndex; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = - m_asAudioEntities[0] - .m_awAudioEvent[i + 20 * m_sQueueSample.m_nEntityIndex] - + m_sQueueSample.m_counter = + m_asAudioEntities[m_sQueueSample.m_nEntityIndex] + .m_awAudioEvent[i] - 28; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); @@ -5928,7 +6261,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) AUDIO_SAMPLE_PED_FALL_COLLAPSE; } m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = 1; + m_sQueueSample.m_counter = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nFrequency += @@ -5950,7 +6283,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_1; m_sQueueSample.m_nFrequency = 18000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -5970,7 +6303,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_1; m_sQueueSample.m_nFrequency = 16500; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -5990,7 +6323,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_1; m_sQueueSample.m_nFrequency = 20000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6010,7 +6343,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_2; m_sQueueSample.m_nFrequency = 18000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6030,7 +6363,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_2; m_sQueueSample.m_nFrequency = 16500; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6050,7 +6383,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_2; m_sQueueSample.m_nFrequency = 20000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6070,7 +6403,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_3; m_sQueueSample.m_nFrequency = 18000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6090,7 +6423,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_3; m_sQueueSample.m_nFrequency = 16500; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6110,7 +6443,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_3; m_sQueueSample.m_nFrequency = 20000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6130,7 +6463,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_4; m_sQueueSample.m_nFrequency = 18000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6150,7 +6483,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_4; m_sQueueSample.m_nFrequency = 16500; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6170,7 +6503,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_4; m_sQueueSample.m_nFrequency = 20000; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound; + m_sQueueSample.m_counter = iSound; processed = 1; ++iSound; m_sQueueSample.field_16 = 3; @@ -6189,7 +6522,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case SOUND_WEAPON_BAT_ATTACK: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_PED_HIT_BY_BAT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = RandomDisplacement(2000u) + 22000; m_sQueueSample.field_16 = 3; @@ -6214,7 +6547,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_COLT45: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_PISTOL_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_PISTOL_SHOT); @@ -6239,7 +6572,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_UZI: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_UZI_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_UZI_SHOT); @@ -6260,7 +6593,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_SHOTGUN: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_SHOTGUN_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_SHOTGUN_SHOT); @@ -6285,7 +6618,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_AK47: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_CHAINGUN_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_CHAINGUN_SHOT); @@ -6306,7 +6639,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_M16: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_M16_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_M16_SHOT); @@ -6327,7 +6660,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_SNIPERRIFLE: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_SNIPER_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_SNIPER_SHOT); @@ -6352,7 +6685,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_ROCKETLAUNCHER: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_ROCKET_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_ROCKET_SHOT); @@ -6378,7 +6711,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_FLAMETHROWER_SHOT; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = 9; + m_sQueueSample.m_counter = 9; emittingVol = 90; m_sQueueSample.m_nFrequency = (10 * m_sQueueSample.m_nEntityIndex & 2047) + @@ -6413,7 +6746,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_COLT45: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_PISTOL_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( @@ -6436,7 +6769,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_UZI: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_UZI_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = 39243; m_sQueueSample.m_nFrequency += RandomDisplacement(300u); @@ -6456,7 +6789,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_SHOTGUN: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_CHAINGUN_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = 30290; m_sQueueSample.m_nFrequency += RandomDisplacement(300u); @@ -6476,7 +6809,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_AK47: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_CHAINGUN_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_CHAINGUN_RELOAD); @@ -6497,7 +6830,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_M16: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_UZI_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_UZI_RELOAD); @@ -6518,7 +6851,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_SNIPERRIFLE: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_SNIPER_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_SNIPER_RELOAD); @@ -6539,7 +6872,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case WEAPONTYPE_ROCKETLAUNCHER: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_ROCKET_RELOAD; emittingVol = 75; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_ROCKET_RELOAD); @@ -6565,7 +6898,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case SOUND_WEAPON_M16_BULLET_ECHO: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_75; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_75); @@ -6590,7 +6923,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case SOUND_WEAPON_FLAMETHROWER_FIRE: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_WEAPON_FLAMETHROWER_FIRE; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( AUDIO_SAMPLE_WEAPON_FLAMETHROWER_FIRE); m_sQueueSample.m_nFrequency += @@ -6610,7 +6943,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case SOUND_WEAPON_HIT_PED: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_BULLET_HIT_PED; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_BULLET_HIT_PED); @@ -6631,7 +6964,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) case SOUND_SPLASH: m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_COLLISION_WATER; m_sQueueSample.m_bBankIndex = 0; - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; processed = 1; m_sQueueSample.m_nFrequency = RandomDisplacement(1400u) + 20000; m_sQueueSample.field_16 = 1; @@ -6672,16 +7005,14 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) if(noReflection) { m_sQueueSample.m_bOffset = 127; ++m_sQueueSample.m_nSampleIndex; - if(m_asAudioEntities[0].m_awAudioEvent - [i + - 20 * m_sQueueSample.m_nEntityIndex] != - 47 || + if(m_asAudioEntities[m_sQueueSample.m_nEntityIndex] + .m_awAudioEvent[i] != 47 || weapon->m_eWeaponType != WEAPONTYPE_FLAMETHROWER) { - m_sQueueSample.field_4 = iSound++; + m_sQueueSample.m_counter = iSound++; if(iSound > 60u) iSound = 21; } else { - ++m_sQueueSample.field_4; + ++m_sQueueSample.m_counter; } AddSampleToRequestedQueue(); } @@ -6690,6 +7021,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params) } } } +#endif void cAudioManager::ProcessPhysical(int32 id) @@ -6723,7 +7055,7 @@ struct tVehicleSampleData { char m_bEngineSoundType; char gap_5[3]; eAudioSamples m_nHornSample; - int m_nHornFrequency; + int32 m_nHornFrequency; char m_nSirenOrAlarmSample; int m_nSirenOrAlarmFrequency; char m_bDoorType; @@ -6733,6 +7065,15 @@ struct tVehicleSampleData { int32 *CSWTCH_554 = (int32 *)0x606A50; tVehicleSampleData *vehicleSampleData = (tVehicleSampleData *)0x606204; +#if 0 +WRAPPER +void +cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile *automobile) +{ + EAXJMP(0x56B0D0); +} +#else + void cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile *automobile) { @@ -6743,14 +7084,10 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * uint8 wheelInUseCounter; uint8 i; float time; - uint32 freq4; int baseFreq; uint8 vol; - unsigned int freq5; int gearNr; - int freq; - unsigned int freq3; - unsigned int freq2; + int32 freq; int freqModifier; int soundOffset; @@ -6763,13 +7100,13 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * float gasPedalAudio; CVector pos; - static uint16 LastAccel = 0; - static uint16 LastBrake = 0; + static int16 LastAccel = 0; + static int16 LastBrake = 0; static uint8 CurrentPretendGear = 1; static bool bLostTractionLastFrame = 0; static bool bHandbrakeOnLastFrame = 0; - static uint32 nCruising = 0; - static uint8 bAccelSampleStopped = 1; + static int32 nCruising = 0; + static bool bAccelSampleStopped = 1; lostTraction = 0; processedAccelSampleStopped = 0; @@ -6784,7 +7121,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * CurrentPretendGear = 1; } if(CReplay::IsPlayingBack()) { - accelerateState = 255.f * max(0.0f, min(1.0f, automobile->m_fGasPedal)); + accelerateState = 255.f * Max(0.0f, Min(1.0f, automobile->m_fGasPedal)); } else { accelerateState = Pads->GetAccelerate(); } @@ -6816,14 +7153,14 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * (automobile->m_aWheelState[1] || automobile->m_aWheelState[3])) { lostTraction = 1; } - if(0.0f != velocityChange) { // ok + if(0.0f != velocityChange) { time = params->m_pVehicle->m_vecMoveSpeed.z / velocityChange; if(time <= 0.0f) { - freqModifier = max(-0.2f, time) * -15000.f; + freqModifier = Max(-0.2f, time) * -15000.f; } else { - freqModifier = -(min(0.2f, time) * 15000.f); + freqModifier = -(Min(0.2f, time) * 15000.f); } - if(params->m_fVelocityChange < -0.001f) freqModifier = -freqModifier; // ok + if(params->m_fVelocityChange < -0.001f) freqModifier = -freqModifier; } else { freqModifier = 0; } @@ -6839,11 +7176,11 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * lostTraction) { gasPedalAudio = automobile->m_fGasPedalAudio; } else { - gasPedalAudio = min( - 1.0f, params->m_fVelocityChange / - params->m_pTransmission->fMaxReverseVelocity); // ok + gasPedalAudio = + Min(1.0f, params->m_fVelocityChange / + params->m_pTransmission->fMaxReverseVelocity); } - gasPedalAudio = max(0.0f, gasPedalAudio); // ok + gasPedalAudio = Max(0.0f, gasPedalAudio); automobile->m_fGasPedalAudio = gasPedalAudio; } else if(LastAccel > 0) { if(channelUsed) { @@ -6858,29 +7195,29 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * automobile->m_fGasPedalAudio = automobile->m_fGasPedalAudio * 0.6f; gasPedalAudio = automobile->m_fGasPedalAudio; } - if(gasPedalAudio > 0.05) { // ok - freq3 = (5000.f * (gasPedalAudio - 0.05f) * 20.f / 19) + 19000; - if(engineSoundType == 6) freq3 >>= 1; + if(gasPedalAudio > 0.05f) { + freq = (5000.f * (gasPedalAudio - 0.05f) * 20.f / 19) + 19000; + if(engineSoundType == 6) freq >>= 1; AddPlayerCarSample( - (25.f * (gasPedalAudio - 0.05f) * 20.f / 19) + 40, freq3, + (25.f * (gasPedalAudio - 0.05f) * 20.f / 19) + 40, freq, (soundOffset + AUDIO_SAMPLE_VEHICLE_ENGINE_STOPPING_GENERIC), engineSoundType, 63u, 0); } } - freq2 = (10000.f * gasPedalAudio) + 22050; - if(engineSoundType == 6) freq2 >>= 1; - AddPlayerCarSample(110 - (40.f * gasPedalAudio), freq2, + freq = (10000.f * gasPedalAudio) + 22050; + if(engineSoundType == 6) freq >>= 1; + AddPlayerCarSample(110 - (40.f * gasPedalAudio), freq, (engineSoundType + AUDIO_SAMPLE_VEHICLE_ENGINE_IDLE_NONE), 0, 52u, 1); - CurrentPretendGear = max(1, currentGear); + CurrentPretendGear = Max(1, currentGear); LastAccel = accelerateState; bHandbrakeOnLastFrame = automobile->bIsHandbrakeOn; bLostTractionLastFrame = lostTraction; return; } - if(nCruising) { + if(!nCruising) { if(accelerateState < 150 || !automobile->m_nWheelsOnGround || automobile->bIsHandbrakeOn || lostTraction || currentGear < 2u && @@ -6903,15 +7240,14 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * vol = (25.0f * accelerationMultipler) + 60; automobile->m_fGasPedalAudio = accelerationMultipler; } - freq5 = freqModifier + baseFreq; - if(engineSoundType == 6) freq5 >>= 1; + freq = freqModifier + baseFreq; + if(engineSoundType == 6) freq >>= 1; if(channelUsed) { SampleManager.StopChannel(m_bActiveSamples); bAccelSampleStopped = 1; } - AddPlayerCarSample(vol, freq5, - (engineSoundType + AUDIO_SAMPLE_PAYPHONE_RINGING), 0, 2u, - 1); + AddPlayerCarSample( + vol, freq, (engineSoundType + AUDIO_SAMPLE_PAYPHONE_RINGING), 0, 2u, 1); LastAccel = accelerateState; bHandbrakeOnLastFrame = automobile->bIsHandbrakeOn; @@ -6981,10 +7317,10 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * SampleManager.SetChannelEmittingVolume(m_bActiveSamples, 85u); SampleManager.SetChannel3DPosition(m_bActiveSamples, pos.x, pos.y, pos.z); SampleManager.SetChannel3DDistances(m_bActiveSamples, 50.f, 12.5f); - if(engineSoundType == 6) - freq = (CSWTCH_554[CurrentPretendGear] + freqModifier + 22050) >> 1; - else - freq = CSWTCH_554[CurrentPretendGear] + freqModifier + 22050; + freq = CSWTCH_554[CurrentPretendGear] + freqModifier + 22050; + + if(engineSoundType == 6) freq >>= 1; + SampleManager.SetChannelFrequency(m_bActiveSamples, freq); if(!channelUsed) { SampleManager.SetChannelReverbFlag( @@ -7010,9 +7346,9 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * } else if(nCruising > 3) { --nCruising; } - freq4 = 27 * nCruising + freqModifier + 22050; - if(engineSoundType == 6) freq4 >>= 1; - AddPlayerCarSample(85u, freq4, + freq = 27 * nCruising + freqModifier + 22050; + if(engineSoundType == 6) freq >>= 1; + AddPlayerCarSample(85u, freq, (soundOffset + AUDIO_SAMPLE_VEHICLE_ENGINE_CHANGE_GEAR_GENERIC), engineSoundType, 64u, 1); } @@ -7021,6 +7357,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile * bHandbrakeOnLastFrame = automobile->bIsHandbrakeOn; bLostTractionLastFrame = lostTraction; } +#endif WRAPPER void @@ -7096,7 +7433,7 @@ cAudioManager::ProcessPornCinema(uint8 sound) if(m_sQueueSample.m_bVolume) { m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -7125,7 +7462,7 @@ cAudioManager::ProcessPornCinema(uint8 sound) m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency >> 4); - m_sQueueSample.field_4 = rand + 1; + m_sQueueSample.m_counter = rand + 1; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -7166,7 +7503,7 @@ cAudioManager::ProcessRainOnVehicle(cVehicleParams *params) m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 22.f, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_bVolume) { - m_sQueueSample.field_4 = veh->m_bRainSamplesCounter++; + m_sQueueSample.m_counter = veh->m_bRainSamplesCounter++; veh = params->m_pVehicle; if(veh->m_bRainSamplesCounter > 4u) veh->m_bRainSamplesCounter = 68; m_sQueueSample.m_nSampleIndex = @@ -7179,8 +7516,8 @@ cAudioManager::ProcessRainOnVehicle(cVehicleParams *params) m_sQueueSample.m_bEmittingVolume = (uint8)emittingVol; m_sQueueSample.m_nLoopStart = 0; m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.field_48 = 0.0; - m_sQueueSample.m_fSoundIntensity = 22.0; + m_sQueueSample.field_48 = 0.0f; + m_sQueueSample.m_fSoundIntensity = 22.0f; m_sQueueSample.field_56 = 1; m_sQueueSample.m_bReverbFlag = 0; m_sQueueSample.m_bRequireReflection = 0; @@ -7190,6 +7527,73 @@ cAudioManager::ProcessRainOnVehicle(cVehicleParams *params) } } +void +cAudioManager::ProcessReverb() const +{ + if(SampleManager.UpdateReverb() && m_bDynamicAcousticModelingStatus) { + for(uint32 i = 0; i < 28; i++) { + if(m_asActiveSamples[i].m_bReverbFlag) + SampleManager.SetChannelReverbFlag(i, 1); + } + } +} + +bool +cAudioManager::ProcessReverseGear(cVehicleParams *params) +{ + CVehicle *veh; + CAutomobile *automobile; + int32 emittingVol; + float modificator; + + if(params->m_fDistance >= 900.f) return 0; + veh = params->m_pVehicle; + if(veh->bEngineOn && (veh->m_fGasPedal < 0.0f || !veh->m_nCurrentGear)) { + CalculateDistance((bool *)params, params->m_fDistance); + automobile = (CAutomobile *)params->m_pVehicle; + if(automobile->m_nWheelsOnGround) { + modificator = params->m_fVelocityChange / + params->m_pTransmission->fMaxReverseVelocity; + } else { + if(automobile->m_nDriveWheelsOnGround) + automobile->m_fGasPedalAudio = automobile->m_fGasPedalAudio * 0.4f; + modificator = automobile->m_fGasPedalAudio; + } + modificator = Abs(modificator); + emittingVol = (24.f * modificator); + m_sQueueSample.m_bVolume = + ComputeVolume(emittingVol, 30.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + if(params->m_pVehicle->m_fGasPedal >= 0.0f) { + m_sQueueSample.m_counter = 62; + m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_REVERSE_GEAR_CONSTANT; + } else { + m_sQueueSample.m_counter = 61; + m_sQueueSample.m_nSampleIndex = + AUDIO_SAMPLE_REVERSE_GEAR_ACCELERATING; + } + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 3; + m_sQueueSample.m_nFrequency = (6000.f * modificator) + 7000; + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = + SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 3.0f; + m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 5; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + return 1; +} + void cAudioManager::ProcessSawMillScriptObject(uint8 sound) { @@ -7215,7 +7619,7 @@ cAudioManager::ProcessSawMillScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_SAWMILL_1); - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -7239,7 +7643,7 @@ cAudioManager::ProcessSawMillScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_4 = 1; + m_sQueueSample.m_counter = 1; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -7261,10 +7665,8 @@ cAudioManager::ProcessScriptObject(int32 id) { cAudioScriptObject *entity = (cAudioScriptObject *)m_asAudioEntities[id].m_pEntity; if(entity) { - m_sQueueSample.m_vecPos.x = entity->m_vecPos.x; - m_sQueueSample.m_vecPos.y = entity->m_vecPos.y; - m_sQueueSample.m_vecPos.z = entity->m_vecPos.z; - if(m_asAudioEntities[id].field_24 == 1) + m_sQueueSample.m_vecPos = entity->m_vecPos; + if(m_asAudioEntities[id].m_Loops == 1) ProcessOneShotScriptObject(m_asAudioEntities[id].m_awAudioEvent[0]); else ProcessLoopingScriptObject(entity->m_wSound); @@ -7297,7 +7699,7 @@ cAudioManager::ProcessShopScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_SHOP_1); - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -7322,7 +7724,7 @@ cAudioManager::ProcessShopScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency( m_sQueueSample.m_nSampleIndex); - m_sQueueSample.field_4 = rand + 1; + m_sQueueSample.m_counter = rand + 1; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.field_56 = 1; @@ -7364,6 +7766,79 @@ cAudioManager::ProcessSpecial() } } +bool +cAudioManager::ProcessTrainNoise(cVehicleParams *params) +{ + CTrain *train; + int32 emittingVol; + float speedMultipler; + + if(params->m_fDistance >= 90000.f) return 0; + + if(params->m_fVelocityChange <= 0.0f) { + CalculateDistance((bool *)params, params->m_fDistance); + train = (CTrain *)params->m_pVehicle; + speedMultipler = Min(1.0f, train->m_fSpeed * 250.f / 51.f); + emittingVol = (75.f * speedMultipler); + if(train->m_fWagonPosition == 0.0f) { + m_sQueueSample.m_bVolume = + ComputeVolume(emittingVol, 300.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = 32; + m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_TRAIN_FAR; + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 2; + m_sQueueSample.m_nFrequency = + SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_TRAIN_FAR); + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 3.0f; + m_sQueueSample.m_fSoundIntensity = 300.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 3; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + if(params->m_fDistance < 4900.f) { + m_sQueueSample.m_bVolume = + ComputeVolume(emittingVol, 70.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = 33; + m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_TRAIN_CLOSE; + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 5; + m_sQueueSample.m_nFrequency = + SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_TRAIN_CLOSE) + + 100 * m_sQueueSample.m_nEntityIndex % 987; + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 6.0f; + m_sQueueSample.m_fSoundIntensity = 70.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 3; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + } + return 1; +} + #if 1 WRAPPER void @@ -7371,6 +7846,7 @@ cAudioManager::ProcessVehicle(CVehicle *) { EAXJMP(0x569A00); } + #else void cAudioManager::ProcessVehicle(CVehicle *) @@ -7379,6 +7855,159 @@ cAudioManager::ProcessVehicle(CVehicle *) } #endif +bool +cAudioManager::ProcessVehicleDoors(cVehicleParams *params) +{ + CAutomobile *automobile; + int8 doorState; + int32 emittingVol; + float velocity; + + if(params->m_fDistance >= 1600.f) return 0; + + automobile = (CAutomobile *)params->m_pVehicle; + CalculateDistance((bool *)params, params->m_fDistance); + for(int32 i = 0; i < 6; i++) { + if(automobile->Damage.GetDoorStatus(i) == 2) { + doorState = automobile->Doors[i].m_nDoorState; + if(doorState == 1 || doorState == 2) { + velocity = Min(0.3f, Abs(automobile->Doors[i].m_fAngVel)); + if(velocity > 0.0035f) { + emittingVol = (100.f * velocity * 10.f / 3.f); + m_sQueueSample.m_bVolume = ComputeVolume( + emittingVol, 40.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = i + 6; + m_sQueueSample.m_nSampleIndex = + m_anRandomTable[1] % 6u + + AUDIO_SAMPLE_CAR_DOOR_MOVEMENT_1; + m_sQueueSample.m_nFrequency = + SampleManager.GetSampleBaseFrequency( + m_sQueueSample.m_nSampleIndex) + + RandomDisplacement(1000u); + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 10; + m_sQueueSample.m_nLoopCount = 1; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = 0; + m_sQueueSample.m_nLoopEnd = -1; + m_sQueueSample.field_48 = 1.0f; + m_sQueueSample.m_fSoundIntensity = 40.0f; + m_sQueueSample.field_56 = 1; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 1; + AddSampleToRequestedQueue(); + } + } + } + } + } + return 1; +} + +bool +cAudioManager::ProcessVehicleReverseWarning(cVehicleParams *params) +{ + CVehicle *veh = params->m_pVehicle; + + if(params->m_fDistance >= 2500.f) return 0; + + if(veh->bEngineOn && veh->m_fGasPedal < 0.0f) { + CalculateDistance((bool *)params, params->m_fDistance); + m_sQueueSample.m_bVolume = ComputeVolume(60u, 50.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = 12; + m_sQueueSample.m_nSampleIndex = AUDIO_SAMPLE_VEHICLE_REVERSE_WARNING; + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 2; + m_sQueueSample.m_nFrequency = + (100 * m_sQueueSample.m_nEntityIndex & 0x3FF) + + SampleManager.GetSampleBaseFrequency( + AUDIO_SAMPLE_VEHICLE_REVERSE_WARNING); + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = 60; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = + SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 3.0f; + m_sQueueSample.m_fSoundIntensity = 50.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 3; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + return 1; +} + +bool +cAudioManager::ProcessVehicleRoadNoise(cVehicleParams *params) +{ + int32 emittingVol; + uint32 freq; + float modificator; + int sampleFreq; + float velocity; + + if(params->m_fDistance >= 9025.f) return 0; + if(params->m_pTransmission) { + if(params->m_pVehicle->m_vecMoveSpeed.z) { + velocity = Abs(params->m_fVelocityChange); + if(velocity > 0.0f) { + CalculateDistance((bool *)params, params->m_fDistance); + emittingVol = + 30.f * + Min(1.f, + velocity / (0.5f * params->m_pTransmission->fMaxVelocity)); + m_sQueueSample.m_bVolume = + ComputeVolume(emittingVol, 95.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = 0; + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 3; + if(params->m_pVehicle->m_nSurfaceTouched == + SURFACE_PUDDLE) { + m_sQueueSample.m_nSampleIndex = + AUDIO_SAMPLE_LOOPING_WATER; + freq = 6050 * emittingVol / 30 + 16000; + } else { + m_sQueueSample.m_nSampleIndex = + AUDIO_SAMPLE_VEHICLE_ROAD_NOISE; + modificator = + m_sQueueSample.m_fDistance * 1.f / 95.f * 0.5f; + sampleFreq = SampleManager.GetSampleBaseFrequency( + AUDIO_SAMPLE_VEHICLE_ROAD_NOISE); + freq = (sampleFreq * modificator) + + ((3 * sampleFreq) >> 2); + } + m_sQueueSample.m_nFrequency = freq; + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = + SampleManager.GetSampleLoopEndOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 6.0f; + m_sQueueSample.m_fSoundIntensity = 95.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 4; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + } + } + return 1; +} + WRAPPER void cAudioManager::ProcessWaterCannon(int32) { EAXJMP(0x575F30); } @@ -7389,6 +8018,60 @@ cAudioManager::ProcessWeather(int32 id) EAXJMP(0x578370); } +bool +cAudioManager::ProcessWetRoadNoise(cVehicleParams *params) +{ + float relativeVelocity; + int32 emittingVol; + float modificator; + int freq; + float velChange; + + if(params->m_fDistance >= 900.f) return 0; + if(params->m_pTransmission) { + if(params->m_pVehicle->m_vecMoveSpeed.z) { + velChange = Abs(params->m_fVelocityChange); + if(velChange > 0.f) { + CalculateDistance((bool *)params, params->m_fDistance); + relativeVelocity = + Min(1.0f, + velChange / (0.5f * params->m_pTransmission->fMaxVelocity)); + emittingVol = 23.0f * relativeVelocity * CWeather::WetRoads; + m_sQueueSample.m_bVolume = + ComputeVolume(emittingVol, 30.f, m_sQueueSample.m_fDistance); + if(m_sQueueSample.m_bVolume) { + m_sQueueSample.m_counter = 1; + m_sQueueSample.m_nSampleIndex = + AUDIO_SAMPLE_VEHICLE_ROAD_NOISE; + m_sQueueSample.m_bBankIndex = 0; + m_sQueueSample.m_bIsDistant = 0; + m_sQueueSample.field_16 = 3; + modificator = m_sQueueSample.m_fDistance * 1.f / 3.f * 0.5f; + freq = SampleManager.GetSampleBaseFrequency( + AUDIO_SAMPLE_VEHICLE_ROAD_NOISE); + m_sQueueSample.m_nFrequency = freq + freq * modificator; + m_sQueueSample.m_nLoopCount = 0; + m_sQueueSample.m_bEmittingVolume = emittingVol; + m_sQueueSample.m_nLoopStart = + SampleManager.GetSampleLoopStartOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.m_nLoopEnd = + SampleManager.GetSampleLoopEndOffset( + m_sQueueSample.m_nSampleIndex); + m_sQueueSample.field_48 = 6.0f; + m_sQueueSample.m_fSoundIntensity = 30.0f; + m_sQueueSample.field_56 = 0; + m_sQueueSample.field_76 = 4; + m_sQueueSample.m_bReverbFlag = 1; + m_sQueueSample.m_bRequireReflection = 0; + AddSampleToRequestedQueue(); + } + } + } + } + return 1; +} + void cAudioManager::ProcessWorkShopScriptObject(uint8 sound) { @@ -7413,7 +8096,7 @@ cAudioManager::ProcessWorkShopScriptObject(uint8 sound) m_sQueueSample.m_bBankIndex = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(AUDIO_SAMPLE_WORK_SHOP); - m_sQueueSample.field_4 = 0; + m_sQueueSample.m_counter = 0; m_sQueueSample.m_bIsDistant = 0; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.field_56 = 0; @@ -7481,10 +8164,8 @@ cAudioManager::SetupPedComments(cPedParams *params, uint32 sound) emittingVol, soundIntensity, m_sQueueSample.m_fDistance); pedComment.field_25 = 10; if(m_sQueueSample.m_bVolume) { - pedComment.field_4 = m_sQueueSample.m_nEntityIndex; - pedComment.m_vecPos.x = m_sQueueSample.m_vecPos.x; - pedComment.m_vecPos.y = m_sQueueSample.m_vecPos.y; - pedComment.m_vecPos.z = m_sQueueSample.m_vecPos.z; + pedComment.m_entityIndex = m_sQueueSample.m_nEntityIndex; + pedComment.m_vecPos = m_sQueueSample.m_vecPos; pedComment.m_fDistance = m_sQueueSample.m_fDistance; pedComment.m_bVolume = m_sQueueSample.m_bVolume; m_sPedComments.Add(&pedComment); @@ -7548,10 +8229,8 @@ cAudioManager::SetupPedComments(cPedParams *params, uint32 sound) emittingVol, soundIntensity, m_sQueueSample.m_fDistance); pedComment.field_25 = 10; if(m_sQueueSample.m_bVolume) { - pedComment.field_4 = m_sQueueSample.m_nEntityIndex; - pedComment.m_vecPos.x = m_sQueueSample.m_vecPos.x; - pedComment.m_vecPos.y = m_sQueueSample.m_vecPos.y; - pedComment.m_vecPos.z = m_sQueueSample.m_vecPos.z; + pedComment.m_entityIndex = m_sQueueSample.m_nEntityIndex; + pedComment.m_vecPos = m_sQueueSample.m_vecPos; pedComment.m_fDistance = m_sQueueSample.m_fDistance; pedComment.m_bVolume = m_sQueueSample.m_bVolume; m_sPedComments.Add(&pedComment); @@ -7614,6 +8293,7 @@ WRAPPER void cAudioManager::PreloadMissionAudio(char *) STARTPATCHES InjectHook(0x5755C0, &cPedComments::Add, PATCH_JUMP); +InjectHook(0x575730, &cPedComments::Process, PATCH_JUMP); InjectHook(0x57B210, &cAudioManager::AddDetailsToRequestedOrderList, PATCH_JUMP); InjectHook(0x56AD30, &cAudioManager::AddPlayerCarSample, PATCH_JUMP); @@ -7642,7 +8322,7 @@ InjectHook(0x57AC60, &cAudioManager::TranslateEntity, PATCH_JUMP); InjectHook(0x57A0E0, &cAudioManager::Initialise, PATCH_JUMP); InjectHook(0x569420, &cAudioManager::PostInitialiseGameSpecificSetup, PATCH_JUMP); // InjectHook(0x57EAC0, &cAudioManager::InitialisePoliceRadioZones, PATCH_JUMP); -// InjectHook(0x569650, &cAudioManager::ResetAudioLogicTimers, PATCH_JUMP); +InjectHook(0x569650, &cAudioManager::ResetAudioLogicTimers, PATCH_JUMP); InjectHook(0x57A150, &cAudioManager::Terminate, PATCH_JUMP); InjectHook(0x57F050, &cAudioManager::GetMissionScriptPoliceAudioPlayingStatus, PATCH_JUMP); @@ -7814,20 +8494,27 @@ InjectHook(0x56EC00, &cAudioManager::ProcessJumboTakeOff, PATCH_JUMP); InjectHook(0x56EA10, &cAudioManager::ProcessJumboTaxi, PATCH_JUMP); InjectHook(0x5777E0, &cAudioManager::ProcessLaunderetteScriptObject, PATCH_JUMP); InjectHook(0x576770, &cAudioManager::ProcessLoopingScriptObject, PATCH_JUMP); +InjectHook(0x5796E0, &cAudioManager::ProcessMissionAudio, PATCH_JUMP); InjectHook(0x56A050, &cAudioManager::ProcessModelCarEngine, PATCH_JUMP); InjectHook(0x5760C0, &cAudioManager::ProcessOneShotScriptObject, PATCH_JUMP); InjectHook(0x56F450, &cAudioManager::ProcessPed, PATCH_JUMP); InjectHook(0x56F4D0, &cAudioManager::ProcessPedHeadphones, PATCH_JUMP); -InjectHook(0x56F650, &cAudioManager::ProcessPedOneShots, PATCH_JUMP); +// InjectHook(0x56F650, &cAudioManager::ProcessPedOneShots, PATCH_JUMP); InjectHook(0x5699C0, &cAudioManager::ProcessPhysical, PATCH_JUMP); InjectHook(0x56E860, &cAudioManager::ProcessPlane, PATCH_JUMP); InjectHook(0x56B0D0, &cAudioManager::ProcessPlayersVehicleEngine, PATCH_JUMP); InjectHook(0x577280, &cAudioManager::ProcessPornCinema, PATCH_JUMP); InjectHook(0x569CC0, &cAudioManager::ProcessRainOnVehicle, PATCH_JUMP); +InjectHook(0x569700, &cAudioManager::ProcessReverb, PATCH_JUMP); +InjectHook(0x569E50, &cAudioManager::ProcessReverseGear, PATCH_JUMP); InjectHook(0x577630, &cAudioManager::ProcessSawMillScriptObject, PATCH_JUMP); InjectHook(0x576070, &cAudioManager::ProcessScriptObject, PATCH_JUMP); InjectHook(0x577970, &cAudioManager::ProcessShopScriptObject, PATCH_JUMP); InjectHook(0x5697D0, &cAudioManager::ProcessSpecial, PATCH_JUMP); +InjectHook(0x56DBF0, &cAudioManager::ProcessTrainNoise, PATCH_JUMP); +InjectHook(0x56C770, &cAudioManager::ProcessVehicleDoors, PATCH_JUMP); +InjectHook(0x56C640, &cAudioManager::ProcessVehicleReverseWarning, PATCH_JUMP); +InjectHook(0x56A230, &cAudioManager::ProcessVehicleRoadNoise, PATCH_JUMP); InjectHook(0x577530, &cAudioManager::ProcessWorkShopScriptObject, PATCH_JUMP); InjectHook(0x570690, &cAudioManager::SetupPedComments, PATCH_JUMP); ENDPATCHES diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 12e823b7..5ad14050 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "AudioSamples.h" #include "DMAudio.h" @@ -8,7 +8,7 @@ class tActiveSample { public: int32 m_nEntityIndex; - int32 field_4; + int32 m_counter; int32 m_nSampleIndex; uint8 m_bBankIndex; uint8 m_bIsDistant; @@ -49,6 +49,8 @@ public: uint8 field_89; uint8 field_90; uint8 field_91; + + // no methods }; static_assert(sizeof(tActiveSample) == 92, "tActiveSample: error"); @@ -84,8 +86,10 @@ public: int16 m_awAudioEvent[4]; uint8 gap_18[2]; float m_afVolume[4]; - uint8 field_24; // is looping + uint8 m_Loops; uint8 field_25[3]; + + // no methods }; static_assert(sizeof(tAudioEntity) == 40, "tAudioEntity: error"); @@ -93,13 +97,15 @@ static_assert(sizeof(tAudioEntity) == 40, "tAudioEntity: error"); class tPedComment { public: - int m_nSampleIndex; - int field_4; + int32 m_nSampleIndex; + int32 m_entityIndex; CVector m_vecPos; float m_fDistance; uint8 m_bVolume; - uint8 field_25; + int8 field_25; // allocated time? uint8 gap_26[2]; + + // no methods }; static_assert(sizeof(tPedComment) == 28, "tPedComment: error"); @@ -108,12 +114,14 @@ class cPedComments { public: tPedComment m_asPedComments[2][20]; - uint8 field_1120[2][20]; + uint8 indexMap[2][20]; uint8 nrOfCommentsInBank[2]; uint8 activeBank; uint8 gap_1163[1]; + // reversed all methods void Add(tPedComment *com); /// ok + void Process(); /// ok }; static_assert(sizeof(cPedComments) == 1164, "cPedComments: error"); @@ -134,6 +142,8 @@ public: CVector m_vecPosition; float m_fDistance; int32 m_nBaseVolume; + + // no methods }; static_assert(sizeof(cAudioCollision) == 40, "cAudioCollision: error"); @@ -176,6 +186,7 @@ class CPlane; class CVehicle; class CPed; class cPedParams; +class cTransmission; class cAudioScriptObject { public: @@ -271,9 +282,10 @@ public: uint8 field_19192; uint8 m_bUserPause; uint8 m_bPreviousUserPause; - uint8 field_19195; + uint8 field_19195; // time? uint32 m_FrameCounter; +<<<<<<< HEAD inline uint32 GetFrameCounter(void) { return m_FrameCounter; } float GetReflectionsDistance(int32 idx) { return m_afReflectionsDistances[idx]; } <<<<<<< HEAD @@ -283,25 +295,36 @@ public: >>>>>>> Cleanup // +======= + // getters + uint32 GetFrameCounter() const { return m_FrameCounter; } + float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; } + int32 GetRandomTabe(int32 idx) const { return m_anRandomTable[idx]; } +>>>>>>> More more more audio + // "Should" be in alphabetic order, except "getXTalkSfx" void AddDetailsToRequestedOrderList(uint8 sample); /// ok void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 unk1, - uint8 unk2, bool notLooping); /// ok - void AddReflectionsToRequestedQueue(); /// ok (check value) - void AddReleasingSounds(); // todo (difficult) - void AddSampleToRequestedQueue(); /// ok - void AgeCrimes(); // todo - int8 GetCurrent3DProviderIndex(); /// ok + uint8 counter, bool notLooping); /// ok + void AddReflectionsToRequestedQueue(); /// ok (check value) + void AddReleasingSounds(); // todo (difficult) + void AddSampleToRequestedQueue(); /// ok + void AgeCrimes(); // todo void CalculateDistance(bool *ptr, float dist); /// ok - bool CheckForAnAudioFileOnCD(); /// ok + bool CheckForAnAudioFileOnCD() const; /// ok void ClearMissionAudio(); /// ok void ClearRequestedQueue(); /// ok int32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, - float speedMultiplier); /// ok + float speedMultiplier) const; /// ok int32 ComputePan(float, CVector *); // todo +<<<<<<< HEAD uint32 ComputeVolume(int emittingVolume, float soundIntensity, float distance); /// ok int32 CreateEntity(int32 type, void *entity); /// ok +======= + uint32 ComputeVolume(int emittingVolume, float soundIntensity, float distance) const; /// ok + int32 CreateEntity(int32 type, CPhysical *entity); /// ok +>>>>>>> More more more audio void DestroyAllGameCreatedEntities(); /// ok void DestroyEntity(int32 id); /// ok @@ -309,89 +332,60 @@ public: void GenerateIntegerRandomNumberTable(); /// ok - float GetDistanceSquared(CVector *v); /// ok + void TranslateEntity(CVector *v1, CVector *v2) const ; /// ok - void TranslateEntity(CVector *v1, CVector *v2); /// ok - - // done - - void Initialise(); - void PostInitialiseGameSpecificSetup(); - void InitialisePoliceRadioZones(); // todo - void ResetAudioLogicTimers(int32 timer); // todo + void ResetAudioLogicTimers(int32 timer); /// ok void Terminate(); + uint8 GetNum3DProvidersAvailable() const; + bool IsMP3RadioChannelAvailable() const; + uint8 GetCDAudioDriveLetter() const; - char GetMissionScriptPoliceAudioPlayingStatus(); - bool GetMissionAudioLoadingStatus(); + void SetEffectsMasterVolume(uint8 volume) const; + void SetMusicMasterVolume(uint8 volume) const; + void SetEffectsFadeVolume(uint8 volume) const; + void SetMusicFadeVolume(uint8 volume) const; - uint8 GetNum3DProvidersAvailable(); - bool IsMP3RadioChannelAvailable(); - uint8 GetCDAudioDriveLetter(); - - void SetEffectsMasterVolume(uint8 volume); - void SetMusicMasterVolume(uint8 volume); - void SetEffectsFadeVolume(uint8 volume); - void SetMusicFadeVolume(uint8 volume); - - void SetSpeakerConfig(int32 conf); + void SetSpeakerConfig(int32 conf) const; bool SetupJumboEngineSound(uint8, int32); // todo - void PreInitialiseGameSpecificSetup(); - void SetMissionScriptPoliceAudio(int32 sfx); + void PreInitialiseGameSpecificSetup() const; + void SetMissionScriptPoliceAudio(int32 sfx) const; - bool UsesSiren(int32 model); - bool UsesSirenSwitching(int32 model); + bool UsesSiren(int32 model) const; + bool UsesSirenSwitching(int32 model) const; - bool MissionScriptAudioUsesPoliceChannel(int32 soundMission); - - char *Get3DProviderName(uint8 id); + char *Get3DProviderName(uint8 id) const; bool SetupJumboFlySound(uint8 emittingVol); /// ok bool SetupJumboRumbleSound(uint8 emittingVol); /// ok bool SetupJumboTaxiSound(uint8 vol); /// ok bool SetupJumboWhineSound(uint8 emittingVol, int32 freq); /// ok - void PlayLoadedMissionAudio(); - void SetMissionAudioLocation(float x, float y, float z); void ResetPoliceRadio(); - void InterrogateAudioEntities(); + bool UsesReverseWarning(int32 model) const; - bool UsesReverseWarning(int32 model); - bool HasAirBrakes(int32 model); + int32 RandomDisplacement(uint32 seed) const; - int32 GetJumboTaxiFreq(); - - bool IsMissionAudioSampleFinished(); - - void InitialisePoliceRadio(); // todo - - int32 RandomDisplacement(uint32 seed); - - void ReleaseDigitalHandle(); - void ReacquireDigitalHandle(); + void ReleaseDigitalHandle() const; + void ReacquireDigitalHandle() const; void SetDynamicAcousticModelingStatus(bool status); bool IsAudioInitialised() const; void SetEntityStatus(int32 id, bool status); - void PreTerminateGameSpecificShutdown(); - void PostTerminateGameSpecificShutdown(); - - void PlayerJustGotInCar(); - void PlayerJustLeftCar(); - void Service(); - void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset); + void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) const; - void DoJumboVolOffset(); + void DoJumboVolOffset() const; int32 GetPedCommentSfx(CPed *ped, int32 sound); + // order from GetPedCommentSfx uint32 GetPlayerTalkSfx(int16 sound); uint32 GetCopTalkSfx(int16 sound); uint32 GetSwatTalkSfx(int16 sound); @@ -469,8 +463,38 @@ public: uint32 GetGenericMaleTalkSfx(int16 sound); uint32 GetGenericFemaleTalkSfx(int16 sound); - void PlayOneShot(int32 index, int16 sound, float vol); // todo + int8 GetCurrent3DProviderIndex() const; /// ok + float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // todo hook + float GetCollisionOneShotRatio(uint32 a, float b) const; // todo hook + float GetCollisionRatio(float a, float b, float c, float d) const; // todo hook + float GetDistanceSquared(CVector *v) const; /// ok + int32 GetJumboTaxiFreq() const; /// ok + bool GetMissionAudioLoadingStatus() const; /// ok + char GetMissionScriptPoliceAudioPlayingStatus() const; /// ok + float GetVehicleDriveWheelSkidValue(uint8 a1, CAutomobile *a2, cTransmission *a3, + float a4); // todo + int32 GetVehicleNonDriveWheelSkidValue(float a1, int a2, int a3, int a4, float a5); // todo + bool HasAirBrakes(int32 model) const; /// ok + + void Initialise(); /// ok + void InitialisePoliceRadio(); // todo + void InitialisePoliceRadioZones(); // todo + void InterrogateAudioEntities(); /// ok + bool IsMissionAudioSampleFinished(); /// ok + + bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const; /// ok + + void PlayLoadedMissionAudio(); /// ok + void PlayOneShot(int32 index, int16 sound, float vol); // todo + uint32 PlaySuspectLastSeen(float x, float y, float z); // todo + void PlayerJustGotInCar() const; /// ok + void PlayerJustLeftCar() const; /// ok + void PostInitialiseGameSpecificSetup(); /// ok + void PostTerminateGameSpecificShutdown(); /// ok + void PreTerminateGameSpecificShutdown(); /// ok + void PreloadMissionAudio(char *); // todo + /// processX - main logic of adding new sounds void ProcessActiveQueues(); // todo bool ProcessAirBrakes(cVehicleParams *params); /// ok void ProcessAirportScriptObject(uint8 sound); /// ok @@ -503,40 +527,40 @@ public: void ProcessJumboTaxi(); /// ok void ProcessLaunderetteScriptObject(uint8 sound); /// ok void ProcessLoopingScriptObject(uint8 sound); /// ok - // void ProcessMissionAudio(); - void ProcessModelCarEngine(cVehicleParams *params); /// (check float comparisons) - void ProcessOneShotScriptObject(uint8 sound); /// ok - void ProcessPed(CPhysical *ped); /// ok - void ProcessPedHeadphones(cPedParams *params); /// ok - void ProcessPedOneShots(cPedParams *params); /// ok - void ProcessPhysical(int32 id); /// ok - void ProcessPlane(cVehicleParams *params); /// ok + void ProcessMissionAudio(); /// ok + void ProcessModelCarEngine(cVehicleParams *params); /// ok (check float comparisons) + void ProcessOneShotScriptObject(uint8 sound); /// ok + void ProcessPed(CPhysical *ped); /// ok + void ProcessPedHeadphones(cPedParams *params); /// ok + void ProcessPedOneShots(cPedParams *params); // todo later (weird) + void ProcessPhysical(int32 id); /// ok + void ProcessPlane(cVehicleParams *params); /// ok void ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile *automobile); /// ok (check float comparisons) void ProcessPoliceCellBeatingScriptObject(uint8 sound); // todo void ProcessPornCinema(uint8 sound); /// ok void ProcessProjectiles(); // todo requires CProjectileInfo void ProcessRainOnVehicle(cVehicleParams *params); /// ok - // void ProcessReverb(); - // bool ProcessReverseGear(void *); - void ProcessSawMillScriptObject(uint8 sound); /// ok - void ProcessScriptObject(int32 id); /// ok - void ProcessShopScriptObject(uint8 sound); /// ok - void ProcessSpecial(); /// ok - // bool ProcessTrainNoise(void *); - void ProcessVehicle(CVehicle *); // todo - // bool ProcessVehicleDoors(void *); + void ProcessReverb() const; /// ok + bool ProcessReverseGear(cVehicleParams *a2); /// ok + void ProcessSawMillScriptObject(uint8 sound); /// ok + void ProcessScriptObject(int32 id); /// ok + void ProcessShopScriptObject(uint8 sound); /// ok + void ProcessSpecial(); /// ok + bool ProcessTrainNoise(cVehicleParams *params); /// ok + void ProcessVehicle(CVehicle *); // todo + bool ProcessVehicleDoors(cVehicleParams *params); /// ok // bool ProcessVehicleEngine(void *); - // void ProcessVehicleHorn(void *); + // void ProcessVehicleHorn(cVehicleParams *params); // void ProcessVehicleOneShots(void *); - // bool ProcessVehicleReverseWarning(void *); - // bool ProcessVehicleRoadNoise(void *); + bool ProcessVehicleReverseWarning(cVehicleParams *params); /// ok + bool ProcessVehicleRoadNoise(cVehicleParams *params); /// ok // void ProcessVehicleSirenOrAlarm(void *); // void ProcessVehicleSkidding(void *); - void ProcessWaterCannon(int32); // todo - void ProcessWeather(int32 id); // todo - // bool ProcessWetRoadNoise(void *); - void ProcessWorkShopScriptObject(uint8 sound); /// ok + void ProcessWaterCannon(int32); // todo + void ProcessWeather(int32 id); // todo + bool ProcessWetRoadNoise(cVehicleParams *params); // todo hook + void ProcessWorkShopScriptObject(uint8 sound); /// ok void SetupPedComments(cPedParams *params, uint32 sound); /// ok }; diff --git a/src/audio/sampman.cpp b/src/audio/sampman.cpp index de222493..58da6f64 100644 --- a/src/audio/sampman.cpp +++ b/src/audio/sampman.cpp @@ -158,14 +158,14 @@ release_existing() if ( opened_samples[i] ) { AIL_release_3D_sample_handle(opened_samples[i]); - opened_samples[i] = NULL; + opened_samples[i] = 0; } } if ( opened_provider ) { AIL_close_3D_provider(opened_provider); - opened_provider = NULL; + opened_provider = 0; } _fPrevEaxRatioDestination = 0.0f; @@ -879,7 +879,7 @@ cSampleManager::Initialise(void) _maxSamples = 0; - opened_provider = NULL; + opened_provider = 0; DIG = NULL; for ( int32 i = 0; i < MAXCHANNELS; i++ ) @@ -2020,10 +2020,9 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream) { uint32 i = 0; - if ( !_bIsMp3Active ) goto FIND_MP3TRACK; - do { + if(_bIsMp3Active){ if ( ++_CurMP3Index >= nNumMP3s ) _CurMP3Index = 0; @@ -2059,21 +2058,15 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream) AIL_pause_stream(mp3Stream[nStream], 0); return true; } - - goto NEXT_MP3TRACK; - -FIND_MP3TRACK: - if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] ) - position = 0; - - tMP3Entry *e; - if ( !_GetMP3PosFromStreamPos(&position, &e) ) - { - if ( e == NULL ) - { - nFile = 0; - goto PLAY_STREAMEDTRACK; - } + } + if(nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER]) position = 0; + + tMP3Entry *e; + if(!_GetMP3PosFromStreamPos(&position, &e)) { + if(e == NULL) { + nFile = 0; + goto PLAY_STREAMEDTRACK; + } } if ( e->pLinkPath != NULL ) @@ -2097,14 +2090,12 @@ FIND_MP3TRACK: return true; } -NEXT_MP3TRACK: _bIsMp3Active = false; } while ( ++i < nNumMP3s ); position = 0; nFile = 0; - goto PLAY_STREAMEDTRACK; } PLAY_STREAMEDTRACK: diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index bcf94479..677436a6 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -340,7 +340,7 @@ CCarCtrl::GenerateOneRandomCar() if (distanceBetweenNodes / 2 < carLength) positionBetweenNodes = 0.5f; else - positionBetweenNodes = min(1.0f - carLength / distanceBetweenNodes, max(carLength / distanceBetweenNodes, positionBetweenNodes)); + positionBetweenNodes = Min(1.0f - carLength / distanceBetweenNodes, Max(carLength / distanceBetweenNodes, positionBetweenNodes)); pCar->AutoPilot.m_nNextDirection = (curNodeId >= nextNodeId) ? 1 : -1; if (pCurNode->numLinks == 1){ /* Do not create vehicle if there is nowhere to go. */ @@ -793,10 +793,10 @@ CCarCtrl::FindMaximumSpeedForThisCarInTraffic(CVehicle* pVehicle) float right = pVehicle->GetPosition().x + DISTANCE_TO_SCAN_FOR_DANGER; float top = pVehicle->GetPosition().y - DISTANCE_TO_SCAN_FOR_DANGER; float bottom = pVehicle->GetPosition().y + DISTANCE_TO_SCAN_FOR_DANGER; - int xstart = max(0, CWorld::GetSectorIndexX(left)); - int xend = min(NUMSECTORS_X - 1, CWorld::GetSectorIndexX(right)); - int ystart = max(0, CWorld::GetSectorIndexY(top)); - int yend = min(NUMSECTORS_Y - 1, CWorld::GetSectorIndexY(bottom)); + int xstart = Max(0, CWorld::GetSectorIndexX(left)); + int xend = Min(NUMSECTORS_X - 1, CWorld::GetSectorIndexX(right)); + int ystart = Max(0, CWorld::GetSectorIndexY(top)); + int yend = Min(NUMSECTORS_Y - 1, CWorld::GetSectorIndexY(bottom)); assert(xstart <= xend); assert(ystart <= yend); @@ -827,10 +827,10 @@ CCarCtrl::ScanForPedDanger(CVehicle* pVehicle) float right = pVehicle->GetPosition().x + DISTANCE_TO_SCAN_FOR_DANGER; float top = pVehicle->GetPosition().y - DISTANCE_TO_SCAN_FOR_DANGER; float bottom = pVehicle->GetPosition().y + DISTANCE_TO_SCAN_FOR_DANGER; - int xstart = max(0, CWorld::GetSectorIndexX(left)); - int xend = min(NUMSECTORS_X - 1, CWorld::GetSectorIndexX(right)); - int ystart = max(0, CWorld::GetSectorIndexY(top)); - int yend = min(NUMSECTORS_Y - 1, CWorld::GetSectorIndexY(bottom)); + int xstart = Max(0, CWorld::GetSectorIndexX(left)); + int xend = Min(NUMSECTORS_X - 1, CWorld::GetSectorIndexX(right)); + int ystart = Max(0, CWorld::GetSectorIndexY(top)); + int yend = Min(NUMSECTORS_Y - 1, CWorld::GetSectorIndexY(bottom)); assert(xstart <= xend); assert(ystart <= yend); @@ -862,12 +862,12 @@ CCarCtrl::SlowCarOnRailsDownForTrafficAndLights(CVehicle* pVehicle) float curSpeed = pVehicle->AutoPilot.m_fMaxTrafficSpeed; if (maxSpeed >= curSpeed){ if (maxSpeed > curSpeed) - pVehicle->AutoPilot.ModifySpeed(min(maxSpeed, curSpeed + 0.05f * CTimer::GetTimeStep())); + pVehicle->AutoPilot.ModifySpeed(Min(maxSpeed, curSpeed + 0.05f * CTimer::GetTimeStep())); }else{ if (curSpeed == 0.0f) return; if (curSpeed >= 0.1f) - pVehicle->AutoPilot.ModifySpeed(max(maxSpeed, curSpeed - 0.5f * CTimer::GetTimeStep())); + pVehicle->AutoPilot.ModifySpeed(Max(maxSpeed, curSpeed - 0.5f * CTimer::GetTimeStep())); else if (curSpeed != 0.0f) /* no need to check */ pVehicle->AutoPilot.ModifySpeed(0.0f); } diff --git a/src/control/CarGen.cpp b/src/control/CarGen.cpp index 65a23c8c..f2b35547 100644 --- a/src/control/CarGen.cpp +++ b/src/control/CarGen.cpp @@ -157,7 +157,7 @@ void CCarGenerator::Setup(float x, float y, float z, float angle, int32 mi, int1 m_bIsBlocking = false; m_vecInf = CModelInfo::GetModelInfo(m_nModelIndex)->GetColModel()->boundingBox.min; m_vecSup = CModelInfo::GetModelInfo(m_nModelIndex)->GetColModel()->boundingBox.max; - m_fSize = max(m_vecInf.Magnitude(), m_vecSup.Magnitude()); + m_fSize = Max(m_vecInf.Magnitude(), m_vecSup.Magnitude()); } bool CCarGenerator::CheckForBlockage() diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index 3c5c142c..0e9592dc 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -68,7 +68,7 @@ bool CGarages::HasCarBeenCrushed(int32 handle) return CrushedCarId == handle; } -WRAPPER void CGarages::TriggerMessage(char *text, int16, uint16 time, int16) { EAXJMP(0x426B20); } +WRAPPER void CGarages::TriggerMessage(const char *text, int16, uint16 time, int16) { EAXJMP(0x426B20); } WRAPPER bool CGarages::IsPointWithinHideOutGarage(CVector*) { EAXJMP(0x428260); } #if 0 @@ -97,7 +97,7 @@ void CGarages::PrintMessages() CMessages::InsertNumberInString(TheText.Get(MessageIDString), MessageNumberInString, -1, -1, -1, -1, -1, gUString); CFont::SetColor(CRGBA(0, 0, 0, 255)); - CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0 - 40.0f), gUString); + CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0f - 40.0f), gUString); CFont::SetColor(CRGBA(89, 115, 150, 255)); CFont::PrintString((SCREEN_WIDTH / 2), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f - 40.0f), gUString); @@ -107,7 +107,7 @@ void CGarages::PrintMessages() CMessages::InsertNumberInString(TheText.Get(MessageIDString), MessageNumberInString, MessageNumberInString2, -1, -1, -1, -1, gUString); CFont::SetColor(CRGBA(0, 0, 0, 255)); - CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0 - 40.0f), gUString); + CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0f - 40.0f), gUString); CFont::SetColor(CRGBA(89, 115, 150, 255)); CFont::PrintString((SCREEN_WIDTH / 2), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f - 40.0f), gUString); diff --git a/src/control/Garages.h b/src/control/Garages.h index d338c71b..4c35fad1 100644 --- a/src/control/Garages.h +++ b/src/control/Garages.h @@ -22,7 +22,7 @@ public: public: static bool IsModelIndexADoor(uint32 id); - static void TriggerMessage(char *text, int16, uint16 time, int16); + static void TriggerMessage(const char *text, int16, uint16 time, int16); static void PrintMessages(void); static bool HasCarBeenCrushed(int32); static bool IsPointWithinHideOutGarage(CVector*); diff --git a/src/control/PathFind.cpp b/src/control/PathFind.cpp index e9b33395..025db0c9 100644 --- a/src/control/PathFind.cpp +++ b/src/control/PathFind.cpp @@ -207,8 +207,8 @@ CPathFind::PreparePathData(void) numExtern++; if(InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes > numLanes) numLanes = InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes; - maxX = max(maxX, Abs(InfoForTileCars[k].x)); - maxY = max(maxY, Abs(InfoForTileCars[k].y)); + maxX = Max(maxX, Abs(InfoForTileCars[k].x)); + maxY = Max(maxY, Abs(InfoForTileCars[k].y)); }else if(InfoForTileCars[k].type == NodeTypeIntern) numIntern++; } @@ -392,7 +392,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor if(Abs(dx) < nearestDist){ dy = tempnodes[k].pos.y - CoorsXFormed.y; if(Abs(dy) < nearestDist){ - nearestDist = max(Abs(dx), Abs(dy)); + nearestDist = Max(Abs(dx), Abs(dy)); nearestId = k; } } @@ -501,13 +501,13 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor // Find i inside path segment iseg = 0; - for(j = max(oldNumPathNodes, i-12); j < i; j++) + for(j = Max(oldNumPathNodes, i-12); j < i; j++) if(m_pathNodes[j].objectIndex == m_pathNodes[i].objectIndex) iseg++; istart = 12*m_mapObjects[m_pathNodes[i].objectIndex]->m_modelIndex; // Add links to other internal nodes - for(j = max(oldNumPathNodes, i-12); j < min(m_numPathNodes, i+12); j++){ + for(j = Max(oldNumPathNodes, i-12); j < Min(m_numPathNodes, i+12); j++){ if(m_pathNodes[i].objectIndex != m_pathNodes[j].objectIndex || i == j) continue; // N.B.: in every path segment, the externals have to be at the end @@ -1263,7 +1263,9 @@ CPathFind::FindNextNodeWandering(uint8 type, CVector coors, CPathNode **lastNode static CPathNode *apNodesToBeCleared[4995]; void -CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector target, CPathNode **nodes, int16 *pNumNodes, int16 maxNumNodes, CVehicle *vehicle, float *pDist, float distLimit, int32 forcedTargetNode) +CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector target, + CPathNode **nodes, int16 *pNumNodes, int16 maxNumNodes, CVehicle *vehicle, + float *pDist, float distLimit, int32 forcedTargetNode) { int i, j; @@ -1273,41 +1275,51 @@ CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector ta targetNode = FindNodeClosestToCoors(target, type, distLimit); else targetNode = forcedTargetNode; - if(targetNode < 0) - goto fail; + if(targetNode < 0) { + *pNumNodes = 0; + if(pDist) *pDist = 100000.0f; + return; + } // Find start int numPathsToTry; CTreadable *startObj; - if(startNodeId < 0){ + if(startNodeId < 0) { if(vehicle == nil || (startObj = vehicle->m_treadable[type]) == nil) startObj = FindRoadObjectClosestToCoors(start, type); numPathsToTry = 0; - for(i = 0; i < 12; i++){ - if(startObj->m_nodeIndices[type][i] < 0) - break; - if(m_pathNodes[startObj->m_nodeIndices[type][i]].group == m_pathNodes[targetNode].group) + for(i = 0; i < 12; i++) { + if(startObj->m_nodeIndices[type][i] < 0) break; + if(m_pathNodes[startObj->m_nodeIndices[type][i]].group == + m_pathNodes[targetNode].group) numPathsToTry++; } - }else{ + } else { numPathsToTry = 1; startObj = m_mapObjects[m_pathNodes[startNodeId].objectIndex]; } - if(numPathsToTry == 0) - goto fail; - - if(startNodeId < 0){ - // why only check node 0? - if(m_pathNodes[startObj->m_nodeIndices[type][0]].group != m_pathNodes[targetNode].group) - goto fail; - }else{ - if(m_pathNodes[startNodeId].group != m_pathNodes[targetNode].group) - goto fail; + if(numPathsToTry == 0) { + *pNumNodes = 0; + if(pDist) *pDist = 100000.0f; } + if(startNodeId < 0) { + // why only check node 0? + if(m_pathNodes[startObj->m_nodeIndices[type][0]].group != + m_pathNodes[targetNode].group) { + *pNumNodes = 0; + if(pDist) *pDist = 100000.0f; + return; + } + } else { + if(m_pathNodes[startNodeId].group != m_pathNodes[targetNode].group) { + *pNumNodes = 0; + if(pDist) *pDist = 100000.0f; + return; + } + } - for(i = 0; i < 512; i++) - m_searchNodes[i].next = nil; + for(i = 0; i < 512; i++) m_searchNodes[i].next = nil; AddNodeToList(&m_pathNodes[targetNode], 0); int numNodesToBeCleared = 0; apNodesToBeCleared[numNodesToBeCleared++] = &m_pathNodes[targetNode]; @@ -1383,11 +1395,6 @@ CPathFind::DoPathSearch(uint8 type, CVector start, int32 startNodeId, CVector ta for(i = 0; i < numNodesToBeCleared; i++) apNodesToBeCleared[i]->distance = MAX_DIST; return; - -fail: - *pNumNodes = 0; - if(pDist) - *pDist = 100000.0f; } static CPathNode *pNodeList[32]; diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp index 12636d32..03104307 100644 --- a/src/control/Replay.cpp +++ b/src/control/Replay.cpp @@ -342,7 +342,7 @@ void CReplay::StorePedUpdate(CPed *ped, int id) tPedUpdatePacket* pp = (tPedUpdatePacket*)&Record.m_pBase[Record.m_nOffset]; pp->type = REPLAYPACKET_PED_UPDATE; pp->index = id; - pp->heading = 128.0f / M_PI * ped->m_fRotationCur; + pp->heading = 128.0f / PI * ped->m_fRotationCur; pp->matrix.CompressFromFullMatrix(ped->GetMatrix()); pp->assoc_group_id = ped->m_animGroup; /* Would be more sane to use GetJustIndex(ped->m_pMyVehicle) in following assignment */ @@ -366,8 +366,8 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) CAnimBlendAssociation* main = RpAnimBlendClumpGetMainAssociation((RpClump*)ped->m_rwObject, &second, &blend_amount); if (main){ state->animId = main->animId; - state->time = 255.0f / 4.0f * max(0.0f, min(4.0f, main->currentTime)); - state->speed = 255.0f / 3.0f * max(0.0f, min(3.0f, main->speed)); + state->time = 255.0f / 4.0f * Max(0.0f, Min(4.0f, main->currentTime)); + state->speed = 255.0f / 3.0f * Max(0.0f, Min(3.0f, main->speed)); }else{ state->animId = 3; state->time = 0; @@ -375,9 +375,9 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) } if (second) { state->secAnimId = second->animId; - state->secTime = 255.0f / 4.0f * max(0.0f, min(4.0f, second->currentTime)); - state->secSpeed = 255.0f / 3.0f * max(0.0f, min(3.0f, second->speed)); - state->blendAmount = 255.0f / 2.0f * max(0.0f, min(2.0f, blend_amount)); + state->secTime = 255.0f / 4.0f * Max(0.0f, Min(4.0f, second->currentTime)); + state->secSpeed = 255.0f / 3.0f * Max(0.0f, Min(3.0f, second->speed)); + state->blendAmount = 255.0f / 2.0f * Max(0.0f, Min(2.0f, blend_amount)); }else{ state->secAnimId = 0; state->secTime = 0; @@ -387,9 +387,9 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) CAnimBlendAssociation* partial = RpAnimBlendClumpGetMainPartialAssociation((RpClump*)ped->m_rwObject); if (partial) { state->partAnimId = partial->animId; - state->partAnimTime = 255.0f / 4.0f * max(0.0f, min(4.0f, partial->currentTime)); - state->partAnimSpeed = 255.0f / 3.0f * max(0.0f, min(3.0f, partial->speed)); - state->partBlendAmount = 255.0f / 2.0f * max(0.0f, min(2.0f, partial->blendAmount)); + state->partAnimTime = 255.0f / 4.0f * Max(0.0f, Min(4.0f, partial->currentTime)); + state->partAnimSpeed = 255.0f / 3.0f * Max(0.0f, Min(3.0f, partial->speed)); + state->partBlendAmount = 255.0f / 2.0f * Max(0.0f, Min(2.0f, partial->blendAmount)); }else{ state->partAnimId = 0; state->partAnimTime = 0; @@ -408,9 +408,9 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState CAnimBlendAssociation* assoc = RpAnimBlendClumpGetMainAssociation_N((RpClump*)ped->m_rwObject, i); if (assoc){ state->aAnimId[i] = assoc->animId; - state->aCurTime[i] = 255.0f / 4.0f * max(0.0f, min(4.0f, assoc->currentTime)); - state->aSpeed[i] = 255.0f / 3.0f * max(0.0f, min(3.0f, assoc->speed)); - state->aBlendAmount[i] = 255.0f / 2.0f * max(0.0f, min(2.0f, assoc->blendAmount)); + state->aCurTime[i] = 255.0f / 4.0f * Max(0.0f, Min(4.0f, assoc->currentTime)); + state->aSpeed[i] = 255.0f / 3.0f * Max(0.0f, Min(3.0f, assoc->speed)); + state->aBlendAmount[i] = 255.0f / 2.0f * Max(0.0f, Min(2.0f, assoc->blendAmount)); state->aFlags[i] = assoc->flags; if (assoc->callbackType == CAnimBlendAssociation::CB_FINISH || assoc->callbackType == CAnimBlendAssociation::CB_DELETE) { state->aFunctionCallbackID[i] = FindCBFunctionID(assoc->callback); @@ -431,9 +431,9 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState CAnimBlendAssociation* assoc = RpAnimBlendClumpGetMainPartialAssociation_N((RpClump*)ped->m_rwObject, i); if (assoc) { state->aAnimId2[i] = assoc->animId; - state->aCurTime2[i] = 255.0f / 4.0f * max(0.0f, min(4.0f, assoc->currentTime)); - state->aSpeed2[i] = 255.0f / 3.0f * max(0.0f, min(3.0f, assoc->speed)); - state->aBlendAmount2[i] = 255.0f / 2.0f * max(0.0f, min(2.0f, assoc->blendAmount)); + state->aCurTime2[i] = 255.0f / 4.0f * Max(0.0f, Min(4.0f, assoc->currentTime)); + state->aSpeed2[i] = 255.0f / 3.0f * Max(0.0f, Min(3.0f, assoc->speed)); + state->aBlendAmount2[i] = 255.0f / 2.0f * Max(0.0f, Min(2.0f, assoc->blendAmount)); state->aFlags2[i] = assoc->flags; if (assoc->callbackType == CAnimBlendAssociation::CB_FINISH || assoc->callbackType == CAnimBlendAssociation::CB_DELETE) { state->aFunctionCallbackID2[i] = FindCBFunctionID(assoc->callback); @@ -464,8 +464,8 @@ void CReplay::ProcessPedUpdate(CPed *ped, float interpolation, CAddressInReplayB buffer->m_nOffset += sizeof(tPedUpdatePacket); return; } - ped->m_fRotationCur = pp->heading * M_PI / 128.0f; - ped->m_fRotationDest = pp->heading * M_PI / 128.0f; + ped->m_fRotationCur = pp->heading * PI / 128.0f; + ped->m_fRotationDest = pp->heading * PI / 128.0f; CMatrix ped_matrix; pp->matrix.DecompressIntoFullMatrix(ped_matrix); ped->GetMatrix() = ped->GetMatrix() * CMatrix(1.0f - interpolation); @@ -625,24 +625,24 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id) vp->health = vehicle->m_fHealth / 4.0f; /* Not anticipated that health can be > 1000. */ vp->acceleration = vehicle->m_fGasPedal * 100.0f; vp->panels = vehicle->IsCar() ? ((CAutomobile*)vehicle)->Damage.m_panelStatus : 0; - vp->velocityX = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetMoveSpeed().x)); /* 8000!? */ - vp->velocityY = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetMoveSpeed().y)); - vp->velocityZ = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetMoveSpeed().z)); + vp->velocityX = 8000.0f * Max(-4.0f, Min(4.0f, vehicle->GetMoveSpeed().x)); /* 8000!? */ + vp->velocityY = 8000.0f * Max(-4.0f, Min(4.0f, vehicle->GetMoveSpeed().y)); + vp->velocityZ = 8000.0f * Max(-4.0f, Min(4.0f, vehicle->GetMoveSpeed().z)); vp->mi = vehicle->GetModelIndex(); vp->primary_color = vehicle->m_currentColour1; vp->secondary_color = vehicle->m_currentColour2; if (vehicle->GetModelIndex() == MI_RHINO) - vp->car_gun = 128.0f / M_PI * ((CAutomobile*)vehicle)->m_fCarGunLR; + vp->car_gun = 128.0f / PI * ((CAutomobile*)vehicle)->m_fCarGunLR; else vp->wheel_state = 50.0f * vehicle->m_fSteerAngle; if (vehicle->IsCar()){ CAutomobile* car = (CAutomobile*)vehicle; for (int i = 0; i < 4; i++){ vp->wheel_susp_dist[i] = 50.0f * car->m_aSuspensionSpringRatio[i]; - vp->wheel_rotation[i] = 128.0f / M_PI * car->m_aWheelRotation[i]; + vp->wheel_rotation[i] = 128.0f / PI * car->m_aWheelRotation[i]; } - vp->door_angles[0] = 127.0f / M_PI * car->Doors[2].m_fAngle; - vp->door_angles[1] = 127.0f / M_PI * car->Doors[3].m_fAngle; + vp->door_angles[0] = 127.0f / PI * car->Doors[2].m_fAngle; + vp->door_angles[1] = 127.0f / PI * car->Doors[3].m_fAngle; vp->door_status = 0; for (int i = 0; i < 6; i++){ if (car->Damage.GetDoorStatus(i) == 3) @@ -675,7 +675,7 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI ApplyPanelDamageToCar(vp->panels, (CAutomobile*)vehicle, true); vehicle->m_vecMoveSpeed = CVector(vp->velocityX / 8000.0f, vp->velocityY / 8000.0f, vp->velocityZ / 8000.0f); if (vehicle->GetModelIndex() == MI_RHINO) { - ((CAutomobile*)vehicle)->m_fCarGunLR = vp->car_gun * M_PI / 128.0f; + ((CAutomobile*)vehicle)->m_fCarGunLR = vp->car_gun * PI / 128.0f; vehicle->m_fSteerAngle = 0.0f; }else{ vehicle->m_fSteerAngle = vp->wheel_state / 50.0f; @@ -684,10 +684,10 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI CAutomobile* car = (CAutomobile*)vehicle; for (int i = 0; i < 4; i++) { car->m_aSuspensionSpringRatio[i] = vp->wheel_susp_dist[i] / 50.0f; - car->m_aWheelRotation[i] = vp->wheel_rotation[i] * M_PI / 128.0f; + car->m_aWheelRotation[i] = vp->wheel_rotation[i] * PI / 128.0f; } - car->Doors[2].m_fAngle = car->Doors[2].m_fPrevAngle = vp->door_angles[0] * M_PI / 127.0f; - car->Doors[3].m_fAngle = car->Doors[3].m_fPrevAngle = vp->door_angles[1] * M_PI / 127.0f; + car->Doors[2].m_fAngle = car->Doors[2].m_fPrevAngle = vp->door_angles[0] * PI / 127.0f; + car->Doors[3].m_fAngle = car->Doors[3].m_fPrevAngle = vp->door_angles[1] * PI / 127.0f; if (vp->door_angles[0]) car->Damage.SetDoorStatus(2, 2); if (vp->door_angles[1]) @@ -1501,9 +1501,9 @@ void CReplay::ProcessLookAroundCam(void) --FramesActiveLookAroundCam; fBetaAngleLookAroundCam += x_moved; if (CPad::NewMouseControllerState.LMB && CPad::NewMouseControllerState.RMB) - fDistanceLookAroundCam = max(3.0f, min(15.0f, fDistanceLookAroundCam + 2.0f * y_moved)); + fDistanceLookAroundCam = Max(3.0f, Min(15.0f, fDistanceLookAroundCam + 2.0f * y_moved)); else - fAlphaAngleLookAroundCam = max(0.1f, min(1.5f, fAlphaAngleLookAroundCam + y_moved)); + fAlphaAngleLookAroundCam = Max(0.1f, Min(1.5f, fAlphaAngleLookAroundCam + y_moved)); CVector camera_pt( fDistanceLookAroundCam * Sin(fBetaAngleLookAroundCam) * Cos(fAlphaAngleLookAroundCam), fDistanceLookAroundCam * Cos(fBetaAngleLookAroundCam) * Cos(fAlphaAngleLookAroundCam), diff --git a/src/control/Script.cpp b/src/control/Script.cpp index c81cd050..7e87fc6e 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -1987,7 +1987,7 @@ int8 CRunningScript::ProcessCommandsFrom100To199(int32 command) car->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS; car->m_status = STATUS_PHYSICS; car->bEngineOn = true; - car->AutoPilot.m_nCruiseSpeed = max(car->AutoPilot.m_nCruiseSpeed, 6); + car->AutoPilot.m_nCruiseSpeed = Max(car->AutoPilot.m_nCruiseSpeed, 6); car->AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds(); return 0; } @@ -1999,7 +1999,7 @@ int8 CRunningScript::ProcessCommandsFrom100To199(int32 command) CCarCtrl::JoinCarWithRoadSystem(car); car->AutoPilot.m_nCarMission = MISSION_CRUISE; car->bEngineOn = true; - car->AutoPilot.m_nCruiseSpeed = max(car->AutoPilot.m_nCruiseSpeed, 6); + car->AutoPilot.m_nCruiseSpeed = Max(car->AutoPilot.m_nCruiseSpeed, 6); car->AutoPilot.m_nTimeToStartMission = CTimer::GetTimeInMilliseconds(); return 0; } @@ -2083,7 +2083,7 @@ int8 CRunningScript::ProcessCommandsFrom100To199(int32 command) CollectParameters(&m_nIp, 2); CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]); assert(car); - car->AutoPilot.m_nCruiseSpeed = min(*(float*)&ScriptParams[1], 60.0f * car->pHandling->Transmission.fUnkMaxVelocity); + car->AutoPilot.m_nCruiseSpeed = Min(*(float*)&ScriptParams[1], 60.0f * car->pHandling->Transmission.fUnkMaxVelocity); return 0; } case COMMAND_SET_CAR_DRIVING_STYLE: diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index cb16c3ad..f15232f3 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -209,7 +209,7 @@ WellBufferMe(float Target, float *CurrentValue, float *CurrentSpeed, float MaxSp else if(TargetSpeed > 0.0f && *CurrentSpeed > TargetSpeed) *CurrentSpeed = TargetSpeed; - *CurrentValue += *CurrentSpeed * min(10.0f, CTimer::GetTimeStep()); + *CurrentValue += *CurrentSpeed * Min(10.0f, CTimer::GetTimeStep()); } void @@ -697,7 +697,7 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl // Process height offset to avoid peds and cars float TargetZOffSet = m_fUnknownZOffSet + m_fDimensionOfHighestNearCar; - TargetZOffSet = max(TargetZOffSet, m_fPedBetweenCameraHeightOffset); + TargetZOffSet = Max(TargetZOffSet, m_fPedBetweenCameraHeightOffset); float TargetHeight = CameraTarget.z + TargetZOffSet - Source.z; if(TargetHeight > m_fCamBufferedHeight){ @@ -753,7 +753,7 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl } } - TargetCoors.z += min(1.0f, m_fCamBufferedHeight/2.0f); + TargetCoors.z += Min(1.0f, m_fCamBufferedHeight/2.0f); m_cvecTargetCoorsForFudgeInter = TargetCoors; Front = TargetCoors - Source; @@ -991,7 +991,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa } if(FoundCamRoof){ // Camera is under something - float roof = FoundRoofCenter ? min(CamRoof, CarRoof) : CamRoof; + float roof = FoundRoofCenter ? Min(CamRoof, CarRoof) : CamRoof; // Same weirdness again? TargetAlpha = CGeneral::GetATanOfXY(CA_MAX_DISTANCE, roof - CamTargetZ - 1.5f); CamClear = false; @@ -1249,7 +1249,7 @@ void CCam::Cam_On_A_String_Unobscured(const CVector &TargetCoors, float BaseDist) { CA_MAX_DISTANCE = BaseDist + 0.1f + TheCamera.CarZoomValueSmooth; - CA_MIN_DISTANCE = min(BaseDist*0.6f, 3.5f); + CA_MIN_DISTANCE = Min(BaseDist*0.6f, 3.5f); CVector Dist = Source - TargetCoors; diff --git a/src/core/Collision.cpp b/src/core/Collision.cpp index 66b29d9f..538bcae6 100644 --- a/src/core/Collision.cpp +++ b/src/core/Collision.cpp @@ -153,10 +153,10 @@ CCollision::LoadCollisionWhenINeedIt(bool forceChange) // on water we expect to be between levels multipleLevels = true; }else{ - xmin = max(sx - 1, 0); - xmax = min(sx + 1, NUMSECTORS_X-1); - ymin = max(sy - 1, 0); - ymax = min(sy + 1, NUMSECTORS_Y-1); + xmin = Max(sx - 1, 0); + xmax = Min(sx + 1, NUMSECTORS_X-1); + ymin = Max(sy - 1, 0); + ymax = Min(sy + 1, NUMSECTORS_Y-1); for(x = xmin; x <= xmax; x++) for(y = ymin; y <= ymax; y++){ diff --git a/src/core/FileMgr.cpp b/src/core/FileMgr.cpp index 954fcdef..2a8628b0 100644 --- a/src/core/FileMgr.cpp +++ b/src/core/FileMgr.cpp @@ -248,15 +248,15 @@ CFileMgr::OpenFileForWriting(const char *file) } int -CFileMgr::Read(int fd, char *buf, int len) +CFileMgr::Read(int fd, const char *buf, int len) { - return myfread(buf, 1, len, fd); + return myfread((void*)buf, 1, len, fd); } int -CFileMgr::Write(int fd, char *buf, int len) +CFileMgr::Write(int fd, const char *buf, int len) { - return myfwrite(buf, 1, len, fd); + return myfwrite((void*)buf, 1, len, fd); } bool diff --git a/src/core/FileMgr.h b/src/core/FileMgr.h index bab86e38..3df0c7d8 100644 --- a/src/core/FileMgr.h +++ b/src/core/FileMgr.h @@ -12,8 +12,8 @@ public: static int LoadFile(const char *file, uint8 *buf, int unused, const char *mode); static int OpenFile(const char *file, const char *mode); static int OpenFileForWriting(const char *file); - static int Read(int fd, char *buf, int len); - static int Write(int fd, char *buf, int len); + static int Read(int fd, const char *buf, int len); + static int Write(int fd, const char *buf, int len); static bool Seek(int fd, int offset, int whence); static bool ReadLine(int fd, char *buf, int len); static int CloseFile(int fd); diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 1de5c94f..f4545f7b 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -95,7 +95,7 @@ bool GetMouseMoveRight(); bool GetPadInput(); bool GetMouseInput(); -char *FrontendFilenames[] = { +const char *FrontendFilenames[] = { "fe2_mainpanel_ul", "fe2_mainpanel_ur", "fe2_mainpanel_dl", @@ -126,7 +126,7 @@ char *FrontendFilenames[] = { "fe_radio9", // CHATTERBOX }; -char *MenuFilenames[] = { +const char *MenuFilenames[] = { "connection24", "", "findgame24", "", "hostgame24", "", @@ -1030,7 +1030,7 @@ int CMenuManager::FadeIn(int alpha) m_nCurrScreen == MENUPAGE_SAVING_IN_PROGRESS || m_nCurrScreen == MENUPAGE_DELETING) return alpha; - return min(m_nMenuFadeAlpha, alpha); + return Min(m_nMenuFadeAlpha, alpha); } #endif diff --git a/src/core/General.h b/src/core/General.h index 8f9aa044..366c571c 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -97,7 +97,7 @@ public: } // should return direction in 0-8 range. fits perfectly to peds' path directions. - static int CGeneral::GetNodeHeadingFromVector(float x, float y) + static int GetNodeHeadingFromVector(float x, float y) { float angle = CGeneral::GetRadianAngleBetweenPoints(x, y, 0.0f, 0.0f); if (angle < 0.0f) diff --git a/src/core/IniFile.cpp b/src/core/IniFile.cpp index 08b30876..46dceff3 100644 --- a/src/core/IniFile.cpp +++ b/src/core/IniFile.cpp @@ -17,10 +17,10 @@ void CIniFile::LoadIniFile() if (f){ CFileMgr::ReadLine(f, gString, 200); sscanf(gString, "%f", &PedNumberMultiplier); - PedNumberMultiplier = min(3.0f, max(0.5f, PedNumberMultiplier)); + PedNumberMultiplier = Min(3.0f, Max(0.5f, PedNumberMultiplier)); CFileMgr::ReadLine(f, gString, 200); sscanf(gString, "%f", &CarNumberMultiplier); - CarNumberMultiplier = min(3.0f, max(0.5f, CarNumberMultiplier)); + CarNumberMultiplier = Min(3.0f, Max(0.5f, CarNumberMultiplier)); CFileMgr::CloseFile(f); } CPopulation::MaxNumberOfPedsInUse = 25.0f * PedNumberMultiplier; diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp index f334a255..b5086d64 100644 --- a/src/core/Pad.cpp +++ b/src/core/Pad.cpp @@ -299,10 +299,10 @@ CControllerState CPad::ReconcileTwoControllersInput(CControllerState const &Stat { if ( State1.button || State2.button ) ReconState.button = 255; } #define _RECONCILE_AXIS_POSITIVE(axis) \ - { if ( State1.axis >= 0 && State2.axis >= 0 ) ReconState.axis = max(State1.axis, State2.axis); } + { if ( State1.axis >= 0 && State2.axis >= 0 ) ReconState.axis = Max(State1.axis, State2.axis); } #define _RECONCILE_AXIS_NEGATIVE(axis) \ - { if ( State1.axis <= 0 && State2.axis <= 0 ) ReconState.axis = min(State1.axis, State2.axis); } + { if ( State1.axis <= 0 && State2.axis <= 0 ) ReconState.axis = Min(State1.axis, State2.axis); } #define _RECONCILE_AXIS(axis) \ { _RECONCILE_AXIS_POSITIVE(axis); _RECONCILE_AXIS_NEGATIVE(axis); } diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index a7bde91e..8158cd1d 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -1940,7 +1940,7 @@ CStreaming::ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float CTimeModelInfo *mi = (CTimeModelInfo*)CModelInfo::GetModelInfo(e->GetModelIndex()); if(mi->m_type != MITYPE_TIME || CClock::GetIsTimeInRange(mi->GetTimeOn(), mi->GetTimeOff())){ lodDistSq = sq(mi->GetLargestLodDistance()); - lodDistSq = min(lodDistSq, sq(STREAM_DIST)); + lodDistSq = Min(lodDistSq, sq(STREAM_DIST)); pos = CVector2D(e->GetPosition()); if(xmin < pos.x && pos.x < xmax && ymin < pos.y && pos.y < ymax && @@ -2160,20 +2160,20 @@ CStreaming::DeleteRwObjectsBehindCamera(int32 mem) if(Abs(TheCamera.GetForward().x) > Abs(TheCamera.GetForward().y)){ // looking west/east - ymin = max(iy - 10, 0); - ymax = min(iy + 10, NUMSECTORS_Y); + ymin = Max(iy - 10, 0); + ymax = Min(iy + 10, NUMSECTORS_Y); assert(ymin <= ymax); // Delete a block of sectors that we know is behind the camera if(TheCamera.GetForward().x > 0){ // looking east - xmax = max(ix - 2, 0); - xmin = max(ix - 10, 0); + xmax = Max(ix - 2, 0); + xmin = Max(ix - 10, 0); inc = 1; }else{ // looking west - xmax = min(ix + 2, NUMSECTORS_X); - xmin = min(ix + 10, NUMSECTORS_X); + xmax = Min(ix + 2, NUMSECTORS_X); + xmin = Min(ix + 10, NUMSECTORS_X); inc = -1; } for(y = ymin; y <= ymax; y++){ @@ -2189,13 +2189,13 @@ CStreaming::DeleteRwObjectsBehindCamera(int32 mem) // Now a block that intersects with the camera's frustum if(TheCamera.GetForward().x > 0){ // looking east - xmax = max(ix + 10, 0); - xmin = max(ix - 2, 0); + xmax = Max(ix + 10, 0); + xmin = Max(ix - 2, 0); inc = 1; }else{ // looking west - xmax = min(ix - 10, NUMSECTORS_X); - xmin = min(ix + 2, NUMSECTORS_X); + xmax = Min(ix - 10, NUMSECTORS_X); + xmin = Min(ix + 2, NUMSECTORS_X); inc = -1; } for(y = ymin; y <= ymax; y++){ @@ -2224,20 +2224,20 @@ CStreaming::DeleteRwObjectsBehindCamera(int32 mem) }else{ // looking north/south - xmin = max(ix - 10, 0); - xmax = min(ix + 10, NUMSECTORS_X); + xmin = Max(ix - 10, 0); + xmax = Min(ix + 10, NUMSECTORS_X); assert(xmin <= xmax); // Delete a block of sectors that we know is behind the camera if(TheCamera.GetForward().y > 0){ // looking north - ymax = max(iy - 2, 0); - ymin = max(iy - 10, 0); + ymax = Max(iy - 2, 0); + ymin = Max(iy - 10, 0); inc = 1; }else{ // looking south - ymax = min(iy + 2, NUMSECTORS_Y); - ymin = min(iy + 10, NUMSECTORS_Y); + ymax = Min(iy + 2, NUMSECTORS_Y); + ymin = Min(iy + 10, NUMSECTORS_Y); inc = -1; } for(x = xmin; x <= xmax; x++){ @@ -2253,13 +2253,13 @@ CStreaming::DeleteRwObjectsBehindCamera(int32 mem) // Now a block that intersects with the camera's frustum if(TheCamera.GetForward().y > 0){ // looking north - ymax = max(iy + 10, 0); - ymin = max(iy - 2, 0); + ymax = Max(iy + 10, 0); + ymin = Max(iy - 2, 0); inc = 1; }else{ // looking south - ymax = min(iy - 10, NUMSECTORS_Y); - ymin = min(iy + 2, NUMSECTORS_Y); + ymax = Min(iy - 10, NUMSECTORS_Y); + ymin = Min(iy + 2, NUMSECTORS_Y); inc = -1; } for(x = xmin; x <= xmax; x++){ diff --git a/src/core/Wanted.cpp b/src/core/Wanted.cpp index 26b115e3..daed9155 100644 --- a/src/core/Wanted.cpp +++ b/src/core/Wanted.cpp @@ -209,7 +209,7 @@ CWanted::ReportCrimeNow(eCrimeType type, const CVector &coors, bool policeDoesnt else sensitivity = m_fCrimeSensitivity; - wantedLevelDrop = min(CCullZones::GetWantedLevelDrop(), 100); + wantedLevelDrop = Min(CCullZones::GetWantedLevelDrop(), 100); chaos = (1.0f - wantedLevelDrop/100.0f) * sensitivity; if (policeDoesntCare) diff --git a/src/core/common.h b/src/core/common.h index 73e57c21..d1f71720 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -156,7 +156,7 @@ public: inline float sq(float x) { return x*x; } #define SQR(x) ((x) * (x)) -#define PI M_PI +#define PI (float)M_PI #define TWOPI (PI*2) #define HALFPI (PI/2) #define DEGTORAD(x) ((x) * PI / 180.0f) @@ -171,8 +171,8 @@ inline float sq(float x) { return x*x; } int myrand(void); void mysrand(unsigned int seed); -void re3_debug(char *format, ...); -void re3_trace(const char *filename, unsigned int lineno, const char *func, char *format, ...); +void re3_debug(const char *format, ...); +void re3_trace(const char *filename, unsigned int lineno, const char *func, const char *format, ...); void re3_assert(const char *expr, const char *filename, unsigned int lineno, const char *func); #define DEBUGBREAK() __debugbreak(); @@ -195,8 +195,8 @@ void re3_assert(const char *expr, const char *filename, unsigned int lineno, con #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) #define BIT(num) (1<<(num)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) -#define min(a, b) (((a) < (b)) ? (a) : (b)) +#define Max(a, b) (((a) > (b)) ? (a) : (b)) +#define Min(a, b) (((a) < (b)) ? (a) : (b)) #define ABS(a) (((a) < 0) ? (-(a)) : (a)) #define norm(value, min, max) (((value) < (min)) ? 0 : (((value) > (max)) ? 1 : (((value) - (min)) / ((max) - (min))))) diff --git a/src/core/main.cpp b/src/core/main.cpp index 50494ef3..a82a2ab8 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -453,7 +453,7 @@ DoFade(void) CRGBA fadeColor; CRect rect; int fadeValue = CDraw::FadeValue; - float brightness = min(CMenuManager::m_PrefsBrightness, 256); + float brightness = Min(CMenuManager::m_PrefsBrightness, 256); if(brightness <= 50) brightness = 50; if(FrontEndMenuManager.m_bMenuActive) diff --git a/src/core/re3.cpp b/src/core/re3.cpp index ad3838bd..9737fddb 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -425,7 +425,7 @@ void re3_assert(const char *expr, const char *filename, unsigned int lineno, con abort(); } -void re3_debug(char *format, ...) +void re3_debug(const char *format, ...) { va_list va; va_start(va, format); @@ -435,7 +435,7 @@ void re3_debug(char *format, ...) printf("%s", re3_buff); } -void re3_trace(const char *filename, unsigned int lineno, const char *func, char *format, ...) +void re3_trace(const char *filename, unsigned int lineno, const char *func, const char *format, ...) { char buff[re3_buffsize *2]; va_list va; diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index fbd1322d..d59e6c59 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -457,7 +457,7 @@ CPhysical::ApplySpringCollision(float springConst, CVector &springDir, CVector & { float compression = 1.0f - springRatio; if(compression > 0.0f){ - float step = min(CTimer::GetTimeStep(), 3.0f); + float step = Min(CTimer::GetTimeStep(), 3.0f); float impulse = -GRAVITY*m_fMass*step * springConst * compression * bias*2.0f; ApplyMoveForce(springDir*impulse); ApplyTurnForce(springDir*impulse, point); @@ -471,12 +471,12 @@ CPhysical::ApplySpringDampening(float damping, CVector &springDir, CVector &poin { float speedA = DotProduct(speed, springDir); float speedB = DotProduct(GetSpeed(point), springDir); - float step = min(CTimer::GetTimeStep(), 3.0f); + float step = Min(CTimer::GetTimeStep(), 3.0f); float impulse = -damping * (speedA + speedB)/2.0f * m_fMass * step * 0.53f; // what is this? float a = m_fTurnMass / ((point.MagnitudeSqr() + 1.0f) * 2.0f * m_fMass); - a = min(a, 1.0f); + a = Min(a, 1.0f); float b = Abs(impulse / (speedB * m_fMass)); if(a < b) impulse *= a/b; @@ -646,7 +646,7 @@ CPhysical::ApplyCollision(CPhysical *B, CColPoint &colpoint, float &impulseA, fl // positive if B is moving towards A // not interested in how much B moves into A apparently? // only interested in cases where A collided into B - speedB = max(0.0f, DotProduct(B->m_vecMoveSpeed, colpoint.normal)); + speedB = Max(0.0f, DotProduct(B->m_vecMoveSpeed, colpoint.normal)); // A has moved into B if(speedA < speedB){ if(!A->bHasHitWall) @@ -1147,18 +1147,18 @@ CPhysical::ProcessShiftSectorList(CPtrList *lists) CVector dir = A->GetPosition() - B->GetPosition(); dir.Normalise(); if(dir.z < 0.0f && dir.z < A->GetForward().z && dir.z < A->GetRight().z) - dir.z = min(0.0f, min(A->GetForward().z, A->GetRight().z)); + dir.z = Min(0.0f, Min(A->GetForward().z, A->GetRight().z)); shift += dir * colpoints[mostColliding].depth * 0.5f; }else if(A->IsPed() && B->IsVehicle() && ((CVehicle*)B)->IsBoat()){ CVector dir = colpoints[mostColliding].normal; - float f = min(Abs(dir.z), 0.9f); + float f = Min(Abs(dir.z), 0.9f); dir.z = 0.0f; dir.Normalise(); shift += dir * colpoints[mostColliding].depth / (1.0f - f); boat = B; }else if(B->IsPed() && A->IsVehicle() && ((CVehicle*)A)->IsBoat()){ CVector dir = colpoints[mostColliding].normal * -1.0f; - float f = min(Abs(dir.z), 0.9f); + float f = Min(Abs(dir.z), 0.9f); dir.z = 0.0f; dir.Normalise(); B->GetPosition() += dir * colpoints[mostColliding].depth / (1.0f - f); @@ -1246,7 +1246,7 @@ collision: float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); } }else if(A->bHasContacted){ CVector savedMoveFriction = A->m_vecMoveFriction; @@ -1268,7 +1268,7 @@ collision: float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1301,7 +1301,7 @@ collision: float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1328,7 +1328,7 @@ collision: float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1506,7 +1506,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr(); float moveSpeedDiff = A->m_vecMoveSpeed.MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, imp, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, imp, Max(turnSpeedDiff, moveSpeedDiff)); } }else{ for(i = 0; i < numCollisions; i++){ @@ -1527,7 +1527,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr(); float moveSpeedDiff = A->m_vecMoveSpeed.MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, imp, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, imp, Max(turnSpeedDiff, moveSpeedDiff)); float adhesion = CSurfaceTable::GetAdhesiveLimit(aColPoints[i]) / numCollisions; @@ -1545,7 +1545,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) else if(A->GetUp().z > 0.3f) adhesion = 0.0f; else - adhesion *= min(5.0f, 0.03f*impulseA + 1.0f); + adhesion *= Min(5.0f, 0.03f*impulseA + 1.0f); } if(A->ApplyFriction(adhesion, aColPoints[i])) @@ -1594,7 +1594,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); } }else if(A->bHasContacted){ CVector savedMoveFriction = A->m_vecMoveFriction; @@ -1619,7 +1619,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1655,7 +1655,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1685,7 +1685,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) float turnSpeedDiff = (B->m_vecTurnSpeed - A->m_vecTurnSpeed).MagnitudeSqr(); float moveSpeedDiff = (B->m_vecMoveSpeed - A->m_vecMoveSpeed).MagnitudeSqr(); - DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, max(turnSpeedDiff, moveSpeedDiff)); + DMAudio.ReportCollision(A, B, aColPoints[i].surfaceA, aColPoints[i].surfaceB, impulseA, Max(turnSpeedDiff, moveSpeedDiff)); if(A->ApplyFriction(B, CSurfaceTable::GetAdhesiveLimit(aColPoints[i])/numCollisions, aColPoints[i])){ A->bHasContacted = true; @@ -1831,7 +1831,7 @@ CPhysical::ProcessCollision(void) if(IsPed() && (distSq >= sq(0.2f) || ped->IsPlayer())){ if(ped->IsPlayer()) - n = max(NUMSTEPS(0.2f), 2.0); + n = Max(NUMSTEPS(0.2f), 2.0); else n = NUMSTEPS(0.3f); step = savedTimeStep / n; @@ -1852,7 +1852,7 @@ CPhysical::ProcessCollision(void) speedDown = Multiply3x3(GetMatrix(), speedDown); speedUp = GetSpeed(speedUp); speedDown = GetSpeed(speedDown); - distSq = max(speedUp.MagnitudeSqr(), speedDown.MagnitudeSqr()) * sq(CTimer::GetTimeStep()); + distSq = Max(speedUp.MagnitudeSqr(), speedDown.MagnitudeSqr()) * sq(CTimer::GetTimeStep()); if(distSq >= sq(0.3f)){ n = NUMSTEPS(0.3f); step = savedTimeStep / n; diff --git a/src/modelinfo/ClumpModelInfo.h b/src/modelinfo/ClumpModelInfo.h index d491bdb9..100aa30b 100644 --- a/src/modelinfo/ClumpModelInfo.h +++ b/src/modelinfo/ClumpModelInfo.h @@ -4,14 +4,14 @@ struct RwObjectNameIdAssocation { - char *name; + const char *name; int32 hierId; uint32 flags; }; struct RwObjectNameAssociation { - char *name; + const char *name; RwFrame *frame; }; diff --git a/src/modelinfo/VehicleModelInfo.cpp b/src/modelinfo/VehicleModelInfo.cpp index 19100d84..87f01177 100644 --- a/src/modelinfo/VehicleModelInfo.cpp +++ b/src/modelinfo/VehicleModelInfo.cpp @@ -1038,7 +1038,7 @@ CVehicleModelInfo::SetEnvironmentMap(void) void CVehicleModelInfo::LoadEnvironmentMaps(void) { - char *texnames[] = { + const char *texnames[] = { "reflection01", // only one used "reflection02", "reflection03", diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 209c4ff6..65bd696d 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -1792,7 +1792,7 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) neededPos.z = autoZPos.z; m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); } else if (neededPos.z <= currentZ && m_pVehicleAnim && vehAnim != ANIM_VAN_CLOSE_L && vehAnim != ANIM_VAN_CLOSE) { - adjustedTimeStep = min(m_pVehicleAnim->timeStep, 0.1f); + adjustedTimeStep = Min(m_pVehicleAnim->timeStep, 0.1f); // Smoothly change ped position neededPos.z = currentZ - (currentZ - neededPos.z) / (m_pVehicleAnim->GetTimeLeft() / adjustedTimeStep); @@ -1807,12 +1807,12 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) if (m_pVehicleAnim && (vehAnim == ANIM_CAR_GETIN_RHS || vehAnim == ANIM_CAR_GETIN_LOW_RHS || vehAnim == ANIM_CAR_GETIN_LHS || vehAnim == ANIM_CAR_GETIN_LOW_LHS || vehAnim == ANIM_CAR_QJACK || vehAnim == ANIM_VAN_GETIN_L || vehAnim == ANIM_VAN_GETIN)) { - adjustedTimeStep = min(m_pVehicleAnim->timeStep, 0.1f); + adjustedTimeStep = Min(m_pVehicleAnim->timeStep, 0.1f); // Smoothly change ped position neededPos.z = (neededPos.z - currentZ) / (m_pVehicleAnim->GetTimeLeft() / adjustedTimeStep) + currentZ; } else if (m_nPedState == PED_ENTER_CAR || m_nPedState == PED_CARJACK) { - neededPos.z = max(currentZ, autoZPos.z); + neededPos.z = Max(currentZ, autoZPos.z); } } } @@ -4622,7 +4622,7 @@ CPed::LoadFightData(void) // Actually GetLocalDirectionTo(Turn/Look) int -CPed::GetLocalDirection(CVector2D const &posOffset) +CPed::GetLocalDirection(const CVector2D &posOffset) { float direction; @@ -4771,12 +4771,12 @@ CPed::FightStrike(CVector &touchedNodePos) float moveMult; if (m_lastFightMove == FIGHTMOVE_GROUNDKICK) { - moveMult = min(damageMult * 0.6f, 4.0f); + moveMult = Min(damageMult * 0.6f, 4.0f); } else { if (nearPed->m_nPedState != PED_DIE || damageMult >= 20) { moveMult = damageMult; } else { - moveMult = min(damageMult * 2.0f, 14.0f); + moveMult = Min(damageMult * 2.0f, 14.0f); } } @@ -5434,7 +5434,7 @@ CPed::CreateDeadPedWeaponPickups(void) pickupPos.z = CWorld::FindGroundZFor3DCoord(pickupPos.x, pickupPos.y, pickupPos.z, &found) + 0.5f; } if (found) - CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, min(weaponAmmo, AmmoForWeapon_OnStreet[weapon])); + CPickups::GenerateNewOne_WeaponType(pickupPos, weapon, PICKUP_ONCE_TIMEOUT, Min(weaponAmmo, AmmoForWeapon_OnStreet[weapon])); } ClearWeapons(); } @@ -5443,7 +5443,7 @@ void CPed::SetAttackTimer(uint32 time) { if (CTimer::GetTimeInMilliseconds() > m_attackTimer) - m_attackTimer = max(m_lastHitTime, CTimer::GetTimeInMilliseconds()) + time; + m_attackTimer = Max(m_lastHitTime, CTimer::GetTimeInMilliseconds()) + time; } void diff --git a/src/peds/Ped.h b/src/peds/Ped.h index ff581150..c1e93fdc 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -575,7 +575,7 @@ public: void StartFightAttack(uint8); void SetWaitState(eWaitState, void*); bool FightStrike(CVector&); - int GetLocalDirection(CVector2D const &); + int GetLocalDirection(const CVector2D &); void StartFightDefend(uint8, uint8, uint8); void PlayHitSound(CPed*); void SetFall(int, AnimationId, uint8); diff --git a/src/peds/PedPlacement.cpp b/src/peds/PedPlacement.cpp index 8a40e56f..d7b7ec75 100644 --- a/src/peds/PedPlacement.cpp +++ b/src/peds/PedPlacement.cpp @@ -29,7 +29,7 @@ CPedPlacement::FindZCoorForPed(CVector* pos) if (CWorld::ProcessVerticalLine(vec, startZ, foundCol, foundEnt, true, false, false, false, true, false, nil)) foundColZ2 = foundCol.point.z; - zForPed = max(foundColZ, foundColZ2); + zForPed = Max(foundColZ, foundColZ2); if (zForPed > -99.0f) pos->z = 1.04f + zForPed; diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp index 2884894c..a461301c 100644 --- a/src/render/Clouds.cpp +++ b/src/render/Clouds.cpp @@ -388,7 +388,7 @@ CClouds::RenderBackground(int16 topred, int16 topgreen, int16 topblue, ms_colourBottom.b = topblue; ms_colourBottom.a = alpha; - botpos = min(SCREEN_HEIGHT, topedge); + botpos = Min(SCREEN_HEIGHT, topedge); CSprite2d::DrawRect(CRect(0, 0, SCREEN_WIDTH, botpos), ms_colourBottom, ms_colourBottom, ms_colourTop, ms_colourTop); } @@ -415,18 +415,18 @@ CClouds::RenderHorizon(void) if(ms_horizonZ > SCREEN_HEIGHT) return; - float z1 = min(ms_horizonZ + SMALLSTRIPHEIGHT, SCREEN_HEIGHT); + float z1 = Min(ms_horizonZ + SMALLSTRIPHEIGHT, SCREEN_HEIGHT); CSprite2d::DrawRectXLU(CRect(0, ms_horizonZ, SCREEN_WIDTH, z1), ms_colourBottom, ms_colourBottom, ms_colourTop, ms_colourTop); // This is just weird float a = SCREEN_HEIGHT/400.0f * HORIZSTRIPHEIGHT + - SCREEN_HEIGHT/300.0f * max(TheCamera.GetPosition().z, 0.0f); + SCREEN_HEIGHT/300.0f * Max(TheCamera.GetPosition().z, 0.0f); float b = TheCamera.GetUp().z < 0.0f ? SCREEN_HEIGHT : SCREEN_HEIGHT * Abs(TheCamera.GetRight().z); float z2 = z1 + (a + b)*TheCamera.LODDistMultiplier; - z2 = min(z2, SCREEN_HEIGHT); + z2 = Min(z2, SCREEN_HEIGHT); CSprite2d::DrawRect(CRect(0, z1, SCREEN_WIDTH, z2), ms_colourBottom, ms_colourBottom, ms_colourTop, ms_colourTop); } diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index 1a6cfea3..9881e764 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -109,7 +109,7 @@ CCoronas::Update(void) int i; static int LastCamLook = 0; - LightsMult = min(LightsMult + 0.03f * CTimer::GetTimeStep(), 1.0f); + LightsMult = Min(LightsMult + 0.03f * CTimer::GetTimeStep(), 1.0f); int CamLook = 0; if(TheCamera.Cams[TheCamera.ActiveCam].LookingLeft) CamLook |= 1; @@ -121,7 +121,7 @@ CCoronas::Update(void) if(LastCamLook != CamLook) bChangeBrightnessImmediately = 3; else - bChangeBrightnessImmediately = max(bChangeBrightnessImmediately-1, 0); + bChangeBrightnessImmediately = Max(bChangeBrightnessImmediately-1, 0); LastCamLook = CamLook; for(i = 0; i < NUMCORONAS; i++) @@ -309,7 +309,7 @@ CCoronas::Render(void) // render corona itself if(aCoronas[i].texture){ - float fogscale = CWeather::Foggyness*min(spriteCoors.z, 40.0f)/40.0f + 1.0f; + float fogscale = CWeather::Foggyness*Min(spriteCoors.z, 40.0f)/40.0f + 1.0f; if(CCoronas::aCoronas[i].id == SUN_CORE) spriteCoors.z = 0.95f * RwCameraGetFarClipPlane(Scene.camera); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(aCoronas[i].texture)); @@ -320,7 +320,7 @@ CCoronas::Render(void) float f = 1.0f - aCoronas[i].someAngle*2.0f/PI; float wscale = 6.0f*sq(sq(sq(f))) + 0.5f; float hscale = 0.35f - (wscale - 0.5f) * 0.06f; - hscale = max(hscale, 0.15f); + hscale = Max(hscale, 0.15f); CSprite::RenderOneXLUSprite(spriteCoors.x, spriteCoors.y, spriteCoors.z, spritew * aCoronas[i].size * wscale, @@ -467,7 +467,7 @@ CCoronas::RenderReflections(void) float spritew, spriteh; if(CSprite::CalcScreenCoors(coors, spriteCoors, &spritew, &spriteh, true)){ float drawDist = 0.75f * aCoronas[i].drawDist; - drawDist = min(drawDist, 50.0f); + drawDist = Min(drawDist, 50.0f); if(spriteCoors.z < drawDist){ float fadeDistance = drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; @@ -546,25 +546,25 @@ CRegisteredCorona::Update(void) (CCoronas::SunBlockedByClouds && id == CCoronas::SUN_CORONA || !CWorld::GetIsLineOfSightClear(coors, TheCamera.GetPosition(), true, false, false, false, false, false))){ // Corona is blocked, fade out - fadeAlpha = max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), 0.0f); + fadeAlpha = Max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), 0.0f); }else if(offScreen){ // Same when off screen - fadeAlpha = max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), 0.0f); + fadeAlpha = Max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), 0.0f); }else{ // Visible if(alpha > fadeAlpha){ // fade in - fadeAlpha = min(fadeAlpha + 15.0f*CTimer::GetTimeStep(), alpha); + fadeAlpha = Min(fadeAlpha + 15.0f*CTimer::GetTimeStep(), alpha); if(CCoronas::bChangeBrightnessImmediately) fadeAlpha = alpha; }else if(alpha < fadeAlpha){ // too visible, decrease alpha but not below alpha - fadeAlpha = max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), alpha); + fadeAlpha = Max(fadeAlpha - 15.0f*CTimer::GetTimeStep(), alpha); } // darken scene when the sun is visible if(id == CCoronas::SUN_CORONA) - CCoronas::LightsMult = max(CCoronas::LightsMult - CTimer::GetTimeStep()*0.06f, 0.6f); + CCoronas::LightsMult = Max(CCoronas::LightsMult - CTimer::GetTimeStep()*0.06f, 0.6f); } // remove if invisible diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp index 7c35319f..fc68d315 100644 --- a/src/render/Fluff.cpp +++ b/src/render/Fluff.cpp @@ -10,7 +10,7 @@ #include "Clock.h" #include "Weather.h" #include "Stats.h" -#include "math/maths.h" +#include "maths.h" #include "Frontend.h" uint8 ScrollCharSet[59][5] = { diff --git a/src/render/Fluff.h b/src/render/Fluff.h index f33b016e..b189b9a2 100644 --- a/src/render/Fluff.h +++ b/src/render/Fluff.h @@ -1,6 +1,6 @@ #pragma once #include "common.h" -#include "math/Vector.h" +#include "Vector.h" class CMovingThings { diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 1db7b07c..2dae7551 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -1128,7 +1128,7 @@ void CHud::DrawAfterFade() switch (OddJob2On) { case 0: OddJob2On = 1; - OddJob2XOffset = 380.0; + OddJob2XOffset = 380.0f; break; case 1: if (OddJob2XOffset <= 2.0f) { @@ -1136,27 +1136,27 @@ void CHud::DrawAfterFade() OddJob2On = 2; } else { - fStep = 40.0; - if ((OddJob2XOffset * 0.16667) <= 40.0) - fStep = OddJob2XOffset * 0.16667; + fStep = 40.0f; + if ((OddJob2XOffset * 0.16667f) <= 40.0f) + fStep = OddJob2XOffset * 0.16667f; OddJob2XOffset = OddJob2XOffset - fStep; } break; case 2: - OddJob2Timer += (20.0 * CTimer::GetTimeStep()); + OddJob2Timer += (20.0f * CTimer::GetTimeStep()); if (OddJob2Timer > 1500) { OddJob2On = 3; } break; case 3: - fStep = 30.0; - if ((OddJob2XOffset * 0.2) >= 30.0) - fStep = OddJob2XOffset * 0.2; + fStep = 30.0f; + if ((OddJob2XOffset * 0.2f) >= 30.0f) + fStep = OddJob2XOffset * 0.2f; OddJob2XOffset = OddJob2XOffset - fStep; - if (OddJob2XOffset < -380.0) { - OddJob2OffTimer = 5000.0; + if (OddJob2XOffset < -380.0f) { + OddJob2OffTimer = 5000.0f; OddJob2On = 0; } break; diff --git a/src/render/Lights.cpp b/src/render/Lights.cpp index cd83a898..85d7ba13 100644 --- a/src/render/Lights.cpp +++ b/src/render/Lights.cpp @@ -37,9 +37,9 @@ SetLightsWithTimeOfDayColour(RpWorld *) AmbientLightColourForFrame.green = 1.0f; AmbientLightColourForFrame.blue = 1.0f; } - AmbientLightColourForFrame_PedsCarsAndObjects.red = min(1.0f, AmbientLightColourForFrame.red*1.3f); - AmbientLightColourForFrame_PedsCarsAndObjects.green = min(1.0f, AmbientLightColourForFrame.green*1.3f); - AmbientLightColourForFrame_PedsCarsAndObjects.blue = min(1.0f, AmbientLightColourForFrame.blue*1.3f); + AmbientLightColourForFrame_PedsCarsAndObjects.red = Min(1.0f, AmbientLightColourForFrame.red*1.3f); + AmbientLightColourForFrame_PedsCarsAndObjects.green = Min(1.0f, AmbientLightColourForFrame.green*1.3f); + AmbientLightColourForFrame_PedsCarsAndObjects.blue = Min(1.0f, AmbientLightColourForFrame.blue*1.3f); RpLightSetColor(pAmbient, &AmbientLightColourForFrame); } @@ -70,16 +70,16 @@ SetLightsWithTimeOfDayColour(RpWorld *) float f1 = 2.0f * (CMenuManager::m_PrefsBrightness/256.0f - 1.0f) * 0.6f + 1.0f; float f2 = 3.0f * (CMenuManager::m_PrefsBrightness/256.0f - 1.0f) * 0.6f + 1.0f; - AmbientLightColourForFrame.red = min(1.0f, AmbientLightColourForFrame.red * f2); - AmbientLightColourForFrame.green = min(1.0f, AmbientLightColourForFrame.green * f2); - AmbientLightColourForFrame.blue = min(1.0f, AmbientLightColourForFrame.blue * f2); - AmbientLightColourForFrame_PedsCarsAndObjects.red = min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.red * f1); - AmbientLightColourForFrame_PedsCarsAndObjects.green = min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.green * f1); - AmbientLightColourForFrame_PedsCarsAndObjects.blue = min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.blue * f1); + AmbientLightColourForFrame.red = Min(1.0f, AmbientLightColourForFrame.red * f2); + AmbientLightColourForFrame.green = Min(1.0f, AmbientLightColourForFrame.green * f2); + AmbientLightColourForFrame.blue = Min(1.0f, AmbientLightColourForFrame.blue * f2); + AmbientLightColourForFrame_PedsCarsAndObjects.red = Min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.red * f1); + AmbientLightColourForFrame_PedsCarsAndObjects.green = Min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.green * f1); + AmbientLightColourForFrame_PedsCarsAndObjects.blue = Min(1.0f, AmbientLightColourForFrame_PedsCarsAndObjects.blue * f1); #ifdef FIX_BUGS - DirectionalLightColourForFrame.red = min(1.0f, DirectionalLightColourForFrame.red * f1); - DirectionalLightColourForFrame.green = min(1.0f, DirectionalLightColourForFrame.green * f1); - DirectionalLightColourForFrame.blue = min(1.0f, DirectionalLightColourForFrame.blue * f1); + DirectionalLightColourForFrame.red = Min(1.0f, DirectionalLightColourForFrame.red * f1); + DirectionalLightColourForFrame.green = Min(1.0f, DirectionalLightColourForFrame.green * f1); + DirectionalLightColourForFrame.blue = Min(1.0f, DirectionalLightColourForFrame.blue * f1); #else DirectionalLightColourForFrame.red = min(1.0f, AmbientLightColourForFrame.red * f1); DirectionalLightColourForFrame.green = min(1.0f, AmbientLightColourForFrame.green * f1); @@ -193,7 +193,7 @@ AddAnExtraDirectionalLight(RpWorld *world, float dirx, float diry, float dirz, f RwRGBAReal color; RwV3d *dir; - strength = max(max(red, green), blue); + strength = Max(Max(red, green), blue); n = -1; if(NumExtraDirLightsInWorld < NUMEXTRADIRECTIONALS) n = NumExtraDirLightsInWorld; @@ -221,7 +221,7 @@ AddAnExtraDirectionalLight(RpWorld *world, float dirx, float diry, float dirz, f RwFrameUpdateObjects(RpLightGetFrame(pExtraDirectionals[n])); RpLightSetFlags(pExtraDirectionals[n], rpLIGHTLIGHTATOMICS); LightStrengths[n] = strength; - NumExtraDirLightsInWorld = min(NumExtraDirLightsInWorld+1, NUMEXTRADIRECTIONALS); + NumExtraDirLightsInWorld = Min(NumExtraDirLightsInWorld+1, NUMEXTRADIRECTIONALS); } void diff --git a/src/render/ParticleMgr.cpp b/src/render/ParticleMgr.cpp index 7a1804de..9381787c 100644 --- a/src/render/ParticleMgr.cpp +++ b/src/render/ParticleMgr.cpp @@ -91,7 +91,7 @@ void cParticleSystemMgr::LoadParticleData() break; case CFG_PARAM_INITIAL_COLOR_VARIATION: - entry->m_InitialColorVariation = min(atoi(value), 100); + entry->m_InitialColorVariation = Min(atoi(value), 100); break; case CFG_PARAM_FADE_DESTINATION_COLOR_R: diff --git a/src/render/PointLights.cpp b/src/render/PointLights.cpp index a015ec54..8e942ce6 100644 --- a/src/render/PointLights.cpp +++ b/src/render/PointLights.cpp @@ -98,7 +98,7 @@ CPointLights::GenerateLightsAffectingObject(CVector *objCoors) if(aLights[i].type == LIGHT_DIRECTIONAL){ float dot = -DotProduct(dir, aLights[i].dir); - intensity *= max((dot-0.5f)*2.0f, 0.0f); + intensity *= Max((dot-0.5f)*2.0f, 0.0f); } if(intensity > 0.0f) diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp index 4d2e4605..b5147f02 100644 --- a/src/render/Shadows.cpp +++ b/src/render/Shadows.cpp @@ -727,10 +727,10 @@ CShadows::RenderStoredShadows(void) float fStartY = shadowPos.y - fHeight; float fEndY = shadowPos.y + fHeight; - int32 nStartX = max(CWorld::GetSectorIndexX(fStartX), 0); - int32 nStartY = max(CWorld::GetSectorIndexY(fStartY), 0); - int32 nEndX = min(CWorld::GetSectorIndexX(fEndX), NUMSECTORS_X-1); - int32 nEndY = min(CWorld::GetSectorIndexY(fEndY), NUMSECTORS_Y-1); + int32 nStartX = Max(CWorld::GetSectorIndexX(fStartX), 0); + int32 nStartY = Max(CWorld::GetSectorIndexY(fStartY), 0); + int32 nEndX = Min(CWorld::GetSectorIndexX(fEndX), NUMSECTORS_X-1); + int32 nEndY = Min(CWorld::GetSectorIndexY(fEndY), NUMSECTORS_Y-1); CWorld::AdvanceCurrentScanCode(); @@ -873,10 +873,10 @@ CShadows::GeneratePolysForStaticShadow(int16 nStaticShadowID) float fStartY = shadowPos.y - fHeight; float fEndY = shadowPos.y + fHeight; - int32 nStartX = max(CWorld::GetSectorIndexX(fStartX), 0); - int32 nStartY = max(CWorld::GetSectorIndexY(fStartY), 0); - int32 nEndX = min(CWorld::GetSectorIndexX(fEndX), NUMSECTORS_X-1); - int32 nEndY = min(CWorld::GetSectorIndexY(fEndY), NUMSECTORS_Y-1); + int32 nStartX = Max(CWorld::GetSectorIndexX(fStartX), 0); + int32 nStartY = Max(CWorld::GetSectorIndexY(fStartY), 0); + int32 nEndX = Min(CWorld::GetSectorIndexX(fEndX), NUMSECTORS_X-1); + int32 nEndY = Min(CWorld::GetSectorIndexY(fEndY), NUMSECTORS_Y-1); CWorld::AdvanceCurrentScanCode(); @@ -1016,11 +1016,11 @@ CShadows::CastShadowEntity(CEntity *pEntity, float fStartX, float fStartY, floa Points[3].x = (fLengthRight - fFrontRight) - fSideRight; Points[3].y = (fLengthForward - fFrontForward) - fSideForward; - float MinX = min(min(Points[0].x, Points[1].x), min(Points[2].x, Points[3].x)); - float MaxX = max(max(Points[0].x, Points[1].x), max(Points[2].x, Points[3].x)); + float MinX = Min(Min(Points[0].x, Points[1].x), Min(Points[2].x, Points[3].x)); + float MaxX = Max(Max(Points[0].x, Points[1].x), Max(Points[2].x, Points[3].x)); - float MinY = min(min(Points[0].y, Points[1].y), min(Points[2].y, Points[3].y)); - float MaxY = max(max(Points[0].y, Points[1].y), max(Points[2].y, Points[3].y)); + float MinY = Min(Min(Points[0].y, Points[1].y), Min(Points[2].y, Points[3].y)); + float MaxY = Max(Max(Points[0].y, Points[1].y), Max(Points[2].y, Points[3].y)); float MaxZ = pPosn->z - pEntity->GetPosition().z; float MinZ = MaxZ - fZDistance; @@ -1767,7 +1767,7 @@ CShadows::RenderIndicatorShadow(uint32 nID, uint8 ShadowType, RwTexture *pTextur { ASSERT(pPosn != NULL); - C3dMarkers::PlaceMarkerSet(nID, _TODOCONST(4), *pPosn, max(fFrontX, -fSideY), + C3dMarkers::PlaceMarkerSet(nID, _TODOCONST(4), *pPosn, Max(fFrontX, -fSideY), 0, 128, 255, 128, 2048, 0.2f, 0); } diff --git a/src/render/Timecycle.cpp b/src/render/Timecycle.cpp index 7ab3e91e..0113c001 100644 --- a/src/render/Timecycle.cpp +++ b/src/render/Timecycle.cpp @@ -290,7 +290,7 @@ CTimeCycle::Update(void) TheCamera.SetMotionBlur(m_fCurrentBlurRed, m_fCurrentBlurGreen, m_fCurrentBlurBlue, m_fCurrentBlurAlpha, MBLUR_NORMAL); if(m_FogReduction != 0) - m_fCurrentFarClip = max(m_fCurrentFarClip, m_FogReduction/64.0f * 650.0f); + m_fCurrentFarClip = Max(m_fCurrentFarClip, m_FogReduction/64.0f * 650.0f); m_nCurrentFogColourRed = (m_nCurrentSkyTopRed + 2*m_nCurrentSkyBottomRed) / 3; m_nCurrentFogColourGreen = (m_nCurrentSkyTopGreen + 2*m_nCurrentSkyBottomGreen) / 3; m_nCurrentFogColourBlue = (m_nCurrentSkyTopBlue + 2*m_nCurrentSkyBottomBlue) / 3; @@ -311,9 +311,9 @@ CTimeCycle::Update(void) if(TheCamera.GetForward().z < -0.9f || !CWeather::bScriptsForceRain && (CCullZones::PlayerNoRain() || CCullZones::CamNoRain() || CCutsceneMgr::IsRunning())) - m_FogReduction = min(m_FogReduction+1, 64); + m_FogReduction = Min(m_FogReduction+1, 64); else - m_FogReduction = max(m_FogReduction-1, 0); + m_FogReduction = Max(m_FogReduction-1, 0); } STARTPATCHES diff --git a/src/render/VisibilityPlugins.cpp b/src/render/VisibilityPlugins.cpp index ca3a0195..2107813b 100644 --- a/src/render/VisibilityPlugins.cpp +++ b/src/render/VisibilityPlugins.cpp @@ -103,14 +103,14 @@ CVisibilityPlugins::SetRenderWareCamera(RwCamera *camera) else ms_cullCompsDist = sq(TheCamera.LODDistMultiplier * 20.0f); - ms_vehicleLod0Dist = sq(70.0 * TheCamera.GenerationDistMultiplier); - ms_vehicleLod1Dist = sq(90.0 * TheCamera.GenerationDistMultiplier); - ms_vehicleFadeDist = sq(100.0 * TheCamera.GenerationDistMultiplier); - ms_bigVehicleLod0Dist = sq(60.0 * TheCamera.GenerationDistMultiplier); - ms_bigVehicleLod1Dist = sq(150.0 * TheCamera.GenerationDistMultiplier); - ms_pedLod0Dist = sq(25.0 * TheCamera.LODDistMultiplier); - ms_pedLod1Dist = sq(60.0 * TheCamera.LODDistMultiplier); - ms_pedFadeDist = sq(70.0 * TheCamera.LODDistMultiplier); + ms_vehicleLod0Dist = sq(70.0f * TheCamera.GenerationDistMultiplier); + ms_vehicleLod1Dist = sq(90.0f * TheCamera.GenerationDistMultiplier); + ms_vehicleFadeDist = sq(100.0f * TheCamera.GenerationDistMultiplier); + ms_bigVehicleLod0Dist = sq(60.0f * TheCamera.GenerationDistMultiplier); + ms_bigVehicleLod1Dist = sq(150.0f * TheCamera.GenerationDistMultiplier); + ms_pedLod0Dist = sq(25.0f * TheCamera.LODDistMultiplier); + ms_pedLod1Dist = sq(60.0f * TheCamera.LODDistMultiplier); + ms_pedFadeDist = sq(70.0f * TheCamera.LODDistMultiplier); } RpMaterial* diff --git a/src/render/WaterLevel.cpp b/src/render/WaterLevel.cpp index a1c2af93..c711c8c8 100644 --- a/src/render/WaterLevel.cpp +++ b/src/render/WaterLevel.cpp @@ -979,7 +979,7 @@ CWaterLevel::RenderOneWavySector(float fX, float fY, float fZ, RwRGBA const &col SMALL_SECTOR_SIZE / 2, apBoatList) ) { - float fWakeColor = fAdd1 - max(255.0f - float(color.blue + color.red + color.green) / 3, fAdd2); + float fWakeColor = fAdd1 - Max(255.0f - float(color.blue + color.red + color.green) / 3, fAdd2); RpGeometry *wavyGeometry = RpAtomicGetGeometry(ms_pWavyAtomic); RpGeometry *geom = apGeomArray[nGeomUsed++]; @@ -1035,9 +1035,9 @@ CWaterLevel::RenderOneWavySector(float fX, float fY, float fZ, RwRGBA const &col RwRGBAAssign(&wakeColor, &color); - wakeColor.red = min(color.red + int32(fWakeColor * fRedMult * fDistMult), 255); - wakeColor.green = min(color.green + int32(fWakeColor * fGreenMult * fDistMult), 255); - wakeColor.blue = min(color.blue + int32(fWakeColor * fBlueMult * fDistMult), 255); + wakeColor.red = Min(color.red + int32(fWakeColor * fRedMult * fDistMult), 255); + wakeColor.green = Min(color.green + int32(fWakeColor * fGreenMult * fDistMult), 255); + wakeColor.blue = Min(color.blue + int32(fWakeColor * fBlueMult * fDistMult), 255); RwRGBAAssign(&geomPreLights[9*i+j], &wakeColor); @@ -1114,7 +1114,7 @@ CWaterLevel::CalcDistanceToWater(float fX, float fY) fSectorY + SMALL_SECTOR_SIZE - fY ); - fDistSqr = min(vecDist.MagnitudeSqr(), fDistSqr); + fDistSqr = Min(vecDist.MagnitudeSqr(), fDistSqr); } } } diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index d4eb71be..fc82e51e 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -1661,7 +1661,7 @@ void CenterVideo(void) /* ***************************************************************************** */ -void PlayMovieInWindow(int cmdShow, LPTSTR szFile) +void PlayMovieInWindow(int cmdShow, const char* szFile) { WCHAR wFileName[256]; HRESULT hr; diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 18c74478..99354d70 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -316,7 +316,7 @@ CAutomobile::ProcessControl(void) // Set Center of Mass to make car more stable if(strongGrip1 || bCheat3) - m_vecCentreOfMass.z = 0.3f*m_aSuspensionSpringLength[0] + -1.0*m_fHeightAboveRoad; + m_vecCentreOfMass.z = 0.3f*m_aSuspensionSpringLength[0] + -1.0f*m_fHeightAboveRoad; else if(pHandling->Flags & HANDLING_NONPLAYER_STABILISER && m_status == STATUS_PHYSICS) m_vecCentreOfMass.z = pHandling->CentreOfMass.z - 0.2f*pHandling->Dimension.z; else @@ -691,7 +691,7 @@ CAutomobile::ProcessControl(void) if(m_aSuspensionSpringRatio[i] < 1.0f) m_aWheelTimer[i] = 4.0f; else - m_aWheelTimer[i] = max(m_aWheelTimer[i]-CTimer::GetTimeStep(), 0.0f); + m_aWheelTimer[i] = Max(m_aWheelTimer[i]-CTimer::GetTimeStep(), 0.0f); if(m_aWheelTimer[i] > 0.0f){ m_nWheelsOnGround++; @@ -1009,7 +1009,7 @@ CAutomobile::ProcessControl(void) if(m_status != STATUS_PLAYER && m_status != STATUS_PLAYER_REMOTE && m_status != STATUS_PHYSICS){ if(GetModelIndex() == MI_MIAMI_RCRAIDER || GetModelIndex() == MI_MIAMI_SPARROW) - m_aWheelSpeed[0] = max(m_aWheelSpeed[0]-0.0005f, 0.0f); + m_aWheelSpeed[0] = Max(m_aWheelSpeed[0]-0.0005f, 0.0f); }else if((GetModelIndex() == MI_DODO || CVehicle::bAllDodosCheat) && m_vecMoveSpeed.Magnitude() > 0.0f && CTimer::GetTimeStep() > 0.0f){ FlyingControl(FLIGHT_MODEL_DODO); @@ -1017,7 +1017,7 @@ CAutomobile::ProcessControl(void) FlyingControl(FLIGHT_MODEL_HELI); }else if(GetModelIndex() == MI_MIAMI_RCRAIDER || GetModelIndex() == MI_MIAMI_SPARROW || bAllCarCheat){ if(CPad::GetPad(0)->GetCircleJustDown()) - m_aWheelSpeed[0] = max(m_aWheelSpeed[0]-0.03f, 0.0f); + m_aWheelSpeed[0] = Max(m_aWheelSpeed[0]-0.03f, 0.0f); if(m_aWheelSpeed[0] < 0.22f) m_aWheelSpeed[0] += 0.0001f; if(m_aWheelSpeed[0] > 0.15f) @@ -1129,10 +1129,10 @@ CAutomobile::ProcessControl(void) if(speed > sq(0.1f)){ speed = Sqrt(speed); if(suspShake > 0.0f){ - uint8 freq = min(200.0f*suspShake*speed*2000.0f/m_fMass + 100.0f, 250.0f); + uint8 freq = Min(200.0f*suspShake*speed*2000.0f/m_fMass + 100.0f, 250.0f); CPad::GetPad(0)->StartShake(20000.0f*CTimer::GetTimeStep()/freq, freq); }else{ - uint8 freq = min(200.0f*surfShake*speed*2000.0f/m_fMass + 40.0f, 145.0f); + uint8 freq = Min(200.0f*surfShake*speed*2000.0f/m_fMass + 40.0f, 145.0f); CPad::GetPad(0)->StartShake(5000.0f*CTimer::GetTimeStep()/freq, freq); } } @@ -1591,10 +1591,11 @@ CAutomobile::PreRender(void) break; } - if(GetModelIndex() == MI_RCBANDIT || - GetModelIndex() == MI_DODO || - GetModelIndex() == MI_RHINO) - goto nolights; + if(GetModelIndex() == MI_RCBANDIT || GetModelIndex() == MI_DODO || + GetModelIndex() == MI_RHINO) { + CShadows::StoreShadowForCar(this); + return; + } // Turn lights on/off bool shouldLightsBeOn = @@ -1739,7 +1740,7 @@ CAutomobile::PreRender(void) // Taillight coronas if(behindness > 0.0f){ // Behind car - float intensity = 0.4f*behindness + 0.4; + float intensity = 0.4f*behindness + 0.4f; float size = (behindness + 1.0f)/2.0f; if(m_fGasPedal < 0.0f){ @@ -1757,7 +1758,7 @@ CAutomobile::PreRender(void) CCoronas::TYPE_STREAK, CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, angle); }else{ - if(m_fBrakePedal > 0.0){ + if(m_fBrakePedal > 0.0f){ intensity += 0.4f; size += 0.3f; } @@ -1843,8 +1844,10 @@ CAutomobile::PreRender(void) }else{ // Lights off - if(m_status == STATUS_ABANDONED || m_status == STATUS_WRECKED) - goto nolights; + if(m_status == STATUS_ABANDONED || m_status == STATUS_WRECKED) { + CShadows::StoreShadowForCar(this); + return; + } CVector lightPos = mi->m_positions[CAR_POS_TAILLIGHTS]; CVector lightR = GetMatrix() * lightPos; @@ -1903,7 +1906,6 @@ CAutomobile::PreRender(void) } } -nolights: CShadows::StoreShadowForCar(this); } @@ -2586,7 +2588,7 @@ CAutomobile::HydraulicControl(void) float minz = pos.z + extendedLowerLimit - wheelRadius; if(minz < specialColModel->boundingBox.min.z) specialColModel->boundingBox.min.z = minz; - float radius = max(specialColModel->boundingBox.min.Magnitude(), specialColModel->boundingBox.max.Magnitude()); + float radius = Max(specialColModel->boundingBox.min.Magnitude(), specialColModel->boundingBox.max.Magnitude()); if(specialColModel->boundingSphere.radius < radius) specialColModel->boundingSphere.radius = radius; @@ -2685,10 +2687,10 @@ CAutomobile::HydraulicControl(void) float front = -rear; float right = CPad::GetPad(0)->GetCarGunLeftRight()/128.0f; float left = -right; - suspChange[CARWHEEL_FRONT_LEFT] = max(front+left, 0.0f); - suspChange[CARWHEEL_REAR_LEFT] = max(rear+left, 0.0f); - suspChange[CARWHEEL_FRONT_RIGHT] = max(front+right, 0.0f); - suspChange[CARWHEEL_REAR_RIGHT] = max(rear+right, 0.0f); + suspChange[CARWHEEL_FRONT_LEFT] = Max(front+left, 0.0f); + suspChange[CARWHEEL_REAR_LEFT] = Max(rear+left, 0.0f); + suspChange[CARWHEEL_FRONT_RIGHT] = Max(front+right, 0.0f); + suspChange[CARWHEEL_REAR_RIGHT] = Max(rear+right, 0.0f); if(m_hydraulicState < 100){ // Lowered, move wheels up @@ -2804,7 +2806,7 @@ CAutomobile::ProcessBuoyancy(void) ApplyTurnForce(impulse, point); CVector initialSpeed = m_vecMoveSpeed; - float timeStep = max(CTimer::GetTimeStep(), 0.01f); + float timeStep = Max(CTimer::GetTimeStep(), 0.01f); float impulseRatio = impulse.z / (GRAVITY * m_fMass * timeStep); float waterResistance = Pow(1.0f - 0.05f*impulseRatio, CTimer::GetTimeStep()); m_vecMoveSpeed *= waterResistance; @@ -2877,7 +2879,7 @@ CAutomobile::ProcessBuoyancy(void) static RwRGBA black; if(pos.z >= 0.0f){ nGenerateRaindrops = 0; - pos.z += 0.5; + pos.z += 0.5f; CParticleObject::AddObject(POBJECT_SPLASHES_AROUND, pos, CVector(0.0f, 0.0f, 0.0f), 6.5f, 2500, black, true); } @@ -2897,7 +2899,7 @@ CAutomobile::ProcessBuoyancy(void) float fSpeed = vSpeed.MagnitudeSqr(); if(fSpeed > sq(0.05f)){ fSpeed = Sqrt(fSpeed); - float size = min((fSpeed < 0.15f ? 0.25f : 0.75f)*fSpeed, 0.6f); + float size = Min((fSpeed < 0.15f ? 0.25f : 0.75f)*fSpeed, 0.6f); CVector right = 0.2f*fSpeed*GetRight() + 0.2f*vSpeed; CParticle::AddParticle(PARTICLE_PED_SPLASH, @@ -2979,11 +2981,11 @@ CAutomobile::DoDriveByShootings(void) // TODO: what is this? if(!lookingLeft && m_weaponDoorTimerLeft > 0.0f){ - m_weaponDoorTimerLeft = max(m_weaponDoorTimerLeft - CTimer::GetTimeStep()*0.1f, 0.0f); + m_weaponDoorTimerLeft = Max(m_weaponDoorTimerLeft - CTimer::GetTimeStep()*0.1f, 0.0f); ProcessOpenDoor(CAR_DOOR_LF, NUM_ANIMS, m_weaponDoorTimerLeft); } if(!lookingRight && m_weaponDoorTimerRight > 0.0f){ - m_weaponDoorTimerRight = max(m_weaponDoorTimerRight - CTimer::GetTimeStep()*0.1f, 0.0f); + m_weaponDoorTimerRight = Max(m_weaponDoorTimerRight - CTimer::GetTimeStep()*0.1f, 0.0f); ProcessOpenDoor(CAR_DOOR_RF, NUM_ANIMS, m_weaponDoorTimerRight); } } @@ -3131,7 +3133,7 @@ CAutomobile::VehicleDamage(float impulse, uint16 damagedPiece) FindPlayerPed()->SetWantedLevelNoDrop(1); if(m_status == STATUS_PLAYER && impulse > 50.0f){ - uint8 freq = min(0.4f*impulse*2000.0f/m_fMass + 100.0f, 250.0f); + uint8 freq = Min(0.4f*impulse*2000.0f/m_fMass + 100.0f, 250.0f); CPad::GetPad(0)->StartShake(40000/freq, freq); } @@ -3284,7 +3286,7 @@ CAutomobile::VehicleDamage(float impulse, uint16 damagedPiece) if(m_pDamageEntity && m_pDamageEntity == FindPlayerVehicle() && impulse > 10.0f){ int money = (doubleMoney ? 2 : 1) * impulse*pHandling->nMonetaryValue/1000000.0f; - money = min(money, 40); + money = Min(money, 40); if(money > 2){ sprintf(gString, "$%d", money); CWorld::Players[CWorld::PlayerInFocus].m_nMoney += money; @@ -3987,7 +3989,7 @@ CAutomobile::SetupSuspensionLines(void) // adjust col model to include suspension lines if(colModel->boundingBox.min.z > colModel->lines[0].p1.z) colModel->boundingBox.min.z = colModel->lines[0].p1.z; - float radius = max(colModel->boundingBox.min.Magnitude(), colModel->boundingBox.max.Magnitude()); + float radius = Max(colModel->boundingBox.min.Magnitude(), colModel->boundingBox.max.Magnitude()); if(colModel->boundingSphere.radius < radius) colModel->boundingSphere.radius = radius; diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp index f614b78f..2b5ff567 100644 --- a/src/vehicles/Boat.cpp +++ b/src/vehicles/Boat.cpp @@ -61,7 +61,7 @@ float CBoat::IsVertexAffectedByWake(CVector vecVertex, CBoat *pBoat) float fDist = vecDist.MagnitudeSqr(); if ( fDist < SQR(fMaxDist) ) - return 1.0f - min(fRangeMult * Sqrt(fDist / SQR(fMaxDist)) + (WAKE_LIFETIME - pBoat->m_afWakePointLifeTime[i]) * fTimeMult, 1.0f); + return 1.0f - Min(fRangeMult * Sqrt(fDist / SQR(fMaxDist)) + (WAKE_LIFETIME - pBoat->m_afWakePointLifeTime[i]) * fTimeMult, 1.0f); } return 0.0f; diff --git a/src/vehicles/HandlingMgr.cpp b/src/vehicles/HandlingMgr.cpp index be96ab08..0f16401e 100644 --- a/src/vehicles/HandlingMgr.cpp +++ b/src/vehicles/HandlingMgr.cpp @@ -6,9 +6,9 @@ cHandlingDataMgr &mod_HandlingManager = *(cHandlingDataMgr*)0x728060; -char *HandlingFilename = "HANDLING.CFG"; +const char *HandlingFilename = "HANDLING.CFG"; -char VehicleNames[NUMHANDLINGS][14] = { +const char VehicleNames[NUMHANDLINGS][14] = { "LANDSTAL", "IDAHO", "STINGER", @@ -199,7 +199,7 @@ cHandlingDataMgr::ConvertDataToGameUnits(tHandlingData *handling) if(handling->fTurnMass < 10.0f) handling->fTurnMass *= 5.0f; handling->fInvMass = 1.0f/handling->fMass; - handling->fBuoyancy = 100.0f/handling->nPercentSubmerged * 0.008*handling->fMass; + handling->fBuoyancy = 100.0f/handling->nPercentSubmerged * 0.008f*handling->fMass; // What the hell is going on here? specificVolume = handling->Dimension.x*handling->Dimension.z*0.5f / handling->fMass; // ? @@ -207,7 +207,7 @@ cHandlingDataMgr::ConvertDataToGameUnits(tHandlingData *handling) b = 100.0f; velocity = handling->Transmission.fMaxVelocity; while(a < b && velocity > 0.0f){ - velocity -= 0.01; + velocity -= 0.01f; a = handling->Transmission.fEngineAcceleration/6.0f; b = -velocity * (1.0f/(specificVolume * sq(velocity) + 1.0f) - 1.0f); } diff --git a/src/vehicles/Heli.cpp b/src/vehicles/Heli.cpp index 9b1a651d..39fc7ec4 100644 --- a/src/vehicles/Heli.cpp +++ b/src/vehicles/Heli.cpp @@ -14,7 +14,7 @@ #include "Shadows.h" #include "Coronas.h" #include "Explosion.h" -#include "TimeCycle.h" +#include "Timecycle.h" #include "TempColModels.h" #include "World.h" #include "WaterLevel.h" @@ -223,19 +223,19 @@ CHeli::ProcessControl(void) switch(m_heliStatus){ case HELI_STATUS_HOVER: groundZ = CWorld::FindGroundZFor3DCoord(GetPosition().x, GetPosition().y, 1000.0f, nil); - m_fTargetZ = max(groundZ, m_fTargetZ) + 8.0f; + m_fTargetZ = Max(groundZ, m_fTargetZ) + 8.0f; break; case HELI_STATUS_SHOT_DOWN: groundZ = CWorld::FindGroundZFor3DCoord(GetPosition().x, GetPosition().y, 1000.0f, nil); - m_fTargetZ = max(groundZ, m_fTargetZ) + 8.0f + m_fTargetOffset; + m_fTargetZ = Max(groundZ, m_fTargetZ) + 8.0f + m_fTargetOffset; break; case HELI_STATUS_HOVER2: groundZ = CWorld::FindGroundZFor3DCoord(GetPosition().x, GetPosition().y, 1000.0f, nil); - m_fTargetZ = max(groundZ, m_fTargetZ) + 8.0f + m_fTargetOffset; + m_fTargetZ = Max(groundZ, m_fTargetZ) + 8.0f + m_fTargetOffset; break; default: groundZ = CWorld::FindGroundZFor3DCoord(GetPosition().x, GetPosition().y, 1000.0f, nil); - m_fTargetZ = max(groundZ, m_fTargetZ) + 12.0f; + m_fTargetZ = Max(groundZ, m_fTargetZ) + 12.0f; break; } @@ -994,7 +994,7 @@ CHeli::TestBulletCollision(CVector *line0, CVector *line1, CVector *bulletPos, i float distToHeli = (pHelis[i]->GetPosition() - *line0).Magnitude(); CVector line = (*line1 - *line0); float lineLength = line.Magnitude(); - *bulletPos = *line0 + line*max(1.0f, distToHeli-5.0f); + *bulletPos = *line0 + line*Max(1.0f, distToHeli-5.0f); pHelis[i]->m_nBulletDamage += damage; diff --git a/src/vehicles/Plane.cpp b/src/vehicles/Plane.cpp index 775cf572..40e0e5a7 100644 --- a/src/vehicles/Plane.cpp +++ b/src/vehicles/Plane.cpp @@ -397,7 +397,7 @@ CPlane::ProcessControl(void) planePathSpeed = PlanePath3Speed; numPathNodes = NumPath3Nodes; if(CesnaMissionStatus == CESNA_STATUS_LANDED){ - pDrugRunCesna = false; + pDrugRunCesna = nil; FlagToDestroyWhenNextProcessed(); } }else if(m_bIsDropOffCesna){ @@ -407,7 +407,7 @@ CPlane::ProcessControl(void) planePathSpeed = PlanePath4Speed; numPathNodes = NumPath4Nodes; if(DropOffCesnaMissionStatus == CESNA_STATUS_LANDED){ - pDropOffCesna = false; + pDropOffCesna = nil; FlagToDestroyWhenNextProcessed(); } }else{ diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index 4795a29f..0355cba1 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -273,7 +273,7 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon right = -contactSpeedRight/wheelsOnGround; if(wheelStatus == WHEEL_STATUS_BURST){ - float fwdspeed = min(contactSpeedFwd, 0.3f); + float fwdspeed = Min(contactSpeedFwd, 0.3f); right += fwdspeed * CGeneral::GetRandomNumberInRange(-0.1f, 0.1f); } } @@ -363,7 +363,7 @@ CVehicle::ProcessWheelRotation(tWheelState state, const CVector &fwd, const CVec void CVehicle::ExtinguishCarFire(void) { - m_fHealth = max(m_fHealth, 300.0f); + m_fHealth = Max(m_fHealth, 300.0f); if(m_pCarFire) m_pCarFire->Extinguish(); if(IsCar()){ @@ -638,13 +638,13 @@ CVehicle::SetDriver(CPed *driver) if(bFreebies && driver == FindPlayerPed()){ if(GetModelIndex() == MI_AMBULAN) - FindPlayerPed()->m_fHealth = min(FindPlayerPed()->m_fHealth + 20.0f, 100.0f); + FindPlayerPed()->m_fHealth = Min(FindPlayerPed()->m_fHealth + 20.0f, 100.0f); else if(GetModelIndex() == MI_TAXI) CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 25; else if(GetModelIndex() == MI_POLICE) driver->GiveWeapon(WEAPONTYPE_SHOTGUN, 5); else if(GetModelIndex() == MI_ENFORCER) - driver->m_fArmour = max(driver->m_fArmour, 100.0f); + driver->m_fArmour = Max(driver->m_fArmour, 100.0f); else if(GetModelIndex() == MI_CABBIE || GetModelIndex() == MI_BORGNINE) CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 25; bFreebies = false;