#include "common.h" #include "Camera.h" #include "DMAudio.h" #include "General.h" #include "Ped.h" // --MIAMI: Done // Corresponds to ped sounds (from SOUND_PED_DEATH to SOUND_PED_TAXI_CALL) PedAudioData CommentWaitTime[56] = { { 500, 800, 500, 2 }, { 500, 800, 500, 2 }, { 500, 800, 500, 2 }, { 500, 800, 500, 2 }, { 100, 2, 100, 2 }, { 500, 500, 2000, 1000 }, { 2000, 50, 2050, 1000 }, { 5000, 2000, 7000, 3000 }, { 5000, 2000, 7000, 3000 }, { 300, 200, 500, 200 }, { 3000, 1000, 4000, 1000 }, { 6000, 6000, 6000, 6000 }, { 4000, 1000, 5000, 1000 }, { 3000, 1000, 4000, 1000 }, { 1000, 1000, 2000, 2000 }, { 1000, 500, 2000, 1500 }, { 1700, 1000, 3000, 1000 }, { 800, 200, 1000, 500 }, { 800, 200, 1000, 500 }, { 800, 400, 2000, 1000 }, { 800, 400, 2000, 1000 }, { 2000, 2000, 4000, 4000 }, { 2000, 2000, 4000, 1000 }, { 4000, 1000, 5000, 1000 }, { 800, 400, 1200, 500 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 5000, 1000, 6000, 2000 }, { 4000, 2000, 7000, 2000 }, { 1000, 300, 2000, 1000 }, { 1500, 1000, 2500, 1000 }, { 200, 200, 200, 200 }, { 2000, 1000, 4000, 1000 }, { 2000, 1000, 4000, 1000 }, { 1000, 500, 3000, 1000 }, { 1000, 500, 1000, 1000 }, { 3000, 2000, 5000, 1000 }, { 3000, 2000, 5000, 1000 }, { 3000, 2000, 3000, 2000 }, { 2000, 1000, 3000, 1000 }, { 2500, 1000, 5000, 5000 }, { 2000, 1000, 3000, 2000 }, { 4000, 1000, 5000, 1000 }, { 1000, 500, 2000, 4000 }, { 1000, 500, 2000, 5000 }, { 2000, 500, 2500, 500 }, { 1000, 500, 3000, 2000 }, { 1600, 1000, 2000, 2000 }, { 2000, 1000, 4000, 2000 }, { 1500, 1000, 2500, 1000 }, { 1000, 1000, 5000, 5000 }, { 0, 0, 0, 0 } }; // --MIAMI: Done bool CPed::ServiceTalkingWhenDead(void) { return m_queuedSound == SOUND_PED_DEATH; } // --MIAMI: Done void CPed::ServiceTalking(void) { if (!bBodyPartJustCameOff || m_bodyPartBleeding != PED_HEAD) { if (!CGame::germanGame && m_pFire) m_queuedSound = SOUND_PED_BURNING; if (m_queuedSound != SOUND_NO_SOUND) { if (m_queuedSound == SOUND_PED_DEATH) m_soundStart = CTimer::GetTimeInMilliseconds() - 1; if (CTimer::GetTimeInMilliseconds() > m_soundStart) { DMAudio.PlayOneShot(m_audioEntityId, m_queuedSound, 1.0f); m_lastSoundStart = CTimer::GetTimeInMilliseconds(); m_soundStart = CommentWaitTime[m_queuedSound - SOUND_PED_DEATH].m_nFixedDelayTime + CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(0, CommentWaitTime[m_queuedSound - SOUND_PED_DEATH].m_nOverrideFixedDelayTime); if (m_queuedSound == SOUND_PED_PLAYER_BEFORESEX && IsPlayer()) m_soundStart += 2000; m_lastQueuedSound = m_queuedSound; m_queuedSound = SOUND_NO_SOUND; } } } } // --MIAMI: Done void CPed::Say(uint16 audio) { uint16 audioToPlay = audio; if (3.0f + TheCamera.GetPosition().z < GetPosition().z) return; if (TheCamera.m_CameraAverageSpeed > 1.65f) { if (audio != SOUND_PED_DAMAGE && audio != SOUND_PED_HIT && audio != SOUND_PED_LAND) return; } else if (TheCamera.m_CameraAverageSpeed > 1.25f) { if (audio != SOUND_PED_DEATH && audio != SOUND_PED_DAMAGE && audio != SOUND_PED_HIT && audio != SOUND_PED_LAND && audio != SOUND_PED_TAXI_WAIT && audio != SOUND_PED_EVADE) return; } else if (TheCamera.m_CameraAverageSpeed > 0.9f) { switch (audio) { case SOUND_PED_DEATH: case SOUND_PED_DAMAGE: case SOUND_PED_HIT: case SOUND_PED_LAND: case SOUND_PED_BURNING: case SOUND_PED_FLEE_SPRINT: case SOUND_PED_TAXI_WAIT: case SOUND_PED_EVADE: case SOUND_PED_CAR_COLLISION: case SOUND_PED_BOAT_COLLISION: case SOUND_PED_HORN_ACTIVE: break; default: return; } } if (audioToPlay < m_queuedSound) { if (audioToPlay != m_lastQueuedSound || audioToPlay == SOUND_PED_DEATH // See VC Ped Speech patch #ifdef FIX_BUGS || CommentWaitTime[audioToPlay - SOUND_PED_DEATH].m_nOverrideMaxRandomDelayTime + (uint32)CGeneral::GetRandomNumberInRange(0, CommentWaitTime[audioToPlay - SOUND_PED_DEATH].m_nMaxRandomDelayTime) #else || CommentWaitTime[m_queuedSound - SOUND_PED_DEATH].m_nOverrideMaxRandomDelayTime + (uint32)CGeneral::GetRandomNumberInRange(0, CommentWaitTime[m_queuedSound - SOUND_PED_DEATH].m_nMaxRandomDelayTime) #endif + m_lastSoundStart <= CTimer::GetTimeInMilliseconds()) { m_queuedSound = audioToPlay; } } } // --MIAMI: Done void CPed::Say(uint16 audio, int32 time) { if (m_delayedSoundID == -1) { m_delayedSoundID = audio; m_delayedSoundTimer = CTimer::GetTimeInMilliseconds() + time; } }