From c6256aab4fe6145a81030b922f93ff60f91c88eb Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:06:38 +0200 Subject: [PATCH 01/21] GenerateIntegerRandomNumberTable --- src/audio/AudioManager.cpp | 7 +++++++ src/audio/AudioManager.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 580093db..538ba7ae 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,6 +9,12 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +void +cAudioManager::GenerateIntegerRandomNumberTable() +{ + for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } +} + void cAudioManager::PlayerJustLeftCar(void) { @@ -2682,6 +2688,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); InjectHook(0x56AD20, &cAudioManager::PlayerJustLeftCar, PATCH_JUMP); InjectHook(0x570DB0, &cAudioManager::GetPhrase, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index aa7d1f72..b37464bd 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,8 @@ public: char field_19195; int m_nTimeOfRecentCrime; + void GenerateIntegerRandomNumberTable(); + void PlayerJustLeftCar(void); void Service(); void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, From 7488f094e2d380fbf2cb700b9848b85e6117eafc Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:27:48 +0200 Subject: [PATCH 02/21] IsAudioInitialised --- src/audio/AudioManager.cpp | 8 ++++++++ src/audio/AudioManager.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 538ba7ae..2e5089bc 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,6 +9,12 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +bool +cAudioManager::IsAudioInitialised() const +{ + return m_bIsInitialised; +} + void cAudioManager::GenerateIntegerRandomNumberTable() { @@ -2688,6 +2694,8 @@ cAudioManager::Service() } STARTPATCHES + +InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); InjectHook(0x56AD20, &cAudioManager::PlayerJustLeftCar, PATCH_JUMP); InjectHook(0x570DB0, &cAudioManager::GetPhrase, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index b37464bd..23f762b8 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,7 @@ public: char field_19195; int m_nTimeOfRecentCrime; + bool IsAudioInitialised() const; void GenerateIntegerRandomNumberTable(); void PlayerJustLeftCar(void); From 404d9bedd2d28310716a7d35f67408502cf78126 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:31:14 +0200 Subject: [PATCH 03/21] SetDynamicAcousticModelingStatus --- src/audio/AudioManager.cpp | 9 +++++++-- src/audio/AudioManager.h | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 2e5089bc..98a2f82f 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -12,7 +12,12 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; bool cAudioManager::IsAudioInitialised() const { - return m_bIsInitialised; + return m_bIsInitialised; +} + +void cAudioManager::SetDynamicAcousticModelingStatus(bool status) +{ + m_bDynamicAcousticModelingStatus = status; } void @@ -2694,7 +2699,7 @@ cAudioManager::Service() } STARTPATCHES - +InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); InjectHook(0x56AD20, &cAudioManager::PlayerJustLeftCar, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 23f762b8..2d2fced8 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -175,7 +175,7 @@ public: char field_2; char m_bActiveSamples; char field_4; - char m_bDynamicAcousticModelingStatus; + bool m_bDynamicAcousticModelingStatus; char field_6; char field_7; float field_8; @@ -217,6 +217,7 @@ public: int m_nTimeOfRecentCrime; bool IsAudioInitialised() const; + void SetDynamicAcousticModelingStatus(bool status); void GenerateIntegerRandomNumberTable(); void PlayerJustLeftCar(void); From bd23f2c425896e379a85424f3f506e507cf90df9 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:39:54 +0200 Subject: [PATCH 04/21] PostTerminateGameSpecificShutdown --- src/audio/AudioManager.cpp | 11 +++++++++-- src/audio/AudioManager.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 98a2f82f..e82c2302 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,15 +9,21 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +void +cAudioManager::PostTerminateGameSpecificShutdown() +{ + ; +} + bool cAudioManager::IsAudioInitialised() const { - return m_bIsInitialised; + return m_bIsInitialised; } void cAudioManager::SetDynamicAcousticModelingStatus(bool status) { - m_bDynamicAcousticModelingStatus = status; + m_bDynamicAcousticModelingStatus = status; } void @@ -2699,6 +2705,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 2d2fced8..faae3305 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,7 @@ public: char field_19195; int m_nTimeOfRecentCrime; + void PostTerminateGameSpecificShutdown(); bool IsAudioInitialised() const; void SetDynamicAcousticModelingStatus(bool status); void GenerateIntegerRandomNumberTable(); From 1abd6941074b9f0ca74c8f0f5ef11b04291b0902 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:44:43 +0200 Subject: [PATCH 05/21] DestroyEntity --- src/audio/AudioManager.cpp | 19 +++++++++++++++++++ src/audio/AudioManager.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index e82c2302..0a87d0e9 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,6 +9,24 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +void +cAudioManager::DestroyEntity(int32 id) +{ + if(m_bIsInitialised && id >= 0 && id < 200 && m_asAudioEntities[id].m_bIsUsed) { + m_asAudioEntities[id].m_bIsUsed = 0; + for(i = 0; i < m_nAudioEntitiesTotal; ++i) { + if(id == m_anAudioEntityIndices[i]) { + if(i < 199) + memmove(&m_anAudioEntityIndices[i], + &m_anAudioEntityIndices[i + 1], + 4 * (m_nAudioEntitiesTotal - (i + 1))); + m_anAudioEntityIndices[--m_nAudioEntitiesTotal] = 200; + return; + } + } + } +} + void cAudioManager::PostTerminateGameSpecificShutdown() { @@ -2705,6 +2723,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x57A400, &cAudioManager::DestroyEntity, PATCH_JUMP); InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index faae3305..f270ada6 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,7 @@ public: char field_19195; int m_nTimeOfRecentCrime; + void DestroyEntity(int32 id); void PostTerminateGameSpecificShutdown(); bool IsAudioInitialised() const; void SetDynamicAcousticModelingStatus(bool status); From 9df4bc202970f5b9025adc088132f9605e7a612c Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:48:33 +0200 Subject: [PATCH 06/21] PreTerminateGameSpecificShutdown --- src/audio/AudioManager.cpp | 34 ++++++++++++++++++++++++++++++++++ src/audio/AudioManager.h | 1 + 2 files changed, 35 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 0a87d0e9..45ac73c1 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,6 +9,39 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +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::DestroyEntity(int32 id) { @@ -2723,6 +2756,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x569570, &cAudioManager::PreTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57A400, &cAudioManager::DestroyEntity, PATCH_JUMP); InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index f270ada6..8d01e1eb 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,7 @@ public: char field_19195; int m_nTimeOfRecentCrime; + void PreTerminateGameSpecificShutdown(); void DestroyEntity(int32 id); void PostTerminateGameSpecificShutdown(); bool IsAudioInitialised() const; From 198a92555cb7dbc71b5ea036b744b749a667c703 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 22:55:58 +0200 Subject: [PATCH 07/21] SetEntityStatus --- src/audio/AudioManager.cpp | 9 +++++++++ src/audio/AudioManager.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 45ac73c1..6f5e9316 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,6 +9,14 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +void +cAudioManager::SetEntityStatus(int32 id, bool status) +{ + if(m_bIsInitialised && id >= 0 && id < 200) { + if(m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bStatus = status; } + } +} + void cAudioManager::PreTerminateGameSpecificShutdown() { @@ -2756,6 +2764,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x57A4C0, &cAudioManager::SetEntityStatus, PATCH_JUMP); InjectHook(0x569570, &cAudioManager::PreTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57A400, &cAudioManager::DestroyEntity, PATCH_JUMP); InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 8d01e1eb..8e5ecc0f 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,7 @@ public: char field_19195; int m_nTimeOfRecentCrime; + void SetEntityStatus(int32 id, bool status); void PreTerminateGameSpecificShutdown(); void DestroyEntity(int32 id); void PostTerminateGameSpecificShutdown(); From de4252ace8d1525b561cbb33b1fd9f7138f3263c Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 23:08:06 +0200 Subject: [PATCH 08/21] Introduce totalAudioEntities --- src/audio/AudioManager.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 6f5e9316..606fae22 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,10 +9,12 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; +constexpr int totalAudioEntities = 200; + void cAudioManager::SetEntityStatus(int32 id, bool status) { - if(m_bIsInitialised && id >= 0 && id < 200) { + if(m_bIsInitialised && id >= 0 && id < totalAudioEntities) { if(m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bStatus = status; } } } @@ -53,15 +55,17 @@ cAudioManager::PreTerminateGameSpecificShutdown() void cAudioManager::DestroyEntity(int32 id) { - if(m_bIsInitialised && id >= 0 && id < 200 && m_asAudioEntities[id].m_bIsUsed) { + if(m_bIsInitialised && id >= 0 && id < totalAudioEntities && + m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bIsUsed = 0; for(i = 0; i < m_nAudioEntitiesTotal; ++i) { if(id == m_anAudioEntityIndices[i]) { - if(i < 199) + if(i < totalAudioEntities - 1) memmove(&m_anAudioEntityIndices[i], &m_anAudioEntityIndices[i + 1], 4 * (m_nAudioEntitiesTotal - (i + 1))); - m_anAudioEntityIndices[--m_nAudioEntitiesTotal] = 200; + m_anAudioEntityIndices[--m_nAudioEntitiesTotal] = + totalAudioEntities; return; } } From 8cd2a19c4ef6cdc38fe65d0e01904e5d5547b788 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 23:20:10 +0200 Subject: [PATCH 09/21] CreateEntity --- src/audio/AudioManager.cpp | 37 +++++++++++++++++++++++++++++++------ src/audio/AudioManager.h | 3 ++- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 606fae22..460d0517 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -9,12 +9,12 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; -constexpr int totalAudioEntities = 200; +constexpr int totalAudioEntitiesSlots = 200; void cAudioManager::SetEntityStatus(int32 id, bool status) { - if(m_bIsInitialised && id >= 0 && id < totalAudioEntities) { + if(m_bIsInitialised && id >= 0 && id < totalAudioEntitiesSlots) { if(m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bStatus = status; } } } @@ -52,20 +52,44 @@ cAudioManager::PreTerminateGameSpecificShutdown() } } +int32 +cAudioManager::CreateEntity(int32 type, void *memory) +{ + if(!m_bIsInitialised) return -4; + if(!memory) return -2; + if(type >= TOTAL_AUDIO_TYPES) return -1; + for(uint32 i = 0; i < 200; i++) { + if(!m_asAudioEntities[i].m_bIsUsed) { + m_asAudioEntities[i].m_bIsUsed = true; + m_asAudioEntities[i].m_bStatus = 0; + m_asAudioEntities[i].m_nType = (eAudioType)type; + m_asAudioEntities[i].m_pEntity = memory; + m_asAudioEntities[i].m_awAudioEvent[0] = SOUND_TOTAL_PED_SOUNDS; + 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_anAudioEntityIndices[m_nAudioEntitiesTotal++] = i; + return i; + } + } + return -3; +} + void cAudioManager::DestroyEntity(int32 id) { - if(m_bIsInitialised && id >= 0 && id < totalAudioEntities && + if(m_bIsInitialised && id >= 0 && id < totalAudioEntitiesSlots && m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bIsUsed = 0; - for(i = 0; i < m_nAudioEntitiesTotal; ++i) { + for(uint32 i = 0; i < m_nAudioEntitiesTotal; ++i) { if(id == m_anAudioEntityIndices[i]) { - if(i < totalAudioEntities - 1) + if(i < totalAudioEntitiesSlots - 1) memmove(&m_anAudioEntityIndices[i], &m_anAudioEntityIndices[i + 1], 4 * (m_nAudioEntitiesTotal - (i + 1))); m_anAudioEntityIndices[--m_nAudioEntitiesTotal] = - totalAudioEntities; + totalAudioEntitiesSlots; return; } } @@ -2770,6 +2794,7 @@ cAudioManager::Service() STARTPATCHES InjectHook(0x57A4C0, &cAudioManager::SetEntityStatus, PATCH_JUMP); InjectHook(0x569570, &cAudioManager::PreTerminateGameSpecificShutdown, PATCH_JUMP); +InjectHook(0x57A310, &cAudioManager::CreateEntity, PATCH_JUMP); InjectHook(0x57A400, &cAudioManager::DestroyEntity, PATCH_JUMP); InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 8e5ecc0f..24193448 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -76,7 +76,7 @@ class tAudioEntity public: eAudioType m_nType; void *m_pEntity; - char m_bIsUsed; + bool m_bIsUsed; char m_bStatus; int16 m_awAudioEvent[4]; char gap_18[2]; @@ -218,6 +218,7 @@ public: void SetEntityStatus(int32 id, bool status); void PreTerminateGameSpecificShutdown(); + int32 CreateEntity(int32 type, void *memory); void DestroyEntity(int32 id); void PostTerminateGameSpecificShutdown(); bool IsAudioInitialised() const; From e589589538b5258b069caeed3fa9a8b27d0e95c2 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 23:46:21 +0200 Subject: [PATCH 10/21] PlayerJustGotInCar --- src/audio/AudioManager.cpp | 11 ++++++++++- src/audio/AudioManager.h | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 460d0517..acf17afe 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -116,7 +116,15 @@ void cAudioManager::SetDynamicAcousticModelingStatus(bool status) void cAudioManager::GenerateIntegerRandomNumberTable() { - for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } + for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } +} + +bool bPlayerJustGotInCar = *(bool*)0x6508C4; + +void +cAudioManager::PlayerJustGotInCar() +{ + if(m_bIsInitialised) { bPlayerJustGotInCar = true; } } void @@ -2800,6 +2808,7 @@ InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JU InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); +InjectHook(0x56AD10, &cAudioManager::PlayerJustGotInCar, PATCH_JUMP); InjectHook(0x56AD20, &cAudioManager::PlayerJustLeftCar, PATCH_JUMP); InjectHook(0x570DB0, &cAudioManager::GetPhrase, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 24193448..df48475f 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -225,7 +225,8 @@ public: void SetDynamicAcousticModelingStatus(bool status); void GenerateIntegerRandomNumberTable(); - void PlayerJustLeftCar(void); + void PlayerJustGotInCar(); + void PlayerJustLeftCar(); void Service(); void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset); From 9357e5cc83f0a0df1fa259d3194a0b13cbfb374f Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Sun, 30 Jun 2019 23:58:24 +0200 Subject: [PATCH 11/21] ReleaseDigitalHandle --- src/audio/AudioManager.cpp | 97 ++++++++++++++++++++----------------- src/audio/AudioManager.h | 14 ++++-- src/audio/SampleManager.cpp | 6 +++ src/audio/SampleManager.h | 1 + 4 files changed, 69 insertions(+), 49 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index acf17afe..89d8332a 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -3,6 +3,7 @@ #include "ModelIndices.h" #include "Ped.h" #include "PlayerPed.h" +#include "SampleManager.h" #include "World.h" #include "common.h" #include "patcher.h" @@ -12,44 +13,20 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; constexpr int totalAudioEntitiesSlots = 200; void -cAudioManager::SetEntityStatus(int32 id, bool status) +cAudioManager::ReleaseDigitalHandle() { - if(m_bIsInitialised && id >= 0 && id < totalAudioEntitiesSlots) { - if(m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bStatus = status; } - } + if(m_bIsInitialised) { cSampleManager.ReleaseDigitalHandle(); } } -void -cAudioManager::PreTerminateGameSpecificShutdown() +void cAudioManager::SetDynamicAcousticModelingStatus(bool status) { - 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; - } + m_bDynamicAcousticModelingStatus = status; +} + +bool +cAudioManager::IsAudioInitialised() const +{ + return m_bIsInitialised; } int32 @@ -96,23 +73,53 @@ cAudioManager::DestroyEntity(int32 id) } } +void +cAudioManager::SetEntityStatus(int32 id, bool status) +{ + if(m_bIsInitialised && id >= 0 && id < totalAudioEntitiesSlots) { + if(m_asAudioEntities[id].m_bIsUsed) { m_asAudioEntities[id].m_bStatus = 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 -cAudioManager::IsAudioInitialised() const -{ - return m_bIsInitialised; -} - -void cAudioManager::SetDynamicAcousticModelingStatus(bool status) -{ - m_bDynamicAcousticModelingStatus = status; -} - void cAudioManager::GenerateIntegerRandomNumberTable() { diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index df48475f..9cbb82b4 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,17 +216,23 @@ public: char field_19195; int m_nTimeOfRecentCrime; - void SetEntityStatus(int32 id, bool status); - void PreTerminateGameSpecificShutdown(); + void ReleaseDigitalHandle(); + void SetDynamicAcousticModelingStatus(bool status); + + bool IsAudioInitialised() const; + int32 CreateEntity(int32 type, void *memory); void DestroyEntity(int32 id); + void SetEntityStatus(int32 id, bool status); + + void PreTerminateGameSpecificShutdown(); void PostTerminateGameSpecificShutdown(); - bool IsAudioInitialised() const; - void SetDynamicAcousticModelingStatus(bool status); + void GenerateIntegerRandomNumberTable(); void PlayerJustGotInCar(); void PlayerJustLeftCar(); + void Service(); void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset); diff --git a/src/audio/SampleManager.cpp b/src/audio/SampleManager.cpp index 2319baec..2f27a3fa 100644 --- a/src/audio/SampleManager.cpp +++ b/src/audio/SampleManager.cpp @@ -7,3 +7,9 @@ uint32 &CSampleManager::nNumOfMp3Files = *(uint32*)0x95CC00; bool CSampleManager::IsMP3RadioChannelAvailable() { return nNumOfMp3Files != 0; } + +WRAPPER void +CSampleManager::ReleaseDigitalHandle() +{ + EAXJMP(0x5664B0); +} diff --git a/src/audio/SampleManager.h b/src/audio/SampleManager.h index ae036947..8486cb52 100644 --- a/src/audio/SampleManager.h +++ b/src/audio/SampleManager.h @@ -5,6 +5,7 @@ public: static uint32 &nNumOfMp3Files; public: + void ReleaseDigitalHandle(); static bool IsMP3RadioChannelAvailable(); }; From 0ec77e8329210301a87fe9b9953b820c09c6505b Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Mon, 1 Jul 2019 00:07:58 +0200 Subject: [PATCH 12/21] RequireDigitalHandle --- src/audio/AudioManager.cpp | 25 ++++++++++++++++++++----- src/audio/AudioManager.h | 1 + src/audio/SampleManager.cpp | 8 ++++++++ src/audio/SampleManager.h | 1 + 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 89d8332a..d9b7fee2 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -18,7 +18,14 @@ cAudioManager::ReleaseDigitalHandle() if(m_bIsInitialised) { cSampleManager.ReleaseDigitalHandle(); } } -void cAudioManager::SetDynamicAcousticModelingStatus(bool status) +void +cAudioManager::RequireDigitalHandle() +{ + if(m_bIsInitialised) { cSampleManager.RequireDigitalHandle(); } +} + +void +cAudioManager::SetDynamicAcousticModelingStatus(bool status) { m_bDynamicAcousticModelingStatus = status; } @@ -2807,14 +2814,22 @@ cAudioManager::Service() } STARTPATCHES -InjectHook(0x57A4C0, &cAudioManager::SetEntityStatus, PATCH_JUMP); -InjectHook(0x569570, &cAudioManager::PreTerminateGameSpecificShutdown, PATCH_JUMP); + +InjectHook(0x57A9E0, &cAudioManager::ReleaseDigitalHandle, PATCH_JUMP); +InjectHook(0x57A9F0, &cAudioManager::RequireDigitalHandle, PATCH_JUMP); +InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); + +InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); + InjectHook(0x57A310, &cAudioManager::CreateEntity, PATCH_JUMP); InjectHook(0x57A400, &cAudioManager::DestroyEntity, PATCH_JUMP); +InjectHook(0x57A4C0, &cAudioManager::SetEntityStatus, PATCH_JUMP); + +InjectHook(0x569570, &cAudioManager::PreTerminateGameSpecificShutdown, PATCH_JUMP); InjectHook(0x569640, &cAudioManager::PostTerminateGameSpecificShutdown, PATCH_JUMP); -InjectHook(0x57AA00, &cAudioManager::SetDynamicAcousticModelingStatus, PATCH_JUMP); -InjectHook(0x57AA50, &cAudioManager::IsAudioInitialised, PATCH_JUMP); + InjectHook(0x57C290, &cAudioManager::GenerateIntegerRandomNumberTable, PATCH_JUMP); + InjectHook(0x56AD10, &cAudioManager::PlayerJustGotInCar, PATCH_JUMP); InjectHook(0x56AD20, &cAudioManager::PlayerJustLeftCar, PATCH_JUMP); InjectHook(0x570DB0, &cAudioManager::GetPhrase, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 9cbb82b4..6b320b60 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -217,6 +217,7 @@ public: int m_nTimeOfRecentCrime; void ReleaseDigitalHandle(); + void RequireDigitalHandle(); void SetDynamicAcousticModelingStatus(bool status); bool IsAudioInitialised() const; diff --git a/src/audio/SampleManager.cpp b/src/audio/SampleManager.cpp index 2f27a3fa..ca08ad8b 100644 --- a/src/audio/SampleManager.cpp +++ b/src/audio/SampleManager.cpp @@ -1,4 +1,5 @@ #include "common.h" +#include "patcher.h" #include "SampleManager.h" CSampleManager &cSampleManager = *(CSampleManager *)0x7341E0; @@ -13,3 +14,10 @@ CSampleManager::ReleaseDigitalHandle() { EAXJMP(0x5664B0); } + +WRAPPER +void +CSampleManager::RequireDigitalHandle() +{ + EAXJMP(0x5664F0); +} diff --git a/src/audio/SampleManager.h b/src/audio/SampleManager.h index 8486cb52..e688b3fb 100644 --- a/src/audio/SampleManager.h +++ b/src/audio/SampleManager.h @@ -6,6 +6,7 @@ public: public: void ReleaseDigitalHandle(); + void RequireDigitalHandle(); static bool IsMP3RadioChannelAvailable(); }; From d6957aaa57c814a2d779874cd714c65ab9e321c3 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Mon, 1 Jul 2019 16:21:03 +0200 Subject: [PATCH 13/21] RandomDisplacement --- src/audio/AudioManager.cpp | 19 +++++++++++++++++++ src/audio/AudioManager.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index d9b7fee2..0a7cd93a 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -12,6 +12,24 @@ cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; constexpr int totalAudioEntitiesSlots = 200; +int32 +cAudioManager::RandomDisplacement(uint32 seed) +{ + int32 value; + + static bool bIsEven = true; + static uint8 base = 0; + + if(!seed) return 0; + + value = m_anRandomTable[(base + seed) % 5] % seed; + base += value; + + if(value % 2) { bIsEven = !bIsEven; } + if(!bIsEven) value = -value; + return value; +} + void cAudioManager::ReleaseDigitalHandle() { @@ -2814,6 +2832,7 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x57AF90, &cAudioManager::RandomDisplacement, PATCH_JUMP); InjectHook(0x57A9E0, &cAudioManager::ReleaseDigitalHandle, PATCH_JUMP); InjectHook(0x57A9F0, &cAudioManager::RequireDigitalHandle, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 6b320b60..95478922 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -216,6 +216,8 @@ public: char field_19195; int m_nTimeOfRecentCrime; + int32 RandomDisplacement(uint32 seed); + void ReleaseDigitalHandle(); void RequireDigitalHandle(); void SetDynamicAcousticModelingStatus(bool status); From e3fcb686cc9a69a14ca10066efa330bbb9700fd6 Mon Sep 17 00:00:00 2001 From: Filip Gawin Date: Tue, 2 Jul 2019 20:35:47 +0200 Subject: [PATCH 14/21] More AudioManager --- src/audio/AudioManager.cpp | 1803 ++++++++++++++++------------------- src/audio/AudioManager.h | 76 +- src/audio/SampleManager.cpp | 71 +- src/audio/SampleManager.h | 30 +- src/entities/Vehicle.h | 74 ++ 5 files changed, 1081 insertions(+), 973 deletions(-) diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 0a7cd93a..812c9d62 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -1,17 +1,362 @@ #include "AudioManager.h" + #include "DMAudio.h" #include "ModelIndices.h" +#include "MusicManager.h" #include "Ped.h" +#include "Physical.h" #include "PlayerPed.h" #include "SampleManager.h" +#include "Vehicle.h" #include "World.h" + #include "common.h" #include "patcher.h" +#include + cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; constexpr int totalAudioEntitiesSlots = 200; +char &g_nMissionAudioPlayingStatus = *(char *)0x60ED88; + +char +cAudioManager::GetMissionScriptPoliceAudioPlayingStatus() +{ + return g_nMissionAudioPlayingStatus; +} + +bool +cAudioManager::GetMissionAudioLoadingStatus() +{ + if(m_bIsInitialised) return m_sMissionAudio.m_bLoadingStatus; + + return true; +} + + +uint8 +cAudioManager::GetNum3DProvidersAvailable() +{ + if(m_bIsInitialised) return num3DProvidersAvailable; + return 0; +} + +int8 +cAudioManager::AutoDetect3DProviders() +{ + if(m_bIsInitialised) return cSampleManager.AutoDetect3DProviders(); + + return -1; +} + +bool +cAudioManager::IsMP3RadioChannelAvailable() +{ + if(m_bIsInitialised) return cSampleManager.IsMP3RadioChannelAvailable(); + + return 0; +} + +uint8 +cAudioManager::GetCDAudioDriveLetter() +{ + if(m_bIsInitialised) return cSampleManager.GetCDAudioDriveLetter(); + + return 0; +} + +void +cAudioManager::SetEffectsMasterVolume(uint8 volume) +{ + cSampleManager.SetEffectsMasterVolume(volume); +} + +void +cAudioManager::SetMusicMasterVolume(uint8 volume) +{ + cSampleManager.SetMusicMasterVolume(volume); +} + +void +cAudioManager::SetEffectsFadeVol(uint8 volume) +{ + cSampleManager.SetEffectsFadeVol(volume); +} + +void +cAudioManager::SetMusicFadeVol(uint8 volume) +{ + cSampleManager.SetMusicFadeVol(volume); +} + +void +cAudioManager::SetSpeakerConfig(int32 conf) +{ + cSampleManager.SetSpeakerConfig(conf); +} + +void +cAudioManager::ProcessJumboFlying() +{ + if(SetupJumboFlySound(127u)) SetupJumboEngineSound(63u, 22050); +} + +WRAPPER +bool cAudioManager::SetupJumboEngineSound(uint8, int32) { EAXJMP(0x56F140); } + +int32 *BankStartOffset = (int32 *)0x6FAB70; //[2] + +void +cAudioManager::PreInitialiseGameSpecificSetup() +{ + BankStartOffset[0] = AUDIO_SAMPLE_VEHICLE_HORN_0; + BankStartOffset[1] = AUDIO_SAMPLE_POLICE_COP_1_ARREST_1; +} + +int32 &g_nMissionAudioSfx = *(int32 *)0x60ED84; + +void +cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) +{ + if(m_bIsInitialised) { + if(g_nMissionAudioPlayingStatus != 1) { + g_nMissionAudioPlayingStatus = 0; + g_nMissionAudioSfx = sfx; + } + } +} + +void +cAudioManager::CalculateDistance(bool *ptr, float dist) +{ + if(*ptr == false) { + m_sQueueSample.m_fDistance = std::sqrt(dist); + *ptr = true; + } +} + +bool +cAudioManager::UsesSiren(int32 model) +{ + switch(model) { + case FIRETRUK: + case AMBULAN: + case FBICAR: + case POLICE: + case ENFORCER: + case PREDATOR: return true; + default: return false; + } +} + +bool +cAudioManager::UsesSirenSwitching(int32 model) +{ + switch(model) { + case AMBULAN: + case POLICE: + case ENFORCER: + case PREDATOR: return true; + default: return false; + } +} + +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; + } +} + +uint8 +cAudioManager::Get3DProviderName(uint8 id) +{ + if(m_bIsInitialised) return 0; + if(id >= num3DProvidersAvailable) return 0; + return asName3DProviders[id]; +} + +void +cAudioManager::ProcessJumboTaxi() +{ + if(SetupJumboFlySound(20u)) { + if(SetupJumboTaxiSound(75u)) SetupJumboWhineSound(18u, 29500); + } +} + +WRAPPER +bool cAudioManager::SetupJumboFlySound(uint8) { EAXJMP(0x56F230); } + +WRAPPER +bool cAudioManager::SetupJumboTaxiSound(uint8) { EAXJMP(0x56EF20); } + +WRAPPER +bool cAudioManager::SetupJumboWhineSound(uint8, int32) { EAXJMP(0x56F070); } + +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) +{ + if(m_bIsInitialised) { + m_sMissionAudio.field_12 = 0; + m_sMissionAudio.m_vecPos.x = x; + m_sMissionAudio.m_vecPos.y = y; + m_sMissionAudio.m_vecPos.z = z; + } +} + +void +cAudioManager::ResetPoliceRadio() +{ + if(m_bIsInitialised) { + if(cSampleManager.GetChannelUsedFlag(28)) cSampleManager.StopChannel(28); + InitialisePoliceRadio(); + } +} + +void +cAudioManager::InterrogateAudioEntities() +{ + int32 i = 0; + int32 next; + + while(i < m_nAudioEntitiesTotal) { + ProcessEntity(m_anAudioEntityIndices[i]); + next = m_anAudioEntityIndices[i++]; + m_asAudioEntities[next].field_24 = 0; + } +} + +void +cAudioManager::ClearRequestedQueue() +{ + for(uint32 i = 0; i < m_bActiveSamples; i++) { + m_abSampleQueueIndexTable[i + 27 * m_bActiveSampleQueue] = m_bActiveSamples; + } + m_bSampleRequestQueuesStatus[m_bActiveSampleQueue] = 0; +} + +// void cAudioManager::AgeCrimes() +//{ + +//} + +bool +cAudioManager::UsesReverseWarning(int32 model) +{ + return model == LINERUN || std::abs(model - FIRETRUK) <= 1 || model == BUS || + model == COACH; // fix +} + +bool +cAudioManager::HasAirBrakes(int32 model) +{ + return model == LINERUN || std::abs(model - FIRETRUK) <= 1 || model == BUS || + model == COACH; // fix +} + +int32 +cAudioManager::GetJumboTaxiFreq() +{ + return (60.833f * m_sQueueSample.m_fDistance) + 22050; +} + +void +cAudioManager::ProcessPhysical(int32 id) +{ + CPhysical *entity = m_asAudioEntities[id].m_pEntity; + if(entity) { + switch(entity->m_type & 7) { + case ENTITY_TYPE_VEHICLE: ProcessVehicle(m_asAudioEntities[id].m_pEntity); break; + case ENTITY_TYPE_PED: ProcessPed(m_asAudioEntities[id].m_pEntity); break; + default: return; + } + } +} + +WRAPPER +void +cAudioManager::ProcessVehicle(CPhysical *) +{ + EAXJMP(0x569A00); +} + +WRAPPER +void +cAudioManager::ProcessPed(CPhysical *) +{ + EAXJMP(0x56F450); +} + +WRAPPER +void +cAudioManager::ProcessPlane(void *ptr) +{ + EAXJMP(0x56E860); +} + +void +cAudioManager::ClearMissionAudio() +{ + if(m_bIsInitialised) { + 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 = false; + m_sMissionAudio.field_12 = 1; + m_sMissionAudio.field_24 = 0; + } +} + +// void +// cAudioManager::ProcessReverb() +//{ +//} + +bool +cAudioManager::IsMissionAudioSampleFinished() +{ + if(m_bIsInitialised) return m_sMissionAudio.m_bPlayStatus == 2; + + static int32 cPretendFrame = 1; + + return (cPretendFrame++ & 63) == 0; +} + +WRAPPER +void cAudioManager::ProcessEntity(int32) { EAXJMP(0x569870); } + +WRAPPER +void +cAudioManager::InitialisePoliceRadio() +{ + EAXJMP(0x57EEC0); +} + int32 cAudioManager::RandomDisplacement(uint32 seed) { @@ -55,7 +400,7 @@ cAudioManager::IsAudioInitialised() const } int32 -cAudioManager::CreateEntity(int32 type, void *memory) +cAudioManager::CreateEntity(int32 type, CPhysical *memory) { if(!m_bIsInitialised) return -4; if(!memory) return -2; @@ -148,15 +493,15 @@ cAudioManager::PostTerminateGameSpecificShutdown() void cAudioManager::GenerateIntegerRandomNumberTable() { - for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } + for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); } } -bool bPlayerJustGotInCar = *(bool*)0x6508C4; +bool &bPlayerJustEnteredCar = *(bool *)0x6508C4; void cAudioManager::PlayerJustGotInCar() { - if(m_bIsInitialised) { bPlayerJustGotInCar = true; } + if(m_bIsInitialised) { bPlayerJustEnteredCar = true; } } void @@ -166,16 +511,13 @@ cAudioManager::PlayerJustLeftCar(void) } void -cAudioManager::GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, - uint32 maxOffset) +cAudioManager::GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) { - *phrase = sample + m_anRandomTable[m_sQueueSample.m_nEntityIndex & 3] % - maxOffset; + *phrase = sample + m_anRandomTable[m_sQueueSample.m_nEntityIndex & 3] % maxOffset; // check if the same sfx like last time, if yes, then try use next one, // if exceeded range, then choose first available sample - if(*phrase == *prevPhrase && ++*phrase >= sample + maxOffset) - *phrase = sample; + if(*phrase == *prevPhrase && ++*phrase >= sample + maxOffset) *phrase = sample; *prevPhrase = *phrase; } @@ -187,17 +529,12 @@ cAudioManager::GetPlayerTalkSfx(int16 sound) switch(sound) { case SOUND_PED_DAMAGE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DAMAGE_REACTION_1, - 11u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DAMAGE_REACTION_1, 11u); break; - case SOUND_PED_HIT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HIT_REACTION_1, 10u); - break; + case SOUND_PED_HIT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HIT_REACTION_1, 10u); break; - case SOUND_PED_LAND: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FALL_REACTION_1, 6u); - break; + case SOUND_PED_LAND: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FALL_REACTION_1, 6u); break; default: sfx = NO_SAMPLE; break; } @@ -212,19 +549,16 @@ cAudioManager::GetCopTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; if(sound == SOUND_PED_ARREST_COP) { - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_COP_1_ARREST_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_COP_1_ARREST_1, 6u); } else { if(sound != SOUND_PED_PURSUIT_COP) { return cAudioManager::GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; - if(pedState == PED_ARRESTED || pedState == PED_DEAD || - pedState == PED_DIE) + if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) return NO_SAMPLE; - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_COP_1_PURSUIT_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_COP_1_PURSUIT_1, 7u); } return 13 * (m_sQueueSample.m_nEntityIndex % 5) + sfx; @@ -238,19 +572,16 @@ cAudioManager::GetSwatTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; if(sound == SOUND_PED_ARREST_SWAT) { - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_POLICE_SWAT_1_PURSUIT_ARREST_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_SWAT_1_PURSUIT_ARREST_1, 6u); } else { if(sound != SOUND_PED_PURSUIT_SWAT) { return cAudioManager::GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; - if(pedState == PED_ARRESTED || pedState == PED_DEAD || - pedState == PED_DIE) + if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) return NO_SAMPLE; - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_POLICE_SWAT_1_PURSUIT_ARREST_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_SWAT_1_PURSUIT_ARREST_1, 6u); } return 6 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; @@ -264,19 +595,16 @@ cAudioManager::GetFBITalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; if(sound == SOUND_PED_ARREST_FBI) { - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_POLICE_FBI_1_PURSUIT_ARREST_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_FBI_1_PURSUIT_ARREST_1, 6u); } else { if(sound != SOUND_PED_PURSUIT_FBI) { return cAudioManager::GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; - if(pedState == PED_ARRESTED || pedState == PED_DEAD || - pedState == PED_DIE) + if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) return NO_SAMPLE; - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_POLICE_FBI_1_PURSUIT_ARREST_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_FBI_1_PURSUIT_ARREST_1, 6u); } return 6 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; @@ -289,13 +617,10 @@ 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 cAudioManager::GetGenericMaleTalkSfx(sound); } pedState = FindPlayerPed()->m_nPedState; - if(pedState == PED_ARRESTED || pedState == PED_DEAD || - pedState == PED_DIE) + if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) return NO_SAMPLE; GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_POLICE_ARMY_1_PURSUIT_1, 15u); @@ -310,24 +635,19 @@ cAudioManager::GetMedicTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_MEDIC_1_HANDS_COWER_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_HANDS_COWER_1, 5u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_CAR_JACKED_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_CAR_JACKED_1, 5u); break; case SOUND_PED_HEALING: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_HEALING_1, - 12u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_HEALING_1, 12u); break; case SOUND_PED_LEAVE_VEHICLE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_MEDIC_1_LEAVE_VEHICLE_1, 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_LEAVE_VEHICLE_1, 9u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_FLEE_RUN_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MEDIC_1_FLEE_RUN_1, 6u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); } @@ -348,36 +668,28 @@ cAudioManager::GetNormalMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_HANDS_COWER_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_HANDS_COWER_1, 7u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_CAR_JACKED_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CAR_JACKED_1, 7u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_EVADE_1, - 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_EVADE_1, 9u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_FLEE_RUN_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_FLEE_RUN_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_CAR_COLLISION_1, 12u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CAR_COLLISION_1, 12u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_SEXY_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_SEXY_1, 8u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_EVENT_1, 0xAu); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_EVENT_1, 0xAu); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_1, - 25u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_NORMAL_MALE_CHAT_1, 25u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); } @@ -391,13 +703,11 @@ cAudioManager::GetTaxiDriverTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; if(sound == SOUND_PED_CAR_JACKED) { - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_JACKED_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_JACKED_1, 7u); } else { if(sound != SOUND_PED_CAR_COLLISION) return cAudioManager::GetGenericMaleTalkSfx(sound); - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TAXI_DRIVER_1_CAR_COLLISION_1, 6u); } return 13 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; } @@ -413,26 +723,17 @@ cAudioManager::GetPimpTalkSfx(int16 sound) GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_HANDS_UP_1, 7u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CAR_JACKED_1, - 4u); - break; - case SOUND_PED_DEFEND: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_DEFEND_1, 9u); - break; - case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CAR_JACKED_1, 4u); break; + case SOUND_PED_DEFEND: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_DEFEND_1, 9u); break; + case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_PIMP_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_EVENT: - 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); + 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); } return sfx; @@ -446,31 +747,24 @@ cAudioManager::GetMafiaTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_MAFIA_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_MAFIA_1_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MAFIA_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - 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); + 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); } return 30 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; @@ -484,35 +778,27 @@ cAudioManager::GetTriadTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_HANDS_UP_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_HANDS_UP_1, 3u); break; case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_TRIAD_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_TRIAD_1_CAR_COLLISION_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_TRIAD_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_SEXY: - 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); + 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); } return sfx; @@ -526,40 +812,31 @@ cAudioManager::GetDiabloTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_HANDS_UP_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_HANDS_UP_1, 4u); break; case SOUND_PED_HANDS_COWER: sound = SOUND_PED_FLEE_SPRINT; return cAudioManager::GetGenericMaleTalkSfx(sound); break; case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_DIABLO_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_DIABLO_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_ATTACK_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_EVADE_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_DIABLO_1_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_DIABLO_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_SEXY: - 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); + 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); } return 30 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; @@ -573,28 +850,21 @@ cAudioManager::GetYakuzaTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_YAKUZA_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_YAKUZA_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_EVADE_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YAKUZA_1_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - 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); + 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); } return 24 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; @@ -607,35 +877,24 @@ cAudioManager::GetYardieTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; switch(sound) { - case SOUND_PED_HANDS_UP: - sfx = AUDIO_SAMPLE_PED_YARDIE_1_HANDS_UP_1; - break; + case SOUND_PED_HANDS_UP: sfx = AUDIO_SAMPLE_PED_YARDIE_1_HANDS_UP_1; break; case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_YARDIE_1_CAR_JACKING_1, 2u); - break; - case SOUND_PED_CAR_JACKED: - sfx = AUDIO_SAMPLE_PED_YARDIE_1_CAR_JACKED_1; + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_CAR_JACKING_1, 2u); break; + case SOUND_PED_CAR_JACKED: sfx = AUDIO_SAMPLE_PED_YARDIE_1_CAR_JACKED_1; break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_ATTACK_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_ATTACK_1, 6u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_EVADE_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_YARDIE_1_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_YARDIE_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - 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); + 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); } return 31 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; @@ -649,32 +908,24 @@ cAudioManager::GetColumbianTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_COLUMB_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_COLUMB_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_EVADE_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_COLUMB_1_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_COLUMB_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - 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); + 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); } return 27 * (m_sQueueSample.m_nEntityIndex & 1) + sfx; @@ -688,35 +939,27 @@ cAudioManager::GetHoodTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_HANDS_UP_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_HANDS_UP_1, 5u); break; case SOUND_PED_CAR_JACKING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOODS_1_CAR_JACKING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CAR_JACKING_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_ATTACK_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_ATTACK_1, 6u); break; case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOODS_1_CAR_COLLISION_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CHAT_SEXY_1, - 2u); - break; - case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CHAT_SEXY_1, 2u); break; + case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOODS_1_CHAT_1, 6u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; } @@ -731,28 +974,20 @@ cAudioManager::GetBlackCriminalTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_HANDS_UP_1, 4u); - break; - case SOUND_PED_CAR_JACKING: - sfx = AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_CAR_JACKING_1; + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_HANDS_UP_1, 4u); break; + case SOUND_PED_CAR_JACKING: sfx = AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_CAR_JACKING_1; break; case SOUND_PED_MUGGING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_MUGGING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_MUGGING_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CRIMINAL_1_CAR_COLLISION_1, 5u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; } @@ -767,28 +1002,20 @@ cAudioManager::GetWhiteCriminalTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_HANDS_UP_1, 3u); - break; - case SOUND_PED_CAR_JACKING: - sfx = AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_CAR_JACKING_1; + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_HANDS_UP_1, 3u); break; + case SOUND_PED_CAR_JACKING: sfx = AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_CAR_JACKING_1; break; case SOUND_PED_MUGGING: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_MUGGING_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_MUGGING_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CRIMINAL_1_CAR_COLLISION_1, 4u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); break; } @@ -803,34 +1030,27 @@ 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); + cAudioManager::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); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_ROBBED_1, 4u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_ATTACK_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_EVADE_1, - 4u); + 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); + cAudioManager::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); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CHAT_SEXY_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CHAT_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_NO_2_CHAT_1, 7u); break; default: return cAudioManager::GetGenericMaleTalkSfx(sound); } @@ -845,39 +1065,29 @@ cAudioManager::GetBlackProjectMaleTalkSfx(int16 sound, int32 model) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_HANDS_UP_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_HANDS_UP_1, 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_ATTACK_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_ATTACK_1, 6u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CAR_COLLISION_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CHAT_SEXY_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_MALE_1_CHAT_1, 6u); default: return GetGenericMaleTalkSfx(sound); } @@ -893,30 +1103,22 @@ cAudioManager::GetWhiteFatMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CAR_JACKED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CAR_JACKED_1, 3u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_ROBBED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_EVADE_1, 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_EVADE_1, 9u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CAR_COLLISION_1, - 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CAR_COLLISION_1, 9u); break; case SOUND_PED_WAIT_DOUBLEBACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_WAIT_DOUBLEBACK_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_WAIT_DOUBLEBACK_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CHAT_1, 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_MALE_1_CHAT_1, 9u); default: return GetGenericMaleTalkSfx(sound); } return sfx; @@ -930,30 +1132,22 @@ cAudioManager::GetBlackFatMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CAR_JACKED_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CAR_JACKED_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_ROBBED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_EVADE_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_EVADE_1, 7u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_WAIT_DOUBLEBACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_WAIT_DOUBLEBACK_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_WAIT_DOUBLEBACK_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CHAT_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_MALE_1_CHAT_1, 8u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -968,41 +1162,29 @@ cAudioManager::GetBlackCasualFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_HANDS_COWER_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_HANDS_COWER_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_ROBBED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_EVADE_1, 6u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_FLEE_RUN_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_FLEE_RUN_1, 2u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CAR_COLLISION_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CAR_COLLISION_1, + 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CHAT_EVENT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CHAT_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CASUAL_FEMALE_1_CHAT_1, 8u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1017,40 +1199,27 @@ cAudioManager::GetWhiteCasualFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_HANDS_COWER_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_HANDS_COWER_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CAR_JACKED_1, - 2u); - break; - case SOUND_PED_ROBBED: - sfx = AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_ROBBED_1; + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CAR_JACKED_1, 2u); break; + case SOUND_PED_ROBBED: sfx = AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_ROBBED_1; break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_EVADE_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_EVADE_1, 3u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_FLEE_RUN_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_FLEE_RUN_1, 2u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CAR_COLLISION_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CAR_COLLISION_1, + 8u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CHAT_EVENT_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CHAT_EVENT_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CHAT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CASUAL_FEMALE_1_CHAT_1, 4u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1065,36 +1234,28 @@ cAudioManager::GetFemaleNo3TalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_NO_3_HANDS_COWER_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_HANDS_COWER_1, 5u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_NO_3_CAR_JACKED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_CAR_JACKED_1, 3u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_ROBBED_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_EVADE_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_EVADE_1, 6u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_NO_3_FLEE_RUN_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_FLEE_RUN_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_NO_3_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_NO_3_CHAT_EVENT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_CHAT_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_NO_3_CHAT_1, 5u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1109,34 +1270,25 @@ cAudioManager::GetBlackFatFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_HANDS_COWER_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_HANDS_COWER_1, 4u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CHAT_EVENT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CHAT_EVENT_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FAT_FEMALE_1_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1151,34 +1303,26 @@ cAudioManager::GetWhiteFatFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CAR_COLLISION_1, - 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CAR_COLLISION_1, 8u); break; case SOUND_PED_WAIT_DOUBLEBACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_WAIT_DOUBLEBACK_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_WAIT_DOUBLEBACK_1, 2u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CHAT_EVENT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CHAT_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FAT_FEMALE_1_CHAT_1, 8u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1193,38 +1337,25 @@ cAudioManager::GetBlackFemaleProstituteTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_HANDS_UP_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_HANDS_UP_1, 4u); break; - case SOUND_PED_ROBBED: - sfx = AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_ROBBED_1; - break; + case SOUND_PED_ROBBED: sfx = AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_ROBBED_1; break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_ATTACK_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_EVADE_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_EVADE_1, 3u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_CAR_COLLISION_1, 4u); break; case SOUND_PED_SOLICIT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_SOLICIT_1, - 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_SOLICIT_1, 8u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_CHAT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_FEMALE_PROSTITUTE_1_CHAT_1, 4u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1239,35 +1370,23 @@ cAudioManager::GetWhiteFemaleProstituteTalkSfx(int16 sound) switch(sound) { case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_ROBBED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_ATTACK_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_EVADE_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_EVADE_1, 3u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_CAR_COLLISION_1, 4u); break; case SOUND_PED_SOLICIT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_SOLICIT_1, - 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_SOLICIT_1, 8u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_CHAT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_FEMALE_PROSTITUTE_1_CHAT_1, 4u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1282,42 +1401,30 @@ cAudioManager::GetBlackProjectFemaleOldTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CAR_JACKED_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CAR_JACKED_1, + 6u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_ROBBED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_EVADE_1, - 10u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_EVADE_1, 10u); break; case SOUND_PED_FLEE_RUN: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_FLEE_RUN_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_FLEE_RUN_1, + 6u); break; case SOUND_PED_CAR_COLLISION: cAudioManager::GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CAR_COLLISION_1, + &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, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CHAT_EVENT_1, + 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CHAT_1, - 10u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_OLD_1_CHAT_1, 10u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1333,40 +1440,31 @@ 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, + &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; + sfx = AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_JACKED_1; break; case SOUND_PED_ROBBED: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_ROBBED_1, + 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_EVADE_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: cAudioManager::GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_COLLISION_1, + &sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CHAT_EVENT_1, - 5u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CHAT_EVENT_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CHAT_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_PROJECT_FEMALE_YOUNG_1_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1381,34 +1479,25 @@ cAudioManager::GetChinatownMaleOldTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_HANDS_COWER_1, 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_OLD_CHAT_1, 7u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1423,36 +1512,26 @@ cAudioManager::GetChinatownMaleYoungTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_HANDS_COWER_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_HANDS_COWER_1, 2u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CAR_JACKED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_ATTACK_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_ATTACK_1, 6u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CAR_COLLISION_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CHAT_SEXY_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_MALE_YOUNG_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1467,29 +1546,21 @@ cAudioManager::GetChinatownFemaleOldTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_HANDS_COWER_1, 3u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CAR_COLLISION_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CAR_COLLISION_1, 5u); break; - case SOUND_PED_CHAT_EVENT: - sfx = AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CHAT_EVENT_1; - break; + case SOUND_PED_CHAT_EVENT: sfx = AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CHAT_EVENT_1; break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_OLD_CHAT_1, 6u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1504,32 +1575,23 @@ cAudioManager::GetChinatownFemaleYoungTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CAR_COLLISION_1, + 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CHAT_EVENT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_CHINATOWN_FEMALE_YOUNG_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1544,35 +1606,25 @@ cAudioManager::GetLittleItalyMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_HANDS_COWER_1, 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_MALE_1_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1587,33 +1639,25 @@ cAudioManager::GetLittleItalyFemaleOldTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CAR_JACKED_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_ROBBED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CAR_COLLISION_1, + 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CHAT_EVENT_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_OLD_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1628,37 +1672,25 @@ cAudioManager::GetLittleItalyFemaleYoungTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CAR_JACKED_1, - 2u); - break; - case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_ROBBED_1, + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CAR_JACKED_1, 2u); break; + case SOUND_PED_ROBBED: + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_ROBBED_1, 2u); + break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_EVADE_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_EVADE_1, 7u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CHAT_EVENT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CHAT_EVENT_1, + 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CHAT_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_LITTLE_ITALY_FEMALE_YOUNG_CHAT_1, 6u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1673,29 +1705,22 @@ cAudioManager::GetWhiteDockerMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_HANDS_COWER_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_HANDS_COWER_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_ATTACK_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_ATTACK_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CAR_COLLISION_1, 4u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CHAT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_DOCKER_MALE_CHAT_1, 5u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1710,29 +1735,22 @@ cAudioManager::GetBlackDockerMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_HANDS_COWER_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_HANDS_COWER_1, 3u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CHAT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_DOCKER_MALE_CHAT_1, 5u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1747,33 +1765,26 @@ cAudioManager::GetScumMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_MALE_HANDS_COWER_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_HANDS_COWER_1, 5u); break; case SOUND_PED_ROBBED: sfx = AUDIO_SAMPLE_PED_SCUM_MALE_ROBBED_1; break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_ATTACK_1, - 0xAu); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_ATTACK_1, 0xAu); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_EVADE_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_MALE_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_CAR_COLLISION_1, 6u); break; case SOUND_PED_WAIT_DOUBLEBACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_MALE_WAIT_DOUBLEBACK_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_WAIT_DOUBLEBACK_1, 3u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_MALE_CHAT_SEXY_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_CHAT_SEXY_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_CHAT_1, - 9u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_MALE_CHAT_1, 9u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1788,28 +1799,22 @@ cAudioManager::GetScumFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_FEMALE_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_HANDS_COWER_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_ROBBED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_ATTACK_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_EVADE_1, - 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_EVADE_1, 8u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SCUM_FEMALE_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_CHAT_1, - 13u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SCUM_FEMALE_CHAT_1, 13u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -1824,29 +1829,22 @@ cAudioManager::GetWhiteWorkerMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_HANDS_COWER_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_HANDS_COWER_1, 3u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_ATTACK_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_ATTACK_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CAR_COLLISION_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CHAT_SEXY_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CHAT_SEXY_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_WORKER_MALE_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1861,29 +1859,22 @@ cAudioManager::GetBlackWorkerMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_HANDS_COWER_1, 4u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_ATTACK_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_ATTACK_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_EVADE_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_EVADE_1, 3u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CAR_COLLISION_1, 4u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CHAT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_WORKER_MALE_CHAT_1, 4u); break; default: return GetGenericMaleTalkSfx(sound); @@ -1899,40 +1890,29 @@ cAudioManager::GetBusinessMaleYoungTalkSfx(int16 sound, int32 model) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_HANDS_COWER_1, 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_EVADE_1, 4u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_FLEE_RUN_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_FLEE_RUN_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CAR_COLLISION_1, + 6u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_YOUNG_1_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -1949,39 +1929,28 @@ cAudioManager::GetBusinessMaleOldTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_HANDS_COWER_1, 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_EVADE_1, 4u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_FLEE_RUN_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_FLEE_RUN_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CHAT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_MALE_OLD_1_CHAT_1, 5u); break; default: return GetGenericMaleTalkSfx(sound); @@ -1997,37 +1966,28 @@ cAudioManager::GetWhiteBusinessFemaleTalkSfx(int16 sound, int32 model) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_HANDS_COWER_1, 4u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_EVADE_1, 6u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_FLEE_RUN_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_FLEE_RUN_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CHAT_EVENT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BUSINESS_WOMAN_1_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -2044,41 +2004,29 @@ cAudioManager::GetBlackBusinessFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_HANDS_COWER_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_HANDS_COWER_1, 5u); break; case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CAR_JACKED_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CAR_JACKED_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_ROBBED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_EVADE_1, 6u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_FLEE_RUN_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_FLEE_RUN_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CAR_COLLISION_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CAR_COLLISION_1, + 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CHAT_EVENT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_BUSINESS_FEMALE_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); @@ -2094,32 +2042,25 @@ cAudioManager::GetSupermodelMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_ATTACK_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CHAT_SEXY_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_MALE_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); @@ -2135,29 +2076,22 @@ cAudioManager::GetSupermodelFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_HANDS_COWER_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_ROBBED_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_ROBBED_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CHAT_EVENT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CHAT_EVENT_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CHAT_1, 8u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SUPERMODEL_FEMALE_CHAT_1, 8u); break; default: return GetGenericFemaleTalkSfx(sound); @@ -2173,24 +2107,19 @@ cAudioManager::GetStewardMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_MALE_HANDS_COWER_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_HANDS_COWER_1, 3u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_MALE_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_EVADE_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_EVADE_1, 3u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_MALE_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_CHAT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_MALE_CHAT_1, 4u); break; default: return GetGenericMaleTalkSfx(sound); @@ -2206,21 +2135,16 @@ cAudioManager::GetStewardFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_HANDS_COWER_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_HANDS_COWER_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_CHAT_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STEWARD_FEMALE_1_CHAT_1, 5u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -2235,24 +2159,19 @@ cAudioManager::GetFanMaleTalkSfx(int16 sound, int32 model) switch(sound) { case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_ATTACK_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_ATTACK_1, 3u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_EVADE_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FAN_MALE_1_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FAN_MALE_1_CHAT_EVENT_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_CHAT_EVENT_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_CHAT_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_MALE_1_CHAT_1, 6u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2268,24 +2187,18 @@ cAudioManager::GetFanFemaleTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; switch(sound) { - case SOUND_PED_ROBBED: - sfx = AUDIO_SAMPLE_PED_FAN_FEMALE_1_ROBBED_1; - break; + case SOUND_PED_ROBBED: sfx = AUDIO_SAMPLE_PED_FAN_FEMALE_1_ROBBED_1; break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_EVADE_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FAN_FEMALE_1_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FAN_FEMALE_1_CHAT_EVENT_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_CHAT_EVENT_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_CHAT_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FAN_FEMALE_1_CHAT_1, 6u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -2300,24 +2213,19 @@ cAudioManager::GetHospitalMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_MALE_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_HANDS_COWER_1, 4u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_MALE_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_MALE_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_MALE_CAR_COLLISION_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_CHAT_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_MALE_CHAT_1, 5u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2332,16 +2240,13 @@ cAudioManager::GetHospitalFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_EVADE_1, 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_CAR_COLLISION_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_CAR_COLLISION_1, 6u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_CHAT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_HOSPITAL_FEMALE_CHAT_1, 6u); break; default: return GetGenericFemaleTalkSfx(sound); @@ -2357,39 +2262,28 @@ cAudioManager::GetWhiteConstructionWorkerTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_HANDS_COWER_1, + 3u); break; case SOUND_PED_CAR_JACKED: sfx = AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CAR_JACKED_1; break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_EVADE_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CAR_COLLISION_1, - 4u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CAR_COLLISION_1, 4u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CHAT_SEXY_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CHAT_SEXY_1, + 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CHAT_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_WHITE_CONSTRUCTION_WORKER_CHAT_1, 7u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2404,42 +2298,29 @@ cAudioManager::GetBlackConstructionWorkerTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_HANDS_COWER_1, - 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_HANDS_COWER_1, + 3u); break; case SOUND_PED_CAR_JACKED: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CAR_JACKED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CAR_JACKED_1, + 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_ATTACK_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_ATTACK_1, 5u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_EVADE_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_EVADE_1, 5u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CAR_COLLISION_1, - 5u); + GetPhrase(&sfx, &lastSfx, + AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CAR_COLLISION_1, 5u); break; case SOUND_PED_CHAT_SEXY: - GetPhrase( - &sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CHAT_SEXY_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CHAT_SEXY_1, + 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CHAT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_BLACK_CONSTRUCTION_WORKER_CHAT_1, 4u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2454,29 +2335,22 @@ cAudioManager::GetShopperFemaleTalkSfx(int16 sound, int32 model) switch(sound) { case SOUND_PED_CAR_JACKED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CAR_JACKED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CAR_JACKED_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_ROBBED_1, 2u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_EVADE_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_EVADE_1, 6u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CAR_COLLISION_1, - 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CAR_COLLISION_1, 7u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CHAT_EVENT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CHAT_EVENT_1, 4u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CHAT_1, 7u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SHOPPER_FEMALE_1_CHAT_1, 7u); break; default: return GetGenericFemaleTalkSfx(sound); } @@ -2497,32 +2371,25 @@ cAudioManager::GetStudentMaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_MALE_HANDS_COWER_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_HANDS_COWER_1, 2u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_MALE_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_MALE_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_EVADE_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_MALE_CAR_COLLISION_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_CAR_COLLISION_1, 4u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_MALE_CHAT_EVENT_1, 3u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_CHAT_EVENT_1, 3u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_CHAT_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_MALE_CHAT_1, 5u); break; default: return GetGenericMaleTalkSfx(sound); @@ -2538,32 +2405,25 @@ cAudioManager::GetStudentFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_COWER: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_HANDS_COWER_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_HANDS_COWER_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_ROBBED_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_ATTACK_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_ATTACK_1, 4u); break; case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_EVADE_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_EVADE_1, 4u); break; case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_CAR_COLLISION_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_CAR_COLLISION_1, 4u); break; case SOUND_PED_CHAT_EVENT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_CHAT_EVENT_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_CHAT_EVENT_1, 2u); break; case SOUND_PED_CHAT: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_STUDENT_FEMALE_CHAT_1, 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_STUDENT_FEMALE_CHAT_1, 4u); break; default: return GetGenericFemaleTalkSfx(sound); @@ -2581,36 +2441,20 @@ uint32 cAudioManager::GetSpecialCharacterTalkSfx(int32 modelIndex, int32 sound) { char *modelName = CModelInfo::GetModelInfo(modelIndex)->GetName(); - if(strcmp(modelName, "eight") == 0 || - strcmp(modelName, "eight2") == 0) { + if(strcmp(modelName, "eight") == 0 || strcmp(modelName, "eight2") == 0) { return GetEightTalkSfx(sound); } - if(strcmp(modelName, "frankie") == 0) { - return GetFrankieTalkSfx(sound); - } + if(strcmp(modelName, "frankie") == 0) { return GetFrankieTalkSfx(sound); } if(strcmp(modelName, "misty") == 0) { return GetMistyTalkSfx(sound); } - if(strcmp(modelName, "ojg") == 0 || - strcmp(modelName, "ojg_p") == 0) { + if(strcmp(modelName, "ojg") == 0 || strcmp(modelName, "ojg_p") == 0) { return GetOJGTalkSfx(sound); } - if(strcmp(modelName, "cat") == 0) { - return GetCatatalinaTalkSfx(sound); - } - if(strcmp(modelName, "bomber") == 0) { - return GetBomberTalkSfx(sound); - } - if(strcmp(modelName, "s_guard") == 0) { - return GetSecurityGuardTalkSfx(sound); - } - if(strcmp(modelName, "chunky") == 0) { - return GetChunkyTalkSfx(sound); - } - if(strcmp(modelName, "asuka") == 0) { - return GetGenericFemaleTalkSfx(sound); - } - if(strcmp(modelName, "maria") == 0) { - return GetGenericFemaleTalkSfx(sound); - } + if(strcmp(modelName, "cat") == 0) { return GetCatatalinaTalkSfx(sound); } + if(strcmp(modelName, "bomber") == 0) { return GetBomberTalkSfx(sound); } + if(strcmp(modelName, "s_guard") == 0) { return GetSecurityGuardTalkSfx(sound); } + if(strcmp(modelName, "chunky") == 0) { return GetChunkyTalkSfx(sound); } + if(strcmp(modelName, "asuka") == 0) { return GetGenericFemaleTalkSfx(sound); } + if(strcmp(modelName, "maria") == 0) { return GetGenericFemaleTalkSfx(sound); } return GetGenericMaleTalkSfx(sound); } @@ -2622,20 +2466,16 @@ cAudioManager::GetEightTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - cAudioManager::GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_EIGHT_HANDS_UP_1, 2u); + cAudioManager::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); + cAudioManager::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); + 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); + cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_EIGHT_EVADE_1, 7u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2650,16 +2490,13 @@ cAudioManager::GetFrankieTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_HANDS_UP_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_HANDS_UP_1, 4u); break; case SOUND_PED_ROBBED: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_ROBBED_1, - 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_ROBBED_1, 2u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_ATTACK_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_ATTACK_1, 6u); break; case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FRANKIE_EVADE_1, 3u); @@ -2677,8 +2514,7 @@ cAudioManager::GetMistyTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_HANDS_UP_1, - 5u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_HANDS_UP_1, 5u); break; case SOUND_PED_ROBBED: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_ROBBED_1, 2u); @@ -2686,12 +2522,9 @@ cAudioManager::GetMistyTalkSfx(int16 sound) case SOUND_PED_ATTACK: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_ATTACK_1, 4u); break; - case SOUND_PED_EVADE: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_EVADE_1, 5u); - break; + case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_EVADE_1, 5u); break; case SOUND_PED_TAXI_CALL: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_THUMB_LIFT_1, - 4u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MISTY_THUMB_LIFT_1, 4u); break; default: return GetGenericFemaleTalkSfx(sound); break; } @@ -2730,24 +2563,18 @@ cAudioManager::GetSecurityGuardTalkSfx(int16 sound) switch(sound) { case SOUND_PED_HANDS_UP: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SECURITY_GUARD_HANDS_UP_1, 2u); - break; - case SOUND_PED_HANDS_COWER: - sfx = AUDIO_SAMPLE_PED_SECURITY_GUARD_HANDS_COWER_1; + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SECURITY_GUARD_HANDS_UP_1, 2u); break; + case SOUND_PED_HANDS_COWER: sfx = AUDIO_SAMPLE_PED_SECURITY_GUARD_HANDS_COWER_1; break; case SOUND_PED_CAR_JACKED: case SOUND_PED_CAR_COLLISION: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SECURITY_GUARD_CAR_EVENT_1, 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SECURITY_GUARD_CAR_EVENT_1, 6u); break; case SOUND_PED_ATTACK: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SECURITY_GUARD_ATTACK_1, 2u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SECURITY_GUARD_ATTACK_1, 2u); break; case SOUND_PED_FLEE_RUN: - GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_SECURITY_GUARD_CAR_EVENT_1, 12u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_SECURITY_GUARD_CAR_EVENT_1, 12u); break; default: return GetGenericMaleTalkSfx(sound); } @@ -2775,20 +2602,16 @@ cAudioManager::GetGenericMaleTalkSfx(int16 sound) static uint32 lastSfx = NO_SAMPLE; switch(sound) { - case SOUND_PED_DEATH: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_DEATH_1, 8u); - break; + case SOUND_PED_DEATH: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_DEATH_1, 8u); break; case SOUND_PED_BULLET_HIT: case SOUND_PED_DEFEND: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_INJURED_PED_MALE_OUCH_1, - 15u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_INJURED_PED_MALE_OUCH_1, 15u); break; case SOUND_PED_BURNING: GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_BURNING_1, 8u); break; case SOUND_PED_FLEE_SPRINT: - GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_FLEE_SPRINT_1, - 6u); + GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_MALE_FLEE_SPRINT_1, 6u); break; default: return NO_SAMPLE; } @@ -2803,22 +2626,18 @@ cAudioManager::GetGenericFemaleTalkSfx(int16 sound) switch(sound) { case SOUND_PED_DEATH: - cAudioManager::GetPhrase(&sfx, &lastSfx, - AUDIO_SAMPLE_PED_FEMALE_DEATH_1, 10u); + cAudioManager::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, + cAudioManager::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); + cAudioManager::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); + cAudioManager::GetPhrase(&sfx, &lastSfx, AUDIO_SAMPLE_PED_FEMALE_FLEE_SPRINT_1, 8u); break; default: return NO_SAMPLE; } @@ -2832,6 +2651,60 @@ cAudioManager::Service() } STARTPATCHES +InjectHook(0x57F050, &cAudioManager::GetMissionScriptPoliceAudioPlayingStatus, PATCH_JUMP); +InjectHook(0x5795D0, &cAudioManager::GetMissionAudioLoadingStatus, PATCH_JUMP); + +InjectHook(0x57A8A0, &cAudioManager::GetNum3DProvidersAvailable, PATCH_JUMP); +InjectHook(0x57A8F0, &cAudioManager::AutoDetect3DProviders, PATCH_JUMP); +InjectHook(0x57A9C0, &cAudioManager::IsMP3RadioChannelAvailable, PATCH_JUMP); +InjectHook(0x57AA30, &cAudioManager::GetCDAudioDriveLetter, PATCH_JUMP); + +InjectHook(0x57A730, &cAudioManager::SetEffectsMasterVolume, PATCH_JUMP); +InjectHook(0x57A750, &cAudioManager::SetMusicMasterVolume, PATCH_JUMP); +InjectHook(0x57A770, &cAudioManager::SetEffectsFadeVol, PATCH_JUMP); +InjectHook(0x57A790, &cAudioManager::SetMusicFadeVol, PATCH_JUMP); + +InjectHook(0x57A9A0, &cAudioManager::SetSpeakerConfig, PATCH_JUMP); + +InjectHook(0x56ECF0, &cAudioManager::ProcessJumboFlying, PATCH_JUMP); +InjectHook(0x569400, &cAudioManager::PreInitialiseGameSpecificSetup, PATCH_JUMP); + +InjectHook(0x57F020, &cAudioManager::SetMissionScriptPoliceAudio, PATCH_JUMP); + +InjectHook(0x5697A0, &cAudioManager::CalculateDistance, PATCH_JUMP); + +InjectHook(0x56C3C0, &cAudioManager::UsesSiren, PATCH_JUMP); +InjectHook(0x56C3F0, &cAudioManager::UsesSirenSwitching, PATCH_JUMP); + +InjectHook(0x579520, &cAudioManager::MissionScriptAudioUsesPoliceChannel, PATCH_JUMP); + +InjectHook(0x57A8C0, &cAudioManager::Get3DProviderName, PATCH_JUMP); +InjectHook(0x56EA10, &cAudioManager::ProcessJumboTaxi, PATCH_JUMP); + +InjectHook(0x579620, &cAudioManager::PlayLoadedMissionAudio, PATCH_JUMP); + +InjectHook(0x5795F0, &cAudioManager::SetMissionAudioLocation, PATCH_JUMP); + +InjectHook(0x57EFF0, &cAudioManager::ResetPoliceRadio, PATCH_JUMP); + +InjectHook(0x57B030, &cAudioManager::InterrogateAudioEntities, PATCH_JUMP); + +InjectHook(0x57C120, &cAudioManager::ClearRequestedQueue, PATCH_JUMP); +// InjectHook(0x580AF0, &cAudioManager::AgeCrimes, PATCH_JUMP); + +InjectHook(0x56C600, &cAudioManager::UsesReverseWarning, PATCH_JUMP); +InjectHook(0x56CAB0, &cAudioManager::HasAirBrakes, PATCH_JUMP); + +InjectHook(0x56F410, &cAudioManager::GetJumboTaxiFreq, PATCH_JUMP); + +InjectHook(0x5699C0, &cAudioManager::ProcessPhysical, PATCH_JUMP); +// InjectHook(0x56E860, &cAudioManager::ProcessPlane, PATCH_JUMP); + +InjectHook(0x5796A0, &cAudioManager::ClearMissionAudio, PATCH_JUMP); +// InjectHook(0x569700, &cAudioManager::ProcessReverb, PATCH_JUMP); + +InjectHook(0x579650, &cAudioManager::IsMissionAudioSampleFinished, PATCH_JUMP); +// done InjectHook(0x57AF90, &cAudioManager::RandomDisplacement, PATCH_JUMP); InjectHook(0x57A9E0, &cAudioManager::ReleaseDigitalHandle, PATCH_JUMP); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 95478922..24dae2ce 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -71,11 +71,13 @@ enum eAudioType : int32 { TOTAL_AUDIO_TYPES = 14, }; +class CPhysical; + class tAudioEntity { public: eAudioType m_nType; - void *m_pEntity; + CPhysical *m_pEntity; bool m_bIsUsed; char m_bStatus; int16 m_awAudioEvent[4]; @@ -159,7 +161,7 @@ public: char field_22; char field_23; int field_24; - char m_bIsPlayed; + bool m_bIsPlayed; char field_29; char field_30; char field_31; @@ -185,7 +187,7 @@ public: char field_15; int m_nTimer; tActiveSample m_sQueueSample; - char m_bActiveSampleQueue; + uint8 m_bActiveSampleQueue; char gap_109[3]; tActiveSample m_asSamples[54]; char m_abSampleQueueIndexTable[54]; @@ -216,6 +218,72 @@ public: char field_19195; int m_nTimeOfRecentCrime; + char GetMissionScriptPoliceAudioPlayingStatus(); + bool GetMissionAudioLoadingStatus(); + + uint8 GetNum3DProvidersAvailable(); + int8 AutoDetect3DProviders(); + bool IsMP3RadioChannelAvailable(); + uint8 GetCDAudioDriveLetter(); + + void SetEffectsMasterVolume(uint8 volume); + void SetMusicMasterVolume(uint8 volume); + void SetEffectsFadeVol(uint8 volume); + void SetMusicFadeVol(uint8 volume); + + void SetSpeakerConfig(int32 conf); + + void ProcessJumboFlying(); + bool SetupJumboEngineSound(uint8, int32); // todo + void PreInitialiseGameSpecificSetup(); + void SetMissionScriptPoliceAudio(int32 sfx); + + void CalculateDistance(bool *ptr, float dist); + + bool UsesSiren(int32 model); + bool UsesSirenSwitching(int32 model); + + bool MissionScriptAudioUsesPoliceChannel(int32 soundMission); + + uint8 Get3DProviderName(uint8 id); + + void ProcessJumboTaxi(); + bool SetupJumboFlySound(uint8); // todo + bool SetupJumboTaxiSound(uint8); // todo + bool SetupJumboWhineSound(uint8, int32); // todo + + void PlayLoadedMissionAudio(); + + void SetMissionAudioLocation(float x, float y, float z); + + void ResetPoliceRadio(); + + void InterrogateAudioEntities(); + + void ClearRequestedQueue(); +// void AgeCrimes(); + + bool UsesReverseWarning(int32 model); + bool HasAirBrakes(int32 model); + + int32 GetJumboTaxiFreq(); + + void ProcessPhysical(int32 id); + void ProcessVehicle(CPhysical *); // todo + void ProcessPed(CPhysical *); // todo + void ProcessPlane(void *); // todo + + void ClearMissionAudio(); +// void ProcessReverb(); + + bool IsMissionAudioSampleFinished(); + + void ProcessEntity(int32); + + void InitialisePoliceRadio(); + + // done + int32 RandomDisplacement(uint32 seed); void ReleaseDigitalHandle(); @@ -224,7 +292,7 @@ public: bool IsAudioInitialised() const; - int32 CreateEntity(int32 type, void *memory); + int32 CreateEntity(int32 type, CPhysical *memory); void DestroyEntity(int32 id); void SetEntityStatus(int32 id, bool status); diff --git a/src/audio/SampleManager.cpp b/src/audio/SampleManager.cpp index ca08ad8b..7af3446b 100644 --- a/src/audio/SampleManager.cpp +++ b/src/audio/SampleManager.cpp @@ -3,7 +3,10 @@ #include "SampleManager.h" CSampleManager &cSampleManager = *(CSampleManager *)0x7341E0; -uint32 &CSampleManager::nNumOfMp3Files = *(uint32*)0x95CC00; + +uint32 &nNumOfMp3Files = *(uint32 *)0x95CC00; +uint8 &num3DProvidersAvailable = *(uint8 *)0x734237; +uint32 *asName3DProviders = (uint32 *)0x734238; bool CSampleManager::IsMP3RadioChannelAvailable() { return nNumOfMp3Files != 0; @@ -21,3 +24,69 @@ CSampleManager::RequireDigitalHandle() { EAXJMP(0x5664F0); } + +WRAPPER +char +CSampleManager::AutoDetect3DProviders() +{ + EAXJMP(0x565990); +} + +WRAPPER +uint8 +CSampleManager::GetCDAudioDriveLetter() +{ + EAXJMP(0x566F20); +} + +WRAPPER +void +CSampleManager::SetEffectsMasterVolume(uint8 volume) +{ + EAXJMP(0x567010); +} + +WRAPPER +void +CSampleManager::SetMusicMasterVolume(uint8 volume) +{ + EAXJMP(0x567020); +} + +WRAPPER +void +CSampleManager::SetEffectsFadeVol(uint8 volume) +{ + EAXJMP(0x567030); +} + +WRAPPER +void +CSampleManager::SetMusicFadeVol(uint8 volume) +{ + EAXJMP(0x567040); +} + +WRAPPER +void +CSampleManager::SetSpeakerConfig(uint32 config) +{ + EAXJMP(0x565900); +} + +WRAPPER +bool +CSampleManager::GetChannelUsedFlag(int32 id) +{ + EAXJMP(0x567B00); +} + +WRAPPER +void +CSampleManager::StopChannel(int32 id) +{ + EAXJMP(0x567BE0); +} +STARTPATCHES +InjectHook(0x566490, CSampleManager::IsMP3RadioChannelAvailable, PATCH_JUMP); +ENDPATCHES \ No newline at end of file diff --git a/src/audio/SampleManager.h b/src/audio/SampleManager.h index e688b3fb..1bee1775 100644 --- a/src/audio/SampleManager.h +++ b/src/audio/SampleManager.h @@ -1,13 +1,37 @@ #pragma once -class CSampleManager { -public: - static uint32 &nNumOfMp3Files; +struct tSample { + int m_nOffset; + unsigned int m_nSize; + int m_nFrequency; + int m_nLoopStart; + int m_nLoopEnd; +}; +class CSampleManager +{ public: void ReleaseDigitalHandle(); void RequireDigitalHandle(); + + char AutoDetect3DProviders(); + uint8 GetCDAudioDriveLetter(); + + void SetEffectsMasterVolume(uint8 volume); + void SetMusicMasterVolume(uint8 volume); + void SetEffectsFadeVol(uint8 volume); + void SetMusicFadeVol(uint8 volume); + + void SetSpeakerConfig(uint32 config); + + bool GetChannelUsedFlag(int32 id); + void StopChannel(int32 id); + static bool IsMP3RadioChannelAvailable(); }; +extern uint32 &nNumOfMp3Files; +extern uint8 &num3DProvidersAvailable; +extern uint32* asName3DProviders; + extern CSampleManager &cSampleManager; \ No newline at end of file diff --git a/src/entities/Vehicle.h b/src/entities/Vehicle.h index ba3e568e..8739e5db 100644 --- a/src/entities/Vehicle.h +++ b/src/entities/Vehicle.h @@ -24,6 +24,80 @@ enum eCarLock : uint8 { CARLOCK_SKIP_SHUT_DOORS }; +enum eVehicleModel : int32 +{ + LANDSTAL = 0x0, + IDAHO = 0x1, + STINGER = 0x2, + LINERUN = 0x3, + PEREN = 0x4, + SENTINEL = 0x5, + PATRIOT = 0x6, + FIRETRUK = 0x7, + TRASH = 0x8, + STRETCH = 0x9, + MANANA = 0xA, + INFERNUS = 0xB, + BLISTA = 0xC, + PONY = 0xD, + MULE = 0xE, + CHEETAH = 0xF, + AMBULAN = 0x10, + FBICAR = 0x11, + MOONBEAM = 0x12, + ESPERANT = 0x13, + TAXI = 0x14, + KURUMA = 0x15, + BOBCAT = 0x16, + MRWHOOP = 0x17, + BFINJECT = 0x18, + CORPSE = 0x19, + POLICE = 0x1A, + ENFORCER = 0x1B, + SECURICA = 0x1C, + BANSHEE = 0x1D, + PREDATOR = 0x1E, + BUS = 0x1F, + RHINO = 0x20, + BARRACKS = 0x21, + TRAIN = 0x22, + CHOPPER = 0x23, + DODO = 0x24, + COACH = 0x25, + CABBIE = 0x26, + STALLION = 0x27, + RUMPO = 0x28, + RCBANDIT = 0x29, + BELLYUP = 0x2A, + MRWONGS = 0x2B, + MAFIA = 0x2C, + YARDIE = 0x2D, + YAKUZA = 0x2E, + DIABLOS = 0x2F, + COLUMB = 0x30, + HOODS = 0x31, + AIRTRAIN = 0x32, + DEADDODO = 0x33, + SPEEDER = 0x34, + REEFER = 0x35, + PANLANT = 0x36, + FLATBED = 0x37, + YANKEE = 0x38, + ESCAPE = 0x39, + BORGNINE = 0x3A, + TOYZ = 0x3B, + GHOST = 0x3C, + CAR151 = 0x3D, + CAR152 = 0x3E, + CAR153 = 0x3F, + CAR154 = 0x40, + CAR155 = 0x41, + CAR156 = 0x42, + CAR157 = 0x43, + CAR158 = 0x44, + CAR159 = 0x45, +}; + class CVehicle : public CPhysical { public: From d62c6165459048c1a616d0e056e25e366b09c505 Mon Sep 17 00:00:00 2001 From: aap Date: Thu, 4 Jul 2019 23:10:04 +0200 Subject: [PATCH 15/21] fixed rand (thanks nick) --- src/General.h | 6 +----- src/Stats.h | 2 +- src/config.h | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/General.h b/src/General.h index d315d50b..cae1caa0 100644 --- a/src/General.h +++ b/src/General.h @@ -4,10 +4,6 @@ class CGeneral { public: static float GetATanOfXY(float x, float y){ -// why exactly doesn't this work? -// if(y >= 0.0f) return atan2(x, y); -// return atan2(x, y) + 2*M_PI; - if(x == 0.0f && y == 0.0f) return 0.0f; float xabs = fabs(x); @@ -85,7 +81,7 @@ public: // not too sure about all these... static uint16 GetRandomNumber(void) - { return myrand() & 0xFFFF; } + { return myrand() & MYRAND_MAX; } // Probably don't want to ever reach high static float GetRandomNumberInRange(float low, float high) { return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); } diff --git a/src/Stats.h b/src/Stats.h index 4508e8a8..e7cc3dc5 100644 --- a/src/Stats.h +++ b/src/Stats.h @@ -5,4 +5,4 @@ class CStats public: static int32 &DaysPassed; static int32 &HeadShots; -}; \ No newline at end of file +}; diff --git a/src/config.h b/src/config.h index a753b678..a1e7335d 100644 --- a/src/config.h +++ b/src/config.h @@ -85,7 +85,7 @@ enum Config { #elif defined GTA_PC # define GTA3_1_1_PATCH # ifdef GTA_PS2_STUFF -# define USE_PS2_RAND +//# define USE_PS2_RAND // this is unsafe until we have the game reversed # define RANDOMSPLASH // use random splash as on PS2 # define PS2_MATFX # endif From 396b43cbd4f5495c6c3c555d6b58ccfdbbf964fb Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 5 Jul 2019 14:23:39 +0200 Subject: [PATCH 16/21] implemented some CVehicle functions --- src/control/Population.cpp | 1 + src/control/Population.h | 4 +- src/control/Replay.cpp | 2 +- src/entities/Ped.cpp | 18 +- src/entities/Ped.h | 19 +- src/entities/Physical.h | 6 +- src/entities/Vehicle.cpp | 420 ++++++++++++++++++++++++++++++++--- src/entities/Vehicle.h | 106 +++++++-- src/modelinfo/ModelIndices.h | 7 +- 9 files changed, 513 insertions(+), 70 deletions(-) diff --git a/src/control/Population.cpp b/src/control/Population.cpp index 9af68670..1ae5962d 100644 --- a/src/control/Population.cpp +++ b/src/control/Population.cpp @@ -10,3 +10,4 @@ float &CPopulation::PedDensityMultiplier = *(float*)0x5FA56C; WRAPPER void CPopulation::UpdatePedCount(uint32, bool) { EAXJMP(0x4F5A60); } WRAPPER void CPopulation::DealWithZoneChange(eLevelName oldLevel, eLevelName newLevel, bool) { EAXJMP(0x4F6200); } +WRAPPER CPed *CPopulation::AddPedInCar(CVehicle *vehicle) { EAXJMP(0x4F5800); } diff --git a/src/control/Population.h b/src/control/Population.h index 4169261a..6bd2e3ae 100644 --- a/src/control/Population.h +++ b/src/control/Population.h @@ -1,6 +1,7 @@ #pragma once -#include "PedType.h" +class CPed; +class CVehicle; struct PedGroup { @@ -17,4 +18,5 @@ public: static void UpdatePedCount(uint32, bool); static void DealWithZoneChange(eLevelName oldLevel, eLevelName newLevel, bool); + static CPed *AddPedInCar(CVehicle *vehicle); }; diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp index a2164f6b..12fce4ef 100644 --- a/src/control/Replay.cpp +++ b/src/control/Replay.cpp @@ -717,7 +717,7 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_RR, 3); car->SetDoorDamage(12, CDamageManager::CAR_DOOR_RR, true); } - vehicle->m_veh_flagA10 = true; + vehicle->bEngineOn = true; if (vehicle->IsCar()) ((CAutomobile*)vehicle)->m_nDriveWheelsOnGround = 4; CWorld::Remove(vehicle); diff --git a/src/entities/Ped.cpp b/src/entities/Ped.cpp index 9e1836c2..df965f32 100644 --- a/src/entities/Ped.cpp +++ b/src/entities/Ped.cpp @@ -104,7 +104,7 @@ CPed::FlagToDestroyWhenNextProcessed(void) } bInVehicle = false; m_pMyVehicle = nil; - if (m_nCreatedBy == CREATED_BY_SCRIPT) + if (CharCreatedBy == MISSION_CHAR) m_nPedState = PED_DEAD; else m_nPedState = PED_NONE; @@ -283,7 +283,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) m_talkType = 167; m_objective = OBJECTIVE_NONE; m_prevObjective = OBJECTIVE_NONE; - m_nCreatedBy = CREATED_BY_RANDOM; + CharCreatedBy = RANDOM_CHAR; m_leader = nil; m_pedInObjective = nil; m_carInObjective = nil; @@ -1341,13 +1341,13 @@ CPed::BeingDraggedFromCar(void) if (m_vehEnterType == VEHICLE_ENTER_FRONT_LEFT || m_vehEnterType == VEHICLE_ENTER_REAR_LEFT) { if (m_ped_flagF10) { enterAnim = ANIM_CAR_QJACKED; - } else if (m_pMyVehicle->bIsLow) { + } else if (m_pMyVehicle->bLowVehicle) { enterAnim = ANIM_CAR_LJACKED_LHS; } else { enterAnim = ANIM_CAR_JACKED_LHS; } } else if (m_vehEnterType == VEHICLE_ENTER_FRONT_RIGHT || m_vehEnterType == VEHICLE_ENTER_REAR_RIGHT) { - if (m_pMyVehicle->bIsLow) + if (m_pMyVehicle->bLowVehicle) enterAnim = ANIM_CAR_LJACKED_RHS; else enterAnim = ANIM_CAR_JACKED_RHS; @@ -1470,7 +1470,7 @@ CPed::GetLocalPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enter vehDoorOffset = offsetToOpenVanDoor; } else { seatOffset = veh->m_handling->fSeatOffsetDistance * seatPosMult; - if (veh->bIsLow) { + if (veh->bLowVehicle) { vehDoorOffset = offsetToOpenLowCarDoor; } else { vehDoorOffset = offsetToOpenRegularCarDoor; @@ -2222,10 +2222,10 @@ CPed::CanBeDeleted(void) if (this->bInVehicle) return false; - switch (m_nCreatedBy) { - case CREATED_BY_RANDOM: + switch (CharCreatedBy) { + case RANDOM_CHAR: return true; - case CREATED_BY_SCRIPT: + case MISSION_CHAR: return false; default: return true; @@ -2521,7 +2521,7 @@ CPed::SetObjective(eObjective newObj, void *entity) m_vecSeekVehicle = CVector(0.0f, 0.0f, 0.0f); if (newObj == OBJECTIVE_SOLICIT) { m_objectiveTimer = CTimer::GetTimeInMilliseconds() + 10000; - } else if (m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER && m_nCreatedBy == CREATED_BY_SCRIPT && + } else if (m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER && CharCreatedBy == MISSION_CHAR && (m_carInObjective->m_status == STATUS_PLAYER_DISABLED || CPad::GetPad(CWorld::PlayerInFocus)->DisablePlayerControls)) { SetObjectiveTimer(14000); } else { diff --git a/src/entities/Ped.h b/src/entities/Ped.h index 558ec9c1..0e2b14a7 100644 --- a/src/entities/Ped.h +++ b/src/entities/Ped.h @@ -60,8 +60,8 @@ enum { }; enum { - CREATED_BY_RANDOM = 1, - CREATED_BY_SCRIPT + RANDOM_CHAR = 1, + MISSION_CHAR, }; enum PedLineUpPhase { @@ -130,15 +130,15 @@ enum PedState PED_PASSENGER, PED_TAXI_PASSENGER, PED_OPEN_DOOR, - PED_DIE = 48, - PED_DEAD = 49, + PED_DIE, + PED_DEAD, PED_CARJACK, PED_DRAG_FROM_CAR, PED_ENTER_CAR, PED_STEAL_CAR, PED_EXIT_CAR, PED_HANDS_UP, - PED_ARRESTED = 56, + PED_ARRESTED, }; enum eMoveState { @@ -157,6 +157,8 @@ public: // 0x128 CStoredCollPoly m_collPoly; float m_fCollisionSpeed; + + // cf. https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPed.h from R* uint8 bIsStanding : 1; uint8 m_ped_flagA2 : 1; uint8 m_ped_flagA4 : 1; // stores (CTimer::GetTimeInMilliseconds() < m_lastHitTime) @@ -177,7 +179,7 @@ public: uint8 m_ped_flagC1 : 1; uint8 m_ped_flagC2 : 1; - uint8 m_ped_flagC4 : 1; + uint8 m_ped_flagC4 : 1; // false when in bus, bRenderPedInCar? uint8 m_ped_flagC8 : 1; uint8 m_ped_flagC10 : 1; uint8 m_ped_flagC20 : 1; // just left some body part? @@ -237,8 +239,9 @@ public: uint8 m_ped_flagI20 : 1; uint8 m_ped_flagI40 : 1; uint8 m_ped_flagI80 : 1; + uint8 stuff10[3]; - uint8 m_nCreatedBy; + uint8 CharCreatedBy; uint8 field_161; uint8 pad_162[2]; eObjective m_objective; @@ -487,6 +490,8 @@ public: inline CWeapon &GetWeapon(uint8 weaponType) { return m_weapons[weaponType]; } inline CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; } inline RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; } + PedState GetPedState(void) { return m_nPedState; } + void SetPedState(PedState state) { m_nPedState = state; } // to make patching virtual functions possible void SetModelIndex_(uint32 mi) { CPed::SetModelIndex(mi); } diff --git a/src/entities/Physical.h b/src/entities/Physical.h index 7776da92..0f517cf3 100644 --- a/src/entities/Physical.h +++ b/src/entities/Physical.h @@ -109,9 +109,9 @@ public: // Force actually means Impulse here void ApplyMoveForce(float jx, float jy, float jz); void ApplyMoveForce(const CVector &j) { ApplyMoveForce(j.x, j.y, j.z); } - // v(x,y,z) is direction of force, p(x,y,z) is point relative to model center where force is applied - void ApplyTurnForce(float jx, float jy, float jz, float rx, float ry, float rz); - // v is direction of force, p is point relative to model center where force is applied + // j(x,y,z) is direction of force, p(x,y,z) is point relative to model center where force is applied + void ApplyTurnForce(float jx, float jy, float jz, float px, float py, float pz); + // j is direction of force, p is point relative to model center where force is applied void ApplyTurnForce(const CVector &j, const CVector &p) { ApplyTurnForce(j.x, j.y, j.z, p.x, p.y, p.z); } void ApplyFrictionMoveForce(float jx, float jy, float jz); void ApplyFrictionMoveForce(const CVector &j) { ApplyFrictionMoveForce(j.x, j.y, j.z); } diff --git a/src/entities/Vehicle.cpp b/src/entities/Vehicle.cpp index f7c4b065..25bede65 100644 --- a/src/entities/Vehicle.cpp +++ b/src/entities/Vehicle.cpp @@ -1,9 +1,17 @@ #include "common.h" +#include "main.h" #include "patcher.h" +#include "Timer.h" #include "Vehicle.h" #include "Pools.h" +#include "HandlingMgr.h" #include "CarCtrl.h" +#include "Population.h" #include "ModelIndices.h" +#include "World.h" +#include "Lights.h" +#include "PointLights.h" +#include "Renderer.h" #include "DMAudio.h" #include "Radar.h" @@ -40,30 +48,238 @@ CVehicle::~CVehicle() CCarCtrl::NumAmbulancesOnDuty--; bIsAmbulanceOnDuty = false; } - if (bIsFiretruckOnDuty){ + if (bIsFireTruckOnDuty){ CCarCtrl::NumFiretrucksOnDuty--; - bIsFiretruckOnDuty = false; - } -} - -bool -CVehicle::IsLawEnforcementVehicle(void) -{ - switch (m_modelIndex) { - case MI_FBICAR: - case MI_POLICE: - case MI_ENFORCER: - case MI_PREDATOR: - case MI_RHINO: - case MI_BARRACKS: - return true; - default: - return false; + bIsFireTruckOnDuty = false; } } void -CVehicle::ChangeLawEnforcerState(bool enable) +CVehicle::SetModelIndex(uint32 id) +{ + CEntity::SetModelIndex(id); + m_aExtras[0] = CVehicleModelInfo::ms_compsUsed[0]; + m_aExtras[1] = CVehicleModelInfo::ms_compsUsed[1]; + m_nNumMaxPassengers = CVehicleModelInfo::GetMaximumNumberOfPassengersFromNumberOfDoors(id); +} + +bool +CVehicle::SetupLighting(void) +{ + ActivateDirectional(); + SetAmbientColoursForPedsCarsAndObjects(); + + if(bRenderScorched){ + WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f); + }else{ + CVector coors = GetPosition(); + float lighting = CPointLights::GenerateLightsAffectingObject(&coors); + if(!bHasBlip && lighting != 1.0f){ + SetAmbientAndDirectionalColours(lighting); + return true; + } + } + + return false; +} + +void +CVehicle::RemoveLighting(bool reset) +{ + CRenderer::RemoveVehiclePedLights(this, reset); +} + +float +CVehicle::GetHeightAboveRoad(void) +{ + return -1.0f * CModelInfo::GetModelInfo(GetModelIndex())->GetColModel()->boundingBox.min.z; +} + + +bool +CVehicle::IsLawEnforcementVehicle(void) +{ + switch(GetModelIndex()){ + case MI_FBICAR: + case MI_POLICE: + case MI_ENFORCER: + case MI_PREDATOR: + case MI_RHINO: + case MI_BARRACKS: + return true; + default: + return false; + } +} + +bool +CVehicle::UsesSiren(uint32 id) +{ + switch(id){ + case MI_FIRETRUCK: + case MI_AMBULAN: + case MI_FBICAR: + case MI_MRWHOOP: + case MI_POLICE: + case MI_ENFORCER: + case MI_PREDATOR: + return true; + default: + return false; + } +} + +bool +CVehicle::IsVehicleNormal(void) +{ + if(pDriver && m_nNumPassengers == 0 && m_status != STATUS_WRECKED){ + switch(GetModelIndex()) + case MI_FIRETRUCK: + case MI_AMBULAN: + case MI_TAXI: + case MI_POLICE: + case MI_ENFORCER: + case MI_BUS: + case MI_RHINO: + case MI_BARRACKS: + case MI_DODO: + case MI_COACH: + case MI_CABBIE: + case MI_RCBANDIT: + case MI_BORGNINE: + return false; + } + return false; +} + +bool +CVehicle::CarHasRoof(void) +{ + if((m_handling->Flags & HANDLING_HAS_NO_ROOF) == 0) + return true; + if(m_aExtras[0] && m_aExtras[1]) + return false; + return true; +} + +bool +CVehicle::IsUpsideDown(void) +{ + if(GetUp().z > -0.9f) + return false; + return true; +} + +bool +CVehicle::IsOnItsSide(void) +{ + if(GetRight().z < 0.8f && GetRight().z > -0.8f) + return false; + return true; +} + +bool +CVehicle::CanBeDeleted(void) +{ + int i; + + if(m_nNumGettingIn || m_nGettingOutFlags) + return false; + + if(pDriver){ + // This looks like it was inlined + if(pDriver->CharCreatedBy == MISSION_CHAR) + return false; + if(pDriver->GetPedState() != PED_DRIVING && + pDriver->GetPedState() != PED_DEAD) + return false; + } + + for(i = 0; i < 8; i++){ + // Same check as above + if(pPassengers[i]){ + if(pPassengers[i]->CharCreatedBy == MISSION_CHAR) + return false; + if(pPassengers[i]->GetPedState() != PED_DRIVING && + pPassengers[i]->GetPedState() != PED_DEAD) + return false; + } + // and then again... probably because something was inlined + if(pPassengers[i]){ + if(pPassengers[i]->GetPedState() != PED_DRIVING && + pPassengers[i]->GetPedState() != PED_DEAD) + return false; + } + } + + switch(VehicleCreatedBy){ + case RANDOM_VEHICLE: return true; + case MISSION_VEHICLE: return false; + case PARKED_VEHICLE: return true; + case PERMANENT_VEHICLE: return false; + } + return true; +} + +bool +CVehicle::CanPedOpenLocks(CPed *ped) +{ + if(m_nDoorLock == CARLOCK_LOCKED || + m_nDoorLock == CARLOCK_COP_CAR || + m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) + return false; + if(ped->IsPlayer() && m_nDoorLock == CARLOCK_LOCKOUT_PLAYER_ONLY) + return false; + return true; +} + +bool +CVehicle::CanPedEnterCar(void) +{ + CVector up = GetUp(); + // can't enter when car is on side + if(up.z > 0.1f || up.z < -0.1f){ + // also when car is moving too fast + if(m_vecMoveSpeed.MagnitudeSqr() > sq(0.2f)) + return false; + if(m_vecTurnSpeed.MagnitudeSqr() > sq(0.2f)) + return false; + return true; + } + return false; +} + +bool +CVehicle::CanPedExitCar(void) +{ + CVector up = GetUp(); + if(up.z > 0.1f || up.z < -0.1f){ + // can't exit when car is moving too fast + if(m_vecMoveSpeed.MagnitudeSqr() > 0.005f) + return false; + // if car is slow enough, check turn speed + if(fabs(m_vecTurnSpeed.x) > 0.01f || + fabs(m_vecTurnSpeed.y) > 0.01f || + fabs(m_vecTurnSpeed.z) > 0.01f) + return false; + return true; + }else{ + // What is this? just > replaced by >= ?? + + // can't exit when car is moving too fast + if(m_vecMoveSpeed.MagnitudeSqr() >= 0.005f) + return false; + // if car is slow enough, check turn speed + if(fabs(m_vecTurnSpeed.x) >= 0.01f || + fabs(m_vecTurnSpeed.y) >= 0.01f || + fabs(m_vecTurnSpeed.z) >= 0.01f) + return false; + return true; + } +} + +void +CVehicle::ChangeLawEnforcerState(uint8 enable) { if (enable) { if (!bIsLawEnforcer) { @@ -78,6 +294,111 @@ CVehicle::ChangeLawEnforcerState(bool enable) } } +CPed* +CVehicle::SetUpDriver(void) +{ + if(pDriver) + return pDriver; + if(VehicleCreatedBy != RANDOM_VEHICLE) + return nil; + + pDriver = CPopulation::AddPedInCar(this); + pDriver->m_pMyVehicle = this; + pDriver->m_pMyVehicle->RegisterReference((CEntity**)&pDriver->m_pMyVehicle); + pDriver->bInVehicle = true; + pDriver->SetPedState(PED_DRIVING); + if(bIsBus) + pDriver->m_ped_flagC4 = false; + return pDriver; +} + +CPed* +CVehicle::SetupPassenger(int n) +{ + if(pPassengers[n]) + return pPassengers[n]; + + pPassengers[n] = CPopulation::AddPedInCar(this); + pPassengers[n]->m_pMyVehicle = this; + pPassengers[n]->m_pMyVehicle->RegisterReference((CEntity**)&pPassengers[n]->m_pMyVehicle); + pPassengers[n]->bInVehicle = true; + pPassengers[n]->SetPedState(PED_DRIVING); + if(bIsBus) + pPassengers[n]->m_ped_flagC4 = false; + return pPassengers[n]; +} + +void +CVehicle::SetDriver(CPed *driver) +{ + pDriver = driver; + pDriver->RegisterReference((CEntity**)&pDriver); + + if(bFreebies && driver == FindPlayerPed()){ + if(GetModelIndex() == MI_AMBULAN) + 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); + else if(GetModelIndex() == MI_CABBIE || GetModelIndex() == MI_BORGNINE) + CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 25; + bFreebies = false; + } + + ApplyTurnForce(0.0f, 0.0f, -0.2f*driver->m_fMass, + driver->GetPosition().x - GetPosition().x, + driver->GetPosition().y - GetPosition().y, + 0.0f); +} + +bool +CVehicle::AddPassenger(CPed *passenger) +{ + int i; + + ApplyTurnForce(0.0f, 0.0f, -0.2f*passenger->m_fMass, + passenger->GetPosition().x - GetPosition().x, + passenger->GetPosition().y - GetPosition().y, + 0.0f); + + for(i = 0; i < m_nNumMaxPassengers; i++) + if(pPassengers[i] == nil){ + pPassengers[i] = passenger; + m_nNumPassengers++; + return true; + } + return false; +} + +bool +CVehicle::AddPassenger(CPed *passenger, uint8 n) +{ + if(bIsBus) + return AddPassenger(passenger); + + ApplyTurnForce(0.0f, 0.0f, -0.2f*passenger->m_fMass, + passenger->GetPosition().x - GetPosition().x, + passenger->GetPosition().y - GetPosition().y, + 0.0f); + + if(n < m_nNumMaxPassengers && pPassengers[n] == nil){ + pPassengers[n] = passenger; + m_nNumPassengers++; + return true; + } + return false; +} + +void +CVehicle::RemoveDriver(void) +{ + m_status = STATUS_ABANDONED; + pDriver = nil; +} + void CVehicle::RemovePassenger(CPed *p) { @@ -101,19 +422,68 @@ CVehicle::RemovePassenger(CPed *p) } void -CVehicle::RemoveDriver(void) +CVehicle::ProcessCarAlarm(void) { - m_status = STATUS_ABANDONED; - pDriver = nil; + uint32 step; + + if(m_nAlarmState == 0 || m_nAlarmState == -1) + return; + + step = CTimer::GetTimeStep()/50.0f * 1000.0f; + if((uint16)m_nAlarmState < step) + m_nAlarmState = 0; + else + m_nAlarmState -= step; } bool -CVehicle::IsUpsideDown(void) +CVehicle::IsSphereTouchingVehicle(float sx, float sy, float sz, float radius) { - return GetUp().z <= -0.9f; + float x, y, z; + // sphere relative to vehicle + CVector sph = CVector(sx, sy, sz) - GetPosition(); + CColModel *colmodel = CModelInfo::GetModelInfo(GetModelIndex())->GetColModel(); + + x = DotProduct(sph, GetRight()); + if(colmodel->boundingBox.min.x - radius > x || + colmodel->boundingBox.max.x + radius < x) + return false; + y = DotProduct(sph, GetForward()); + if(colmodel->boundingBox.min.y - radius > y || + colmodel->boundingBox.max.y + radius < y) + return false; + z = DotProduct(sph, GetUp()); + if(colmodel->boundingBox.min.z - radius > z || + colmodel->boundingBox.max.z + radius < z) + return false; + + return true; } STARTPATCHES + InjectHook(0x551170, &CVehicle::SetModelIndex_, PATCH_JUMP); + InjectHook(0x4A7DD0, &CVehicle::SetupLighting_, PATCH_JUMP); + InjectHook(0x4A7E60, &CVehicle::RemoveLighting_, PATCH_JUMP); + InjectHook(0x417E60, &CVehicle::GetHeightAboveRoad_, PATCH_JUMP); + + InjectHook(0x552880, &CVehicle::IsLawEnforcementVehicle, PATCH_JUMP); InjectHook(0x552820, &CVehicle::ChangeLawEnforcerState, PATCH_JUMP); + InjectHook(0x552200, &CVehicle::UsesSiren, PATCH_JUMP); + InjectHook(0x5527E0, &CVehicle::IsVehicleNormal, PATCH_JUMP); + InjectHook(0x552B70, &CVehicle::CarHasRoof, PATCH_JUMP); + InjectHook(0x552230, &CVehicle::IsUpsideDown, PATCH_JUMP); + InjectHook(0x552260, &CVehicle::IsOnItsSide, PATCH_JUMP); + InjectHook(0x5511B0, &CVehicle::CanBeDeleted, PATCH_JUMP); + InjectHook(0x5522A0, &CVehicle::CanPedOpenLocks, PATCH_JUMP); + InjectHook(0x5522F0, &CVehicle::CanPedEnterCar, PATCH_JUMP); + InjectHook(0x5523C0, &CVehicle::CanPedExitCar, PATCH_JUMP); + InjectHook(0x5520C0, &CVehicle::SetUpDriver, PATCH_JUMP); + InjectHook(0x552160, &CVehicle::SetupPassenger, PATCH_JUMP); + InjectHook(0x551F20, &CVehicle::SetDriver, PATCH_JUMP); + InjectHook(0x551D90, (bool (CVehicle::*)(CPed*))&CVehicle::AddPassenger, PATCH_JUMP); + InjectHook(0x551E10, (bool (CVehicle::*)(CPed*,uint8))&CVehicle::AddPassenger, PATCH_JUMP); InjectHook(0x5520A0, &CVehicle::RemoveDriver, PATCH_JUMP); -ENDPATCHES \ No newline at end of file + InjectHook(0x551EB0, &CVehicle::RemovePassenger, PATCH_JUMP); + InjectHook(0x5525A0, &CVehicle::ProcessCarAlarm, PATCH_JUMP); + InjectHook(0x552620, &CVehicle::IsSphereTouchingVehicle, PATCH_JUMP); +ENDPATCHES diff --git a/src/entities/Vehicle.h b/src/entities/Vehicle.h index ba3e568e..3546f6d4 100644 --- a/src/entities/Vehicle.h +++ b/src/entities/Vehicle.h @@ -6,6 +6,14 @@ class CPed; class CFire; struct tHandlingData; +enum { + RANDOM_VEHICLE = 1, + MISSION_VEHICLE = 2, + PARKED_VEHICLE = 3, + PERMANENT_VEHICLE = 4, +}; + + enum { GETTING_IN_OUT_FL = 1, GETTING_IN_OUT_RL = 2, @@ -13,7 +21,7 @@ enum { GETTING_IN_OUT_RR = 8 }; -enum eCarLock : uint8 { +enum eCarLock { CARLOCK_NOT_USED, CARLOCK_UNLOCKED, CARLOCK_LOCKED, @@ -24,15 +32,21 @@ enum eCarLock : uint8 { CARLOCK_SKIP_SHUT_DOORS }; +enum eDoors { +}; + class CVehicle : public CPhysical { public: // 0x128 tHandlingData *m_handling; + + // CAutoPilot uint8 stuff1[112]; + uint8 m_currentColour1; uint8 m_currentColour2; - uint8 m_anExtras[2]; + uint8 m_aExtras[2]; int16 m_nAlarmState; // m_nWantedStarsOnEnter on DK22 int16 m_nMissionValue; CPed *pDriver; @@ -48,23 +62,27 @@ public: float m_fSteerAngle; float m_fGasPedal; float m_fBreakPedal; - uint8 m_nCreatedBy; // eVehicleCreatedBy - uint8 bIsLawEnforcer : 1; - uint8 bIsAmbulanceOnDuty : 1; - uint8 bIsFiretruckOnDuty : 1; - uint8 m_veh_flagA8 : 1; - uint8 m_veh_flagA10 : 1; - uint8 m_veh_flagA20 : 1; - uint8 m_veh_flagA40 : 1; - uint8 m_veh_flagA80 : 1; - uint8 bIsVan : 1; - uint8 bIsBus : 1; - uint8 bIsBig : 1; - uint8 bIsLow : 1; + uint8 VehicleCreatedBy; + + // cf. https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h from R* + uint8 bIsLawEnforcer: 1; // Is this guy chasing the player at the moment + uint8 bIsAmbulanceOnDuty: 1; // Ambulance trying to get to an accident + uint8 bIsFireTruckOnDuty: 1; // Firetruck trying to get to a fire + uint8 bIsLocked: 1; // Is this guy locked by the script (cannot be removed) + uint8 bEngineOn: 1; // For sound purposes. Parked cars have their engines switched off (so do destroyed cars) + uint8 bIsHandbrakeOn: 1; // How's the handbrake doing ? + uint8 bLightsOn: 1; // Are the lights switched on ? + uint8 bFreebies: 1; // Any freebies left in this vehicle ? + + uint8 bIsVan: 1; // Is this vehicle a van (doors at back of vehicle) + uint8 bIsBus: 1; // Is this vehicle a bus + uint8 bIsBig: 1; // Is this vehicle a bus + uint8 bLowVehicle: 1; // Need this for sporty type cars to use low getting-in/out anims uint8 m_veh_flagB10 : 1; uint8 m_veh_flagB20 : 1; uint8 m_veh_flagB40 : 1; uint8 m_veh_flagB80 : 1; + uint8 m_veh_flagC1 : 1; uint8 m_veh_flagC2 : 1; uint8 m_veh_flagC4 : 1; @@ -73,6 +91,7 @@ public: uint8 m_veh_flagC20 : 1; uint8 m_veh_flagC40 : 1; uint8 m_veh_flagC80 : 1; + uint8 m_veh_flagD1 : 1; uint8 m_veh_flagD2 : 1; uint8 m_veh_flagD4 : 1; @@ -81,8 +100,9 @@ public: uint8 m_veh_flagD20 : 1; uint8 m_veh_flagD40 : 1; uint8 m_veh_flagD80 : 1; + int8 field_1F9; - uint8 m_nAmmoInClip[1]; // Used to make the guns on boat do a reload (20 by default) + uint8 m_nAmmoInClip; // Used to make the guns on boat do a reload (20 by default) int8 field_1FB; int8 field_1FC[4]; float m_fHealth; // 1000.0f = full health. 0 -> explode @@ -105,6 +125,7 @@ public: int8 field_22D; uint8 m_nSirenOrAlarm; int8 field_22F; + // TODO: this is an array CStoredCollPoly m_frontCollPoly; // poly which is under front part of car CStoredCollPoly m_rearCollPoly; // poly which is under rear part of car float m_fSteerRatio; @@ -116,8 +137,29 @@ public: static void operator delete(void*, int); ~CVehicle(void); + // from CEntity + void SetModelIndex(uint32 i); + bool SetupLighting(void); + void RemoveLighting(bool); + void FlagToDestroyWhenNextProcessed(void) {} - void dtor(void) { this->CVehicle::~CVehicle(); } + virtual void ProcessControlInputs(uint8) {} + virtual void GetComponentWorldPosition(int32 component, CVector &pos) {} + virtual bool IsComponentPresent(int32 component) { return false; } + virtual void SetComponentRotation(int32 component, CVector rotation) {} + virtual void OpenDoor(int32, eDoors door, float) {} + virtual void ProcessOpenDoor(uint32, uint32, float) {} + virtual bool IsDoorReady(eDoors door) { return false; } + virtual bool IsDoorFullyOpen(eDoors door) { return false; } + virtual bool IsDoorClosed(eDoors door) { return false; } + virtual bool IsDoorMissing(eDoors door) { return false; } + virtual void RemoveRefsToVehicle(CEntity *ent) {} + virtual void BlowUpCar(CEntity *ent) {} + virtual bool SetUpWheelColModel(CColModel *colModel) { return false; } + virtual void BurstTyre(uint8 tyre) {} + virtual bool IsRoomForPedToLeaveCar(uint32, CVector *) { return false;} + virtual float GetHeightAboveRoad(void); + virtual void PlayCarHorn(void) {} bool IsCar(void) { return m_vehType == VEHICLE_TYPE_CAR; } bool IsBoat(void) { return m_vehType == VEHICLE_TYPE_BOAT; } @@ -125,10 +167,26 @@ public: bool IsHeli(void) { return m_vehType == VEHICLE_TYPE_HELI; } bool IsPlane(void) { return m_vehType == VEHICLE_TYPE_PLANE; } bool IsLawEnforcementVehicle(void); - void ChangeLawEnforcerState(bool enable); - void RemovePassenger(CPed *); - void RemoveDriver(void); + void ChangeLawEnforcerState(uint8 enable); + bool UsesSiren(uint32 id); + bool IsVehicleNormal(void); + bool CarHasRoof(void); bool IsUpsideDown(void); + bool IsOnItsSide(void); + bool CanBeDeleted(void); + bool CanPedOpenLocks(CPed *ped); + bool CanPedEnterCar(void); + bool CanPedExitCar(void); + // do these two actually return something? + CPed *SetUpDriver(void); + CPed *SetupPassenger(int n); + void SetDriver(CPed *driver); + bool AddPassenger(CPed *passenger); + bool AddPassenger(CPed *passenger, uint8 n); + void RemovePassenger(CPed *passenger); + void RemoveDriver(void); + void ProcessCarAlarm(void); + bool IsSphereTouchingVehicle(float sx, float sy, float sz, float radius); static bool &bWheelsOnlyCheat; static bool &bAllDodosCheat; @@ -136,8 +194,16 @@ public: static bool &bCheat4; static bool &bCheat5; static bool &m_bDisableMouseSteering; + + + void dtor(void) { CVehicle::~CVehicle(); } + void SetModelIndex_(uint32 id) { CVehicle::SetModelIndex(id); } + bool SetupLighting_(void) { return CVehicle::SetupLighting(); } + void RemoveLighting_(bool reset) { CVehicle::RemoveLighting(reset); } + float GetHeightAboveRoad_(void) { return CVehicle::GetHeightAboveRoad(); } }; static_assert(sizeof(CVehicle) == 0x288, "CVehicle: error"); static_assert(offsetof(CVehicle, m_pCurSurface) == 0x1E0, "CVehicle: error"); static_assert(offsetof(CVehicle, m_nAlarmState) == 0x1A0, "CVehicle: error"); +static_assert(offsetof(CVehicle, m_nLastWeaponDamage) == 0x228, "CVehicle: error"); diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h index ff350b55..95b5eb43 100644 --- a/src/modelinfo/ModelIndices.h +++ b/src/modelinfo/ModelIndices.h @@ -250,10 +250,9 @@ enum MI_BUSKER2, MI_BUSKER3, MI_BUSKER4, - MI_PED87, - MI_PED88, - MI_PED89, - MI_LANDSTAL, + // three more peds possible + + MI_LANDSTAL = 90, MI_IDAHO, MI_STINGER, MI_LINERUN, From 49d97f0033c4406a359cba88e988c7311241a76a Mon Sep 17 00:00:00 2001 From: aap Date: Fri, 5 Jul 2019 22:19:52 +0200 Subject: [PATCH 17/21] finished CDamageManager --- src/DamageManager.cpp | 250 ++++++++++++++++++++++++++++++++++++++--- src/DamageManager.h | 135 ++++++++++++++-------- src/common.h | 13 +++ src/control/Replay.cpp | 91 ++++++++------- 4 files changed, 385 insertions(+), 104 deletions(-) diff --git a/src/DamageManager.cpp b/src/DamageManager.cpp index a065e187..1a7f25ed 100644 --- a/src/DamageManager.cpp +++ b/src/DamageManager.cpp @@ -1,21 +1,243 @@ #include "common.h" #include "patcher.h" +#include "General.h" #include "DamageManager.h" -#if 0 -WRAPPER void CDamageManager::SetDoorStatus(int door, unsigned int status) { EAXJMP(0x545920); } -#else -void CDamageManager::SetDoorStatus(int door, unsigned int status) -{ - m_bDoorStatus[door] = status; -} -#endif -#if 0 -WRAPPER unsigned int CDamageManager::GetDoorStatus(int door) { EAXJMP(0x545930); } -#else -unsigned int CDamageManager::GetDoorStatus(int door) +float G_aComponentDamage[] = { 2.5f, 1.25f, 3.2f, 1.4f, 2.5f, 2.8f, 0.5f }; + +void +CDamageManager::ResetDamageStatus(void) { - return m_bDoorStatus[door]; + memset(this, 0, sizeof(*this)); } -#endif \ No newline at end of file + +void +CDamageManager::FuckCarCompletely(void) +{ + int i; + + m_wheelStatus[0] = 2; + // wheels 1-3 not reset? + + m_doorStatus[0] = 3; + m_doorStatus[1] = 3; + m_doorStatus[2] = 3; + m_doorStatus[3] = 3; + m_doorStatus[4] = 3; + m_doorStatus[5] = 3; + + for(i = 0; i < 3; i++){ +#ifdef FIX_BUGS + ProgressPanelDamage(VEHBUMPER_FRONT); + ProgressPanelDamage(VEHBUMPER_REAR); +#else + // this can't be right + ProgressPanelDamage(COMPONENT_BUMPER_FRONT); + ProgressPanelDamage(COMPONENT_BUMPER_REAR); +#endif + } + // Why set to no damage? + m_lightStatus = 0; + m_panelStatus = 0; + SetEngineStatus(250); +} + +bool +CDamageManager::ApplyDamage(tComponent component, float damage, float unused) +{ + tComponentGroup group; + uint8 subComp; + + GetComponentGroup(component, &group, &subComp); + damage *= G_aComponentDamage[group]; + if(damage > 150.0f){ + switch(group){ + case COMPGROUP_WHEEL: + ProgressWheelDamage(subComp); + break; + case COMPGROUP_DOOR: + case COMPGROUP_BOOT: + ProgressDoorDamage(subComp); + break; + case COMPGROUP_BONNET: + if(damage > 220.0f) + ProgressEngineDamage(); + ProgressDoorDamage(subComp); + break; + case COMPGROUP_PANEL: + // so windscreen is a light? + SetLightStatus((eLights)subComp, 1); + // fall through + case COMPGROUP_BUMPER: + if(damage > 220.0f && + (component == COMPONENT_PANEL_FRONT_LEFT || + component == COMPONENT_PANEL_FRONT_RIGHT || + component == COMPONENT_PANEL_WINDSCREEN)) + ProgressEngineDamage(); + ProgressPanelDamage(subComp); + break; + } + return true; + } + return false; +} + +bool +CDamageManager::GetComponentGroup(tComponent component, tComponentGroup *componentGroup, uint8 *subComp) +{ + *subComp = -2; // ?? + + // This is done very strangely in the game, maybe an optimized switch? + if(component >= COMPONENT_PANEL_FRONT_LEFT){ + if(component >= COMPONENT_BUMPER_FRONT) + *componentGroup = COMPGROUP_BUMPER; + else + *componentGroup = COMPGROUP_PANEL; + *subComp = component - COMPONENT_PANEL_FRONT_LEFT; + return true; + }else if(component >= COMPONENT_DOOR_BONNET){ + if(component == COMPONENT_DOOR_BONNET) + *componentGroup = COMPGROUP_BONNET; + else if(component == COMPONENT_DOOR_BOOT) + *componentGroup = COMPGROUP_BOOT; + else + *componentGroup = COMPGROUP_DOOR; + *subComp = component - COMPONENT_DOOR_BONNET; + return true; + }else if(component >= COMPONENT_WHEEL_FRONT_LEFT){ + *componentGroup = COMPGROUP_WHEEL; + *subComp = component - COMPONENT_WHEEL_FRONT_LEFT; + return true; + }else if(component >= COMPONENT_DEFAULT){ + *componentGroup = COMPGROUP_DEFAULT; + *subComp = component - COMPONENT_DEFAULT; + return true; + }else + return false; +} + +void +CDamageManager::SetDoorStatus(int32 door, uint32 status) +{ + m_doorStatus[door] = status; +} + +int32 +CDamageManager::GetDoorStatus(int32 door) +{ + return m_doorStatus[door]; +} + +bool +CDamageManager::ProgressDoorDamage(uint8 door) +{ + int status = GetDoorStatus(door); + if(status == 3) + return false; + SetDoorStatus(door, status+1); + return true; +} + +void +CDamageManager::SetPanelStatus(int32 panel, uint32 status) +{ + m_panelStatus = dpb(status, panel*4, 4, m_panelStatus); +} + +int32 +CDamageManager::GetPanelStatus(int32 panel) +{ + return ldb(panel*4, 4, m_panelStatus); +} + +bool +CDamageManager::ProgressPanelDamage(uint8 panel) +{ + int status = GetPanelStatus(panel); + if(status == 3) + return false; + SetPanelStatus(panel, status+1); + return true; +} + +void +CDamageManager::SetLightStatus(eLights light, uint32 status) +{ + m_lightStatus = dpb(status, light*2, 2, m_lightStatus); +} + +int32 +CDamageManager::GetLightStatus(eLights light) +{ + return ldb(light*2, 2, m_lightStatus); +} + +void +CDamageManager::SetWheelStatus(int32 wheel, uint32 status) +{ + m_wheelStatus[wheel] = status; +} + +int32 +CDamageManager::GetWheelStatus(int32 wheel) +{ + return m_wheelStatus[wheel]; +} + +bool +CDamageManager::ProgressWheelDamage(uint8 wheel) +{ + int status = GetWheelStatus(wheel); + if(status == 3) + return false; + SetWheelStatus(wheel, status+1); + return true; +} + +void +CDamageManager::SetEngineStatus(uint32 status) +{ + if(status > 250) + m_engineStatus = 250; + else + m_engineStatus = status; +} + +int32 +CDamageManager::GetEngineStatus(void) +{ + return m_engineStatus; +} + +bool +CDamageManager::ProgressEngineDamage(void) +{ + int status = GetEngineStatus(); + int newstatus = status + 32 + (CGeneral::GetRandomNumber() & 0x1F); + if(status < 225 && newstatus > 224) + newstatus = 224; + SetEngineStatus(newstatus); + return true; +} + +STARTPATCHES + InjectHook(0x545850, &CDamageManager::ResetDamageStatus, PATCH_JUMP); + InjectHook(0x545B70, &CDamageManager::FuckCarCompletely, PATCH_JUMP); + InjectHook(0x545790, &CDamageManager::GetComponentGroup, PATCH_JUMP); + InjectHook(0x545A80, &CDamageManager::ApplyDamage, PATCH_JUMP); + InjectHook(0x545920, &CDamageManager::SetDoorStatus, PATCH_JUMP); + InjectHook(0x545930, &CDamageManager::GetDoorStatus, PATCH_JUMP); + InjectHook(0x545970, &CDamageManager::ProgressDoorDamage, PATCH_JUMP); + InjectHook(0x5458B0, &CDamageManager::SetPanelStatus, PATCH_JUMP); + InjectHook(0x5458E0, (int32 (CDamageManager::*)(int32))&CDamageManager::GetPanelStatus, PATCH_JUMP); + InjectHook(0x545A00, &CDamageManager::ProgressPanelDamage, PATCH_JUMP); + InjectHook(0x545860, &CDamageManager::SetLightStatus, PATCH_JUMP); + InjectHook(0x545890, &CDamageManager::GetLightStatus, PATCH_JUMP); + InjectHook(0x545900, &CDamageManager::SetWheelStatus, PATCH_JUMP); + InjectHook(0x545910, &CDamageManager::GetWheelStatus, PATCH_JUMP); + InjectHook(0x545A40, &CDamageManager::ProgressWheelDamage, PATCH_JUMP); + InjectHook(0x545940, &CDamageManager::SetEngineStatus, PATCH_JUMP); + InjectHook(0x545960, &CDamageManager::GetEngineStatus, PATCH_JUMP); + InjectHook(0x5459B0, &CDamageManager::ProgressEngineDamage, PATCH_JUMP); +ENDPATCHES diff --git a/src/DamageManager.h b/src/DamageManager.h index 4c1e3925..974c54ee 100644 --- a/src/DamageManager.h +++ b/src/DamageManager.h @@ -2,53 +2,100 @@ #include "common.h" +// TODO: move some of this into Vehicle.h + +enum tComponent +{ + COMPONENT_DEFAULT, + COMPONENT_WHEEL_FRONT_LEFT, + COMPONENT_WHEEL_FRONT_RIGHT, + COMPONENT_WHEEL_REAR_LEFT, + COMPONENT_WHEEL_REAR_RIGHT, + COMPONENT_DOOR_BONNET, + COMPONENT_DOOR_BOOT, + COMPONENT_DOOR_FRONT_LEFT, + COMPONENT_DOOR_FRONT_RIGHT, + COMPONENT_DOOR_REAR_LEFT, + COMPONENT_DOOR_REAR_RIGHT, + COMPONENT_PANEL_FRONT_LEFT, + COMPONENT_PANEL_FRONT_RIGHT, + COMPONENT_PANEL_REAR_LEFT, + COMPONENT_PANEL_REAR_RIGHT, + COMPONENT_PANEL_WINDSCREEN, + COMPONENT_BUMPER_FRONT, + COMPONENT_BUMPER_REAR, +}; + +enum tComponentGroup +{ + COMPGROUP_BUMPER, + COMPGROUP_WHEEL, + COMPGROUP_DOOR, + COMPGROUP_BONNET, + COMPGROUP_BOOT, + COMPGROUP_PANEL, + COMPGROUP_DEFAULT, +}; + +enum eLights +{ + VEHLIGHT_FRONT_LEFT, + VEHLIGHT_FRONT_RIGHT, + VEHLIGHT_REAR_LEFT, + VEHLIGHT_REAR_RIGHT, +}; + +enum { + VEHDOOR_BONNET = 0, + VEHDOOR_BOOT, + VEHDOOR_FRONT_LEFT, + VEHDOOR_FRONT_RIGHT, + VEHDOOR_REAR_LEFT, + VEHDOOR_REAR_RIGHT +}; + +enum { + VEHPANEL_FRONT_LEFT, + VEHPANEL_FRONT_RIGHT, + VEHPANEL_REAR_LEFT, + VEHPANEL_REAR_RIGHT, + VEHPANEL_WINDSCREEN, + VEHBUMPER_FRONT, + VEHBUMPER_REAR, +}; + class CDamageManager { public: - enum { - CAR_DOOR_BONNET = 0, - CAR_DOOR_BUMPER, - CAR_DOOR_LF, - CAR_DOOR_RF, - CAR_DOOR_LR, - CAR_DOOR_RR - }; - - enum { - PANEL_FL = 0, - PANEL_FR, - PANEL_RL, - PANEL_RR, - PANEL_WINDSHIELD, - PANEL_FRONT, - PANEL_BACK - }; - - struct PanelStatus { - uint32 m_nPanelFrontLeftStatus : 4; - uint32 m_nPanelFrontRightStatus : 4; - uint32 m_nPanelBackLeftStatus : 4; - uint32 m_nPanelBackRightStatus : 4; - uint32 m_nWindshieldStatus : 4; - uint32 m_nPanelFrontStatus : 4; - uint32 m_nPanelBackStatus : 4; - }; - float field_0; - char m_bEngineStatus; - char m_bWheelStatus[4]; - char m_bDoorStatus[7]; - uint32 m_abLightStatus; - union{ - PanelStatus m_sPanelsStatus; - uint32 m_abPanelsStatus; - }; - char field_24; - char field_25; - char field_26; - char field_27; + uint8 m_engineStatus; + uint8 m_wheelStatus[4]; + uint8 m_doorStatus[6]; + uint32 m_lightStatus; + uint32 m_panelStatus; + uint32 field_24; - void SetDoorStatus(int, unsigned int); - unsigned int GetDoorStatus(int); -}; \ No newline at end of file + void ResetDamageStatus(void); + void FuckCarCompletely(void); + bool ApplyDamage(tComponent component, float damage, float unused); + bool GetComponentGroup(tComponent component, tComponentGroup *componentGroup, uint8 *foo); + + void SetDoorStatus(int32 door, uint32 status); + int32 GetDoorStatus(int32 door); + bool ProgressDoorDamage(uint8 door); + void SetPanelStatus(int32 panel, uint32 status); + int32 GetPanelStatus(int32 panel); + bool ProgressPanelDamage(uint8 panel); + // needed for CReplay + static int32 GetPanelStatus(uint32 panelstatus, int32 panel) { return ldb(panel*4, 4, panelstatus); } + void SetLightStatus(eLights light, uint32 status); + int32 GetLightStatus(eLights light); + void SetWheelStatus(int32 wheel, uint32 status); + int32 GetWheelStatus(int32 wheel); + bool ProgressWheelDamage(uint8 wheel); + void SetEngineStatus(uint32 status); + int32 GetEngineStatus(void); + bool ProgressEngineDamage(void); +}; +VALIDATE_SIZE(CDamageManager, 0x1C); diff --git a/src/common.h b/src/common.h index 3d260f6e..79626acb 100644 --- a/src/common.h +++ b/src/common.h @@ -49,6 +49,19 @@ typedef uint16_t wchar; #define ALIGNPTR(p) (void*)((((uintptr)(void*)p) + sizeof(void*)-1) & ~(sizeof(void*)-1)) +// PDP-10 like byte functions +#define MASK(p, s) (((1<<(s))-1) << (p)) +inline uint32 dpb(uint32 b, uint32 p, uint32 s, uint32 w) +{ + uint32 m = MASK(p,s); + return w & ~m | b<

>p & (1<m_DamageManager.m_sPanelsStatus.m_nPanelFrontLeftStatus != rp.m_nPanelFrontLeftStatus){ - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelFrontLeftStatus = rp.m_nPanelFrontLeftStatus; - vehicle->SetPanelDamage(13, CDamageManager::PANEL_FL, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_FRONT_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)){ + vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_FRONT_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)); + vehicle->SetPanelDamage(13, VEHPANEL_FRONT_LEFT, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelFrontRightStatus != rp.m_nPanelFrontRightStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelFrontRightStatus = rp.m_nPanelFrontRightStatus; - vehicle->SetPanelDamage(9, CDamageManager::PANEL_FR, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_FRONT_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)){ + vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_FRONT_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)); + vehicle->SetPanelDamage(9, VEHPANEL_FRONT_RIGHT, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackLeftStatus != rp.m_nPanelBackLeftStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackLeftStatus = rp.m_nPanelBackLeftStatus; - vehicle->SetPanelDamage(14, CDamageManager::PANEL_RL, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_REAR_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)){ + vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_REAR_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)); + vehicle->SetPanelDamage(14, VEHPANEL_REAR_LEFT, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackRightStatus != rp.m_nPanelBackRightStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackRightStatus = rp.m_nPanelBackRightStatus; - vehicle->SetPanelDamage(10, CDamageManager::PANEL_RR, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_REAR_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)){ + vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_REAR_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)); + vehicle->SetPanelDamage(10, VEHPANEL_REAR_RIGHT, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nWindshieldStatus != rp.m_nWindshieldStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nWindshieldStatus = rp.m_nWindshieldStatus; - vehicle->SetPanelDamage(19, CDamageManager::PANEL_WINDSHIELD, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_WINDSCREEN) != CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)){ + vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_WINDSCREEN, CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)); + vehicle->SetPanelDamage(19, VEHPANEL_WINDSCREEN, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelFrontStatus != rp.m_nPanelFrontStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelFrontStatus = rp.m_nPanelFrontStatus; - vehicle->SetPanelDamage(7, CDamageManager::PANEL_FRONT, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHBUMPER_FRONT) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)){ + vehicle->m_DamageManager.SetPanelStatus(VEHBUMPER_FRONT, CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)); + vehicle->SetPanelDamage(7, VEHBUMPER_FRONT, flying); } - if (vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackStatus != rp.m_nPanelBackStatus) { - vehicle->m_DamageManager.m_sPanelsStatus.m_nPanelBackStatus = rp.m_nPanelBackStatus; - vehicle->SetPanelDamage(8, CDamageManager::PANEL_BACK, flying); + if(vehicle->m_DamageManager.GetPanelStatus(VEHBUMPER_REAR) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)){ + vehicle->m_DamageManager.SetPanelStatus(VEHBUMPER_REAR, CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)); + vehicle->SetPanelDamage(8, VEHBUMPER_REAR, flying); } } #endif @@ -625,7 +624,7 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id) vp->matrix.CompressFromFullMatrix(vehicle->GetMatrix()); 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)->m_DamageManager.m_abPanelsStatus : 0; + vp->panels = vehicle->IsCar() ? ((CAutomobile*)vehicle)->m_DamageManager.m_panelStatus : 0; vp->velocityX = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().x)); /* 8000!? */ vp->velocityY = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().y)); vp->velocityZ = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().z)); @@ -646,7 +645,7 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id) vp->door_angles[1] = 127.0f / M_PI * car->m_aDoors[3].m_fAngle; vp->door_status = 0; for (int i = 0; i < 6; i++){ - if (car->m_DamageManager.m_bDoorStatus[i] == 3) + if (car->m_DamageManager.GetDoorStatus(i) == 3) vp->door_status |= BIT(i); } } @@ -690,32 +689,32 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI car->m_aDoors[2].m_fAngle = car->m_aDoors[2].m_fPreviousAngle = vp->door_angles[0] * M_PI / 127.0f; car->m_aDoors[3].m_fAngle = car->m_aDoors[3].m_fPreviousAngle = vp->door_angles[1] * M_PI / 127.0f; if (vp->door_angles[0]) - car->m_DamageManager.m_bDoorStatus[2] = 2; + car->m_DamageManager.SetDoorStatus(2, 2); if (vp->door_angles[1]) - car->m_DamageManager.m_bDoorStatus[3] = 2; - if (vp->door_status & 1 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_BONNET) != 3){ - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_BONNET, 3); - car->SetDoorDamage(17, CDamageManager::CAR_DOOR_BONNET, true); + car->m_DamageManager.SetDoorStatus(3, 2); + if (vp->door_status & 1 && car->m_DamageManager.GetDoorStatus(VEHDOOR_BONNET) != 3){ + car->m_DamageManager.SetDoorStatus(VEHDOOR_BONNET, 3); + car->SetDoorDamage(17, VEHDOOR_BONNET, true); } - if (vp->door_status & 2 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_BUMPER) != 3) { - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_BUMPER, 3); - car->SetDoorDamage(18, CDamageManager::CAR_DOOR_BUMPER, true); + if (vp->door_status & 2 && car->m_DamageManager.GetDoorStatus(VEHDOOR_BOOT) != 3) { + car->m_DamageManager.SetDoorStatus(VEHDOOR_BOOT, 3); + car->SetDoorDamage(18, VEHDOOR_BOOT, true); } - if (vp->door_status & 4 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_LF) != 3) { - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_LF, 3); - car->SetDoorDamage(15, CDamageManager::CAR_DOOR_LF, true); + if (vp->door_status & 4 && car->m_DamageManager.GetDoorStatus(VEHDOOR_FRONT_LEFT) != 3) { + car->m_DamageManager.SetDoorStatus(VEHDOOR_FRONT_LEFT, 3); + car->SetDoorDamage(15, VEHDOOR_FRONT_LEFT, true); } - if (vp->door_status & 8 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_RF) != 3) { - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_RF, 3); - car->SetDoorDamage(11, CDamageManager::CAR_DOOR_RF, true); + if (vp->door_status & 8 && car->m_DamageManager.GetDoorStatus(VEHDOOR_FRONT_RIGHT) != 3) { + car->m_DamageManager.SetDoorStatus(VEHDOOR_FRONT_RIGHT, 3); + car->SetDoorDamage(11, VEHDOOR_FRONT_RIGHT, true); } - if (vp->door_status & 0x10 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_LR) != 3) { - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_LR, 3); - car->SetDoorDamage(16, CDamageManager::CAR_DOOR_LR, true); + if (vp->door_status & 0x10 && car->m_DamageManager.GetDoorStatus(VEHDOOR_REAR_LEFT) != 3) { + car->m_DamageManager.SetDoorStatus(VEHDOOR_REAR_LEFT, 3); + car->SetDoorDamage(16, VEHDOOR_REAR_LEFT, true); } - if (vp->door_status & 0x20 && car->m_DamageManager.GetDoorStatus(CDamageManager::CAR_DOOR_RR) != 3) { - car->m_DamageManager.SetDoorStatus(CDamageManager::CAR_DOOR_RR, 3); - car->SetDoorDamage(12, CDamageManager::CAR_DOOR_RR, true); + if (vp->door_status & 0x20 && car->m_DamageManager.GetDoorStatus(VEHDOOR_REAR_RIGHT) != 3) { + car->m_DamageManager.SetDoorStatus(VEHDOOR_REAR_RIGHT, 3); + car->SetDoorDamage(12, VEHDOOR_REAR_RIGHT, true); } vehicle->bEngineOn = true; if (vehicle->IsCar()) @@ -1195,8 +1194,8 @@ void CReplay::RestoreStuffFromMem(void) } if (vehicle->IsCar()){ CAutomobile* car = (CAutomobile*)vehicle; - int32 panels = car->m_DamageManager.m_abPanelsStatus; - car->m_DamageManager.m_abPanelsStatus = 0; + int32 panels = car->m_DamageManager.m_panelStatus; + car->m_DamageManager.m_panelStatus = 0; ApplyPanelDamageToCar(panels, car, true); car->SetDoorDamage(17, 0, true); /* BONNET */ car->SetDoorDamage(18, 1, true); /* BUMPER */ From 0e7a471b82129bcdea3f691744ed8db4717c3153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Sat, 6 Jul 2019 01:44:49 +0300 Subject: [PATCH 18/21] CPed... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: eray orçunus --- src/control/AutoPilot.h | 92 +++++++++ src/entities/Ped.cpp | 416 ++++++++++++++++++++++++++++++++++++---- src/entities/Ped.h | 78 ++++++-- src/entities/Vehicle.h | 10 +- src/weapons/Weapon.cpp | 6 + src/weapons/Weapon.h | 1 + 6 files changed, 540 insertions(+), 63 deletions(-) create mode 100644 src/control/AutoPilot.h diff --git a/src/control/AutoPilot.h b/src/control/AutoPilot.h new file mode 100644 index 00000000..a2458327 --- /dev/null +++ b/src/control/AutoPilot.h @@ -0,0 +1,92 @@ +#pragma once + +class CVehicle; + +enum eCarMission : uint8 +{ + MISSION_NONE, + MISSION_CRUISE, + MISSION_RAMPLAYER_FARAWAY, + MISSION_RAMPLAYER_CLOSE, + MISSION_BLOCKPLAYER_FARAWAY, + MISSION_BLOCKPLAYER_CLOSE, + MISSION_BLOCKPLAYER_HANDBRAKESTOP, + MISSION_WAITFORDELETION, + MISSION_GOTOCOORDS, + MISSION_GOTOCOORDS_STRAIGHT, + MISSION_EMERGENCYVEHICLE_STOP, + MISSION_STOP_FOREVER, + MISSION_GOTOCOORDS_ACCURATE, + MISSION_GOTO_COORDS_STRAIGHT_ACCURATE, + MISSION_GOTOCOORDS_ASTHECROWSWIMS, + MISSION_RAMCAR_FARAWAY, + MISSION_RAMCAR_CLOSE, + MISSION_BLOCKCAR_FARAWAY, + MISSION_BLOCKCAR_CLOSE, + MISSION_BLOCKCAR_HANDBRAKESTOP, + MISSION_HELI_FLYTOCOORS, + MISSION_ATTACKPLAYER, + MISSION_PLANE_FLYTOCOORS, + MISSION_HELI_LAND, + MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_1, + MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_2, + MISSION_BLOCKPLAYER_FORWARDANDBACK +}; + +enum eCarTempAction : uint8 +{ + TEMPACT_NONE, + TEMPACT_WAIT, + TEMPACT_REVERSE, + TEMPACT_HANDBRAKETURNLEFT, + TEMPACT_HANDBRAKETURNRIGHT, + TEMPACT_HANDBRAKESTRAIGHT, + TEMPACT_TURNLEFT, + TEMPACT_TURNRIGHT, + TEMPACT_GOFORWARD, + TEMPACT_SWERVELEFT, + TEMPACT_SWERVERIGHT +}; + +enum eCarDrivingStyle : uint8 +{ + DRIVINGSTYLE_STOP_FOR_CARS, + DRIVINGSTYLE_SLOW_DOWN_FOR_CARS, + DRIVINGSTYLE_AVOID_CARS, + DRIVINGSTYLE_PLOUGH_THROUGH, + DRIVINGSTYLE_STOP_FOR_CARS_IGNORE_LIGHTS +}; + +class CAutoPilot { +public: + void *m_currentAddress; + void *m_startingRouteNode; + void *m_PreviousRouteNode; + uint32 m_nTotalSpeedScaleFactor; + uint32 m_nSpeedScaleFactor; + uint32 m_nCurrentPathNodeInfo; + uint32 m_nNextPathNodeInfo; + uint32 m_nPreviousPathNodeInfo; + uint32 m_nTimeToStartMission; + uint32 m_nTimeSwitchedToRealPhysics; + int8 m_nPreviousDirection; + int8 m_nCurrentDirecton; + int8 m_nNextDirection; + int8 m_nPreviousPathDirection; + int8 m_nCurrentPathDirection; + eCarDrivingStyle m_nDrivingStyle; + eCarMission m_nCarMission; + eCarTempAction m_nAnimationId; + uint8 m_nAnimationTime; + float m_fMaxTrafficSpeed; + uint8 m_nCruiseSpeed; + uint8 m_nCarCtrlFlags; + int8 pad1[2]; + CVector m_vecDestinationCoors; + void *m_aPathFindNodesInfo[8]; + uint16 m_nPathFindNodesCount; + int8 pad2[2]; + CVehicle *m_pTargetCar; +}; + +static_assert(sizeof(CAutoPilot) == 0x70, "CAutoPilot: error"); \ No newline at end of file diff --git a/src/entities/Ped.cpp b/src/entities/Ped.cpp index 9e1836c2..e53066f7 100644 --- a/src/entities/Ped.cpp +++ b/src/entities/Ped.cpp @@ -24,21 +24,23 @@ #include "PointLights.h" #include "Pad.h" -WRAPPER void CPed::QuitEnteringCar() { EAXJMP(0x4E0E00); } -WRAPPER void CPed::KillPedWithCar(CVehicle* veh, float impulse) { EAXJMP(0x4EC430); } +WRAPPER void CPed::KillPedWithCar(CVehicle *veh, float impulse) { EAXJMP(0x4EC430); } WRAPPER void CPed::Say(uint16 audio) { EAXJMP(0x4E5A10); } WRAPPER void CPed::SetDie(AnimationId anim, float arg1, float arg2) { EAXJMP(0x4D37D0); } WRAPPER void CPed::SpawnFlyingComponent(int, int8) { EAXJMP(0x4EB060); } WRAPPER void CPed::RestorePreviousState(void) { EAXJMP(0x4C5E30); } WRAPPER void CPed::ClearAttack(void) { EAXJMP(0x4E6790); } -WRAPPER void CPed::PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation* dragAssoc, void* arg) { EAXJMP(0x4E2480); } -WRAPPER void CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation* dragAssoc, void* arg) { EAXJMP(0x4E2920); } +WRAPPER void CPed::PedSetQuickDraggedOutCarPositionCB(CAnimBlendAssociation *dragAssoc, void *arg) { EAXJMP(0x4E2480); } +WRAPPER void CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation *dragAssoc, void *arg) { EAXJMP(0x4E2920); } WRAPPER void CPed::SetPedPositionInCar(void) { EAXJMP(0x4D4970); } WRAPPER void CPed::ProcessControl(void) { EAXJMP(0x4C8910); } WRAPPER void CPed::PreRender(void) { EAXJMP(0x4CFDD0); } WRAPPER void CPed::Render(void) { EAXJMP(0x4D03F0); } WRAPPER int32 CPed::ProcessEntityCollision(CEntity*, CColPoint*) { EAXJMP(0x4CBB30); } WRAPPER void CPed::SetMoveAnim(void) { EAXJMP(0x4C5A40); } +WRAPPER void CPed::SetFollowRoute(int16, int16) { EAXJMP(0x4DD690); } +WRAPPER void CPed::SetDuck(uint32) { EAXJMP(0x4E4920); } +WRAPPER void CPed::RegisterThreatWithGangPeds(CEntity*) { EAXJMP(0x4E3870); } bool &CPed::bNastyLimbsCheat = *(bool*)0x95CD44; bool &CPed::bPedCheat2 = *(bool*)0x95CD5A; @@ -60,14 +62,7 @@ CPed::~CPed(void) CWorld::Remove(this); CRadar::ClearBlipForEntity(BLIP_CHAR, CPools::GetPedPool()->GetIndex(this)); if (bInVehicle && m_pMyVehicle){ - uint8 door_flag = 0; - switch (m_vehEnterType) { - case VEHICLE_ENTER_FRONT_LEFT: door_flag = 1; break; - case VEHICLE_ENTER_REAR_LEFT: door_flag = 2; break; - case VEHICLE_ENTER_FRONT_RIGHT: door_flag = 4; break; - case VEHICLE_ENTER_REAR_RIGHT: door_flag = 8; break; - default: break; - } + uint8 door_flag = GetVehEnterExitFlag(m_vehEnterType); if (m_pMyVehicle->pDriver == this) m_pMyVehicle->pDriver = nil; else { @@ -330,7 +325,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) m_fleeTimer = 0; m_vecSeekPosEx = CVector(0.0f, 0.0f, 0.0f); m_seekExAngle = 0.0f; - m_nWaitState = 0; + m_nWaitState = WAITSTATE_FALSE; m_nWaitTimer = 0; m_pCollidingEntity = nil; m_nPedState = PED_IDLE; @@ -370,15 +365,15 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) bIsRestoringGun = false; bCanPointGunAtTarget = false; - m_ped_flagB4 = false; - m_ped_flagB8 = false; - m_ped_flagB10 = false; + bIsTalking = false; + bIsInTheAir = false; + bIsLanding = false; m_ped_flagB20 = false; m_ped_flagB40 = false; m_ped_flagB80 = false; m_ped_flagC1 = false; - m_ped_flagC2 = true; + bRespondsToThreats = true; m_ped_flagC4 = true; m_ped_flagC8 = false; m_ped_flagC10 = false; @@ -397,9 +392,9 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) m_ped_flagE1 = false; m_ped_flagE2 = false; - m_ped_flagE4 = false; - m_ped_flagE8 = false; - bCantFireBecauseCrouched = false; + bNotAllowedToDuck = false; + bCrouchWhenShooting = false; + bIsDucking = false; m_ped_flagE20 = false; bDoBloodyFootprints = false; m_ped_flagE80 = false; @@ -635,7 +630,7 @@ bool CPed::IsPedInControl(void) { return m_nPedState <= PED_STATES_NO_AI - && !m_ped_flagB8 && !m_ped_flagB10 + && !bIsInTheAir && !bIsLanding && m_fHealth > 0.0f; } @@ -1019,7 +1014,7 @@ CPed::Attack(void) if (reloadAnim != NUM_ANIMS) reloadAnimAssoc = RpAnimBlendClumpGetAssociation((RpClump*)m_rwObject, reloadAnim); - if (bCantFireBecauseCrouched) + if (bIsDucking) return; if (reloadAnimAssoc) { @@ -1280,7 +1275,7 @@ CPed::ClearDuck(void) if (animAssoc) { - if (m_ped_flagE8) { + if (bCrouchWhenShooting) { if (m_nPedState == PED_ATTACK || m_nPedState == PED_AIM_GUN) { animAssoc = RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_RBLOCK_CSHOOT); @@ -1290,7 +1285,7 @@ CPed::ClearDuck(void) } } } else - bCantFireBecauseCrouched = false; + bIsDucking = false; } void @@ -1400,20 +1395,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg) ped->m_pSeekTarget = nil; vehicle = ped->m_pMyVehicle; - switch (ped->m_vehEnterType) { - case VEHICLE_ENTER_FRONT_RIGHT: - vehicle->m_nGettingOutFlags &= ~GETTING_IN_OUT_FR; - break; - case VEHICLE_ENTER_REAR_RIGHT: - vehicle->m_nGettingOutFlags &= ~GETTING_IN_OUT_RR; - break; - case VEHICLE_ENTER_FRONT_LEFT: - vehicle->m_nGettingOutFlags &= ~GETTING_IN_OUT_FL; - break; - case VEHICLE_ENTER_REAR_LEFT: - vehicle->m_nGettingOutFlags &= ~GETTING_IN_OUT_RL; - break; - } + vehicle->m_nGettingOutFlags &= ~GetVehEnterExitFlag(ped->m_vehEnterType); if (vehicle->pDriver == ped) { vehicle->RemoveDriver(); @@ -1742,7 +1724,6 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase) } } - // I hope bool stillGettingInOut = false; if (CTimer::GetTimeInMilliseconds() < m_nPedStateTimer) stillGettingInOut = veh->m_vehType != VEHICLE_TYPE_BOAT || m_ped_flagG10; @@ -1937,7 +1918,7 @@ CPed::IsPointerValid(void) // Some kind of binary sort void -CPed::SortPeds(CPed** list, int min, int max) +CPed::SortPeds(CPed **list, int min, int max) { if (min >= max) return; @@ -1977,7 +1958,7 @@ CPed::SortPeds(CPed** list, int min, int max) void CPed::BuildPedLists(void) { - static CPed* unsortedNearPeds[10]; + static CPed *unsortedNearPeds[10]; uint16 nextNearPedSlot = 0; if ((CTimer::GetFrameCounter() + m_randomSeed) & 15) { @@ -2543,6 +2524,350 @@ CPed::SetObjective(eObjective newObj, void *entity) } } +void +CPed::SetIdle(void) +{ + if (m_nPedState != PED_IDLE && m_nPedState != PED_MUG && m_nPedState != PED_FLEE_ENTITY) { + m_nPedState = PED_IDLE; + SetMoveState(PEDMOVE_STILL); + } + if (m_nWaitState == WAITSTATE_FALSE) { + m_nWaitTimer = CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(2000, 4000); + } +} + +void +CPed::SetObjective(eObjective newObj) +{ + if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD) + return; + + if (newObj == OBJECTIVE_NONE) { + if ((m_objective == OBJECTIVE_LEAVE_VEHICLE || m_objective == OBJECTIVE_ENTER_CAR_AS_PASSENGER || m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER) + && IsPedInControl()) { + + m_ped_flagG8 = true; + return; + } + // Unused code from assembly... + /* + else if(m_objective == OBJECTIVE_FLEE_CAR) { + + } else { + + } + */ + m_objective = newObj; + m_prevObjective = OBJECTIVE_NONE; + } else if (m_prevObjective != newObj || m_prevObjective == OBJECTIVE_NONE) { + SetObjectiveTimer(0); + + if (m_objective == newObj) + return; + + if (IsTemporaryObjective(m_objective)) { + m_prevObjective = newObj; + } else { + if (m_objective != newObj) + SetStoredObjective(); + + m_objective = newObj; + } + m_ped_flagD40 = false; + + switch (newObj) { + case OBJECTIVE_NONE: + m_prevObjective = OBJECTIVE_NONE; + break; + case OBJECTIVE_HAIL_TAXI: + m_nWaitTimer = 0; + SetIdle(); + SetMoveState(PEDMOVE_STILL); + break; + default: + break; + } + } +} + +// Only used in 01E1: SET_CHAR_OBJ_FOLLOW_ROUTE opcode +// IDA fails very badly in here, puts a fake loop and ignores SetFollowRoute call... +void +CPed::SetObjective(eObjective newObj, int16 routePoint, int16 routeType) +{ + if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD) + return; + + if (m_prevObjective == newObj && m_prevObjective != OBJECTIVE_NONE) + return; + + SetObjectiveTimer(0); + + if (m_objective == newObj && newObj == OBJECTIVE_FOLLOW_ROUTE && m_routeLastPoint == routePoint && m_routeType == routeType) + return; + + m_ped_flagD40 = false; + if (IsTemporaryObjective(m_objective)) { + m_prevObjective = newObj; + } else { + if (m_objective != newObj) + SetStoredObjective(); + + m_objective = newObj; + } + + if (newObj == OBJECTIVE_FOLLOW_ROUTE) { + SetFollowRoute(routePoint, routeType); + } +} + +void +CPed::ClearChat(void) +{ + CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_IDLE_CHAT); + if (animAssoc) { + animAssoc->blendDelta = -8.0f; + animAssoc->flags |= ASSOC_DELETEFADEDOUT; + } + bIsTalking = false; + ClearLookFlag(); + RestorePreviousState(); +} + +bool +CPed::IsGangMember(void) +{ + return m_nPedType >= PEDTYPE_GANG1 && m_nPedType <= PEDTYPE_GANG9; +} + +void +CPed::InformMyGangOfAttack(CEntity *attacker) +{ + CPed *attackerPed; + + if (m_objective == OBJECTIVE_KILL_CHAR_ON_FOOT || m_objective == OBJECTIVE_KILL_CHAR_ANY_MEANS) + return; + + if (attacker->IsPed()) { + attackerPed = (CPed*)attacker; + } else { + if (!attacker->IsVehicle()) + return; + + attackerPed = ((CVehicle*)attacker)->pDriver; + if (!attackerPed) + return; + } + + if (attackerPed->m_nPedType == PEDTYPE_COP) + return; + + for (int i = 0; i < m_numNearPeds; i++) { + CPed *nearPed = m_nearPeds[i]; + if (nearPed && nearPed != this) { + CPed *leader = nearPed->m_leader; + if (leader && leader == this && nearPed->m_pedStats->m_fear < nearPed->m_pedStats->m_temper) + { + nearPed->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, attackerPed); + nearPed->SetObjectiveTimer(30000); + } + } + } +} + +void +CPed::QuitEnteringCar(void) +{ + CAnimBlendAssociation *animAssoc = m_pVehicleAnim; + CVehicle *veh = m_pMyVehicle; + if (animAssoc) + animAssoc->blendDelta = -1000.0f; + + RestartNonPartialAnims(); + + if (!RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_IDLE_STANCE)) + CAnimManager::BlendAnimation((RpClump*) m_rwObject, m_animGroup, ANIM_IDLE_STANCE, 100.0f); + + if (veh) { + if (m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER || m_nPedState == PED_CARJACK) + veh->m_veh_flagC10 = false; + + if (veh->m_nNumGettingIn != 0) + veh->m_nNumGettingIn--; + + veh->m_nGettingInFlags = GetVehEnterExitFlag(m_vehEnterType); + } + + bUsesCollision = true; + + if (IsPlayer() && GetWeapon()->m_eWeaponType == WEAPONTYPE_UZI) { + if (IsPlayer() && m_storedWeapon != NO_STORED_WEAPON) { + SetCurrentWeapon(m_storedWeapon); + m_storedWeapon = NO_STORED_WEAPON; + } + } else { + CWeaponInfo *curWeapon = CWeaponInfo::GetWeaponInfo(GetWeapon()->m_eWeaponType); + AddWeaponModel(curWeapon->m_nModelId); + } + if (m_nPedState == PED_DIE || m_nPedState == PED_DEAD) { + animAssoc = m_pVehicleAnim; + if (animAssoc) { + animAssoc->blendDelta = -4.0; + animAssoc->flags |= ASSOC_FADEOUTWHENDONE; + animAssoc = m_pVehicleAnim; + animAssoc->flags &= ~ASSOC_RUNNING; + } + } else + SetIdle(); + + m_pVehicleAnim = nil; + + if (veh) { + if (veh->m_autoPilot.m_nCruiseSpeed == 0) + veh->m_autoPilot.m_nCruiseSpeed = 17; + } +} + +void +CPed::ReactToAttack(CEntity *attacker) +{ + if (IsPlayer() && attacker->IsPed()) { + InformMyGangOfAttack(attacker); + SetLookFlag(attacker, 1); + SetLookTimer(700); + return; + } + + if (IsPedInControl() && (m_nCreatedBy != CREATED_BY_SCRIPT || bRespondsToThreats)) { + CPed *ourLeader = m_leader; + if (ourLeader != attacker && (!ourLeader || FindPlayerPed() != ourLeader) + && attacker->IsPed()) { + + CPed *attackerPed = (CPed*)attacker; + if (bNotAllowedToDuck) { + if (!attackerPed->GetWeapon()->IsTypeMelee()) { + field_4E8 = CTimer::GetTimeInMilliseconds(); + return; + } + } else if (bCrouchWhenShooting || m_ped_flagE1) { + SetDuck(CGeneral::GetRandomNumberInRange(1000,3000)); + return; + } + + if (m_pedStats->m_fear <= 100 - attackerPed->m_pedStats->m_temper) { + if (m_pedStats != attackerPed->m_pedStats) { + if (IsGangMember() || m_nPedType == PEDTYPE_EMERGENCY || m_nPedType == PEDTYPE_FIREMAN) { + RegisterThreatWithGangPeds(attackerPed); + } + if (!attackerPed->GetWeapon()->IsTypeMelee() && GetWeapon()->IsTypeMelee()) { + SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, attacker); + SetMoveState(PEDMOVE_RUN); + } else { + SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, attacker); + SetObjectiveTimer(20000); + } + } + } else { + SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, attackerPed); + SetMoveState(PEDMOVE_RUN); + if (attackerPed->GetWeapon()->IsTypeMelee()) + Say(SOUND_PED_FLEE_RUN); + } + } + } +} + +bool +CPed::TurnBody(void) +{ + float lookDir; + bool doneSmoothly = true; + + if (m_pLookTarget) { + CVector &lookPos = m_pLookTarget->GetPosition(); + + lookDir = CGeneral::GetRadianAngleBetweenPoints( + lookPos.x, + lookPos.y, + GetPosition().x, + GetPosition().y); + } else + lookDir = m_fLookDirection; + + float limitedLookDir = CGeneral::LimitRadianAngle(lookDir); + float currentRot = m_fRotationCur; + + if (currentRot - PI > limitedLookDir) + limitedLookDir += 2 * PI; + else if (PI + currentRot < limitedLookDir) + limitedLookDir -= 2 * PI; + + float neededTurn = currentRot - limitedLookDir; + m_fRotationDest = limitedLookDir; + + if (fabs(neededTurn) > 0.05f) { + doneSmoothly = false; + currentRot -= neededTurn * 0.2f; + } + + m_fRotationCur = currentRot; + m_fLookDirection = limitedLookDir; + return doneSmoothly; +} + +void +CPed::Chat(void) +{ + if (bIsLooking && TurnBody()) + ClearLookFlag(); + + if (!m_pLookTarget || !m_pLookTarget->IsPed()) { + ClearChat(); + return; + } + + CPed *partner = (CPed*) m_pLookTarget; + + if (partner->m_nPedState != PED_CHAT) { + ClearChat(); + if (partner->m_pedInObjective) { + if (partner->m_objective == OBJECTIVE_KILL_CHAR_ON_FOOT || + partner->m_objective == OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE) + ReactToAttack(partner->m_pedInObjective); + } + return; + } + if (bIsTalking) { + if (CGeneral::GetRandomNumber() < 512) { + CAnimBlendAssociation *chatAssoc = RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_IDLE_CHAT); + if (chatAssoc) { + chatAssoc->blendDelta = -4.0f; + chatAssoc->flags |= ASSOC_FADEOUTWHENDONE; + } + bIsTalking = false; + } else + Say(SOUND_PED_CHAT); + + } else if (!RpAnimBlendClumpGetFirstAssociation((RpClump*)m_rwObject, ASSOC_FLAG100)) { + + if (CGeneral::GetRandomNumber() < 20) { + CAnimManager::BlendAnimation((RpClump*) m_rwObject, ASSOCGRP_STD, ANIM_XPRESS_SCRATCH, 4.0f); + } + if (!bIsTalking) { + CAnimBlendAssociation *chatAssoc = CAnimManager::BlendAnimation((RpClump*) m_rwObject, ASSOCGRP_STD, ANIM_IDLE_CHAT, 4.0f); + float chatTime = CGeneral::GetRandomNumberInRange(0.0f, 3.0f); + chatAssoc->SetCurrentTime(chatTime); + + bIsTalking = true; + Say(SOUND_PED_CHAT); + } + } + if (m_standardTimer && CTimer::GetTimeInMilliseconds() > m_standardTimer) { + ClearChat(); + m_standardTimer = CTimer::GetTimeInMilliseconds() + 30000; + } +} + WRAPPER void CPed::PedGetupCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE810); } WRAPPER void CPed::PedStaggerCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4CE8D0); } WRAPPER void CPed::PedEvadeCB(CAnimBlendAssociation *assoc, void *arg) { EAXJMP(0x4D36E0); } @@ -2611,5 +2936,14 @@ STARTPATCHES InjectHook(0x4D72F0, &CPed::CanPedJumpThis, PATCH_JUMP); InjectHook(0x4DD820, &CPed::CanSeeEntity, PATCH_JUMP); InjectHook(0x4D9460, &CPed::RestorePreviousObjective, PATCH_JUMP); + InjectHook(0x4D82C0, (void (CPed::*)(eObjective)) &CPed::SetObjective, PATCH_JUMP); InjectHook(0x4D83E0, (void (CPed::*)(eObjective, void*)) &CPed::SetObjective, PATCH_JUMP); + InjectHook(0x4D89A0, (void (CPed::*)(eObjective, int16, int16)) &CPed::SetObjective, PATCH_JUMP); + InjectHook(0x4DDEC0, &CPed::ReactToAttack, PATCH_JUMP); + InjectHook(0x4D0600, &CPed::SetIdle, PATCH_JUMP); + InjectHook(0x4E0E00, &CPed::QuitEnteringCar, PATCH_JUMP); + InjectHook(0x4E4AD0, &CPed::InformMyGangOfAttack, PATCH_JUMP); + InjectHook(0x4D3C80, &CPed::ClearChat, PATCH_JUMP); + InjectHook(0x4D1390, &CPed::TurnBody, PATCH_JUMP); + InjectHook(0x4D3AC0, &CPed::Chat, PATCH_JUMP); ENDPATCHES diff --git a/src/entities/Ped.h b/src/entities/Ped.h index 558ec9c1..a774dbbe 100644 --- a/src/entities/Ped.h +++ b/src/entities/Ped.h @@ -13,7 +13,31 @@ struct CPathNode; -enum eObjective { +enum eWaitState : uint32 { + WAITSTATE_FALSE, + WAITSTATE_TRAFFIC_LIGHTS, + WAITSTATE_CROSS_ROAD, + WAITSTATE_CROSS_ROAD_LOOK, + WAITSTATE_LOOK_PED, + WAITSTATE_LOOK_SHOP, + WAITSTATE_LOOK_ACCIDENT, + WAITSTATE_FACEOFF_GANG, + WAITSTATE_DOUBLEBACK, + WAITSTATE_HITWALL, + WAITSTATE_TURN180, + WAITSTATE_SURPRISE, + WAITSTATE_STUCK, + WAITSTATE_LOOK_ABOUT, + WAITSTATE_PLAYANIM_DUCK, + WAITSTATE_PLAYANIM_COWER, + WAITSTATE_PLAYANIM_TAXI, + WAITSTATE_PLAYANIM_HANDSUP, + WAITSTATE_PLAYANIM_HANDSCOWER, + WAITSTATE_PLAYANIM_CHAT, + WAITSTATE_FINISH_FLEE +}; + +enum eObjective : uint32 { OBJECTIVE_NONE, OBJECTIVE_IDLE, OBJECTIVE_FLEE_TILL_SAFE, @@ -52,7 +76,7 @@ enum eObjective { OBJECTIVE_35 }; -enum { +enum eVehEnter : uint16 { VEHICLE_ENTER_FRONT_RIGHT = 11, VEHICLE_ENTER_REAR_RIGHT = 12, VEHICLE_ENTER_FRONT_LEFT = 15, @@ -168,15 +192,15 @@ public: uint8 bIsRestoringGun : 1; uint8 bCanPointGunAtTarget : 1; - uint8 m_ped_flagB4 : 1; - uint8 m_ped_flagB8 : 1; - uint8 m_ped_flagB10 : 1; + uint8 bIsTalking : 1; + uint8 bIsInTheAir : 1; + uint8 bIsLanding : 1; uint8 m_ped_flagB20 : 1; uint8 m_ped_flagB40 : 1; uint8 m_ped_flagB80 : 1; uint8 m_ped_flagC1 : 1; - uint8 m_ped_flagC2 : 1; + uint8 bRespondsToThreats : 1; uint8 m_ped_flagC4 : 1; uint8 m_ped_flagC8 : 1; uint8 m_ped_flagC10 : 1; @@ -195,9 +219,9 @@ public: uint8 m_ped_flagE1 : 1; uint8 m_ped_flagE2 : 1; - uint8 m_ped_flagE4 : 1; - uint8 m_ped_flagE8 : 1; // can duck? - uint8 bCantFireBecauseCrouched : 1; // set if you don't want ped to attack + uint8 bNotAllowedToDuck : 1; + uint8 bCrouchWhenShooting : 1; + uint8 bIsDucking : 1; // set if you don't want ped to attack uint8 m_ped_flagE20 : 1; uint8 bDoBloodyFootprints : 1; uint8 m_ped_flagE80 : 1; @@ -270,7 +294,7 @@ public: eMoveState m_nMoveState; int32 m_nStoredActionState; int32 m_nPrevActionState; - int32 m_nWaitState; + eWaitState m_nWaitState; uint32 m_nWaitTimer; void *m_pPathNodesStates[8]; CVector2D m_stPathNodeStates[10]; @@ -286,15 +310,15 @@ public: float m_fArmour; int16 m_routeLastPoint; uint16 m_routePoints; - uint16 m_routePos; - uint16 m_routeType; - uint16 m_routeCurDir; + int16 m_routePos; + int16 m_routeType; + int16 m_routeCurDir; uint16 field_2D2; CVector2D m_moved; float m_fRotationCur; float m_fRotationDest; float m_headingRate; - uint16 m_vehEnterType; + eVehEnter m_vehEnterType; uint16 m_walkAroundType; CEntity *m_pCurrentPhysSurface; CVector m_vecOffsetFromPhysSurface; @@ -426,7 +450,18 @@ public: bool CanPedJumpThis(int32); bool CanSeeEntity(CEntity*, float); void RestorePreviousObjective(void); + void SetIdle(void); void SetObjective(eObjective, void*); + void SetObjective(eObjective); + void SetObjective(eObjective, int16, int16); + void ClearChat(void); + void InformMyGangOfAttack(CEntity*); + void SetFollowRoute(int16, int16); + void ReactToAttack(CEntity*); + void SetDuck(uint32); + void RegisterThreatWithGangPeds(CEntity*); + bool TurnBody(void); + void Chat(void); // Static methods static void GetLocalPositionToOpenCarDoor(CVector *output, CVehicle *veh, uint32 enterType, float offset); @@ -482,11 +517,26 @@ public: void SetStoredObjective(void); void SetLeader(CEntity* leader); void SetPedStats(ePedStats); + bool IsGangMember(void); inline bool HasWeapon(uint8 weaponType) { return m_weapons[weaponType].m_eWeaponType == weaponType; } inline CWeapon &GetWeapon(uint8 weaponType) { return m_weapons[weaponType]; } inline CWeapon *GetWeapon(void) { return &m_weapons[m_currentWeapon]; } inline RwFrame *GetNodeFrame(int nodeId) { return m_pFrames[nodeId]->frame; } + inline static uint8 GetVehEnterExitFlag(eVehEnter vehEnter) { + switch (vehEnter) { + case VEHICLE_ENTER_FRONT_RIGHT: + return 4; + case VEHICLE_ENTER_REAR_RIGHT: + return 8; + case VEHICLE_ENTER_FRONT_LEFT: + return 1; + case VEHICLE_ENTER_REAR_LEFT: + return 2; + default: + return 0; + } + } // to make patching virtual functions possible void SetModelIndex_(uint32 mi) { CPed::SetModelIndex(mi); } diff --git a/src/entities/Vehicle.h b/src/entities/Vehicle.h index ba3e568e..e9acaa0b 100644 --- a/src/entities/Vehicle.h +++ b/src/entities/Vehicle.h @@ -1,18 +1,12 @@ #pragma once #include "Physical.h" +#include "AutoPilot.h" class CPed; class CFire; struct tHandlingData; -enum { - GETTING_IN_OUT_FL = 1, - GETTING_IN_OUT_RL = 2, - GETTING_IN_OUT_FR = 4, - GETTING_IN_OUT_RR = 8 -}; - enum eCarLock : uint8 { CARLOCK_NOT_USED, CARLOCK_UNLOCKED, @@ -29,7 +23,7 @@ class CVehicle : public CPhysical public: // 0x128 tHandlingData *m_handling; - uint8 stuff1[112]; + CAutoPilot m_autoPilot; uint8 m_currentColour1; uint8 m_currentColour2; uint8 m_anExtras[2]; diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index 0c48db6b..90a6408b 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -35,6 +35,12 @@ CWeapon::Reload(void) m_nAmmoInClip = m_nAmmoTotal; } +bool +CWeapon::IsTypeMelee(void) +{ + return m_eWeaponType == WEAPONTYPE_UNARMED || m_eWeaponType == WEAPONTYPE_BASEBALLBAT; +} + STARTPATCHES InjectHook(0x55C330, &CWeapon::Initialise, PATCH_JUMP); InjectHook(0x5639D0, &CWeapon::Reload, PATCH_JUMP); diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h index 8cb435ce..ba552035 100644 --- a/src/weapons/Weapon.h +++ b/src/weapons/Weapon.h @@ -58,5 +58,6 @@ public: void Reload(void); bool Fire(CEntity*, CVector*); void AddGunshell(CEntity*, CVector const&, CVector2D const&, float); + bool IsTypeMelee(void); }; static_assert(sizeof(CWeapon) == 0x18, "CWeapon: error"); From 88ce335afc1af81222109e922ef03051a5273dd7 Mon Sep 17 00:00:00 2001 From: guard3 Date: Thu, 4 Jul 2019 14:04:34 +0300 Subject: [PATCH 19/21] CBridge --- src/Stats.cpp | 5 +- src/Stats.h | 7 +- src/control/Bridge.cpp | 151 ++++++++++++++++++++++++++++++++++++++- src/control/Bridge.h | 25 ++++++- src/control/PathFind.cpp | 2 + src/control/PathFind.h | 2 + 6 files changed, 185 insertions(+), 7 deletions(-) diff --git a/src/Stats.cpp b/src/Stats.cpp index 5256b0cf..3c5b55e4 100644 --- a/src/Stats.cpp +++ b/src/Stats.cpp @@ -1,5 +1,6 @@ #include "common.h" #include "Stats.h" -int32 &CStats::DaysPassed = *(int32*)0x8F2BB8; -int32 &CStats::HeadShots = *(int32*)0x8F647C; \ No newline at end of file +int32& CStats::DaysPassed = *(int32*)0x8F2BB8; +int32& CStats::HeadShots = *(int32*)0x8F647C; +bool& CStats::CommercialPassed = *(bool*)0x8F4334; \ No newline at end of file diff --git a/src/Stats.h b/src/Stats.h index e7cc3dc5..39b0e184 100644 --- a/src/Stats.h +++ b/src/Stats.h @@ -3,6 +3,7 @@ class CStats { public: - static int32 &DaysPassed; - static int32 &HeadShots; -}; + static int32& DaysPassed; + static int32& HeadShots; + static bool& CommercialPassed; +}; \ No newline at end of file diff --git a/src/control/Bridge.cpp b/src/control/Bridge.cpp index 91f3c788..3215ea2d 100644 --- a/src/control/Bridge.cpp +++ b/src/control/Bridge.cpp @@ -1,5 +1,154 @@ #include "common.h" #include "patcher.h" #include "Bridge.h" +#include "Pools.h" +#include "ModelIndices.h" +#include "PathFind.h" +#include "Stats.h" -WRAPPER bool CBridge::ShouldLightsBeFlashing(void) { EAXJMP(0x413D10); } +CEntity*& CBridge::pLiftRoad = *(CEntity**)0x8E2C8C; +CEntity*& CBridge::pLiftPart = *(CEntity**)0x8E2C94; +CEntity*& CBridge::pWeight = *(CEntity**)0x8E28BC; + +int& CBridge::State = *(int*)0x8F2A1C; +int& CBridge::OldState = *(int*)0x8F2A20; + +float& CBridge::DefaultZLiftPart = *(float*)0x941430; +float& CBridge::DefaultZLiftRoad = *(float*)0x941438; +float& CBridge::DefaultZLiftWeight = *(float*)0x8F1A44; + +float& CBridge::OldLift = *(float*)0x8F6254; + +uint32& CBridge::TimeOfBridgeBecomingOperational = *(uint32*)0x8F2BC0; + +void CBridge::Init() +{ + FindBridgeEntities(); + OldLift = -1.0; + if (pLiftPart && pWeight) + { + DefaultZLiftPart = pLiftPart->GetPosition().z; + DefaultZLiftWeight = pWeight->GetPosition().z; + + if (pLiftRoad) + DefaultZLiftRoad = pLiftRoad->GetPosition().z; + + ThePaths.SetLinksBridgeLights(-330.0, -230.0, -700.0, -588.0, true); + } +} + +void CBridge::Update() +{ + if (!pLiftPart || !pWeight) + return; + + OldState = State; + + float liftHeight; + + if (CStats::CommercialPassed) + { + if (TimeOfBridgeBecomingOperational == 0) + TimeOfBridgeBecomingOperational = CTimer::GetTimeInMilliseconds(); + + // Time remaining for bridge to become operational + // uint16, so after about a minute it overflows to 0 and the cycle repeats + uint16 timeElapsed = CTimer::GetTimeInMilliseconds() - TimeOfBridgeBecomingOperational; + + // Calculate lift part height and bridge state + if (timeElapsed < 10000) + { + State = STATE_LIFT_PART_MOVING_DOWN; + liftHeight = 25.0 - timeElapsed / 10000.0 * 25.0; + } + else if (timeElapsed < 40000) + { + liftHeight = 0.0; + State = STATE_LIFT_PART_IS_DOWN; + } + else if (timeElapsed < 50000) + { + liftHeight = 0.0; + State = STATE_LIFT_PART_ABOUT_TO_MOVE_UP; + } + else if (timeElapsed < 60000) + { + State = STATE_LIFT_PART_MOVING_UP; + liftHeight = (timeElapsed - 50000) / 10000.0 * 25.0; + } + else + { + liftHeight = 25.0; + State = STATE_LIFT_PART_IS_UP; + } + + // Move bridge part + if (liftHeight != OldLift) + { + pLiftPart->GetPosition().z = DefaultZLiftPart + liftHeight; + pLiftPart->GetMatrix().UpdateRW(); + pLiftPart->UpdateRwFrame(); + if (pLiftRoad) + { + pLiftRoad->GetPosition().z = DefaultZLiftRoad + liftHeight; + pLiftRoad->GetMatrix().UpdateRW(); + pLiftRoad->UpdateRwFrame(); + } + pWeight->GetPosition().z = DefaultZLiftWeight - liftHeight; + pWeight->GetMatrix().UpdateRW(); + pWeight->UpdateRwFrame(); + + OldLift = liftHeight; + } + + if (State == STATE_LIFT_PART_ABOUT_TO_MOVE_UP && OldState == STATE_LIFT_PART_IS_DOWN) + ThePaths.SetLinksBridgeLights(-330.0, -230.0, -700.0, -588.0, true); + else if (State == STATE_LIFT_PART_IS_DOWN && OldState == STATE_LIFT_PART_MOVING_DOWN) + ThePaths.SetLinksBridgeLights(-330.0, -230.0, -700.0, -588.0, false); + } + else + { + liftHeight = 25.0; + TimeOfBridgeBecomingOperational = 0; + State = STATE_BRIDGE_LOCKED; + } +} + +bool CBridge::ShouldLightsBeFlashing() { return State != STATE_LIFT_PART_IS_DOWN; } + +void CBridge::FindBridgeEntities() +{ + pWeight = nil; + pLiftRoad = nil; + pLiftPart = nil; + + for (int i = 1; i < CPools::GetBuildingPool()->GetSize(); ++i) + { + CBuilding* entry = CPools::GetBuildingPool()->GetSlot(i); + if (entry) + { + if (entry->GetModelIndex() == MI_BRIDGELIFT) + pLiftPart = entry; + else if (entry->GetModelIndex() == MI_BRIDGEROADSEGMENT) + pLiftRoad = entry; + else if (entry->GetModelIndex() == MI_BRIDGEWEIGHT) + pWeight = entry; + } + } +} + +bool CBridge::ThisIsABridgeObjectMovingUp(int index) +{ + if (index != MI_BRIDGEROADSEGMENT && index != MI_BRIDGELIFT) + return false; + + return State == STATE_LIFT_PART_ABOUT_TO_MOVE_UP || State == STATE_LIFT_PART_MOVING_UP; +} + +STARTPATCHES + InjectHook(0x413A30, &CBridge::Init, PATCH_JUMP); + InjectHook(0x413AC0, &CBridge::Update, PATCH_JUMP); + InjectHook(0x413D10, &CBridge::ShouldLightsBeFlashing, PATCH_JUMP); + InjectHook(0x413D20, &CBridge::FindBridgeEntities, PATCH_JUMP); + InjectHook(0x413DE0, &CBridge::ThisIsABridgeObjectMovingUp, PATCH_JUMP); +ENDPATCHES \ No newline at end of file diff --git a/src/control/Bridge.h b/src/control/Bridge.h index 64b85c1d..52c85322 100644 --- a/src/control/Bridge.h +++ b/src/control/Bridge.h @@ -1,7 +1,30 @@ #pragma once +#include "Entity.h" class CBridge { +private: + enum bridgeStates + { + STATE_BRIDGE_LOCKED, + STATE_LIFT_PART_IS_UP, + STATE_LIFT_PART_MOVING_DOWN, + STATE_LIFT_PART_IS_DOWN, + STATE_LIFT_PART_ABOUT_TO_MOVE_UP, + STATE_LIFT_PART_MOVING_UP + }; + + + static CEntity *&pLiftRoad, *&pLiftPart, *&pWeight; + static int &State, &OldState; + static float &DefaultZLiftPart, &DefaultZLiftRoad, &DefaultZLiftWeight; + static float& OldLift; + static uint32& TimeOfBridgeBecomingOperational; + public: - static bool ShouldLightsBeFlashing(void); + static void Init(); + static void Update(); + static bool ShouldLightsBeFlashing(); + static void FindBridgeEntities(); + static bool ThisIsABridgeObjectMovingUp(int); }; diff --git a/src/control/PathFind.cpp b/src/control/PathFind.cpp index f511b5dc..f9ce7f35 100644 --- a/src/control/PathFind.cpp +++ b/src/control/PathFind.cpp @@ -626,6 +626,8 @@ CPathFind::CalcNodeCoors(int16 x, int16 y, int16 z, int id, CVector *out) *out = m_mapObjects[id]->GetMatrix() * pos; } +WRAPPER void CPathFind::SetLinksBridgeLights(float, float, float, float, bool) { EAXJMP(0x42E3B0); } + STARTPATCHES InjectHook(0x429610, &CPathFind::PreparePathData, PATCH_JUMP); InjectHook(0x429C20, &CPathFind::PreparePathDataForType, PATCH_JUMP); diff --git a/src/control/PathFind.h b/src/control/PathFind.h index cc0b0a2f..9b6be573 100644 --- a/src/control/PathFind.h +++ b/src/control/PathFind.h @@ -131,6 +131,8 @@ public: int32 FindNodeClosestToCoors(CVector coors, uint8 type, float distLimit, bool disabled, bool betweenLevels); bool IsPathObject(int id) { return id < PATHNODESIZE && (InfoForTileCars[id*12].type != 0 || InfoForTilePeds[id*12].type != 0); } + + void SetLinksBridgeLights(float, float, float, float, bool); }; static_assert(sizeof(CPathFind) == 0x4c8f4, "CPathFind: error"); From 2b592605ab043be56b5bbbf1ac06f223400dd2ef Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 6 Jul 2019 12:27:21 +0200 Subject: [PATCH 20/21] misc classes finished --- src/References.cpp | 43 ++++++++ src/References.h | 3 + src/SurfaceTable.cpp | 53 ++++++++++ src/SurfaceTable.h | 1 + src/Zones.cpp | 225 +++++++++++++++++++++++++++++++++++++++- src/Zones.h | 5 +- src/config.h | 3 + src/entities/Object.cpp | 22 ++++ src/entities/Object.h | 2 + src/render/Clouds.cpp | 12 ++- src/render/Clouds.h | 1 + src/render/Renderer.cpp | 7 ++ src/render/Renderer.h | 1 + 13 files changed, 374 insertions(+), 4 deletions(-) diff --git a/src/References.cpp b/src/References.cpp index 187f4ffa..e87f0fd5 100644 --- a/src/References.cpp +++ b/src/References.cpp @@ -1,5 +1,9 @@ #include "common.h" #include "patcher.h" +#include "World.h" +#include "Vehicle.h" +#include "PlayerPed.h" +#include "Pools.h" #include "References.h" CReference *CReferences::aRefs = (CReference*)0x70BBE0; //[NUMREFERENCES]; @@ -17,6 +21,45 @@ CReferences::Init(void) aRefs[NUMREFERENCES-1].next = nil; } +void +CReferences::RemoveReferencesToPlayer(void) +{ + if(FindPlayerVehicle()) + FindPlayerVehicle()->ResolveReferences(); + if(FindPlayerPed()) + FindPlayerPed()->ResolveReferences(); +} + +void +CReferences::PruneAllReferencesInWorld(void) +{ + int i; + CEntity *e; + + i = CPools::GetPedPool()->GetSize(); + while(--i >= 0){ + e = CPools::GetPedPool()->GetSlot(i); + if(e) + e->PruneReferences(); + } + + i = CPools::GetVehiclePool()->GetSize(); + while(--i >= 0){ + e = CPools::GetVehiclePool()->GetSlot(i); + if(e) + e->PruneReferences(); + } + + i = CPools::GetObjectPool()->GetSize(); + while(--i >= 0){ + e = CPools::GetObjectPool()->GetSlot(i); + if(e) + e->PruneReferences(); + } +} + STARTPATCHES InjectHook(0x4A7350, CReferences::Init, PATCH_JUMP); + InjectHook(0x4A7570, CReferences::RemoveReferencesToPlayer, PATCH_JUMP); + InjectHook(0x4A75A0, CReferences::PruneAllReferencesInWorld, PATCH_JUMP); ENDPATCHES diff --git a/src/References.h b/src/References.h index c8017c0d..6476e243 100644 --- a/src/References.h +++ b/src/References.h @@ -13,5 +13,8 @@ class CReferences public: static CReference *aRefs; //[NUMREFERENCES]; static CReference *&pEmptyList; + static void Init(void); + static void RemoveReferencesToPlayer(void); + static void PruneAllReferencesInWorld(void); }; diff --git a/src/SurfaceTable.cpp b/src/SurfaceTable.cpp index 107734e4..2ba884b1 100644 --- a/src/SurfaceTable.cpp +++ b/src/SurfaceTable.cpp @@ -1,11 +1,57 @@ #include "common.h" #include "patcher.h" +#include "main.h" +#include "FileMgr.h" #include "Weather.h" #include "Collision.h" #include "SurfaceTable.h" float (*CSurfaceTable::ms_aAdhesiveLimitTable)[NUMADHESIVEGROUPS] = (float (*)[NUMADHESIVEGROUPS])0x8E29D4; +void +CSurfaceTable::Initialise(char *filename) +{ + int lineno, fieldno; + char *line; + char surfname[256]; + float adhesiveLimit; + + CFileMgr::SetDir(""); + CFileMgr::LoadFile(filename, work_buff, sizeof(work_buff), "r"); + + line = (char*)work_buff; + for(lineno = 0; lineno < NUMADHESIVEGROUPS; lineno++){ + // skip white space and comments + while(*line == ' ' || *line == '\t' || *line == '\n' || *line == '\r' || *line == ';'){ + if(*line == ';'){ + while(*line != '\n' && *line != '\r') + line++; + }else + line++; + } + + sscanf(line, "%s", surfname); + // skip what we just read + while(!(*line == ' ' || *line == '\t' || *line == ',')) + line++; + + for(fieldno = 0; fieldno <= lineno; fieldno++){ + // skip white space + while(*line == ' ' || *line == '\t' || *line == ',') + line++; + adhesiveLimit = 0.0f; + if(*line != '-') + sscanf(line, "%f", &adhesiveLimit); + // skip what we just read + while(!(*line == ' ' || *line == '\t' || *line == ',' || *line == '\n')) + line++; + + ms_aAdhesiveLimitTable[lineno][fieldno] = adhesiveLimit; + ms_aAdhesiveLimitTable[fieldno][lineno] = adhesiveLimit; + } + } +} + int CSurfaceTable::GetAdhesionGroup(uint8 surfaceType) { @@ -95,3 +141,10 @@ CSurfaceTable::GetAdhesiveLimit(CColPoint &colpoint) { return ms_aAdhesiveLimitTable[GetAdhesionGroup(colpoint.surfaceB)][GetAdhesionGroup(colpoint.surfaceA)]; } + +STARTPATCHES + InjectHook(0x4AB8F0, CSurfaceTable::Initialise, PATCH_JUMP); + InjectHook(0x4ABA60, CSurfaceTable::GetAdhesionGroup, PATCH_JUMP); + InjectHook(0x4ABAA0, CSurfaceTable::GetWetMultiplier, PATCH_JUMP); + InjectHook(0x4ABA30, CSurfaceTable::GetAdhesiveLimit, PATCH_JUMP); +ENDPATCHES diff --git a/src/SurfaceTable.h b/src/SurfaceTable.h index e61f5026..e1882e69 100644 --- a/src/SurfaceTable.h +++ b/src/SurfaceTable.h @@ -99,6 +99,7 @@ class CSurfaceTable // static float ms_aAdhesiveLimitTable[NUMADHESIVEGROUPS][NUMADHESIVEGROUPS]; static float (*ms_aAdhesiveLimitTable)[NUMADHESIVEGROUPS]; public: + static void Initialise(char *filename); static int GetAdhesionGroup(uint8 surfaceType); static float GetWetMultiplier(uint8 surfaceType); static float GetAdhesiveLimit(CColPoint &colpoint); diff --git a/src/Zones.cpp b/src/Zones.cpp index 4d2d9e5d..363fc3d9 100644 --- a/src/Zones.cpp +++ b/src/Zones.cpp @@ -43,7 +43,9 @@ CheckZoneInfo(CZoneInfo *info) assert(info->gangThreshold[7] <= info->gangThreshold[8]); } -wchar* CZone::GetTranslatedName() { +wchar* +CZone::GetTranslatedName(void) +{ return TheText.Get(name); } @@ -621,6 +623,224 @@ CTheZones::InitialiseAudioZoneArray(void) } } +void +CTheZones::SaveAllZones(uint8 *buffer, uint32 *length) +{ + int i; + + *length = 8 + 12 + + NUMZONES*56 + 2*NUMZONES*58 + 4 + + NUMMAPZONES*56 + NUMAUDIOZONES*2 + 4; + + buffer[0] = 'Z'; + buffer[1] = 'N'; + buffer[2] = 'S'; + buffer[3] = '\0'; + *(uint32*)(buffer+4) = *length - 8; + buffer += 8; + + *(int32*)(buffer) = GetIndexForZonePointer(m_pPlayersZone); + *(int32*)(buffer+4) = m_CurrLevel; + *(int16*)(buffer+8) = FindIndex; + *(int16*)(buffer+10) = 0; + buffer += 12; + + for(i = 0; i < NUMZONES; i++){ + memcpy(buffer, ZoneArray[i].name, 8); + *(float*)(buffer+8) = ZoneArray[i].minx; + *(float*)(buffer+12) = ZoneArray[i].miny; + *(float*)(buffer+16) = ZoneArray[i].minz; + *(float*)(buffer+20) = ZoneArray[i].maxx; + *(float*)(buffer+24) = ZoneArray[i].maxy; + *(float*)(buffer+28) = ZoneArray[i].maxz; + *(int32*)(buffer+32) = ZoneArray[i].type; + *(int32*)(buffer+36) = ZoneArray[i].level; + *(int16*)(buffer+40) = ZoneArray[i].zoneinfoDay; + *(int16*)(buffer+42) = ZoneArray[i].zoneinfoNight; + *(int32*)(buffer+44) = GetIndexForZonePointer(ZoneArray[i].child); + *(int32*)(buffer+48) = GetIndexForZonePointer(ZoneArray[i].parent); + *(int32*)(buffer+52) = GetIndexForZonePointer(ZoneArray[i].next); + buffer += 56; + } + + for(i = 0; i < 2*NUMZONES; i++){ + *(int16*)(buffer) = ZoneInfoArray[i].carDensity; + *(int16*)(buffer+2) = ZoneInfoArray[i].carThreshold[0]; + *(int16*)(buffer+4) = ZoneInfoArray[i].carThreshold[1]; + *(int16*)(buffer+6) = ZoneInfoArray[i].carThreshold[2]; + *(int16*)(buffer+8) = ZoneInfoArray[i].carThreshold[3]; + *(int16*)(buffer+10) = ZoneInfoArray[i].carThreshold[4]; + *(int16*)(buffer+12) = ZoneInfoArray[i].carThreshold[5]; + *(int16*)(buffer+14) = ZoneInfoArray[i].copThreshold; + *(int16*)(buffer+16) = ZoneInfoArray[i].gangThreshold[0]; + *(int16*)(buffer+18) = ZoneInfoArray[i].gangThreshold[1]; + *(int16*)(buffer+20) = ZoneInfoArray[i].gangThreshold[2]; + *(int16*)(buffer+22) = ZoneInfoArray[i].gangThreshold[3]; + *(int16*)(buffer+24) = ZoneInfoArray[i].gangThreshold[4]; + *(int16*)(buffer+26) = ZoneInfoArray[i].gangThreshold[5]; + *(int16*)(buffer+28) = ZoneInfoArray[i].gangThreshold[6]; + *(int16*)(buffer+30) = ZoneInfoArray[i].gangThreshold[7]; + *(int16*)(buffer+32) = ZoneInfoArray[i].gangThreshold[8]; + *(uint16*)(buffer+34) = ZoneInfoArray[i].pedDensity; + *(uint16*)(buffer+36) = ZoneInfoArray[i].copDensity; + *(uint16*)(buffer+38) = ZoneInfoArray[i].gangDensity[0]; + *(uint16*)(buffer+40) = ZoneInfoArray[i].gangDensity[1]; + *(uint16*)(buffer+42) = ZoneInfoArray[i].gangDensity[2]; + *(uint16*)(buffer+44) = ZoneInfoArray[i].gangDensity[3]; + *(uint16*)(buffer+46) = ZoneInfoArray[i].gangDensity[4]; + *(uint16*)(buffer+48) = ZoneInfoArray[i].gangDensity[5]; + *(uint16*)(buffer+50) = ZoneInfoArray[i].gangDensity[6]; + *(uint16*)(buffer+52) = ZoneInfoArray[i].gangDensity[7]; + *(uint16*)(buffer+54) = ZoneInfoArray[i].gangDensity[8]; + *(uint16*)(buffer+56) = ZoneInfoArray[i].pedGroup; + buffer += 58; + } + + *(uint16*)(buffer) = TotalNumberOfZones; + *(uint16*)(buffer+2) = TotalNumberOfZoneInfos; + buffer += 4; + + for(i = 0; i < NUMMAPZONES; i++){ + memcpy(buffer, MapZoneArray[i].name, 8); + *(float*)(buffer+8) = MapZoneArray[i].minx; + *(float*)(buffer+12) = MapZoneArray[i].miny; + *(float*)(buffer+16) = MapZoneArray[i].minz; + *(float*)(buffer+20) = MapZoneArray[i].maxx; + *(float*)(buffer+24) = MapZoneArray[i].maxy; + *(float*)(buffer+28) = MapZoneArray[i].maxz; + *(int32*)(buffer+32) = MapZoneArray[i].type; + *(int32*)(buffer+36) = MapZoneArray[i].level; + *(int16*)(buffer+40) = MapZoneArray[i].zoneinfoDay; + *(int16*)(buffer+42) = MapZoneArray[i].zoneinfoNight; +#ifdef STANDALONE + // BUG: GetIndexForZonePointer uses ZoneArray + // so indices will be unpredictable with different memory layout + assert(0); +#endif + *(int32*)(buffer+44) = GetIndexForZonePointer(MapZoneArray[i].child); + *(int32*)(buffer+48) = GetIndexForZonePointer(MapZoneArray[i].parent); + *(int32*)(buffer+52) = GetIndexForZonePointer(MapZoneArray[i].next); + buffer += 56; + } + + for(i = 0; i < NUMAUDIOZONES; i++){ + *(int16*)buffer = AudioZoneArray[i]; + buffer += 2; + } + + *(uint16*)(buffer) = TotalNumberOfMapZones; + *(uint16*)(buffer+2) = NumberOfAudioZones; +} + +void +CTheZones::LoadAllZones(uint8 *buffer, uint32 length) +{ + int i; + + assert(length == 8 + 12 + + NUMZONES*56 + 2*NUMZONES*58 + 4 + + NUMMAPZONES*56 + NUMAUDIOZONES*2 + 4); + assert(buffer[0] == 'Z'); + assert(buffer[1] == 'N'); + assert(buffer[2] == 'S'); + assert(buffer[3] == '\0'); + assert(*(uint32*)(buffer+4) == length - 8); + buffer += 8; + + m_pPlayersZone = GetPointerForZoneIndex(*(int32*)(buffer)); + m_CurrLevel = (eLevelName)*(int32*)(buffer+4); + FindIndex = *(int16*)(buffer+8); + assert(*(int16*)(buffer+10) == 0); + buffer += 12; + + for(i = 0; i < NUMZONES; i++){ + memcpy(ZoneArray[i].name, buffer, 8); + ZoneArray[i].minx = *(float*)(buffer+8); + ZoneArray[i].miny = *(float*)(buffer+12); + ZoneArray[i].minz = *(float*)(buffer+16); + ZoneArray[i].maxx = *(float*)(buffer+20); + ZoneArray[i].maxy = *(float*)(buffer+24); + ZoneArray[i].maxz = *(float*)(buffer+28); + ZoneArray[i].type = (eZoneType)*(int32*)(buffer+32); + ZoneArray[i].level = (eLevelName)*(int32*)(buffer+36); + ZoneArray[i].zoneinfoDay = *(int16*)(buffer+40); + ZoneArray[i].zoneinfoNight = *(int16*)(buffer+42); + ZoneArray[i].child = GetPointerForZoneIndex(*(int32*)(buffer+44)); + ZoneArray[i].parent = GetPointerForZoneIndex(*(int32*)(buffer+48)); + ZoneArray[i].next = GetPointerForZoneIndex(*(int32*)(buffer+52)); + buffer += 56; + } + + for(i = 0; i < 2*NUMZONES; i++){ + ZoneInfoArray[i].carDensity = *(int16*)(buffer); + ZoneInfoArray[i].carThreshold[0] = *(int16*)(buffer+2); + ZoneInfoArray[i].carThreshold[1] = *(int16*)(buffer+4); + ZoneInfoArray[i].carThreshold[2] = *(int16*)(buffer+6); + ZoneInfoArray[i].carThreshold[3] = *(int16*)(buffer+8); + ZoneInfoArray[i].carThreshold[4] = *(int16*)(buffer+10); + ZoneInfoArray[i].carThreshold[5] = *(int16*)(buffer+12); + ZoneInfoArray[i].copThreshold = *(int16*)(buffer+14); + ZoneInfoArray[i].gangThreshold[0] = *(int16*)(buffer+16); + ZoneInfoArray[i].gangThreshold[1] = *(int16*)(buffer+18); + ZoneInfoArray[i].gangThreshold[2] = *(int16*)(buffer+20); + ZoneInfoArray[i].gangThreshold[3] = *(int16*)(buffer+22); + ZoneInfoArray[i].gangThreshold[4] = *(int16*)(buffer+24); + ZoneInfoArray[i].gangThreshold[5] = *(int16*)(buffer+26); + ZoneInfoArray[i].gangThreshold[6] = *(int16*)(buffer+28); + ZoneInfoArray[i].gangThreshold[7] = *(int16*)(buffer+30); + ZoneInfoArray[i].gangThreshold[8] = *(int16*)(buffer+32); + ZoneInfoArray[i].pedDensity = *(uint16*)(buffer+34); + ZoneInfoArray[i].copDensity = *(uint16*)(buffer+36); + ZoneInfoArray[i].gangDensity[0] = *(uint16*)(buffer+38); + ZoneInfoArray[i].gangDensity[1] = *(uint16*)(buffer+40); + ZoneInfoArray[i].gangDensity[2] = *(uint16*)(buffer+42); + ZoneInfoArray[i].gangDensity[3] = *(uint16*)(buffer+44); + ZoneInfoArray[i].gangDensity[4] = *(uint16*)(buffer+46); + ZoneInfoArray[i].gangDensity[5] = *(uint16*)(buffer+48); + ZoneInfoArray[i].gangDensity[6] = *(uint16*)(buffer+50); + ZoneInfoArray[i].gangDensity[7] = *(uint16*)(buffer+52); + ZoneInfoArray[i].gangDensity[8] = *(uint16*)(buffer+54); + ZoneInfoArray[i].pedGroup = *(uint16*)(buffer+56); + buffer += 58; + } + + TotalNumberOfZones = *(uint16*)(buffer); + TotalNumberOfZoneInfos = *(uint16*)(buffer+2); + buffer += 4; + + for(i = 0; i < NUMMAPZONES; i++){ + memcpy(MapZoneArray[i].name, buffer, 8); + MapZoneArray[i].minx = *(float*)(buffer+8); + MapZoneArray[i].miny = *(float*)(buffer+12); + MapZoneArray[i].minz = *(float*)(buffer+16); + MapZoneArray[i].maxx = *(float*)(buffer+20); + MapZoneArray[i].maxy = *(float*)(buffer+24); + MapZoneArray[i].maxz = *(float*)(buffer+28); + MapZoneArray[i].type = (eZoneType)*(int32*)(buffer+32); + MapZoneArray[i].level = (eLevelName)*(int32*)(buffer+36); + MapZoneArray[i].zoneinfoDay = *(int16*)(buffer+40); + MapZoneArray[i].zoneinfoNight = *(int16*)(buffer+42); +#ifdef STANDALONE + // BUG: GetPointerForZoneIndex uses ZoneArray + // so pointers will be unpredictable with different memory layout + assert(0); +#endif + MapZoneArray[i].child = GetPointerForZoneIndex(*(int32*)(buffer+44)); + MapZoneArray[i].parent = GetPointerForZoneIndex(*(int32*)(buffer+48)); + MapZoneArray[i].next = GetPointerForZoneIndex(*(int32*)(buffer+52)); + buffer += 56; + } + + for(i = 0; i < NUMAUDIOZONES; i++){ + AudioZoneArray[i] = *(int16*)buffer; + buffer += 2; + } + + TotalNumberOfMapZones = *(uint16*)(buffer); + NumberOfAudioZones = *(uint16*)(buffer+2); +} + + STARTPATCHES InjectHook(0x4B5DD0, &CZone::GetTranslatedName, PATCH_JUMP); InjectHook(0x4B5DE0, CTheZones::Init, PATCH_JUMP); @@ -649,5 +869,6 @@ STARTPATCHES InjectHook(0x4B83E0, CTheZones::FindAudioZone, PATCH_JUMP); InjectHook(0x4B8430, CTheZones::FindZoneForPoint, PATCH_JUMP); InjectHook(0x4B8340, CTheZones::AddZoneToAudioZoneArray, PATCH_JUMP); - InjectHook(0x4B8380, CTheZones::InitialiseAudioZoneArray, PATCH_JUMP); + InjectHook(0x4B8510, CTheZones::SaveAllZones, PATCH_JUMP); + InjectHook(0x4B8950, CTheZones::LoadAllZones, PATCH_JUMP); ENDPATCHES diff --git a/src/Zones.h b/src/Zones.h index 47a4dc47..bf3957de 100644 --- a/src/Zones.h +++ b/src/Zones.h @@ -28,7 +28,7 @@ public: CZone *parent; CZone *next; - wchar *GetTranslatedName(); + wchar *GetTranslatedName(void); }; class CZoneInfo @@ -104,6 +104,9 @@ public: static int16 FindAudioZone(CVector *pos); static eLevelName FindZoneForPoint(const CVector &pos); static CZone *GetPointerForZoneIndex(int32 i) { return i == -1 ? nil : &ZoneArray[i]; } + static int32 GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - ZoneArray; } static void AddZoneToAudioZoneArray(CZone *zone); static void InitialiseAudioZoneArray(void); + static void SaveAllZones(uint8 *buffer, uint32 *length); + static void LoadAllZones(uint8 *buffer, uint32 length); }; diff --git a/src/config.h b/src/config.h index a1e7335d..8cb02190 100644 --- a/src/config.h +++ b/src/config.h @@ -62,6 +62,9 @@ enum Config { NUMPICKUPS = 336, }; +// We'll use this once we're ready to become independent of the game +// Use it to mark bugs in the code that will prevent the game from working then +//#define STANDALONE // We don't expect to compile for PS2 or Xbox // but it might be interesting for documentation purposes diff --git a/src/entities/Object.cpp b/src/entities/Object.cpp index dbc38b9d..6712d77b 100644 --- a/src/entities/Object.cpp +++ b/src/entities/Object.cpp @@ -1,5 +1,7 @@ #include "common.h" #include "patcher.h" +#include "main.h" +#include "Lights.h" #include "Pools.h" #include "Radar.h" #include "Object.h" @@ -63,6 +65,26 @@ CObject::Render(void) CEntity::Render(); } +bool +CObject::SetupLighting(void) +{ + DeActivateDirectional(); + SetAmbientColours(); + + if(bRenderScorched){ + WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f); + return true; + } + return false; +} + +void +CObject::RemoveLighting(bool reset) +{ + if(reset) + WorldReplaceScorchedLightsWithNormal(Scene.world); +} + WRAPPER void CObject::DeleteAllTempObjectInArea(CVector, float) { EAXJMP(0x4BBED0); } STARTPATCHES diff --git a/src/entities/Object.h b/src/entities/Object.h index 3a8d62f2..de4c8e05 100644 --- a/src/entities/Object.h +++ b/src/entities/Object.h @@ -68,6 +68,8 @@ public: ~CObject(void); void Render(void); + bool SetupLighting(void); + void RemoveLighting(bool reset); void ObjectDamage(float amount); diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp index bf572841..d582bff8 100644 --- a/src/render/Clouds.cpp +++ b/src/render/Clouds.cpp @@ -40,6 +40,16 @@ CClouds::Init(void) CloudRotation = 0.0f; } +void +CClouds::Shutdown(void) +{ + RwTextureDestroy(gpCloudTex[0]); + RwTextureDestroy(gpCloudTex[1]); + RwTextureDestroy(gpCloudTex[2]); + RwTextureDestroy(gpCloudTex[3]); + RwTextureDestroy(gpCloudTex[4]); +} + void CClouds::Update(void) { @@ -48,7 +58,6 @@ CClouds::Update(void) IndividualRotation += (CWeather::Wind*CTimer::GetTimeStep() + 0.3f) * 60.0f; } - void CClouds::Render(void) { @@ -424,6 +433,7 @@ CClouds::RenderHorizon(void) STARTPATCHES InjectHook(0x4F6C10, CClouds::Init, PATCH_JUMP); + InjectHook(0x4F6CA0, CClouds::Shutdown, PATCH_JUMP); InjectHook(0x4F6CE0, CClouds::Update, PATCH_JUMP); InjectHook(0x4F6D90, CClouds::Render, PATCH_JUMP); InjectHook(0x4F7F00, CClouds::RenderBackground, PATCH_JUMP); diff --git a/src/render/Clouds.h b/src/render/Clouds.h index 96f04bb1..c8000569 100644 --- a/src/render/Clouds.h +++ b/src/render/Clouds.h @@ -12,6 +12,7 @@ public: static CRGBA &ms_colourBottom; static void Init(void); + static void Shutdown(void); static void Update(void); static void Render(void); static void RenderBackground(int16 topred, int16 topgreen, int16 topblue, diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 405b9bb2..a6f28443 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -53,6 +53,12 @@ CRenderer::Init(void) SortBIGBuildings(); } +void +CRenderer::Shutdown(void) +{ + gSortedVehiclesAndPeds.Shutdown(); +} + void CRenderer::PreRender(void) { @@ -1170,6 +1176,7 @@ CRenderer::RemoveVehiclePedLights(CEntity *ent, bool reset) STARTPATCHES InjectHook(0x4A7680, CRenderer::Init, PATCH_JUMP); + InjectHook(0x4A76A0, CRenderer::Shutdown, PATCH_JUMP); InjectHook(0x4A7B90, CRenderer::RenderOneRoad, PATCH_JUMP); InjectHook(0x4A7BA0, CRenderer::RenderOneNonRoad, PATCH_JUMP); diff --git a/src/render/Renderer.h b/src/render/Renderer.h index 433035a0..4b96c775 100644 --- a/src/render/Renderer.h +++ b/src/render/Renderer.h @@ -27,6 +27,7 @@ public: static bool &m_loadingPriority; static void Init(void); + static void Shutdown(void); static void PreRender(void); static void RenderRoads(void); From 00461224a94692f5cdafc1b4309923a5539f1113 Mon Sep 17 00:00:00 2001 From: aap Date: Sat, 6 Jul 2019 19:44:00 +0200 Subject: [PATCH 21/21] some work on vehicles --- src/DamageManager.h | 9 -- src/Door.h | 17 ---- src/audio/AudioManager.cpp | 87 ++++++++++++++++++-- src/control/AutoPilot.h | 5 +- src/control/Replay.cpp | 126 ++++++++++++++-------------- src/entities/Automobile.h | 63 ++++++++++---- src/entities/Physical.cpp | 8 +- src/entities/Vehicle.h | 127 +++++++++++------------------ src/modelinfo/VehicleModelInfo.cpp | 28 ------- 9 files changed, 243 insertions(+), 227 deletions(-) delete mode 100644 src/Door.h diff --git a/src/DamageManager.h b/src/DamageManager.h index 974c54ee..1fdbc6b1 100644 --- a/src/DamageManager.h +++ b/src/DamageManager.h @@ -45,15 +45,6 @@ enum eLights VEHLIGHT_REAR_RIGHT, }; -enum { - VEHDOOR_BONNET = 0, - VEHDOOR_BOOT, - VEHDOOR_FRONT_LEFT, - VEHDOOR_FRONT_RIGHT, - VEHDOOR_REAR_LEFT, - VEHDOOR_REAR_RIGHT -}; - enum { VEHPANEL_FRONT_LEFT, VEHPANEL_FRONT_RIGHT, diff --git a/src/Door.h b/src/Door.h deleted file mode 100644 index 99fae5f1..00000000 --- a/src/Door.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "common.h" - -struct CDoor -{ - float m_fAngleWhenOpened; - float m_fAngleWhenClosed; - char field_8; - char field_9; - char field_10; - char field_11; - float m_fAngle; - float m_fPreviousAngle; - float m_fAngularVelocity; - CVector m_vecVelocity; -}; \ No newline at end of file diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 812c9d62..76ef8244 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -1,3 +1,6 @@ +#include "common.h" +#include "patcher.h" + #include "AudioManager.h" #include "DMAudio.h" @@ -10,10 +13,80 @@ #include "Vehicle.h" #include "World.h" -#include "common.h" -#include "patcher.h" - -#include +// TODO: where is this used? Is this the right file? +enum eVehicleModel +{ + LANDSTAL, + IDAHO, + STINGER, + LINERUN, + PEREN, + SENTINEL, + PATRIOT, + FIRETRUK, + TRASH, + STRETCH, + MANANA, + INFERNUS, + BLISTA, + PONY, + MULE, + CHEETAH, + AMBULAN, + FBICAR, + MOONBEAM, + ESPERANT, + TAXI, + KURUMA, + BOBCAT, + MRWHOOP, + BFINJECT, + CORPSE, + POLICE, + ENFORCER, + SECURICA, + BANSHEE, + PREDATOR, + BUS, + RHINO, + BARRACKS, + TRAIN, + CHOPPER, + DODO, + COACH, + CABBIE, + STALLION, + RUMPO, + RCBANDIT, + BELLYUP, + MRWONGS, + MAFIA, + YARDIE, + YAKUZA, + DIABLOS, + COLUMB, + HOODS, + AIRTRAIN, + DEADDODO, + SPEEDER, + REEFER, + PANLANT, + FLATBED, + YANKEE, + ESCAPE, + BORGNINE, + TOYZ, + GHOST, + CAR151, + CAR152, + CAR153, + CAR154, + CAR155, + CAR156, + CAR157, + CAR158, + CAR159, +}; cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; @@ -132,7 +205,7 @@ void cAudioManager::CalculateDistance(bool *ptr, float dist) { if(*ptr == false) { - m_sQueueSample.m_fDistance = std::sqrt(dist); + m_sQueueSample.m_fDistance = sqrt(dist); *ptr = true; } } @@ -267,14 +340,14 @@ cAudioManager::ClearRequestedQueue() bool cAudioManager::UsesReverseWarning(int32 model) { - return model == LINERUN || std::abs(model - FIRETRUK) <= 1 || model == BUS || + return model == LINERUN || fabs(model - FIRETRUK) <= 1 || model == BUS || model == COACH; // fix } bool cAudioManager::HasAirBrakes(int32 model) { - return model == LINERUN || std::abs(model - FIRETRUK) <= 1 || model == BUS || + return model == LINERUN || fabs(model - FIRETRUK) <= 1 || model == BUS || model == COACH; // fix } diff --git a/src/control/AutoPilot.h b/src/control/AutoPilot.h index a2458327..97b02f5c 100644 --- a/src/control/AutoPilot.h +++ b/src/control/AutoPilot.h @@ -81,12 +81,9 @@ public: float m_fMaxTrafficSpeed; uint8 m_nCruiseSpeed; uint8 m_nCarCtrlFlags; - int8 pad1[2]; CVector m_vecDestinationCoors; void *m_aPathFindNodesInfo[8]; uint16 m_nPathFindNodesCount; - int8 pad2[2]; CVehicle *m_pTargetCar; }; - -static_assert(sizeof(CAutoPilot) == 0x70, "CAutoPilot: error"); \ No newline at end of file +static_assert(sizeof(CAutoPilot) == 0x70, "CAutoPilot: error"); diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp index cb3b27d0..e166e6b5 100644 --- a/src/control/Replay.cpp +++ b/src/control/Replay.cpp @@ -135,33 +135,33 @@ WRAPPER static void ApplyPanelDamageToCar(uint32, CAutomobile*, bool) { EAXJMP(0 #else static void ApplyPanelDamageToCar(uint32 panels, CAutomobile* vehicle, bool flying) { - if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_FRONT_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)){ - vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_FRONT_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)); - vehicle->SetPanelDamage(13, VEHPANEL_FRONT_LEFT, flying); + if(vehicle->Damage.GetPanelStatus(VEHPANEL_FRONT_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)){ + vehicle->Damage.SetPanelStatus(VEHPANEL_FRONT_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_LEFT)); + vehicle->SetPanelDamage(CAR_WING_LF, VEHPANEL_FRONT_LEFT, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_FRONT_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)){ - vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_FRONT_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)); - vehicle->SetPanelDamage(9, VEHPANEL_FRONT_RIGHT, flying); + if(vehicle->Damage.GetPanelStatus(VEHPANEL_FRONT_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)){ + vehicle->Damage.SetPanelStatus(VEHPANEL_FRONT_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_FRONT_RIGHT)); + vehicle->SetPanelDamage(CAR_WING_RF, VEHPANEL_FRONT_RIGHT, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_REAR_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)){ - vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_REAR_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)); - vehicle->SetPanelDamage(14, VEHPANEL_REAR_LEFT, flying); + if(vehicle->Damage.GetPanelStatus(VEHPANEL_REAR_LEFT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)){ + vehicle->Damage.SetPanelStatus(VEHPANEL_REAR_LEFT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_LEFT)); + vehicle->SetPanelDamage(CAR_WING_LR, VEHPANEL_REAR_LEFT, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_REAR_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)){ - vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_REAR_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)); - vehicle->SetPanelDamage(10, VEHPANEL_REAR_RIGHT, flying); + if(vehicle->Damage.GetPanelStatus(VEHPANEL_REAR_RIGHT) != CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)){ + vehicle->Damage.SetPanelStatus(VEHPANEL_REAR_RIGHT, CDamageManager::GetPanelStatus(panels, VEHPANEL_REAR_RIGHT)); + vehicle->SetPanelDamage(CAR_WING_RR, VEHPANEL_REAR_RIGHT, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHPANEL_WINDSCREEN) != CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)){ - vehicle->m_DamageManager.SetPanelStatus(VEHPANEL_WINDSCREEN, CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)); - vehicle->SetPanelDamage(19, VEHPANEL_WINDSCREEN, flying); + if(vehicle->Damage.GetPanelStatus(VEHPANEL_WINDSCREEN) != CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)){ + vehicle->Damage.SetPanelStatus(VEHPANEL_WINDSCREEN, CDamageManager::GetPanelStatus(panels, VEHPANEL_WINDSCREEN)); + vehicle->SetPanelDamage(CAR_WINDSCREEN, VEHPANEL_WINDSCREEN, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHBUMPER_FRONT) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)){ - vehicle->m_DamageManager.SetPanelStatus(VEHBUMPER_FRONT, CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)); - vehicle->SetPanelDamage(7, VEHBUMPER_FRONT, flying); + if(vehicle->Damage.GetPanelStatus(VEHBUMPER_FRONT) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)){ + vehicle->Damage.SetPanelStatus(VEHBUMPER_FRONT, CDamageManager::GetPanelStatus(panels, VEHBUMPER_FRONT)); + vehicle->SetPanelDamage(CAR_BUMP_FRONT, VEHBUMPER_FRONT, flying); } - if(vehicle->m_DamageManager.GetPanelStatus(VEHBUMPER_REAR) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)){ - vehicle->m_DamageManager.SetPanelStatus(VEHBUMPER_REAR, CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)); - vehicle->SetPanelDamage(8, VEHBUMPER_REAR, flying); + if(vehicle->Damage.GetPanelStatus(VEHBUMPER_REAR) != CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)){ + vehicle->Damage.SetPanelStatus(VEHBUMPER_REAR, CDamageManager::GetPanelStatus(panels, VEHBUMPER_REAR)); + vehicle->SetPanelDamage(CAR_BUMP_REAR, VEHBUMPER_REAR, flying); } } #endif @@ -624,7 +624,7 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id) vp->matrix.CompressFromFullMatrix(vehicle->GetMatrix()); 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)->m_DamageManager.m_panelStatus : 0; + vp->panels = vehicle->IsCar() ? ((CAutomobile*)vehicle)->Damage.m_panelStatus : 0; vp->velocityX = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().x)); /* 8000!? */ vp->velocityY = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().y)); vp->velocityZ = 8000.0f * max(-4.0f, min(4.0f, vehicle->GetSpeed().z)); @@ -638,14 +638,14 @@ void CReplay::StoreCarUpdate(CVehicle *vehicle, int id) if (vehicle->IsCar()){ CAutomobile* car = (CAutomobile*)vehicle; for (int i = 0; i < 4; i++){ - vp->wheel_susp_dist[i] = 50.0f * car->m_afWheelSuspDist[i]; - vp->wheel_rotation[i] = 128.0f / M_PI * car->m_afWheelRotation[i]; + vp->wheel_susp_dist[i] = 50.0f * car->m_aWheelDist[i]; + vp->wheel_rotation[i] = 128.0f / M_PI * car->m_aWheelRotation[i]; } - vp->door_angles[0] = 127.0f / M_PI * car->m_aDoors[2].m_fAngle; - vp->door_angles[1] = 127.0f / M_PI * car->m_aDoors[3].m_fAngle; + 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_status = 0; for (int i = 0; i < 6; i++){ - if (car->m_DamageManager.GetDoorStatus(i) == 3) + if (car->Damage.GetDoorStatus(i) == 3) vp->door_status |= BIT(i); } } @@ -683,42 +683,42 @@ void CReplay::ProcessCarUpdate(CVehicle *vehicle, float interpolation, CAddressI if (vehicle->IsCar()) { CAutomobile* car = (CAutomobile*)vehicle; for (int i = 0; i < 4; i++) { - car->m_afWheelSuspDist[i] = vp->wheel_susp_dist[i] / 50.0f; - car->m_afWheelRotation[i] = vp->wheel_rotation[i] * M_PI / 128.0f; + car->m_aWheelDist[i] = vp->wheel_susp_dist[i] / 50.0f; + car->m_aWheelRotation[i] = vp->wheel_rotation[i] * M_PI / 128.0f; } - car->m_aDoors[2].m_fAngle = car->m_aDoors[2].m_fPreviousAngle = vp->door_angles[0] * M_PI / 127.0f; - car->m_aDoors[3].m_fAngle = car->m_aDoors[3].m_fPreviousAngle = vp->door_angles[1] * M_PI / 127.0f; + car->Doors[2].m_fAngle = car->Doors[2].m_fPreviousAngle = vp->door_angles[0] * M_PI / 127.0f; + car->Doors[3].m_fAngle = car->Doors[3].m_fPreviousAngle = vp->door_angles[1] * M_PI / 127.0f; if (vp->door_angles[0]) - car->m_DamageManager.SetDoorStatus(2, 2); + car->Damage.SetDoorStatus(2, 2); if (vp->door_angles[1]) - car->m_DamageManager.SetDoorStatus(3, 2); - if (vp->door_status & 1 && car->m_DamageManager.GetDoorStatus(VEHDOOR_BONNET) != 3){ - car->m_DamageManager.SetDoorStatus(VEHDOOR_BONNET, 3); - car->SetDoorDamage(17, VEHDOOR_BONNET, true); + car->Damage.SetDoorStatus(3, 2); + if (vp->door_status & 1 && car->Damage.GetDoorStatus(DOOR_BONNET) != 3){ + car->Damage.SetDoorStatus(DOOR_BONNET, 3); + car->SetDoorDamage(CAR_BONNET, DOOR_BONNET, true); } - if (vp->door_status & 2 && car->m_DamageManager.GetDoorStatus(VEHDOOR_BOOT) != 3) { - car->m_DamageManager.SetDoorStatus(VEHDOOR_BOOT, 3); - car->SetDoorDamage(18, VEHDOOR_BOOT, true); + if (vp->door_status & 2 && car->Damage.GetDoorStatus(DOOR_BOOT) != 3) { + car->Damage.SetDoorStatus(DOOR_BOOT, 3); + car->SetDoorDamage(CAR_BOOT, DOOR_BOOT, true); } - if (vp->door_status & 4 && car->m_DamageManager.GetDoorStatus(VEHDOOR_FRONT_LEFT) != 3) { - car->m_DamageManager.SetDoorStatus(VEHDOOR_FRONT_LEFT, 3); - car->SetDoorDamage(15, VEHDOOR_FRONT_LEFT, true); + if (vp->door_status & 4 && car->Damage.GetDoorStatus(DOOR_FRONT_LEFT) != 3) { + car->Damage.SetDoorStatus(DOOR_FRONT_LEFT, 3); + car->SetDoorDamage(CAR_DOOR_LF, DOOR_FRONT_LEFT, true); } - if (vp->door_status & 8 && car->m_DamageManager.GetDoorStatus(VEHDOOR_FRONT_RIGHT) != 3) { - car->m_DamageManager.SetDoorStatus(VEHDOOR_FRONT_RIGHT, 3); - car->SetDoorDamage(11, VEHDOOR_FRONT_RIGHT, true); + if (vp->door_status & 8 && car->Damage.GetDoorStatus(DOOR_FRONT_RIGHT) != 3) { + car->Damage.SetDoorStatus(DOOR_FRONT_RIGHT, 3); + car->SetDoorDamage(CAR_DOOR_RF, DOOR_FRONT_RIGHT, true); } - if (vp->door_status & 0x10 && car->m_DamageManager.GetDoorStatus(VEHDOOR_REAR_LEFT) != 3) { - car->m_DamageManager.SetDoorStatus(VEHDOOR_REAR_LEFT, 3); - car->SetDoorDamage(16, VEHDOOR_REAR_LEFT, true); + if (vp->door_status & 0x10 && car->Damage.GetDoorStatus(DOOR_REAR_LEFT) != 3) { + car->Damage.SetDoorStatus(DOOR_REAR_LEFT, 3); + car->SetDoorDamage(CAR_DOOR_LR, DOOR_REAR_LEFT, true); } - if (vp->door_status & 0x20 && car->m_DamageManager.GetDoorStatus(VEHDOOR_REAR_RIGHT) != 3) { - car->m_DamageManager.SetDoorStatus(VEHDOOR_REAR_RIGHT, 3); - car->SetDoorDamage(12, VEHDOOR_REAR_RIGHT, true); + if (vp->door_status & 0x20 && car->Damage.GetDoorStatus(DOOR_REAR_RIGHT) != 3) { + car->Damage.SetDoorStatus(DOOR_REAR_RIGHT, 3); + car->SetDoorDamage(CAR_DOOR_RR, DOOR_REAR_RIGHT, true); } vehicle->bEngineOn = true; if (vehicle->IsCar()) - ((CAutomobile*)vehicle)->m_nDriveWheelsOnGround = 4; + ((CAutomobile*)vehicle)->m_nWheelsOnGround = 4; CWorld::Remove(vehicle); CWorld::Add(vehicle); if (vehicle->IsBoat()) @@ -1185,24 +1185,24 @@ void CReplay::RestoreStuffFromMem(void) vehicle->SetModelIndex(mi); if (mi == MI_DODO){ CAutomobile* dodo = (CAutomobile*)vehicle; - GetFirstObject(dodo->m_apModelNodes[4])->flags = 0; /* TODO: 4 to enum */ + RpAtomicSetFlags(GetFirstObject(dodo->m_aCarNodes[CAR_WHEEL_LF]), 0); CMatrix tmp1; - tmp1.Attach(&dodo->m_apModelNodes[1]->modelling, false); - CMatrix tmp2(&dodo->m_apModelNodes[4]->modelling, false); + tmp1.Attach(RwFrameGetMatrix(dodo->m_aCarNodes[CAR_WHEEL_RF]), false); + CMatrix tmp2(RwFrameGetMatrix(dodo->m_aCarNodes[CAR_WHEEL_LF]), false); *tmp1.GetPosition() += CVector(tmp2.GetPosition()->x + 0.1f, 0.0f, tmp2.GetPosition()->z); tmp1.UpdateRW(); } if (vehicle->IsCar()){ CAutomobile* car = (CAutomobile*)vehicle; - int32 panels = car->m_DamageManager.m_panelStatus; - car->m_DamageManager.m_panelStatus = 0; + int32 panels = car->Damage.m_panelStatus; + car->Damage.m_panelStatus = 0; ApplyPanelDamageToCar(panels, car, true); - car->SetDoorDamage(17, 0, true); /* BONNET */ - car->SetDoorDamage(18, 1, true); /* BUMPER */ - car->SetDoorDamage(15, 2, true); /* DOOR_FRONT_LEFT */ - car->SetDoorDamage(11, 3, true); /* DOOR_FRONT_RIGHT */ - car->SetDoorDamage(16, 4, true); /* DOOR_BACK_LEFT */ - car->SetDoorDamage(12, 5, true); /* DOOR_BACK_RIGHT */ + car->SetDoorDamage(CAR_BONNET, DOOR_BONNET, true); + car->SetDoorDamage(CAR_BOOT, DOOR_BOOT, true); + car->SetDoorDamage(CAR_DOOR_LF, DOOR_FRONT_LEFT, true); + car->SetDoorDamage(CAR_DOOR_RF, DOOR_FRONT_RIGHT, true); + car->SetDoorDamage(CAR_DOOR_LR, DOOR_REAR_LEFT, true); + car->SetDoorDamage(CAR_DOOR_RR, DOOR_REAR_RIGHT, true); } vehicle->m_audioEntityId = DMAudio.CreateEntity(0, vehicle); DMAudio.SetEntityStatus(vehicle->m_audioEntityId, true); diff --git a/src/entities/Automobile.h b/src/entities/Automobile.h index 64e411ce..b6617f4b 100644 --- a/src/entities/Automobile.h +++ b/src/entities/Automobile.h @@ -1,26 +1,61 @@ #pragma once #include "DamageManager.h" -#include "Door.h" -#include "RwHelper.h" #include "Vehicle.h" +struct CDoor +{ + float m_fAngleWhenOpened; + float m_fAngleWhenClosed; + char field_8; + char field_9; + char field_10; + char field_11; + float m_fAngle; + float m_fPreviousAngle; + float m_fAngularVelocity; + CVector m_vecVelocity; +}; + class CAutomobile : public CVehicle { public: // 0x288 - CDamageManager m_DamageManager; - CDoor m_aDoors[6]; - RwFrame *m_apModelNodes[20]; - uint8 stuff1[160]; - float m_afWheelSuspDist[4]; - uint8 stuff2[44]; - float m_afWheelRotation[4]; - uint8 stuff3[200]; + CDamageManager Damage; + CDoor Doors[6]; + RwFrame *m_aCarNodes[NUM_CAR_NODES]; + CColPoint m_aWheelColPoints[4]; + float m_aWheelDist[4]; + float m_aWheelDist_2[4]; + float m_aWheelSkidThing[4]; + int field_49C; + bool m_aWheelSkidmarkMuddy[4]; + bool m_aWheelSkidmarkBloody[4]; + float m_aWheelRotation[4]; + float m_aWheelPosition[4]; + float m_aWheelSpeed[4]; + uint8 stuff3[12]; + uint32 m_nBusDoorTimerEnd; + uint32 m_nBusDoorTimerStart; + float m_aSuspensionRange[4]; + float m_aSuspensionLineLength[4]; + float m_fHeightAboveRoad; + float m_fImprovedHandling; + uint8 stuff6[32]; + CPhysical *m_aGroundPhysical[4]; // physicals touching wheels + CVector m_aGroundOffset[4]; // from ground object to colpoint + CEntity *m_pBlowUpEntity; + float m_weaponThingA; // TODO + float m_weaponThingB; // TODO float m_fCarGunLR; - uint8 stuff4[13]; - uint8 m_nDriveWheelsOnGround; - uint8 stuff5[22]; + float m_fCarGunUD; + float m_fWindScreenRotation; + uint8 stuff4[4]; + uint8 m_nWheelsOnGround_2; + uint8 m_nWheelsOnGround; + uint8 m_nWheelsOnGroundPrev; + uint8 stuff5[5]; + int32 m_aWheelState[4]; CAutomobile(int, uint8); CAutomobile* ctor(int, uint8); @@ -30,4 +65,4 @@ public: void dtor() { this->CAutomobile::~CAutomobile(); } }; static_assert(sizeof(CAutomobile) == 0x5A8, "CAutomobile: error"); -static_assert(offsetof(CAutomobile, m_afWheelSuspDist) == 0x46C, "CAutomobile: error"); +static_assert(offsetof(CAutomobile, m_aWheelDist) == 0x46C, "CAutomobile: error"); diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index b570efd9..14891cd9 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -1858,10 +1858,10 @@ CPhysical::ProcessCollision(void) CVehicle *veh = (CVehicle*)this; if(veh->m_vehType == VEHICLE_TYPE_CAR){ CAutomobile *car = (CAutomobile*)this; - car->m_afWheelSuspDist[0] = 1.0f; - car->m_afWheelSuspDist[1] = 1.0f; - car->m_afWheelSuspDist[2] = 1.0f; - car->m_afWheelSuspDist[3] = 1.0f; + car->m_aWheelDist[0] = 1.0f; + car->m_aWheelDist[1] = 1.0f; + car->m_aWheelDist[2] = 1.0f; + car->m_aWheelDist[3] = 1.0f; }else if(veh->m_vehType == VEHICLE_TYPE_BIKE){ assert(0 && "TODO - but unused"); } diff --git a/src/entities/Vehicle.h b/src/entities/Vehicle.h index eb5275ad..7b9bebef 100644 --- a/src/entities/Vehicle.h +++ b/src/entities/Vehicle.h @@ -14,14 +14,6 @@ enum { PERMANENT_VEHICLE = 4, }; - -enum { - GETTING_IN_OUT_FL = 1, - GETTING_IN_OUT_RL = 2, - GETTING_IN_OUT_FR = 4, - GETTING_IN_OUT_RR = 8 -}; - enum eCarLock { CARLOCK_NOT_USED, CARLOCK_UNLOCKED, @@ -33,82 +25,55 @@ enum eCarLock { CARLOCK_SKIP_SHUT_DOORS }; -// TODO: where is this used? Is Vehicle.h the right file? -enum eVehicleModel + +enum eCarNodes { - LANDSTAL, - IDAHO, - STINGER, - LINERUN, - PEREN, - SENTINEL, - PATRIOT, - FIRETRUK, - TRASH, - STRETCH, - MANANA, - INFERNUS, - BLISTA, - PONY, - MULE, - CHEETAH, - AMBULAN, - FBICAR, - MOONBEAM, - ESPERANT, - TAXI, - KURUMA, - BOBCAT, - MRWHOOP, - BFINJECT, - CORPSE, - POLICE, - ENFORCER, - SECURICA, - BANSHEE, - PREDATOR, - BUS, - RHINO, - BARRACKS, - TRAIN, - CHOPPER, - DODO, - COACH, - CABBIE, - STALLION, - RUMPO, - RCBANDIT, - BELLYUP, - MRWONGS, - MAFIA, - YARDIE, - YAKUZA, - DIABLOS, - COLUMB, - HOODS, - AIRTRAIN, - DEADDODO, - SPEEDER, - REEFER, - PANLANT, - FLATBED, - YANKEE, - ESCAPE, - BORGNINE, - TOYZ, - GHOST, - CAR151, - CAR152, - CAR153, - CAR154, - CAR155, - CAR156, - CAR157, - CAR158, - CAR159, + CAR_WHEEL_RF = 1, + CAR_WHEEL_RM, + CAR_WHEEL_RB, + CAR_WHEEL_LF, + CAR_WHEEL_LM, + CAR_WHEEL_LB, + CAR_BUMP_FRONT, + CAR_BUMP_REAR, + CAR_WING_RF, + CAR_WING_RR, + CAR_DOOR_RF, + CAR_DOOR_RR, + CAR_WING_LF, + CAR_WING_LR, + CAR_DOOR_LF, + CAR_DOOR_LR, + CAR_BONNET, + CAR_BOOT, + CAR_WINDSCREEN, + NUM_CAR_NODES, }; -enum eDoors { +enum +{ + CAR_POS_HEADLIGHTS, + CAR_POS_TAILLIGHTS, + CAR_POS_FRONTSEAT, + CAR_POS_BACKSEAT, + CAR_POS_EXHAUST = 9, +}; + +enum eDoors +{ + DOOR_BONNET = 0, + DOOR_BOOT, + DOOR_FRONT_LEFT, + DOOR_FRONT_RIGHT, + DOOR_REAR_LEFT, + DOOR_REAR_RIGHT +}; + +enum { + GETTING_IN_OUT_FL = 1, + GETTING_IN_OUT_RL = 2, + GETTING_IN_OUT_FR = 4, + GETTING_IN_OUT_RR = 8 }; class CVehicle : public CPhysical diff --git a/src/modelinfo/VehicleModelInfo.cpp b/src/modelinfo/VehicleModelInfo.cpp index 0d206db0..f112d546 100644 --- a/src/modelinfo/VehicleModelInfo.cpp +++ b/src/modelinfo/VehicleModelInfo.cpp @@ -23,34 +23,6 @@ RwTexture **CVehicleModelInfo::ms_colourTextureTable = (RwTexture**)0x711C40; RwTexture *&gpWhiteTexture = *(RwTexture**)0x64C4F8; RwFrame *&pMatFxIdentityFrame = *(RwFrame**)0x64C510; -enum { - CAR_WHEEL_RF = 1, - CAR_WHEEL_RM = 2, - CAR_WHEEL_RB = 3, - CAR_WHEEL_LF = 4, - CAR_WHEEL_LM = 5, - CAR_WHEEL_LB = 6, - CAR_BUMP_FRONT = 7, - CAR_BUMP_REAR = 8, - CAR_WING_RF = 9, - CAR_WING_RR = 10, - CAR_DOOR_RF = 11, - CAR_DOOR_RR = 12, - CAR_WING_LF = 13, - CAR_WING_LR = 14, - CAR_DOOR_LF = 15, - CAR_DOOR_LR = 16, - CAR_BONNET = 17, - CAR_BOOT = 18, - CAR_WINDSCREEN = 19, - - CAR_POS_HEADLIGHTS = 0, - CAR_POS_TAILLIGHTS = 1, - CAR_POS_FRONTSEAT = 2, - CAR_POS_BACKSEAT = 3, - CAR_POS_EXHAUST = 9, -}; - enum { VEHICLE_FLAG_COLLAPSE = 0x2, VEHICLE_FLAG_ADD_WHEEL = 0x4,