mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-29 03:13:44 +00:00
Make ped comments update position and volume + fix cPedComments::Process
This commit is contained in:
parent
09f693b9b9
commit
ef0ba763b9
3 changed files with 82 additions and 54 deletions
|
@ -7829,9 +7829,8 @@ cPedComments::Process()
|
|||
uint32 sampleIndex;
|
||||
uint8 actualUsedBank;
|
||||
tPedComment *comment;
|
||||
bool8 prevUsed = FALSE;
|
||||
static uint8 counter = 0;
|
||||
static int32 prevSamples[10];
|
||||
static int32 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_nUserPause) return;
|
||||
|
||||
|
@ -7840,72 +7839,82 @@ cPedComments::Process()
|
|||
if(m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex ==
|
||||
prevSamples[(counter + 1 + i) % ARRAY_SIZE(prevSamples)]) {
|
||||
m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1;
|
||||
prevUsed = TRUE;
|
||||
break;
|
||||
goto PedCommentAlreadyAdded;
|
||||
}
|
||||
}
|
||||
if(!prevUsed) {
|
||||
sampleIndex = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex;
|
||||
if(!SampleManager.IsPedCommentLoaded(sampleIndex)) {
|
||||
sampleIndex = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex;
|
||||
switch(SampleManager.IsPedCommentLoaded(sampleIndex)) { // yes, this was a switch
|
||||
case FALSE:
|
||||
#if defined(GTA_PC) && !defined(FIX_BUGS)
|
||||
if(!m_bDelay)
|
||||
if(!m_bDelay)
|
||||
#endif
|
||||
SampleManager.LoadPedComment(sampleIndex);
|
||||
} else {
|
||||
AudioManager.m_sQueueSample.m_nEntityIndex = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][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_nLoopCount = 1;
|
||||
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_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_nLoopCount = 1;
|
||||
#ifndef GTA_PS2
|
||||
AudioManager.m_sQueueSample.m_nLoopStart = 0;
|
||||
AudioManager.m_sQueueSample.m_nLoopEnd = -1;
|
||||
AudioManager.m_sQueueSample.m_nLoopStart = 0;
|
||||
AudioManager.m_sQueueSample.m_nLoopEnd = -1;
|
||||
#endif
|
||||
#ifdef EXTERNAL_3D_SOUND
|
||||
#ifdef FIX_BUGS
|
||||
AudioManager.m_sQueueSample.m_nEmittingVolume = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nEmittingVolume;
|
||||
#else
|
||||
AudioManager.m_sQueueSample.m_nEmittingVolume = MAX_VOLUME;
|
||||
#endif // FIX_BUGS
|
||||
#ifdef FIX_BUGS
|
||||
AudioManager.m_sQueueSample.m_nEmittingVolume = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nEmittingVolume;
|
||||
#else
|
||||
AudioManager.m_sQueueSample.m_nEmittingVolume = MAX_VOLUME;
|
||||
#endif // FIX_BUGS
|
||||
#endif // EXTERNAL_3D_SOUND
|
||||
AudioManager.m_sQueueSample.m_fSpeedMultiplier = 3.0f;
|
||||
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;
|
||||
#ifdef ATTACH_PED_COMMENTS_TO_ENTITIES
|
||||
// let's disable doppler because if sounds funny as the sound moves
|
||||
// originally position of ped comment doesn't change so this has no effect anyway
|
||||
AudioManager.m_sQueueSample.m_fSpeedMultiplier = 0.0f;
|
||||
#else
|
||||
AudioManager.m_sQueueSample.m_fSpeedMultiplier = 3.0f;
|
||||
#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;
|
||||
#ifdef AUDIO_REVERB
|
||||
AudioManager.m_sQueueSample.m_bReverb = TRUE;
|
||||
AudioManager.m_sQueueSample.m_bReverb = TRUE;
|
||||
#endif // AUDIO_REVERB
|
||||
#ifdef AUDIO_REFLECTIONS
|
||||
AudioManager.m_sQueueSample.m_bReflections = TRUE;
|
||||
AudioManager.m_sQueueSample.m_bReflections = TRUE;
|
||||
#endif // AUDIO_REFLECTIONS
|
||||
AudioManager.m_sQueueSample.m_bIs2D = FALSE;
|
||||
AudioManager.m_sQueueSample.m_bIs2D = FALSE;
|
||||
#ifdef FIX_BUGS
|
||||
if((sampleIndex >= SFX_POLICE_BOAT_1 && sampleIndex <= SFX_POLICE_BOAT_23) ||
|
||||
(sampleIndex >= SFX_POLICE_HELI_1 && sampleIndex <= SFX_POLICE_HELI_20))
|
||||
AudioManager.m_sQueueSample.m_MaxDistance = 400.0f;
|
||||
else if (sampleIndex >= SFX_PLAYER_ANGRY_BUSTED_1 && sampleIndex <= SFX_PLAYER_ON_FIRE_16) { // check if player sfx
|
||||
AudioManager.m_sQueueSample.m_bIs2D = TRUE;
|
||||
AudioManager.m_sQueueSample.m_nPan = 63;
|
||||
}
|
||||
#endif // FIX_BUGS
|
||||
AudioManager.m_sQueueSample.m_nFrequency =
|
||||
SampleManager.GetSampleBaseFrequency(AudioManager.m_sQueueSample.m_nSampleIndex) + AudioManager.RandomDisplacement(750);
|
||||
if(CTimer::GetIsSlowMotionActive()) AudioManager.m_sQueueSample.m_nFrequency /= 2;
|
||||
m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1;
|
||||
prevSamples[counter++] = sampleIndex;
|
||||
if(counter == 10) counter = 0;
|
||||
AudioManager.AddSampleToRequestedQueue();
|
||||
#if defined(GTA_PC) && !defined(FIX_BUGS)
|
||||
m_nDelayTimer = CTimer::GetTimeInMilliseconds();
|
||||
m_bDelay = TRUE;
|
||||
#endif
|
||||
if((sampleIndex >= SFX_POLICE_BOAT_1 && sampleIndex <= SFX_POLICE_BOAT_23) ||
|
||||
(sampleIndex >= SFX_POLICE_HELI_1 && sampleIndex <= SFX_POLICE_HELI_20))
|
||||
AudioManager.m_sQueueSample.m_MaxDistance = 400.0f;
|
||||
#ifndef ATTACH_PED_COMMENTS_TO_ENTITIES
|
||||
else if (sampleIndex >= SFX_PLAYER_ANGRY_BUSTED_1 && sampleIndex <= SFX_PLAYER_ON_FIRE_16) { // check if player sfx
|
||||
AudioManager.m_sQueueSample.m_bIs2D = TRUE;
|
||||
AudioManager.m_sQueueSample.m_nPan = 63;
|
||||
}
|
||||
#endif // ATTACH_PED_COMMENTS_TO_ENTITIES
|
||||
#endif // FIX_BUGS
|
||||
AudioManager.m_sQueueSample.m_nFrequency =
|
||||
SampleManager.GetSampleBaseFrequency(AudioManager.m_sQueueSample.m_nSampleIndex) + AudioManager.RandomDisplacement(750);
|
||||
if(CTimer::GetIsSlowMotionActive()) AudioManager.m_sQueueSample.m_nFrequency /= 2;
|
||||
m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1;
|
||||
prevSamples[counter++] = sampleIndex;
|
||||
if(counter == 10) counter = 0;
|
||||
AudioManager.AddSampleToRequestedQueue();
|
||||
#if defined(GTA_PC) && !defined(FIX_BUGS)
|
||||
m_nDelayTimer = CTimer::GetTimeInMilliseconds();
|
||||
m_bDelay = TRUE;
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PedCommentAlreadyAdded:
|
||||
// Switch bank
|
||||
if (m_nActiveBank == 0) {
|
||||
actualUsedBank = 0;
|
||||
|
|
|
@ -1013,7 +1013,7 @@ cAudioManager::ProcessActiveQueues()
|
|||
for (int32 j = 0; j < m_nActiveSamples; j++) {
|
||||
if (sample.m_nEntityIndex == m_asActiveSamples[j].m_nEntityIndex && sample.m_nCounter == m_asActiveSamples[j].m_nCounter &&
|
||||
sample.m_nSampleIndex == m_asActiveSamples[j].m_nSampleIndex) {
|
||||
if (sample.m_nLoopCount) {
|
||||
if (sample.m_nLoopCount > 0) {
|
||||
if (m_FrameCounter & 1)
|
||||
flag = !!(j & 1);
|
||||
else
|
||||
|
@ -1047,6 +1047,24 @@ cAudioManager::ProcessActiveQueues()
|
|||
SampleManager.SetChannelVolume(j, emittingVol);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef ATTACH_PED_COMMENTS_TO_ENTITIES
|
||||
if (sample.m_nCounter <= 255 && sample.m_nSampleIndex >= SAMPLEBANK_PED_START && sample.m_nSampleIndex <= SAMPLEBANK_PED_END) {
|
||||
CEntity* entity = (CEntity*)GetEntityPointer(sample.m_nEntityIndex);
|
||||
if (entity && m_asAudioEntities[sample.m_nEntityIndex].m_nType == AUDIOTYPE_PHYSICAL) {
|
||||
sample.m_vecPos = entity->GetPosition();
|
||||
sample.m_fDistance = Sqrt(GetDistanceSquared(sample.m_vecPos));
|
||||
uint8 vol;
|
||||
if (CWorld::GetIsLineOfSightClear(TheCamera.GetPosition(), sample.m_vecPos, true, false, false, false, false, false))
|
||||
vol = MAX_VOLUME;
|
||||
else
|
||||
vol = 31;
|
||||
#ifdef EXTERNAL_3D_SOUND
|
||||
sample.m_nEmittingVolume = vol;
|
||||
#endif
|
||||
sample.m_nVolume = ComputeVolume(vol, sample.m_MaxDistance, sample.m_fDistance);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
position2 = sample.m_fDistance;
|
||||
position1 = m_asActiveSamples[j].m_fDistance;
|
||||
m_asActiveSamples[j].m_fDistance = sample.m_fDistance;
|
||||
|
|
|
@ -448,8 +448,9 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||
#define PS2_AUDIO_PATHS // changes audio paths for cutscenes and radio to PS2 paths (needs vbdec on MSS builds)
|
||||
//#define AUDIO_OAL_USE_SNDFILE // use libsndfile to decode WAVs instead of our internal decoder
|
||||
#define AUDIO_OAL_USE_MPG123 // use mpg123 to support mp3 files
|
||||
#define MULTITHREADED_AUDIO // for streams. requires C++11 or later
|
||||
#define PAUSE_RADIO_IN_FRONTEND // pause radio when game is paused
|
||||
#define ATTACH_PED_COMMENTS_TO_ENTITIES // ped comments coordinates would update following ped entity
|
||||
#define MULTITHREADED_AUDIO // for streams. requires C++11 or later
|
||||
|
||||
#ifdef AUDIO_OPUS
|
||||
#define AUDIO_OAL_USE_OPUS // enable support of opus files
|
||||
|
|
Loading…
Reference in a new issue