summaryrefslogtreecommitdiffstats
path: root/src/audio/PoliceRadio.cpp
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-02-26 09:56:26 +0100
committerSergeanur <s.anureev@yandex.ua>2021-02-26 09:57:11 +0100
commitb01d6be3f4fe4f0555fd98393b13297b267f860a (patch)
tree9bc64e3502291262d03bd66d3a1c5443aa051a1b /src/audio/PoliceRadio.cpp
parentFix stack corruption in HandleGraphEvent (diff)
downloadre3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar.gz
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar.bz2
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar.lz
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar.xz
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.tar.zst
re3-b01d6be3f4fe4f0555fd98393b13297b267f860a.zip
Diffstat (limited to 'src/audio/PoliceRadio.cpp')
-rw-r--r--src/audio/PoliceRadio.cpp747
1 files changed, 0 insertions, 747 deletions
diff --git a/src/audio/PoliceRadio.cpp b/src/audio/PoliceRadio.cpp
deleted file mode 100644
index 227d27d0..00000000
--- a/src/audio/PoliceRadio.cpp
+++ /dev/null
@@ -1,747 +0,0 @@
-#include "common.h"
-
-#include "DMAudio.h"
-
-#include "AudioManager.h"
-
-#include "AudioSamples.h"
-#include "MusicManager.h"
-#include "PlayerPed.h"
-#include "PoliceRadio.h"
-#include "Replay.h"
-#include "Vehicle.h"
-#include "World.h"
-#include "Zones.h"
-#include "sampman.h"
-#include "Wanted.h"
-
-const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples);
-const int policeChannel = channels + 1;
-
-struct tPoliceRadioZone {
- char m_aName[8];
- uint32 m_nSampleIndex;
- int32 field_12;
-};
-
-tPoliceRadioZone ZoneSfx[NUMAUDIOZONES];
-
-int32 g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
-int8 g_nMissionAudioPlayingStatus = 2;
-uint8 gSpecialSuspectLastSeenReport;
-uint32 gMinTimeToNextReport[NUM_CRIME_TYPES];
-
-void
-cAudioManager::InitialisePoliceRadioZones()
-{
- for (int32 i = 0; i < NUMAUDIOZONES; i++)
- memset(ZoneSfx[i].m_aName, 0, 8);
-
-#define SETZONESFX(i, name, sample) \
- strcpy(ZoneSfx[i].m_aName, name); \
- ZoneSfx[i].m_nSampleIndex = sample;
-
- SETZONESFX(0, "VICE_C", SFX_POLICE_RADIO_VICE_CITY);
- SETZONESFX(1, "IND_ZON", SFX_POLICE_RADIO_VICE_CITY_BEACH);
- SETZONESFX(2, "COM_ZON", SFX_POLICE_RADIO_VICE_CITY_MAINLAND);
- SETZONESFX(3, "BEACH1", SFX_POLICE_RADIO_OCEAN_BEACH);
- SETZONESFX(4, "BEACH2", SFX_POLICE_RADIO_WASHINGTON_BEACH);
- SETZONESFX(5, "BEACH3", SFX_POLICE_RADIO_VICE_POINT);
- SETZONESFX(6, "GOLFC", SFX_POLICE_RADIO_LEAF_LINKS);
- SETZONESFX(7, "STARI", SFX_POLICE_RADIO_STRAFISH_ISLAND);
- SETZONESFX(8, "DOCKS", SFX_POLICE_RADIO_VICE_PORT);
- SETZONESFX(9, "HAVANA", SFX_POLICE_RADIO_LITTLE_HAVANA);
- SETZONESFX(10, "HAITI", SFX_POLICE_RADIO_LITTLE_HAITI);
- SETZONESFX(11, "PORNI", SFX_POLICE_RADIO_PRAWN_ISLAND);
- SETZONESFX(12, "DTOWN", SFX_POLICE_RADIO_DOWNTOWN);
- SETZONESFX(13, "A_PORT", SFX_POLICE_RADIO_ESCOBAR_INTERNATIONAL);
-
-#undef SETZONESFX
-}
-
-void
-cAudioManager::InitialisePoliceRadio()
-{
- m_sPoliceRadioQueue.policeChannelTimer = 0;
- m_sPoliceRadioQueue.policeChannelTimerSeconds = 0;
- m_sPoliceRadioQueue.policeChannelCounterSeconds = 0;
- for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++)
- m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
-
- SampleManager.SetChannelReverbFlag(policeChannel, false);
- gSpecialSuspectLastSeenReport = false;
- for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
- gMinTimeToNextReport[i] = m_FrameCounter;
-}
-
-void
-cAudioManager::ResetPoliceRadio()
-{
- if (!m_bIsInitialised) return;
- if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel);
- InitialisePoliceRadio();
-}
-
-void
-cAudioManager::SetMissionScriptPoliceAudio(int32 sfx) const
-{
- if (!m_bIsInitialised) return;
- if (g_nMissionAudioPlayingStatus != 1) {
- g_nMissionAudioPlayingStatus = 0;
- g_nMissionAudioSfx = sfx;
- }
-}
-
-int8
-cAudioManager::GetMissionScriptPoliceAudioPlayingStatus() const
-{
- return g_nMissionAudioPlayingStatus;
-}
-
-void
-cAudioManager::DoPoliceRadioCrackle()
-{
- m_sQueueSample.m_nEntityIndex = m_nPoliceChannelEntity;
- m_sQueueSample.m_nCounter = 0;
- m_sQueueSample.m_nSampleIndex = SFX_POLICE_RADIO_CRACKLE;
- m_sQueueSample.m_nBankIndex = SFX_BANK_0;
- m_sQueueSample.m_bIs2D = true;
- m_sQueueSample.m_nReleasingVolumeModificator = 10;
- m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_POLICE_RADIO_CRACKLE);
- m_sQueueSample.m_nVolume = m_anRandomTable[2] % 20 + 15;
- m_sQueueSample.m_nLoopCount = 0;
- m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume;
- m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_POLICE_RADIO_CRACKLE);
- m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_POLICE_RADIO_CRACKLE);
- m_sQueueSample.m_bReleasingSoundFlag = false;
- m_sQueueSample.m_bReverbFlag = false;
- m_sQueueSample.m_nOffset = 63;
- m_sQueueSample.m_nReleasingVolumeDivider = 3;
- m_sQueueSample.m_bRequireReflection = false;
- AddSampleToRequestedQueue();
-}
-
-void
-cAudioManager::ServicePoliceRadio()
-{
- int32 wantedLevel = 0; // uninitialized variable
- static uint32 nLastSeen = 300;
-
- if(!m_bIsInitialised) return;
-
- if(m_nUserPause == 0) {
- bool crimeReport = SetupCrimeReport();
-#ifdef FIX_BUGS // Crash at 0x5fe6ef
- if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
- return;
-#endif
- CPlayerPed *playerPed = FindPlayerPed();
- if (playerPed) {
- wantedLevel = playerPed->m_pWanted->GetWantedLevel();
- if (!crimeReport) {
- if (wantedLevel != 0) {
- if (nLastSeen != 0)
- --nLastSeen;
- else {
- nLastSeen = m_anRandomTable[1] % 1000 + 2000;
- SetupSuspectLastSeenReport();
- }
- }
- }
- }
- }
- ServicePoliceRadioChannel(wantedLevel);
-}
-
-void
-cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
-{
- bool processed = false;
- uint32 sample;
- int32 freq;
-
- static int cWait = 0;
- static bool bChannelOpen = false;
- static uint8 bMissionAudioPhysicalPlayingStatus = 0;
- static int32 PoliceChannelFreq = 22050;
-
- if (!m_bIsInitialised) return;
-
- if (m_nUserPause != 0) {
- if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel);
- if (g_nMissionAudioSfx != NO_SAMPLE && bMissionAudioPhysicalPlayingStatus == 1 &&
- SampleManager.IsStreamPlaying(1)) {
- SampleManager.PauseStream(1, 1);
- }
- } else {
- if (m_nPreviousUserPause && g_nMissionAudioSfx != NO_SAMPLE &&
- bMissionAudioPhysicalPlayingStatus == 1) {
- SampleManager.PauseStream(0, 1);
- }
- if (m_sPoliceRadioQueue.policeChannelTimer == 0) bChannelOpen = false;
- if (cWait) {
- --cWait;
- return;
- }
- if (g_nMissionAudioSfx != NO_SAMPLE && !bChannelOpen) {
- if (g_nMissionAudioPlayingStatus) {
- if (g_nMissionAudioPlayingStatus == 1 && !bMissionAudioPhysicalPlayingStatus &&
- SampleManager.IsStreamPlaying(1)) {
- bMissionAudioPhysicalPlayingStatus = 1;
- }
- if (bMissionAudioPhysicalPlayingStatus == 1) {
- if (SampleManager.IsStreamPlaying(1)) {
- DoPoliceRadioCrackle();
- } else {
- bMissionAudioPhysicalPlayingStatus = 2;
- g_nMissionAudioPlayingStatus = 2;
- g_nMissionAudioSfx = NO_SAMPLE;
- cWait = 30;
- }
- return;
- }
- } else if (!SampleManager.GetChannelUsedFlag(policeChannel)) {
- SampleManager.PreloadStreamedFile(g_nMissionAudioSfx, 1);
- SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 1);
- SampleManager.StartPreloadedStreamedFile(1);
- g_nMissionAudioPlayingStatus = 1;
- bMissionAudioPhysicalPlayingStatus = 0;
- return;
- }
- }
- if (bChannelOpen) DoPoliceRadioCrackle();
- if ((g_nMissionAudioSfx == NO_SAMPLE || g_nMissionAudioPlayingStatus != 1) &&
- !SampleManager.GetChannelUsedFlag(policeChannel) && m_sPoliceRadioQueue.policeChannelTimer) {
- if (m_sPoliceRadioQueue.policeChannelTimer) {
- sample = m_sPoliceRadioQueue.crimesSamples[m_sPoliceRadioQueue.policeChannelCounterSeconds];
- m_sPoliceRadioQueue.policeChannelTimer--;
- m_sPoliceRadioQueue.policeChannelCounterSeconds = (m_sPoliceRadioQueue.policeChannelCounterSeconds + 1) % 60;
- } else {
- sample = NO_SAMPLE;
- }
- if (wantedLevel == 0) {
- if (gSpecialSuspectLastSeenReport) {
- gSpecialSuspectLastSeenReport = 0;
- } else if (sample == SFX_POLICE_RADIO_MESSAGE_NOISE_1) {
- bChannelOpen = false;
- processed = true;
- }
- }
- if (sample == NO_SAMPLE) {
- if (!processed) cWait = 30;
- } else {
- SampleManager.InitialiseChannel(policeChannel, sample, 0);
- switch (sample) {
- case SFX_POLICE_RADIO_MESSAGE_NOISE_1:
- freq = m_anRandomTable[4] % 2000 + 10025;
- bChannelOpen = bChannelOpen == false;
- break;
- default: freq = SampleManager.GetSampleBaseFrequency(sample); break;
- }
- PoliceChannelFreq = freq;
- SampleManager.SetChannelFrequency(policeChannel, freq);
- SampleManager.SetChannelVolume(policeChannel, 100);
- SampleManager.SetChannelPan(policeChannel, 63);
- SampleManager.SetChannelLoopCount(policeChannel, 1);
- SampleManager.SetChannelLoopPoints(policeChannel, 0, -1);
- SampleManager.StartChannel(policeChannel);
- }
- if (processed) ResetPoliceRadio();
- }
- }
-}
-
-bool
-cAudioManager::SetupCrimeReport()
-{
- int16 audioZoneId;
- CZone *zone;
- float rangeX;
- float rangeY;
- float halfX;
- float halfY;
- float quarterX;
- float quarterY;
- int i;
- int32 sampleIndex;
- bool processed = false;
-
- if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return false;
-
- if (60 - m_sPoliceRadioQueue.policeChannelTimer <= 9) {
- AgeCrimes();
- return true;
- }
-
- for (i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
- if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE)
- break;
- }
-
- if (i == ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) return false;
- audioZoneId = CTheZones::FindAudioZone(&m_sPoliceRadioQueue.crimes[i].position);
- if (audioZoneId >= 0 && audioZoneId < NUMAUDIOZONES) {
- zone = CTheZones::GetAudioZone(audioZoneId);
- for (int j = 0; j < NUMAUDIOZONES; j++) {
- if (strcmp(zone->name, ZoneSfx[j].m_aName) == 0) {
- sampleIndex = ZoneSfx[j].m_nSampleIndex;
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_WEVE_GOT);
- m_sPoliceRadioQueue.Add(SFX_A_10);
- switch (m_sPoliceRadioQueue.crimes[i].type) {
- case CRIME_PED_BURNED:
- case CRIME_HIT_PED_NASTYWEAPON:
- m_sPoliceRadioQueue.crimes[i].type = CRIME_HIT_PED;
- break;
- case CRIME_COP_BURNED:
- case CRIME_HIT_COP_NASTYWEAPON:
- m_sPoliceRadioQueue.crimes[i].type = CRIME_HIT_COP;
- break;
- case CRIME_VEHICLE_BURNED: m_sPoliceRadioQueue.crimes[i].type = CRIME_STEAL_CAR; break;
- case CRIME_DESTROYED_CESSNA: m_sPoliceRadioQueue.crimes[i].type = CRIME_SHOOT_HELI; break;
- case CRIME_EXPLOSION: m_sPoliceRadioQueue.crimes[i].type = CRIME_STEAL_CAR; break; // huh?
- default: break;
- }
-#ifdef FIX_BUGS
- m_sPoliceRadioQueue.Add(m_sPoliceRadioQueue.crimes[i].type + SFX_CRIME_1 - 1);
-#else
- m_sPoliceRadioQueue.Add(m_sPoliceRadioQueue.crimes[i].type + SFX_CRIME_1);
-#endif
- m_sPoliceRadioQueue.Add(SFX_IN);
- rangeX = zone->maxx - zone->minx;
- rangeY = zone->maxy - zone->miny;
- halfX = 0.5f * rangeX + zone->minx;
- halfY = 0.5f * rangeY + zone->miny;
- quarterX = 0.25f * rangeX;
- quarterY = 0.25f * rangeY;
-
- if (m_sPoliceRadioQueue.crimes[i].position.y > halfY + quarterY) {
- m_sPoliceRadioQueue.Add(SFX_NORTH);
- processed = true;
- } else if (m_sPoliceRadioQueue.crimes[i].position.y < halfY - quarterY) {
- m_sPoliceRadioQueue.Add(SFX_SOUTH);
- processed = true;
- }
-
- if (m_sPoliceRadioQueue.crimes[i].position.x > halfX + quarterX)
- m_sPoliceRadioQueue.Add(SFX_EAST);
- else if (m_sPoliceRadioQueue.crimes[i].position.x < halfX - quarterX)
- m_sPoliceRadioQueue.Add(SFX_WEST);
- else if (!processed)
- m_sPoliceRadioQueue.Add(SFX_CENTRAL);
-
- m_sPoliceRadioQueue.Add(sampleIndex);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(NO_SAMPLE);
- break;
- }
- }
- }
- m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
- AgeCrimes();
- return true;
-}
-
-void
-cAudioManager::SetupSuspectLastSeenReport()
-{
- CVehicle *veh;
- uint8 color1;
- int32 main_color;
- int32 sample;
-
- int32 color_pre_modifier;
- int32 color_post_modifier;
-
- const int32 gCarColourTable[][3] = {
- {NO_SAMPLE, SFX_POLICE_RADIO_BLACK, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_WHITE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {SFX_POLICE_RADIO_BRIGHT, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_BLUE, SFX_POLICE_RADIO_GREY},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_RED, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_ORANGE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_YELLOW, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_GREEN, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_BLUE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_PURPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {NO_SAMPLE, SFX_POLICE_RADIO_SILVER, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_LIGHT, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE},
- {SFX_POLICE_RADIO_DARK, NO_SAMPLE, NO_SAMPLE}
- };
-
- if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) {
- veh = FindVehicleOfPlayer();
- if (veh != nil) {
- if (60 - m_sPoliceRadioQueue.policeChannelTimer > 9) {
- color1 = veh->m_currentColour1;
- if (color1 >= ARRAY_SIZE(gCarColourTable)) {
- debug("\n *** UNKNOWN CAR COLOUR %d *** ", color1);
- } else {
- main_color = gCarColourTable[color1][1];
- color_pre_modifier = gCarColourTable[color1][0];
- color_post_modifier = gCarColourTable[color1][2];
- switch (veh->GetModelIndex()) {
- case MI_LANDSTAL:
- case MI_PATRIOT:
- case MI_RANCHER:
- case MI_FBIRANCH:
- case MI_SANDKING:
- sample = SFX_POLICE_RADIO_OFFROAD;
- break;
- case MI_IDAHO:
- case MI_MANANA:
- case MI_ESPERANT:
- case MI_CUBAN:
- case MI_STALLION:
- case MI_SABRE:
- case MI_SABRETUR:
- case MI_VIRGO:
- case MI_BLISTAC:
- sample = SFX_POLICE_RADIO_2_DOOR;
- break;
- case MI_STINGER:
- case MI_INFERNUS:
- case MI_CHEETAH:
- case MI_BANSHEE:
- case MI_PHEONIX:
- case MI_COMET:
- case MI_DELUXO:
- case MI_HOTRING:
- sample = SFX_POLICE_RADIO_SPORTS_CAR;
- break;
- case MI_LINERUN:
- sample = SFX_POLICE_RADIO_RIG;
- break;
- case MI_PEREN:
- case MI_REGINA:
- sample = SFX_POLICE_RADIO_STATION_WAGON;
- break;
- case MI_SENTINEL:
- case MI_FBICAR:
- case MI_WASHING:
- case MI_SENTXS:
- case MI_ADMIRAL:
- case MI_GLENDALE:
- case MI_OCEANIC:
- case MI_HERMES:
- case MI_GREENWOO:
- sample = SFX_POLICE_RADIO_SEDAN;
- break;
- case MI_RIO:
- sample = SFX_POLICE_RADIO_CRUISER;
- break;
- case MI_FIRETRUCK:
- sample = SFX_POLICE_RADIO_FIRE_TRUCK;
- break;
- case MI_TRASH:
- sample = SFX_POLICE_RADIO_GARBAGE_TRUCK;
- break;
- case MI_STRETCH:
- case MI_LOVEFIST:
- sample = SFX_POLICE_RADIO_STRETCH;
- break;
- case MI_VOODOO:
- sample = SFX_POLICE_RADIO_LOWRIDER;
- break;
- case MI_PONY:
- case MI_MOONBEAM:
- case MI_SECURICA:
- case MI_RUMPO:
- case MI_GANGBUR:
- case MI_YANKEE:
- case MI_TOPFUN:
- case MI_BURRITO:
- case MI_SPAND:
- sample = SFX_POLICE_RADIO_VAN;
- break;
- case MI_MULE:
- case MI_BARRACKS:
- case MI_PACKER:
- case MI_FLATBED:
- sample = SFX_POLICE_RADIO_TRUCK;
- break;
- case MI_AMBULAN:
- sample = SFX_POLICE_RADIO_AMBULANCE;
- break;
- case MI_TAXI:
- case MI_CABBIE:
- case MI_ZEBRA:
- case MI_KAUFMAN:
- sample = SFX_POLICE_RADIO_TAXI;
- break;
- case MI_BOBCAT:
- case MI_WALTON:
- sample = SFX_POLICE_RADIO_PICKUP;
- break;
- case MI_MRWHOOP:
- sample = SFX_POLICE_RADIO_ICE_CREAM_VAN;
- break;
- case MI_BFINJECT:
- sample = SFX_POLICE_RADIO_BUGGY;
- break;
- case MI_HUNTER:
- case MI_CHOPPER:
- case MI_SEASPAR:
- case MI_SPARROW:
- case MI_MAVERICK:
- case MI_VCNMAV:
- case MI_POLMAV:
- sample = SFX_POLICE_RADIO_HELICOPTER;
- break;
- case MI_POLICE:
- sample = SFX_POLICE_RADIO_POLICE_CAR;
- break;
- case MI_ENFORCER:
- sample = SFX_POLICE_RADIO_SWAT_VAN;
- break;
- case MI_PREDATOR:
- case MI_SQUALO:
- case MI_SPEEDER:
- sample = SFX_POLICE_RADIO_SPEEDBOAT;
- break;
- case MI_BUS:
- sample = SFX_POLICE_RADIO_BUS;
- break;
- case MI_RHINO:
- sample = SFX_POLICE_RADIO_TANK;
- break;
- case MI_ANGEL:
- case MI_PCJ600:
- case MI_FREEWAY:
- case MI_SANCHEZ:
- sample = SFX_POLICE_RADIO_MOTOBIKE;
- break;
- case MI_COACH:
- sample = SFX_POLICE_RADIO_COACH;
- break;
- case MI_ROMERO:
- sample = SFX_POLICE_RADIO_HEARSE;
- break;
- case MI_PIZZABOY:
- case MI_FAGGIO:
- sample = SFX_POLICE_RADIO_MOPED;
- break;
- case MI_DEADDODO:
- case MI_SKIMMER:
- sample = SFX_POLICE_RADIO_PLANE;
- break;
- case MI_REEFER:
- case MI_TROPIC:
- case MI_COASTG:
- case MI_MARQUIS:
- case MI_JETMAX:
- sample = SFX_POLICE_RADIO_BOAT;
- break;
- case MI_CADDY:
- sample = SFX_POLICE_RADIO_GOLF_CART;
- break;
- case MI_DINGHY:
- sample = SFX_POLICE_RADIO_DINGHY;
- break;
- default:
- //debug("\n *** UNKNOWN CAR MODEL INDEX %d *** ", veh->GetModelIndex());
- return;
- }
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
- if (m_anRandomTable[3] % 2)
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_LAST_SEEN);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_A);
- if (color_pre_modifier != NO_SAMPLE)
- m_sPoliceRadioQueue.Add(color_pre_modifier);
- if (main_color != NO_SAMPLE)
- m_sPoliceRadioQueue.Add(main_color);
- if (color_post_modifier != NO_SAMPLE)
- m_sPoliceRadioQueue.Add(color_post_modifier);
- m_sPoliceRadioQueue.Add(sample);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(NO_SAMPLE);
- }
- }
- } else if (60 - m_sPoliceRadioQueue.policeChannelTimer > 4) {
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_ON_FOOT);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(NO_SAMPLE);
- }
- }
-}
-
-void
-cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
-{
- int32 lastCrime = ARRAY_SIZE(m_sPoliceRadioQueue.crimes);
- if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0 &&
- (type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
- for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
- if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE) {
- if (m_sPoliceRadioQueue.crimes[i].type == type) {
- m_sPoliceRadioQueue.crimes[i].position = pos;
- m_sPoliceRadioQueue.crimes[i].timer = 0;
- return;
- }
- } else
- lastCrime = i;
- }
-
- if (lastCrime < ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) {
- m_sPoliceRadioQueue.crimes[lastCrime].type = type;
- m_sPoliceRadioQueue.crimes[lastCrime].position = pos;
- m_sPoliceRadioQueue.crimes[lastCrime].timer = 0;
- gMinTimeToNextReport[type] = m_FrameCounter + 500;
- }
- }
-}
-
-void
-cAudioManager::PlaySuspectLastSeen(float x, float y, float z)
-{
- int16 audioZone;
- CZone *zone;
- float rangeX;
- float rangeY;
- float halfX;
- float halfY;
- float quarterX;
- float quarterY;
- int32 sample;
- bool processed = false;
- CVector vec = CVector(x, y, z);
-
- if (!m_bIsInitialised) return;
-
- if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && 60 - m_sPoliceRadioQueue.policeChannelTimer > 9) {
- audioZone = CTheZones::FindAudioZone(&vec);
- if (audioZone >= 0 && audioZone < NUMAUDIOZONES) {
- zone = CTheZones::GetAudioZone(audioZone);
- for (int i = 0; i < NUMAUDIOZONES; i++) {
- if (strcmp(zone->name, ZoneSfx[i].m_aName) == 0) {
- sample = ZoneSfx[i].m_nSampleIndex;
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_SUSPECT);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_LAST_SEEN);
- m_sPoliceRadioQueue.Add(SFX_IN);
- rangeX = zone->maxx - zone->minx;
- rangeY = zone->maxy - zone->miny;
- halfX = 0.5f * rangeX + zone->minx;
- halfY = 0.5f * rangeY + zone->miny;
- quarterX = 0.25f * rangeX;
- quarterY = 0.25f * rangeY;
-
- if (vec.y > halfY + quarterY) {
- m_sPoliceRadioQueue.Add(SFX_NORTH);
- processed = true;
- } else if (vec.y < halfY - quarterY) {
- m_sPoliceRadioQueue.Add(SFX_SOUTH);
- processed = true;
- }
-
- if (vec.x > halfX + quarterX)
- m_sPoliceRadioQueue.Add(SFX_EAST);
- else if (vec.x < halfX - quarterX)
- m_sPoliceRadioQueue.Add(SFX_WEST);
- else if (!processed)
- m_sPoliceRadioQueue.Add(SFX_CENTRAL);
- m_sPoliceRadioQueue.Add(sample);
- m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1);
- m_sPoliceRadioQueue.Add(NO_SAMPLE);
- gSpecialSuspectLastSeenReport = true;
- break;
- }
- }
- }
- }
-}
-
-void
-cAudioManager::AgeCrimes()
-{
- for (uint8 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
- if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE) {
- if (++m_sPoliceRadioQueue.crimes[i].timer > 1200) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
- }
- }
-}