summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-08-29 07:58:54 +0200
committerSergeanur <s.anureev@yandex.ua>2021-08-29 07:58:54 +0200
commit2be8fcfa64a9925206ed2356c2934c7559873a6a (patch)
tree9937e069805afb805c13c81877714465ad34b5fd
parentfix (diff)
parentfix (diff)
downloadre3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar.gz
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar.bz2
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar.lz
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar.xz
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.tar.zst
re3-2be8fcfa64a9925206ed2356c2934c7559873a6a.zip
-rw-r--r--src/audio/AudioLogic.cpp78
-rw-r--r--src/audio/AudioManager.cpp19
-rw-r--r--src/audio/AudioManager.h20
-rw-r--r--src/control/Script4.cpp2
-rw-r--r--src/core/Radar.cpp2
-rw-r--r--src/core/config.h1
-rw-r--r--src/core/re3.cpp15
-rw-r--r--src/peds/Ped.h2
8 files changed, 79 insertions, 60 deletions
diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp
index aa69a949..33f22fb2 100644
--- a/src/audio/AudioLogic.cpp
+++ b/src/audio/AudioLogic.cpp
@@ -2031,7 +2031,11 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh
CurrentPretendGear = 1;
bHandbrakeOnLastFrame = FALSE;
}
+#ifdef FIX_BUGS
+ if (CReplay::IsPlayingBack() || FindPlayerPed()->GetPedState() == PED_EXIT_CAR) {
+#else
if (CReplay::IsPlayingBack()) {
+#endif
accelerateState = (255.0f * Clamp(params.m_pVehicle->m_fGasPedal, 0.0f, 1.0f));
brakeState = (255.0f * Clamp(params.m_pVehicle->m_fBrakePedal, 0.0f, 1.0f));
} else {
@@ -8030,49 +8034,51 @@ cPedComments::Add(tPedComment *com)
{
uint8 index;
- if (m_nCommentsInBank[m_nActiveBank] >= NUM_PED_COMMENTS_SLOTS) {
- index = m_nIndexMap[m_nActiveBank][NUM_PED_COMMENTS_SLOTS - 1];
- if (m_asPedComments[m_nActiveBank][index].m_nVolume > com->m_nVolume)
+ // copypasted priority check from cAudioManager::AddSampleToRequestedQueue
+
+ if (m_nPedCommentCount[m_nActiveQueue] >= NUM_PED_COMMENTS_SLOTS) {
+ index = m_aPedCommentOrderList[m_nActiveQueue][NUM_PED_COMMENTS_SLOTS - 1];
+ if (m_aPedCommentQueue[m_nActiveQueue][index].m_nVolume > com->m_nVolume)
return;
} else
- index = m_nCommentsInBank[m_nActiveBank]++;
+ index = m_nPedCommentCount[m_nActiveQueue]++;
- m_asPedComments[m_nActiveBank][index] = *com;
+ m_aPedCommentQueue[m_nActiveQueue][index] = *com;
+ // this bit is basically copypasted cAudioManager::AddDetailsToRequestedOrderList
uint8 i = 0;
if (index != 0) {
for (i = 0; i < index; i++) {
- if (m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][i]].m_nVolume < m_asPedComments[m_nActiveBank][index].m_nVolume)
+ if (m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][i]].m_nVolume < m_aPedCommentQueue[m_nActiveQueue][index].m_nVolume)
break;
}
if (i < index)
- memmove(&m_nIndexMap[m_nActiveBank][i + 1], &m_nIndexMap[m_nActiveBank][i], NUM_PED_COMMENTS_SLOTS - 1 - i);
+ memmove(&m_aPedCommentOrderList[m_nActiveQueue][i + 1], &m_aPedCommentOrderList[m_nActiveQueue][i], NUM_PED_COMMENTS_SLOTS - 1 - i);
}
- m_nIndexMap[m_nActiveBank][i] = index;
+ m_aPedCommentOrderList[m_nActiveQueue][i] = index;
}
void
cPedComments::Process()
{
uint32 sampleIndex;
- uint8 actualUsedBank;
- tPedComment *comment;
+ uint8 queue;
static uint8 counter = 0;
- static int32 prevSamples[10] = { NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE };
+ static uint32 prevSamples[10] = { NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE, NO_SAMPLE };
if(AudioManager.m_bIsPaused) return;
- if(m_nCommentsInBank[m_nActiveBank]) {
+ if(m_nPedCommentCount[m_nActiveQueue]) {
for(int i = 0; i < ARRAY_SIZE(prevSamples); i++) {
- if(m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex ==
+ if(m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nSampleIndex ==
prevSamples[(counter + 1 + i) % ARRAY_SIZE(prevSamples)]) {
- m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1;
+ m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nProcess = -1;
goto PedCommentAlreadyAdded;
}
}
- sampleIndex = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex;
+ sampleIndex = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nSampleIndex;
switch(SampleManager.IsPedCommentLoaded(sampleIndex)) { // yes, this was a switch
case FALSE:
#if defined(GTA_PC) && !defined(FIX_BUGS)
@@ -8081,13 +8087,13 @@ cPedComments::Process()
SampleManager.LoadPedComment(sampleIndex);
break;
case TRUE:
- AudioManager.m_sQueueSample.m_nEntityIndex = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nEntityIndex;
+ AudioManager.m_sQueueSample.m_nEntityIndex = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nEntityIndex;
AudioManager.m_sQueueSample.m_nCounter = 0;
AudioManager.m_sQueueSample.m_nSampleIndex = sampleIndex;
AudioManager.m_sQueueSample.m_nBankIndex = SFX_BANK_PED_COMMENTS;
AudioManager.m_sQueueSample.m_nPriority = 3;
- AudioManager.m_sQueueSample.m_nVolume = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nVolume;
- AudioManager.m_sQueueSample.m_fDistance = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_fDistance;
+ AudioManager.m_sQueueSample.m_nVolume = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nVolume;
+ AudioManager.m_sQueueSample.m_fDistance = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_fDistance;
AudioManager.m_sQueueSample.m_nLoopCount = 1;
#ifndef GTA_PS2
AudioManager.m_sQueueSample.m_nLoopStart = 0;
@@ -8095,7 +8101,7 @@ cPedComments::Process()
#endif
#ifdef EXTERNAL_3D_SOUND
#ifdef FIX_BUGS
- AudioManager.m_sQueueSample.m_nEmittingVolume = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nEmittingVolume;
+ AudioManager.m_sQueueSample.m_nEmittingVolume = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nEmittingVolume;
#else
AudioManager.m_sQueueSample.m_nEmittingVolume = MAX_VOLUME;
#endif // FIX_BUGS
@@ -8109,7 +8115,7 @@ cPedComments::Process()
#endif
AudioManager.m_sQueueSample.m_MaxDistance = 40.0f;
AudioManager.m_sQueueSample.m_bStatic = TRUE;
- AudioManager.m_sQueueSample.m_vecPos = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_vecPos;
+ AudioManager.m_sQueueSample.m_vecPos = m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_vecPos;
#ifdef AUDIO_REVERB
AudioManager.m_sQueueSample.m_bReverb = TRUE;
#endif // AUDIO_REVERB
@@ -8131,7 +8137,7 @@ cPedComments::Process()
if (CTimer::GetIsSlowMotionActive())
AudioManager.m_sQueueSample.m_nFrequency >>= 1;
#endif
- m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1;
+ m_aPedCommentQueue[m_nActiveQueue][m_aPedCommentOrderList[m_nActiveQueue][0]].m_nProcess = -1;
prevSamples[counter++] = sampleIndex;
if(counter == 10) counter = 0;
AudioManager.AddSampleToRequestedQueue();
@@ -8144,27 +8150,27 @@ cPedComments::Process()
break;
}
}
+
PedCommentAlreadyAdded:
- // Switch bank
- if (m_nActiveBank == 0) {
- actualUsedBank = 0;
- m_nActiveBank = 1;
+ // Switch queue
+ if (m_nActiveQueue == 0) {
+ queue = 0;
+ m_nActiveQueue = 1;
} else {
- actualUsedBank = 1;
- m_nActiveBank = 0;
+ queue = 1;
+ m_nActiveQueue = 0;
}
- comment = m_asPedComments[actualUsedBank];
- for (uint32 i = 0; i < m_nCommentsInBank[actualUsedBank]; i++) {
- if (m_asPedComments[actualUsedBank][m_nIndexMap[actualUsedBank][i]].m_nProcess > 0) {
- m_asPedComments[actualUsedBank][m_nIndexMap[actualUsedBank][i]].m_nProcess--;
- Add(&comment[m_nIndexMap[actualUsedBank][i]]);
+ for (uint8 i = 0; i < m_nPedCommentCount[queue]; i++) {
+ if (m_aPedCommentQueue[queue][m_aPedCommentOrderList[queue][i]].m_nProcess > 0) {
+ m_aPedCommentQueue[queue][m_aPedCommentOrderList[queue][i]].m_nProcess--;
+ Add(&m_aPedCommentQueue[queue][m_aPedCommentOrderList[queue][i]]);
}
}
- for (uint32 i = 0; i < NUM_PED_COMMENTS_SLOTS; i++) {
- m_nIndexMap[actualUsedBank][i] = NUM_PED_COMMENTS_SLOTS;
- }
- m_nCommentsInBank[actualUsedBank] = 0;
+ // clear queue
+ for (uint8 i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
+ m_aPedCommentOrderList[queue][i] = NUM_PED_COMMENTS_SLOTS;
+ m_nPedCommentCount[queue] = 0;
#if defined(GTA_PC) && !defined(FIX_BUGS)
if(m_bDelay)
if(CTimer::GetTimeInMilliseconds() - m_nDelayTimer > 6000) m_bDelay = FALSE;
diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp
index d2b0aa4e..914fb1b1 100644
--- a/src/audio/AudioManager.cpp
+++ b/src/audio/AudioManager.cpp
@@ -747,9 +747,8 @@ cAudioManager::AddDetailsToRequestedOrderList(uint8 sample)
m_aRequestedQueue[m_nActiveQueue][sample].m_nFinalPriority)
break;
}
- if (i < sample) {
+ if (i < sample)
memmove(&m_aRequestedOrderList[m_nActiveQueue][i + 1], &m_aRequestedOrderList[m_nActiveQueue][i], m_nActiveSamples - i - 1);
- }
}
m_aRequestedOrderList[m_nActiveQueue][i] = sample;
}
@@ -770,23 +769,30 @@ cAudioManager::AddReflectionsToRequestedQueue()
uint32 oldCounter = m_sQueueSample.m_nCounter;
float oldDist = m_sQueueSample.m_fDistance;
CVector oldPos = m_sQueueSample.m_vecPos;
+#ifndef USE_TIME_SCALE_FOR_AUDIO
if ( CTimer::GetIsSlowMotionActive() ) {
emittingVolume = m_sQueueSample.m_nVolume;
oldFreq = m_sQueueSample.m_nFrequency;
- } else {
+ } else
+#endif
emittingVolume = (9 * m_sQueueSample.m_nVolume) / 16;
- }
m_sQueueSample.m_MaxDistance /= 2.f;
uint32 halfOldFreq = oldFreq >> 1;
for (uint32 i = 0; i < ARRAY_SIZE(m_afReflectionsDistances); i++) {
+#ifndef USE_TIME_SCALE_FOR_AUDIO
if ( CTimer::GetIsSlowMotionActive() )
m_afReflectionsDistances[i] = (m_anRandomTable[i % 4] % 3) * 50.f / 8.f;
+#endif
reflectionDistance = m_afReflectionsDistances[i];
if (reflectionDistance > 0.0f && reflectionDistance < 100.f && reflectionDistance < m_sQueueSample.m_MaxDistance) {
+#ifndef USE_TIME_SCALE_FOR_AUDIO
m_sQueueSample.m_nReflectionDelay = CTimer::GetIsSlowMotionActive() ? (reflectionDistance * 600.f / 1029.f) : (reflectionDistance * 300.f / 1029.f);
+#else
+ m_sQueueSample.m_nReflectionDelay = reflectionDistance * 300.f / 1029.f;
+#endif
if (m_sQueueSample.m_nReflectionDelay > 3) {
m_sQueueSample.m_fDistance = m_afReflectionsDistances[i];
SET_EMITTING_VOLUME(emittingVolume);
@@ -795,9 +801,12 @@ cAudioManager::AddReflectionsToRequestedQueue()
if (m_sQueueSample.m_nVolume > emittingVolume / 16) {
m_sQueueSample.m_nCounter = oldCounter + (i + 1) * 256;
if (m_sQueueSample.m_nLoopCount > 0) {
+#ifndef USE_TIME_SCALE_FOR_AUDIO
if ( CTimer::GetIsSlowMotionActive() ) {
m_sQueueSample.m_nFrequency = halfOldFreq + ((halfOldFreq * i) / ARRAY_SIZE(m_afReflectionsDistances));
- } else {
+ } else
+#endif
+ {
noise = RandomDisplacement(m_sQueueSample.m_nFrequency / 32);
if (noise > 0)
m_sQueueSample.m_nFrequency -= noise;
diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h
index 73920d42..436c18af 100644
--- a/src/audio/AudioManager.h
+++ b/src/audio/AudioManager.h
@@ -99,10 +99,10 @@ VALIDATE_SIZE(tPedComment, 28);
class cPedComments
{
public:
- tPedComment m_asPedComments[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
- uint8 m_nIndexMap[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
- uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS];
- uint8 m_nActiveBank;
+ tPedComment m_aPedCommentQueue[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
+ uint8 m_aPedCommentOrderList[NUM_SOUND_QUEUES][NUM_PED_COMMENTS_SLOTS];
+ uint8 m_nPedCommentCount[NUM_SOUND_QUEUES];
+ uint8 m_nActiveQueue;
#ifdef GTA_PC
bool8 m_bDelay;
uint32 m_nDelayTimer;
@@ -111,14 +111,14 @@ public:
cPedComments()
{
for (int i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
- for (int j = 0; j < NUM_PED_COMMENTS_BANKS; j++) {
- m_asPedComments[j][i].m_nProcess = -1;
- m_nIndexMap[j][i] = NUM_PED_COMMENTS_SLOTS;
+ for (int j = 0; j < NUM_SOUND_QUEUES; j++) {
+ m_aPedCommentQueue[j][i].m_nProcess = -1;
+ m_aPedCommentOrderList[j][i] = NUM_PED_COMMENTS_SLOTS;
}
- for (int i = 0; i < NUM_PED_COMMENTS_BANKS; i++)
- m_nCommentsInBank[i] = 0;
- m_nActiveBank = 0;
+ for (int i = 0; i < NUM_SOUND_QUEUES; i++)
+ m_nPedCommentCount[i] = 0;
+ m_nActiveQueue = 0;
}
void Add(tPedComment *com);
void Process();
diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp
index 486ff39a..b6bc9b4c 100644
--- a/src/control/Script4.cpp
+++ b/src/control/Script4.cpp
@@ -806,7 +806,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR;
break;
case CAR_DOOR_LR:
- flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_RF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR;
+ flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LR : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR;
break;
case CAR_DOOR_RF:
flags = CAR_DOOR_FLAG_RF;
diff --git a/src/core/Radar.cpp b/src/core/Radar.cpp
index 6fb28184..b93b7d02 100644
--- a/src/core/Radar.cpp
+++ b/src/core/Radar.cpp
@@ -1573,7 +1573,7 @@ CRadar::ToggleTargetMarker(float x, float y)
ms_RadarTrace[nextBlip].m_bDim = 0;
ms_RadarTrace[nextBlip].m_bInUse = 1;
ms_RadarTrace[nextBlip].m_Radius = 1.0f;
- CVector pos(x, y, CWorld::FindGroundZForCoord(x,y));
+ CVector pos(x, y, 0.0f);
TargetMarkerPos = pos;
ms_RadarTrace[nextBlip].m_vec2DPos = pos;
ms_RadarTrace[nextBlip].m_vecPos = pos;
diff --git a/src/core/config.h b/src/core/config.h
index 9049fec0..27148483 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -129,7 +129,6 @@ enum Config {
NUMINVISIBLEENTITIES = 150,
NUM_AUDIOENTITY_EVENTS = 4,
- NUM_PED_COMMENTS_BANKS = 2,
NUM_PED_COMMENTS_SLOTS = 20,
NUM_SOUND_QUEUES = 2,
diff --git a/src/core/re3.cpp b/src/core/re3.cpp
index ca1915b0..4c2b9388 100644
--- a/src/core/re3.cpp
+++ b/src/core/re3.cpp
@@ -47,6 +47,7 @@
#include "CarCtrl.h"
#include "Population.h"
#include "IniFile.h"
+#include "Zones.h"
#include "crossplatform.h"
@@ -771,12 +772,14 @@ FixCar(void)
static void
TeleportToWaypoint(void)
{
- if (FindPlayerVehicle()) {
- if (CRadar::TargetMarkerId != -1)
- FindPlayerVehicle()->Teleport(CRadar::TargetMarkerPos + CVector(0.0f, 0.0f, FindPlayerVehicle()->GetColModel()->boundingSphere.center.z));
- } else
- if(CRadar::TargetMarkerId != -1)
- FindPlayerPed()->Teleport(CRadar::TargetMarkerPos + CVector(0.0f, 0.0f, FEET_OFFSET));
+ if (CRadar::TargetMarkerId == -1)
+ return;
+ CEntity* pEntityToTeleport = FindPlayerEntity();
+ CVector vNewPos = CRadar::TargetMarkerPos;
+ CStreaming::LoadScene(vNewPos);
+ CStreaming::LoadSceneCollision(vNewPos);
+ vNewPos.z = CWorld::FindGroundZForCoord(vNewPos.x, vNewPos.y) + pEntityToTeleport->GetDistanceFromCentreOfMassToBaseOfModel();
+ pEntityToTeleport->Teleport(vNewPos);
}
#endif
diff --git a/src/peds/Ped.h b/src/peds/Ped.h
index 7984b0f8..585caf81 100644
--- a/src/peds/Ped.h
+++ b/src/peds/Ped.h
@@ -821,8 +821,10 @@ public:
void RestorePreviousObjective(void);
void SetIdle(void);
#ifdef _MSC_VER
+#if _MSC_VER >= 1920 && _MSC_VER < 1929
__declspec(noinline) // workaround for a compiler bug, hooray MS :P
#endif
+#endif
void SetObjective(eObjective, void*);
void SetObjective(eObjective);
void SetObjective(eObjective, int16, int16);