PolRadio.cpp 29,8 КБ
Newer Older
aap's avatar
aap включено в состав коммита
1
#include "common.h"
Sergeanur's avatar
Sergeanur включено в состав коммита
2

aap's avatar
aap включено в состав коммита
3
#include "DMAudio.h"
Filip Gawin's avatar
Filip Gawin включено в состав коммита
4

aap's avatar
aap включено в состав коммита
5
#include "AudioManager.h"
Filip Gawin's avatar
Filip Gawin включено в состав коммита
6

aap's avatar
aap включено в состав коммита
7
8
9
#include "AudioSamples.h"
#include "MusicManager.h"
#include "PlayerPed.h"
Sergeanur's avatar
Sergeanur включено в состав коммита
10
#include "PolRadio.h"
Filip Gawin's avatar
Filip Gawin включено в состав коммита
11
#include "Replay.h"
aap's avatar
aap включено в состав коммита
12
13
#include "Vehicle.h"
#include "World.h"
Filip Gawin's avatar
Filip Gawin включено в состав коммита
14
15
#include "Zones.h"
#include "sampman.h"
erorcun's avatar
erorcun включено в состав коммита
16
#include "Wanted.h"
aap's avatar
aap включено в состав коммита
17
18
19
20
21
22
23

struct tPoliceRadioZone {
	char m_aName[8];
	uint32 m_nSampleIndex;
	int32 field_12;
};

Fire-Head's avatar
Fire-Head включено в состав коммита
24
25
26
tPoliceRadioZone ZoneSfx[NUMAUDIOZONES];
char SubZo2Label[8];
char SubZo3Label[8];
aap's avatar
aap включено в состав коммита
27

Sergeanur's avatar
Sergeanur включено в состав коммита
28
uint32 g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
Sergeanur's avatar
Sergeanur включено в состав коммита
29
int8 g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
Sergeanur's avatar
Sergeanur включено в состав коммита
30
bool8 gSpecialSuspectLastSeenReport;
Fire-Head's avatar
Fire-Head включено в состав коммита
31
uint32 gMinTimeToNextReport[NUM_CRIME_TYPES];
aap's avatar
aap включено в состав коммита
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

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, "HOSPI_2", SFX_POLICE_RADIO_ROCKFORD);
	SETZONESFX(1, "CONSTRU", SFX_POLICE_RADIO_FORT_STAUNTON);
	SETZONESFX(2, "STADIUM", SFX_POLICE_RADIO_ASPATRIA);
	SETZONESFX(3, "YAKUSA", SFX_POLICE_RADIO_TORRINGTON);
	SETZONESFX(4, "SHOPING", SFX_POLICE_RADIO_BEDFORD_POINT);
	SETZONESFX(5, "COM_EAS", SFX_POLICE_RADIO_NEWPORT);
	SETZONESFX(6, "PARK", SFX_POLICE_RADIO_BELLEVILLE_PARK);
	SETZONESFX(7, "UNIVERS", SFX_POLICE_RADIO_LIBERTY_CAMPUS);
	SETZONESFX(8, "BIG_DAM", SFX_POLICE_RADIO_COCHRANE_DAM);
	SETZONESFX(9, "SUB_IND", SFX_POLICE_RADIO_PIKE_CREEK);
	SETZONESFX(10, "SWANKS", SFX_POLICE_RADIO_CEDAR_GROVE);
	SETZONESFX(11, "PROJECT", SFX_POLICE_RADIO_WICHITA_GARDENS);
	SETZONESFX(12, "AIRPORT", SFX_POLICE_RADIO_FRANCIS_INTERNATIONAL_AIRPORT);
	SETZONESFX(13, "PORT_W", SFX_POLICE_RADIO_CALLAHAN_POINT);
	SETZONESFX(14, "PORT_S", SFX_POLICE_RADIO_ATLANTIC_QUAYS);
	SETZONESFX(15, "PORT_E", SFX_POLICE_RADIO_PORTLAND_HARBOUR);
	SETZONESFX(16, "PORT_I", SFX_POLICE_RADIO_TRENTON);
	SETZONESFX(17, "CHINA", SFX_POLICE_RADIO_CHINATOWN);
	SETZONESFX(18, "REDLIGH", SFX_POLICE_RADIO_RED_LIGHT_DISTRICT);
	SETZONESFX(19, "TOWERS", SFX_POLICE_RADIO_HEPBURN_HEIGHTS);
	SETZONESFX(20, "LITTLEI", SFX_POLICE_RADIO_SAINT_MARKS);
	SETZONESFX(21, "HARWOOD", SFX_POLICE_RADIO_HARWOOD);
	SETZONESFX(22, "EASTBAY", SFX_POLICE_RADIO_PORTLAND_BEACH);
	SETZONESFX(23, "S_VIEW", SFX_POLICE_RADIO_PORTLAND_STRAIGHTS);
	SETZONESFX(24, "CITYZON", SFX_POLICE_RADIO_LIBERTY_CITY);
	SETZONESFX(25, "IND_ZON", SFX_POLICE_RADIO_PORTLAND);
	SETZONESFX(26, "COM_ZON", SFX_POLICE_RADIO_STAUNTON_ISLAND);
	SETZONESFX(27, "SUB_ZON", SFX_POLICE_RADIO_SHORESIDE_VALE);
	SETZONESFX(28, "SUB_ZO2", SFX_POLICE_RADIO_SHORESIDE_VALE);
	SETZONESFX(29, "SUB_ZO3", SFX_POLICE_RADIO_SHORESIDE_VALE);
	SETZONESFX(30, "A", SFX_POLICE_RADIO_ROCKFORD);
	SETZONESFX(31, "A", SFX_POLICE_RADIO_ROCKFORD);
	SETZONESFX(32, "A", SFX_POLICE_RADIO_ROCKFORD);
	SETZONESFX(33, "A", SFX_POLICE_RADIO_ROCKFORD);
	SETZONESFX(34, "A", SFX_POLICE_RADIO_ROCKFORD);

#undef SETZONESFX

	strcpy(SubZo2Label, "SUB_ZO2");
	strcpy(SubZo3Label, "SUB_ZO3");
}

void
cAudioManager::InitialisePoliceRadio()
{
Sergeanur's avatar
Sergeanur включено в состав коммита
88
89
90
	m_sPoliceRadioQueue.Reset();
	for (int32 i = 0; i < ARRAY_SIZE(m_aCrimes); i++)
		m_aCrimes[i].type = CRIME_NONE;
aap's avatar
aap включено в состав коммита
91

Sergeanur's avatar
Sergeanur включено в состав коммита
92
	SampleManager.SetChannelReverbFlag(CHANNEL_POLICE_RADIO, FALSE);
Sergeanur's avatar
Sergeanur включено в состав коммита
93
	gSpecialSuspectLastSeenReport = FALSE;
aap's avatar
aap включено в состав коммита
94
95
96
97
98
99
100
101
	for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
		gMinTimeToNextReport[i] = m_FrameCounter;
}

void
cAudioManager::ResetPoliceRadio()
{
	if (!m_bIsInitialised) return;
Sergeanur's avatar
Sergeanur включено в состав коммита
102
	if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO);
aap's avatar
aap включено в состав коммита
103
104
105
106
	InitialisePoliceRadio();
}

void
Sergeanur's avatar
Sergeanur включено в состав коммита
107
cAudioManager::SetMissionScriptPoliceAudio(uint32 sfx)
aap's avatar
aap включено в состав коммита
108
109
{
	if (!m_bIsInitialised) return;
Sergeanur's avatar
Sergeanur включено в состав коммита
110
111
	if (g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) {
		g_nMissionAudioPlayingStatus = PLAY_STATUS_STOPPED;
aap's avatar
aap включено в состав коммита
112
113
114
115
116
		g_nMissionAudioSfx = sfx;
	}
}

int8
Sergeanur's avatar
Sergeanur включено в состав коммита
117
cAudioManager::GetMissionScriptPoliceAudioPlayingStatus()
aap's avatar
aap включено в состав коммита
118
119
120
121
122
123
124
125
{
	return g_nMissionAudioPlayingStatus;
}

void
cAudioManager::DoPoliceRadioCrackle()
{
	m_sQueueSample.m_nEntityIndex = m_nPoliceChannelEntity;
Filip Gawin's avatar
Filip Gawin включено в состав коммита
126
	m_sQueueSample.m_nCounter = 0;
aap's avatar
aap включено в состав коммита
127
	m_sQueueSample.m_nSampleIndex = SFX_POLICE_RADIO_CRACKLE;
Sergeanur's avatar
Sergeanur включено в состав коммита
128
	m_sQueueSample.m_nBankIndex = SFX_BANK_0;
Sergeanur's avatar
Sergeanur включено в состав коммита
129
	m_sQueueSample.m_bIs2D = TRUE;
Sergeanur's avatar
Sergeanur включено в состав коммита
130
	m_sQueueSample.m_nPriority = 10;
aap's avatar
aap включено в состав коммита
131
	m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_POLICE_RADIO_CRACKLE);
Sergeanur's avatar
Sergeanur включено в состав коммита
132
	m_sQueueSample.m_nVolume = m_anRandomTable[2] % 20 + 15;
aap's avatar
aap включено в состав коммита
133
	m_sQueueSample.m_nLoopCount = 0;
Sergeanur's avatar
Sergeanur включено в состав коммита
134
	SET_EMITTING_VOLUME(m_sQueueSample.m_nVolume);
Sergeanur's avatar
Sergeanur включено в состав коммита
135
	SET_LOOP_OFFSETS(SFX_POLICE_RADIO_CRACKLE)
Sergeanur's avatar
Sergeanur включено в состав коммита
136
137
138
139
	m_sQueueSample.m_bStatic = FALSE;
	m_sQueueSample.m_bReverb = FALSE;
	m_sQueueSample.m_nPan = 63;
	m_sQueueSample.m_nFramesToPlay = 3;
Sergeanur's avatar
Sergeanur включено в состав коммита
140
	SET_SOUND_REFLECTION(FALSE);
aap's avatar
aap включено в состав коммита
141
142
143
144
145
146
	AddSampleToRequestedQueue();
}

void
cAudioManager::ServicePoliceRadio()
{
Filip Gawin's avatar
Filip Gawin включено в состав коммита
147
	int32 wantedLevel = 0; // uninitialized variable
aap's avatar
aap включено в состав коммита
148
149
	static uint32 nLastSeen = 300;

Filip Gawin's avatar
Filip Gawin включено в состав коммита
150
	if(!m_bIsInitialised) return;
aap's avatar
aap включено в состав коммита
151

Sergeanur's avatar
Sergeanur включено в состав коммита
152
	if(!m_bIsPaused) {
Sergeanur's avatar
Sergeanur включено в состав коммита
153
		bool8 crimeReport = SetupCrimeReport();
Filip Gawin's avatar
Filip Gawin включено в состав коммита
154
#ifdef FIX_BUGS // Crash at 0x5fe6ef
Filip Gawin's avatar
Filip Gawin включено в состав коммита
155
156
		if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
			return;
Filip Gawin's avatar
Filip Gawin включено в состав коммита
157
#endif
withmorten's avatar
withmorten включено в состав коммита
158
		wantedLevel = FindPlayerPed()->m_pWanted->GetWantedLevel();
Sergeanur's avatar
Sergeanur включено в состав коммита
159
160
161
		if (!crimeReport) {
			if (wantedLevel != 0) {
				if (nLastSeen != 0) {
Sergeanur's avatar
Sergeanur включено в состав коммита
162
163
164
#ifdef FIX_BUGS
					nLastSeen -= CTimer::GetLogicalFramesPassed();
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
165
					nLastSeen--;
Sergeanur's avatar
Sergeanur включено в состав коммита
166
#endif
aap's avatar
aap включено в состав коммита
167
168
169
170
171
172
173
174
175
176
177
				} else {
					nLastSeen = m_anRandomTable[1] % 1000 + 2000;
					SetupSuspectLastSeenReport();
				}
			}
		}
	}
	ServicePoliceRadioChannel(wantedLevel);
}

void
Sergeanur's avatar
Sergeanur включено в состав коммита
178
cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
aap's avatar
aap включено в состав коммита
179
{
Sergeanur's avatar
Sergeanur включено в состав коммита
180
	bool8 processed = FALSE;
aap's avatar
aap включено в состав коммита
181
	uint32 sample;
Sergeanur's avatar
Sergeanur включено в состав коммита
182
	uint32 freq;
aap's avatar
aap включено в состав коммита
183
184

	static int cWait = 0;
Sergeanur's avatar
Sergeanur включено в состав коммита
185
	static bool8 bChannelOpen = FALSE;
Sergeanur's avatar
Sergeanur включено в состав коммита
186
	static uint8 bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_STOPPED;
Sergeanur's avatar
Sergeanur включено в состав коммита
187
	static uint32 PoliceChannelFreq = 5500;
aap's avatar
aap включено в состав коммита
188
189
190

	if (!m_bIsInitialised) return;

Sergeanur's avatar
Sergeanur включено в состав коммита
191
	if (m_bIsPaused) {
Sergeanur's avatar
Sergeanur включено в состав коммита
192
193
194
195
#ifdef GTA_PS2
		if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO))
			SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, 0);
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
196
		if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO);
Sergeanur's avatar
Sergeanur включено в состав коммита
197
		if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING &&
Sergeanur's avatar
Sergeanur включено в состав коммита
198
			SampleManager.IsStreamPlaying(1))
Sergeanur's avatar
Sergeanur включено в состав коммита
199
			SampleManager.PauseStream(TRUE, 1);
Sergeanur's avatar
Sergeanur включено в состав коммита
200
#endif
aap's avatar
aap включено в состав коммита
201
	} else {
Sergeanur's avatar
Sergeanur включено в состав коммита
202
203
204
205
#ifdef GTA_PS2
		if (m_bWasPaused)
			SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, PoliceChannelFreq);
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
206
		if (m_bWasPaused && g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES &&
Sergeanur's avatar
Sergeanur включено в состав коммита
207
			bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING)
Sergeanur's avatar
Sergeanur включено в состав коммита
208
			SampleManager.PauseStream(FALSE, 1);
Sergeanur's avatar
Sergeanur включено в состав коммита
209
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
210
		if (m_sPoliceRadioQueue.m_nSamplesInQueue == 0) bChannelOpen = FALSE;
aap's avatar
aap включено в состав коммита
211
		if (cWait) {
Sergeanur's avatar
Sergeanur включено в состав коммита
212
213
214
#ifdef FIX_BUGS
			cWait -= CTimer::GetLogicalFramesPassed();
#else
aap's avatar
aap включено в состав коммита
215
			--cWait;
Sergeanur's avatar
Sergeanur включено в состав коммита
216
#endif
aap's avatar
aap включено в состав коммита
217
218
219
			return;
		}
		if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && !bChannelOpen) {
Sergeanur's avatar
Sergeanur включено в состав коммита
220
221
			if (g_nMissionAudioPlayingStatus != PLAY_STATUS_STOPPED) {
				if (g_nMissionAudioPlayingStatus == PLAY_STATUS_PLAYING && bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_STOPPED &&
Sergeanur's avatar
Sergeanur включено в состав коммита
222
223
224
#ifdef GTA_PS2
					SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
#else
aap's avatar
aap включено в состав коммита
225
					SampleManager.IsStreamPlaying(1)) {
Sergeanur's avatar
Sergeanur включено в состав коммита
226
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
227
					bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_PLAYING;
aap's avatar
aap включено в состав коммита
228
				}
Sergeanur's avatar
Sergeanur включено в состав коммита
229
				if (bMissionAudioPhysicalPlayingStatus == PLAY_STATUS_PLAYING) {
Sergeanur's avatar
Sergeanur включено в состав коммита
230
231
232
#ifdef GTA_PS2
					if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
#else
aap's avatar
aap включено в состав коммита
233
					if (SampleManager.IsStreamPlaying(1)) {
Sergeanur's avatar
Sergeanur включено в состав коммита
234
#endif
aap's avatar
aap включено в состав коммита
235
236
						DoPoliceRadioCrackle();
					} else {
Sergeanur's avatar
Sergeanur включено в состав коммита
237
238
						bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_FINISHED;
						g_nMissionAudioPlayingStatus = PLAY_STATUS_FINISHED;
aap's avatar
aap включено в состав коммита
239
240
241
242
243
						g_nMissionAudioSfx = TOTAL_AUDIO_SAMPLES;
						cWait = 30;
					}
					return;
				}
Sergeanur's avatar
Sergeanur включено в состав коммита
244
			} else if (!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) {
Sergeanur's avatar
Sergeanur включено в состав коммита
245
246
247
248
249
250
251
252
#ifdef GTA_PS2
				SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, g_nMissionAudioSfx, SFX_BANK_PED_COMMENTS);
				PoliceChannelFreq = SampleManager.GetSampleBaseFrequency(g_nMissionAudioSfx);
				SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, PoliceChannelFreq);
				SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, MAX_VOLUME);
				SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63);
				SampleManager.StartChannel(CHANNEL_POLICE_RADIO);
#else
aap's avatar
aap включено в состав коммита
253
				SampleManager.PreloadStreamedFile(g_nMissionAudioSfx, 1);
Sergeanur's avatar
Sergeanur включено в состав коммита
254
				SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, TRUE, 1);
aap's avatar
aap включено в состав коммита
255
				SampleManager.StartPreloadedStreamedFile(1);
Sergeanur's avatar
Sergeanur включено в состав коммита
256
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
257
258
				g_nMissionAudioPlayingStatus = PLAY_STATUS_PLAYING;
				bMissionAudioPhysicalPlayingStatus = PLAY_STATUS_STOPPED;
aap's avatar
aap включено в состав коммита
259
260
261
262
				return;
			}
		}
		if (bChannelOpen) DoPoliceRadioCrackle();
Sergeanur's avatar
Sergeanur включено в состав коммита
263
		if ((g_nMissionAudioSfx == TOTAL_AUDIO_SAMPLES || g_nMissionAudioPlayingStatus != PLAY_STATUS_PLAYING) &&
Sergeanur's avatar
Sergeanur включено в состав коммита
264
265
			!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO) && m_sPoliceRadioQueue.m_nSamplesInQueue != 0) {
			sample = m_sPoliceRadioQueue.Remove();
Sergeanur's avatar
Sergeanur включено в состав коммита
266
			if (wantedLevel == 0) {
aap's avatar
aap включено в состав коммита
267
				if (gSpecialSuspectLastSeenReport) {
Sergeanur's avatar
Sergeanur включено в состав коммита
268
					gSpecialSuspectLastSeenReport = FALSE;
aap's avatar
aap включено в состав коммита
269
				} else if (((sample >= SFX_POLICE_RADIO_MESSAGE_NOISE_1) && (sample <= SFX_POLICE_RADIO_MESSAGE_NOISE_3)) || sample == TOTAL_AUDIO_SAMPLES) {
Sergeanur's avatar
Sergeanur включено в состав коммита
270
271
					bChannelOpen = FALSE;
					processed = TRUE;
aap's avatar
aap включено в состав коммита
272
273
274
275
276
				}
			}
			if (sample == TOTAL_AUDIO_SAMPLES) {
				if (!processed) cWait = 30;
			} else {
Sergeanur's avatar
Sergeanur включено в состав коммита
277
				SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, sample, SFX_BANK_0);
aap's avatar
aap включено в состав коммита
278
279
280
281
282
				switch (sample) {
				case SFX_POLICE_RADIO_MESSAGE_NOISE_1:
				case SFX_POLICE_RADIO_MESSAGE_NOISE_2:
				case SFX_POLICE_RADIO_MESSAGE_NOISE_3:
					freq = m_anRandomTable[4] % 2000 + 10025;
Sergeanur's avatar
Sergeanur включено в состав коммита
283
					bChannelOpen = bChannelOpen == FALSE;
aap's avatar
aap включено в состав коммита
284
285
286
287
					break;
				default: freq = SampleManager.GetSampleBaseFrequency(sample); break;
				}
				PoliceChannelFreq = freq;
Sergeanur's avatar
Sergeanur включено в состав коммита
288
289
290
#ifdef USE_TIME_SCALE_FOR_AUDIO
				SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, freq * CTimer::GetTimeScale());
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
291
				SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, freq);
Sergeanur's avatar
Sergeanur включено в состав коммита
292
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
293
294
295
				SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, 100);
				SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63);
				SampleManager.SetChannelLoopCount(CHANNEL_POLICE_RADIO, 1);
Sergeanur's avatar
Sergeanur включено в состав коммита
296
#ifndef GTA_PS2
Sergeanur's avatar
Sergeanur включено в состав коммита
297
				SampleManager.SetChannelLoopPoints(CHANNEL_POLICE_RADIO, 0, -1);
Sergeanur's avatar
Sergeanur включено в состав коммита
298
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
299
				SampleManager.StartChannel(CHANNEL_POLICE_RADIO);
aap's avatar
aap включено в состав коммита
300
301
302
303
304
305
			}
			if (processed) ResetPoliceRadio();
		}
	}
}

Sergeanur's avatar
Sergeanur включено в состав коммита
306
bool8
aap's avatar
aap включено в состав коммита
307
308
309
310
311
312
313
314
315
316
317
cAudioManager::SetupCrimeReport()
{
	int16 audioZoneId;
	CZone *zone;
	float rangeX;
	float rangeY;
	float halfX;
	float halfY;
	float quarterX;
	float quarterY;
	int i;
Sergeanur's avatar
Sergeanur включено в состав коммита
318
	uint32 sampleIndex;
Sergeanur's avatar
Sergeanur включено в состав коммита
319
	bool8 processed = FALSE;
aap's avatar
aap включено в состав коммита
320

Sergeanur's avatar
Sergeanur включено в состав коммита
321
	if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return FALSE;
aap's avatar
aap включено в состав коммита
322

Sergeanur's avatar
Sergeanur включено в состав коммита
323
	if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue <= 9) {
aap's avatar
aap включено в состав коммита
324
		AgeCrimes();
Sergeanur's avatar
Sergeanur включено в состав коммита
325
		return TRUE;
aap's avatar
aap включено в состав коммита
326
327
	}

Sergeanur's avatar
Sergeanur включено в состав коммита
328
329
	for (i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
		if (m_aCrimes[i].type != CRIME_NONE)
aap's avatar
aap включено в состав коммита
330
331
332
			break;
	}

Sergeanur's avatar
Sergeanur включено в состав коммита
333
334
	if (i == ARRAY_SIZE(m_aCrimes)) return FALSE;
	audioZoneId = CTheZones::FindAudioZone(&m_aCrimes[i].position);
aap's avatar
aap включено в состав коммита
335
	if (audioZoneId >= 0 && audioZoneId < NUMAUDIOZONES) {
aap's avatar
aap включено в состав коммита
336
		zone = CTheZones::GetAudioZone(audioZoneId);
aap's avatar
aap включено в состав коммита
337
338
339
340
341
342
		for (int j = 0; j < NUMAUDIOZONES; j++) {
			if (strcmp(zone->name, ZoneSfx[j].m_aName) == 0) {
				sampleIndex = ZoneSfx[j].m_nSampleIndex;
				m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
				m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_WEVE_GOT);
				m_sPoliceRadioQueue.Add(m_anRandomTable[1] % 2 + SFX_A_10_1);
Sergeanur's avatar
Sergeanur включено в состав коммита
343
344
345
346
347
				switch (m_aCrimes[i].type) {
				case CRIME_PED_BURNED: m_aCrimes[i].type = CRIME_HIT_PED; break;
				case CRIME_COP_BURNED: m_aCrimes[i].type = CRIME_HIT_COP; break;
				case CRIME_VEHICLE_BURNED: m_aCrimes[i].type = CRIME_STEAL_CAR; break;
				case CRIME_DESTROYED_CESSNA: m_aCrimes[i].type = CRIME_SHOOT_HELI; break;
aap's avatar
aap включено в состав коммита
348
349
				default: break;
				}
Sergeanur's avatar
Sergeanur включено в состав коммита
350
				m_sPoliceRadioQueue.Add(m_aCrimes[i].type + SFX_CRIME_1 - 1);
aap's avatar
aap включено в состав коммита
351
352
353
354
355
356
357
358
359
360
361
362
363
				m_sPoliceRadioQueue.Add(SFX_IN);
				if (sampleIndex == SFX_POLICE_RADIO_SHORESIDE_VALE &&
					(strcmp(zone->name, SubZo2Label) == 0 || strcmp(zone->name, SubZo3Label) == 0)) {
					m_sPoliceRadioQueue.Add(SFX_NORTH);
					m_sPoliceRadioQueue.Add(SFX_EAST);
				} else {
					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;

Sergeanur's avatar
Sergeanur включено в состав коммита
364
					if (m_aCrimes[i].position.y > halfY + quarterY) {
aap's avatar
aap включено в состав коммита
365
						m_sPoliceRadioQueue.Add(SFX_NORTH);
Sergeanur's avatar
Sergeanur включено в состав коммита
366
						processed = TRUE;
Sergeanur's avatar
Sergeanur включено в состав коммита
367
					} else if (m_aCrimes[i].position.y < halfY - quarterY) {
aap's avatar
aap включено в состав коммита
368
						m_sPoliceRadioQueue.Add(SFX_SOUTH);
Sergeanur's avatar
Sergeanur включено в состав коммита
369
						processed = TRUE;
aap's avatar
aap включено в состав коммита
370
371
					}

Sergeanur's avatar
Sergeanur включено в состав коммита
372
					if (m_aCrimes[i].position.x > halfX + quarterX)
aap's avatar
aap включено в состав коммита
373
						m_sPoliceRadioQueue.Add(SFX_EAST);
Sergeanur's avatar
Sergeanur включено в состав коммита
374
					else if (m_aCrimes[i].position.x < halfX - quarterX)
aap's avatar
aap включено в состав коммита
375
376
377
378
379
380
381
382
383
384
385
386
						m_sPoliceRadioQueue.Add(SFX_WEST);
					else if (!processed)
						m_sPoliceRadioQueue.Add(SFX_CENTRAL);

					m_sPoliceRadioQueue.Add(sampleIndex);
					m_sPoliceRadioQueue.Add(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
					m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
				}
				break;
			}
		}
	}
Sergeanur's avatar
Sergeanur включено в состав коммита
387
	m_aCrimes[i].type = CRIME_NONE;
aap's avatar
aap включено в состав коммита
388
	AgeCrimes();
Sergeanur's avatar
Sergeanur включено в состав коммита
389
	return TRUE;
aap's avatar
aap включено в состав коммита
390
391
}

Sergeanur's avatar
Sergeanur включено в состав коммита
392
393
394
395
396
397
398
399
400
401
Const uint32 gCarColourTable[][3] = {
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLACK, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_WHITE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_BRIGHT, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_BLUE, SFX_POLICE_RADIO_GREY},
aap's avatar
aap включено в состав коммита
402
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
403
404
405
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
406
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
407
408
409
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
410
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
411
412
413
414
415
416
417
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
418
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
419
420
421
422
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_RED, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
423
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
424
425
426
427
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
428
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
429
430
431
432
433
434
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
435
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
436
437
438
439
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_ORANGE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
440
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
441
442
443
444
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
445
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
446
447
448
449
450
451
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
452
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
453
454
455
456
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_YELLOW, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
457
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
458
459
460
461
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
462
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
463
464
465
466
467
468
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
469
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
470
471
472
473
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_GREEN, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
474
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
475
476
477
478
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
479
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
480
481
482
483
484
485
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
486
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
487
488
489
490
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_BLUE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, SFX_POLICE_RADIO_BLUE},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
491
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
492
493
494
495
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
496
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
497
498
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
499
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
500
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, SFX_POLICE_RADIO_GREY},
aap's avatar
aap включено в состав коммита
501
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
502
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
503
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
504
505
506
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
507
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
508
509
510
511
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_PURPLE, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
512
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
513
514
515
516
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
517
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
518
519
520
521
522
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
523
#ifdef FIX_BUGS
Sergeanur's avatar
Sergeanur включено в состав коммита
524
	{SFX_POLICE_RADIO_LIGHT, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
525
#else
Sergeanur's avatar
Sergeanur включено в состав коммита
526
	{TOTAL_AUDIO_SAMPLES, SFX_POLICE_RADIO_SILVER, TOTAL_AUDIO_SAMPLES},
aap's avatar
aap включено в состав коммита
527
#endif
Sergeanur's avatar
Sergeanur включено в состав коммита
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_LIGHT, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES},
	{SFX_POLICE_RADIO_DARK, TOTAL_AUDIO_SAMPLES, TOTAL_AUDIO_SAMPLES}
};

void
cAudioManager::SetupSuspectLastSeenReport()
{
	CVehicle *veh;
	uint8 color1;
	uint32 main_color;
	uint32 sample;

	uint32 color_pre_modifier;
	uint32 color_post_modifier;
aap's avatar
aap включено в состав коммита
556
557
558
559

	if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) {
		veh = FindPlayerVehicle();
		if (veh != nil) {
Sergeanur's avatar
Sergeanur включено в состав коммита
560
			if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 9) {
aap's avatar
aap включено в состав коммита
561
562
563
564
565
566
567
				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];
Sergeanur's avatar
Sergeanur включено в состав коммита
568
					switch (veh->GetModelIndex()) {
aap's avatar
aap включено в состав коммита
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
#ifdef FIX_BUGS
					case MI_COLUMB:
						main_color = SFX_POLICE_RADIO_BLUE;
						color_pre_modifier = color_post_modifier = TOTAL_AUDIO_SAMPLES;
#endif
					case MI_LANDSTAL:
					case MI_BLISTA: sample = SFX_POLICE_RADIO_CRUISER; break;
#ifdef FIX_BUGS
					case MI_YARDIE:
						color_pre_modifier = TOTAL_AUDIO_SAMPLES;
						main_color = SFX_POLICE_RADIO_RED;
						color_post_modifier = SFX_POLICE_RADIO_YELLOW;
						sample = SFX_POLICE_RADIO_CONVERTIBLE; break;
					case MI_DIABLOS:
						main_color = SFX_POLICE_RADIO_BLACK;
#endif
					case MI_IDAHO:
					case MI_STALLION: sample = SFX_POLICE_RADIO_CONVERTIBLE; break;
#ifdef FIX_BUGS
					case MI_YAKUZA:
						color_pre_modifier = TOTAL_AUDIO_SAMPLES;
						main_color = SFX_POLICE_RADIO_SILVER;
						color_post_modifier = SFX_POLICE_RADIO_RED;
#endif
					case MI_STINGER:
					case MI_INFERNUS:
					case MI_CHEETAH:
					case MI_BANSHEE: sample = SFX_POLICE_RADIO_SPORTS_CAR; break;
#ifdef FIX_BUGS
					case MI_MAFIA:
						color_pre_modifier = color_post_modifier = TOTAL_AUDIO_SAMPLES;
						main_color = SFX_POLICE_RADIO_GREY;
					case MI_KURUMA:
#endif
					case MI_PEREN:
					case MI_SENTINEL:
					case MI_FBICAR: sample = SFX_POLICE_RADIO_SALOON; break;
					case MI_PATRIOT:
					case MI_BOBCAT: sample = SFX_POLICE_RADIO_PICKUP; break;
					case MI_FIRETRUCK: sample = SFX_POLICE_RADIO_FIRE_TRUCK; break;
#ifdef FIX_BUGS
					case MI_LINERUN:
					case MI_FLATBED:
#endif
					case MI_TRASH:
					case MI_BARRACKS: sample = SFX_POLICE_RADIO_TRUCK; break;
					case MI_STRETCH: sample = SFX_POLICE_RADIO_LIMO; break;
#ifdef FIX_BUGS
					case MI_CORPSE:
#endif
					case MI_MANANA:
					case MI_ESPERANT: sample = SFX_POLICE_RADIO_2_DOOR; break;
#ifdef FIX_BUGS
					case MI_HOODS:
						color_pre_modifier = TOTAL_AUDIO_SAMPLES;
						main_color = SFX_POLICE_RADIO_BLUE;
						color_post_modifier = SFX_POLICE_RADIO_GREEN;
					case MI_BELLYUP:
					case MI_YANKEE:
					case MI_TOYZ:
					case MI_MRWONGS:
					case MI_PANLANT:
#endif
					case MI_PONY:
					case MI_MULE:
					case MI_MOONBEAM:
					case MI_ENFORCER:
					case MI_SECURICA:
					case MI_RUMPO: sample = SFX_POLICE_RADIO_VAN; break;
					case MI_AMBULAN: sample = SFX_POLICE_RADIO_AMBULANCE; break;
					case MI_TAXI:
					case MI_CABBIE:
					case MI_BORGNINE: sample = SFX_POLICE_RADIO_TAXI; break;
					case MI_MRWHOOP:
						sample = SFX_POLICE_RADIO_ICE_CREAM_VAN;
						break;
					case MI_BFINJECT: sample = SFX_POLICE_RADIO_BUGGY; break;
					case MI_POLICE: sample = SFX_POLICE_RADIO_POLICE_CAR; break;
#ifdef FIX_BUGS
					case MI_SPEEDER:
					case MI_REEFER:
					case MI_GHOST:
#endif
					case MI_PREDATOR: sample = SFX_POLICE_RADIO_BOAT; break;
					case MI_BUS:
					case MI_COACH: sample = SFX_POLICE_RADIO_BUS; break;
					case MI_RHINO:
						sample = SFX_POLICE_RADIO_TANK;
						main_color = TOTAL_AUDIO_SAMPLES;
						color_post_modifier = TOTAL_AUDIO_SAMPLES;
						break;
					case MI_TRAIN:
						sample = SFX_POLICE_RADIO_SUBWAY_CAR;
						main_color = TOTAL_AUDIO_SAMPLES;
						color_post_modifier = TOTAL_AUDIO_SAMPLES;

						break;
					default:
Sergeanur's avatar
Sergeanur включено в состав коммита
667
						debug("\n *** UNKNOWN CAR MODEL INDEX %d *** ", veh->GetModelIndex());
aap's avatar
aap включено в состав коммита
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
						return;
					}
					m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + 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);
#ifdef FIX_BUGS
					if (main_color == SFX_POLICE_RADIO_ORANGE && color_pre_modifier == TOTAL_AUDIO_SAMPLES)
#else
					if (main_color == SFX_POLICE_RADIO_ORANGE)
#endif
						m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_AN);
					else
						m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_IN_A);
					if (color_pre_modifier != TOTAL_AUDIO_SAMPLES)
						m_sPoliceRadioQueue.Add(color_pre_modifier);
					if (main_color != TOTAL_AUDIO_SAMPLES)
						m_sPoliceRadioQueue.Add(main_color);
					if (color_post_modifier != TOTAL_AUDIO_SAMPLES)
						m_sPoliceRadioQueue.Add(color_post_modifier);
					m_sPoliceRadioQueue.Add(sample);
					m_sPoliceRadioQueue.Add(m_anRandomTable[0] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
					m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
				}
			}
Sergeanur's avatar
Sergeanur включено в состав коммита
693
		} else if (POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 4) {
aap's avatar
aap включено в состав коммита
694
695
696
697
698
699
700
701
702
703
			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(m_anRandomTable[0] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
			m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
		}
	}
}

void
Sergeanur's avatar
Sergeanur включено в состав коммита
704
cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
aap's avatar
aap включено в состав коммита
705
{
Sergeanur's avatar
Sergeanur включено в состав коммита
706
	int32 lastCrime = ARRAY_SIZE(m_aCrimes);
withmorten's avatar
withmorten включено в состав коммита
707
	if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0 &&
aap's avatar
aap включено в состав коммита
708
		(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
Sergeanur's avatar
Sergeanur включено в состав коммита
709
710
711
712
713
		for (int32 i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
			if (m_aCrimes[i].type != CRIME_NONE) {
				if (m_aCrimes[i].type == type) {
					m_aCrimes[i].position = pos;
					m_aCrimes[i].timer = 0;
aap's avatar
aap включено в состав коммита
714
715
716
717
718
719
720
					return;
				}
			} else {
				lastCrime = i;
			}
		}

Sergeanur's avatar
Sergeanur включено в состав коммита
721
722
723
724
		if (lastCrime < ARRAY_SIZE(m_aCrimes)) {
			m_aCrimes[lastCrime].type = type;
			m_aCrimes[lastCrime].position = pos;
			m_aCrimes[lastCrime].timer = 0;
aap's avatar
aap включено в состав коммита
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
			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;
Sergeanur's avatar
Sergeanur включено в состав коммита
741
742
	uint32 sample;
	bool8 processed = FALSE;
aap's avatar
aap включено в состав коммита
743
744
745
746
	CVector vec = CVector(x, y, z);

	if (!m_bIsInitialised) return;

Sergeanur's avatar
Sergeanur включено в состав коммита
747
	if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && POLICE_RADIO_QUEUE_MAX_SAMPLES - m_sPoliceRadioQueue.m_nSamplesInQueue > 9) {
aap's avatar
aap включено в состав коммита
748
749
		audioZone = CTheZones::FindAudioZone(&vec);
		if (audioZone >= 0 && audioZone < NUMAUDIOZONES) {
aap's avatar
aap включено в состав коммита
750
			zone = CTheZones::GetAudioZone(audioZone);
aap's avatar
aap включено в состав коммита
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
			for (int i = 0; i < NUMAUDIOZONES; i++) {
				if (strcmp(zone->name, ZoneSfx[i].m_aName) == 0) {
					sample = ZoneSfx[i].m_nSampleIndex;
					m_sPoliceRadioQueue.Add(m_anRandomTable[4] % 3 + 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);
					if (sample == SFX_POLICE_RADIO_SHORESIDE_VALE &&
						(strcmp(zone->name, SubZo2Label) == 0 ||
							strcmp(zone->name, SubZo3Label) == 0)) {
						m_sPoliceRadioQueue.Add(SFX_NORTH);
						m_sPoliceRadioQueue.Add(SFX_EAST);
					} else {
						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);
Sergeanur's avatar
Sergeanur включено в состав коммита
773
							processed = TRUE;
aap's avatar
aap включено в состав коммита
774
775
						} else if (vec.y < halfY - quarterY) {
							m_sPoliceRadioQueue.Add(SFX_SOUTH);
Sergeanur's avatar
Sergeanur включено в состав коммита
776
							processed = TRUE;
aap's avatar
aap включено в состав коммита
777
778
779
780
781
782
783
784
785
786
787
788
						}

						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(m_anRandomTable[2] % 3 + SFX_POLICE_RADIO_MESSAGE_NOISE_1);
					m_sPoliceRadioQueue.Add(TOTAL_AUDIO_SAMPLES);
Sergeanur's avatar
Sergeanur включено в состав коммита
789
					gSpecialSuspectLastSeenReport = TRUE;
aap's avatar
aap включено в состав коммита
790
791
792
793
794
795
796
797
798
799
					break;
				}
			}
		}
	}
}

void
cAudioManager::AgeCrimes()
{
Sergeanur's avatar
Sergeanur включено в состав коммита
800
801
802
	for (uint8 i = 0; i < ARRAY_SIZE(m_aCrimes); i++) {
		if (m_aCrimes[i].type != CRIME_NONE) {
			if (++m_aCrimes[i].timer > 1500) m_aCrimes[i].type = CRIME_NONE;
aap's avatar
aap включено в состав коммита
803
804
805
		}
	}
}