REDRIVER2/src_rebuild/GAME/C/MC_SND.C

1375 lines
27 KiB
C

#include "THISDUST.H"
#include "MC_SND.H"
#include "GAMESND.H"
#include "CUTSCENE.H"
#include "MISSION.H"
#include "CARS.H"
#include "PLAYERS.H"
#include "CONVERT.H"
#include "SOUND.H"
#include "XAPLAY.H"
char missionstarts[42] = {
0xFF, 0xFF, 0, 2, 4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
6, 8, 0xFF, 9, 0xFF, 0xC, 0xD, 0xFF, 0xE, 0xFF, 0x13,
0x14, 0xFF, 0x15, 0x18, 0x1A, 0xFF, 0x1C, 0xFF, 0x1E,
0x21, 0xFF, 0x25, 0x27, 0xFF, 0x29, 0xFF, 0xFF, 0xFF,
0x2E, 0x30, 0x31
};
io id_map[49] =
{
{0, 0},
{0, 1},
{2, 0},
{3, 1},
{4, 0},
{5, 1},
{4, 0},
{5, 1},
{11, 0},
{12, 0},
{12, 1},
{11, 2},
{14, 0},
{14, 0},
{15, 0},
{16, 1},
{16, 2},
{18, 3},
{18, 4},
{11, 0},
{11, 0},
{20, 0},
{12, 1},
{13, 2},
{21, 0},
{31, 1},
{31, 0},
{11, 1},
{23, 0},
{24, 1},
{26, 0},
{27, 1},
{28, 2},
{34, 0},
{29, 1},
{29, 2},
{20, 3},
{31, 0},
{11, 1},
{31, 0},
{33, 1},
{34, 0},
{36, 1},
{29, 2},
{29, 3},
{20, 4},
{37, 0},
{38, 1},
{39, 0},
};
xa_request xa_data[26] = {
{0x10, 0, 0, 1, 0},
{0x19, 0, 1, 2, 0},
{0x1E, 0, 2, 3, 0},
{0x26, 0, 3, 4, 0},
{0x10, 0, 4, 9, 0},
{0x82, 0, 5, 0xA, 0},
{0x5A, 0, 6, 0xD, 0},
{0x10, 0, 7, 0xE, 0},
{0x280, 1, 0, 0x12, 1},
{0x10, 1, 1, 0x16, 0},
{0x1C2, 1, 2, 0x17, 0},
{0x10, 1, 3, 0x19, 0},
{0x10, 1, 4, 0x1A, 0},
{0x14, 1, 5, 0x1B, 0},
{0x28, 1, 6, 0x1C, 0},
{0x15E, 1, 7, 0x1D, 1},
{0x10, 2, 0, 0x1D, 0},
{0x10, 2, 1, 0x1E, 0},
{0x96, 2, 2, 0x1F, 0},
{0x10, 2, 3, 0x20, 0},
{0x10, 2, 4, 0x22, 0},
{0x19, 2, 5, 0x23, 0},
{0x10, 2, 6, 0x25, 0},
{0x10, 2, 7, 0x27, 0},
{0x2EE, 3, 0, 0x21, 1},
{0, 0, 0, 0xFF, 0},
};
int cutscene_timer = 0;
// decompiled code
// original method signature:
// char /*$ra*/ GetMissionSound(char id /*$s1*/)
// line 88, offset 0x0005d814
/* begin block 1 */
// Start line: 89
// Start offset: 0x0005D814
// Variables:
// char c; // $s0
// char start; // $s2
// char end; // $a0
// char rnd; // $t1
/* end block 1 */
// End offset: 0x0005D950
// End Line: 106
/* begin block 2 */
// Start line: 176
/* end block 2 */
// End Line: 177
// [D]
char GetMissionSound(char id)
{
unsigned char bVar1;
long lVar2;
uint uVar3;
char *pcVar4;
uint uVar5;
bVar1 = missionstarts[gCurrentMissionNumber];
uVar5 = bVar1;
lVar2 = Random2(5);
if (bVar1 != 0xff)
{
uVar3 = 1;
do {
bVar1 = missionstarts[gCurrentMissionNumber + (uVar3 & 0xff)];
uVar3 = (uVar3 & 0xff) + 1;
} while (bVar1 == 0xff);
while (uVar5 < (uint)bVar1) {
uVar3 = uVar5 + 1;
if (id_map[uVar5].in == id) {
pcVar4 = &id_map[uVar5].out;
if ((uVar3 != (uint)bVar1) && (pcVar4 = &id_map[uVar5].out, id_map[uVar3].in == id))
{
pcVar4 = &id_map[uVar5 + (lVar2 % 2 & 0xffU)].out;
}
return *pcVar4 + phrase_top;
}
uVar5 = uVar3 & 0xff;
}
}
return -1;
}
// decompiled code
// original method signature:
// void /*$ra*/ RequestXA()
// line 145, offset 0x0005f12c
/* begin block 1 */
// Start line: 146
// Start offset: 0x0005F12C
/* end block 1 */
// End offset: 0x0005F1B4
// End Line: 157
/* begin block 2 */
// Start line: 290
/* end block 2 */
// End Line: 291
/* begin block 3 */
// Start line: 927
/* end block 3 */
// End Line: 928
/* WARNING: Unknown calling convention yet parameter storage is locked */
void RequestXA(void)
{
UNIMPLEMENTED();
/*
__xa_request *p_Var1;
__xa_request *p_Var2;
xa._0_4_ = CONCAT22(xa._2_2_, 0xffff);
xa._4_2_ = xa._4_2_ & 0xff00;
p_Var2 = xa_data;
if (-1 < xa_data[0].mission) {
do {
if (((int)p_Var2->mission == gCurrentMissionNumber) &&
((int)p_Var2->cutscene == gInGameCutsceneID)) {
xa._0_4_ = *(undefined4 *)p_Var2;
xa._4_2_ = *(ushort *)&p_Var2->mission;
}
p_Var1 = p_Var2 + 1;
p_Var2 = p_Var2 + 1;
} while (-1 < p_Var1->mission);
}
return;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ HandleRequestedXA()
// line 164, offset 0x0005f1b4
/* begin block 1 */
// Start line: 166
// Start offset: 0x0005F1B4
/* end block 1 */
// End offset: 0x0005F224
// End Line: 170
/* begin block 2 */
// Start line: 957
/* end block 2 */
// End Line: 958
/* begin block 3 */
// Start line: 965
/* end block 3 */
// End Line: 966
/* begin block 4 */
// Start line: 966
/* end block 4 */
// End Line: 967
/* WARNING: Unknown calling convention yet parameter storage is locked */
void HandleRequestedXA(void)
{
UNIMPLEMENTED();
/*
if ((xa.cutscene == '\0') && (xa.mission != '\0')) {
PrepareXA();
xa.mission = '\0';
}
if (xa.delay == 0) {
PlayXA((int)xa.bank, (int)xa.track);
}
if (-1 < xa.delay) {
xa.delay = xa.delay + -1;
}
return;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ InitializeCutsceneSound(int cutscene /*$a0*/)
// line 176, offset 0x0005f224
/* begin block 1 */
// Start line: 177
// Start offset: 0x0005F224
// Variables:
// int i; // $a0
/* end block 1 */
// End offset: 0x0005F25C
// End Line: 181
/* begin block 2 */
// Start line: 982
/* end block 2 */
// End Line: 983
/* begin block 3 */
// Start line: 989
/* end block 3 */
// End Line: 990
/* begin block 4 */
// Start line: 991
/* end block 4 */
// End Line: 992
// [D]
void InitializeCutsceneSound(int cutscene)
{
int i;
cutscene_timer = 0;
i = 0;
while (i < 8)
{
force_idle[i] = -1;
force_siren[i++] = 0;
}
}
// decompiled code
// original method signature:
// void /*$ra*/ DoCutsceneSound()
// line 187, offset 0x0005d950
/* begin block 1 */
// Start line: 188
// Start offset: 0x0005D950
/* begin block 1.1 */
// Start line: 191
// Start offset: 0x0005D99C
/* begin block 1.1.1 */
// Start line: 224
// Start offset: 0x0005DA88
/* begin block 1.1.1.1 */
// Start line: 226
// Start offset: 0x0005DAB0
// Variables:
// long *here; // $t0
/* end block 1.1.1.1 */
// End offset: 0x0005DAEC
// End Line: 228
/* end block 1.1.1 */
// End offset: 0x0005DAEC
// End Line: 229
/* begin block 1.1.2 */
// Start line: 244
// Start offset: 0x0005DB9C
/* begin block 1.1.2.1 */
// Start line: 245
// Start offset: 0x0005DBAC
// Variables:
// struct _CAR_DATA *you; // $s0
/* end block 1.1.2.1 */
// End offset: 0x0005DBF0
// End Line: 248
/* end block 1.1.2 */
// End offset: 0x0005DC1C
// End Line: 250
/* end block 1.1 */
// End offset: 0x0005DD00
// End Line: 269
/* end block 1 */
// End offset: 0x0005DD10
// End Line: 271
/* begin block 2 */
// Start line: 295
/* end block 2 */
// End Line: 296
/* begin block 3 */
// Start line: 377
/* end block 3 */
// End Line: 378
/* WARNING: Unknown calling convention yet parameter storage is locked */
int jericho_in_back = 0;
static int rio_alarm = 0;
// [D]
void DoCutsceneSound(void)
{
char cVar1;
cutscene_timer++;
switch (gCurrentMissionNumber)
{
case 2:
if (gInGameCutsceneID != 1)
return;
if (0x4a < cutscene_timer)
{
force_idle[1] = -1;
return;
}
force_idle[1] = 0;
break;
case 5:
if (gInGameCutsceneID != 0)
return;
if (cutscene_timer < 0x97)
{
if (0x8c < cutscene_timer)
{
force_siren[1] = 1;
force_siren[2] = 0;
return;
}
force_siren[1] = 0;
force_siren[2] = 0;
return;
}
force_siren[2] = 1;
force_siren[1] = 1;
break;
case 7:
if (gInGameCutsceneID == 0)
{
if (cutscene_timer < 100)
force_idle[1] = 0;
else
force_idle[1] = -1;
}
if (gInGameCutsceneID != 1)
return;
force_idle[1] = 0;
break;
case 0x12:
if (gInGameCutsceneID == 0)
{
if (cutscene_timer == 1)
MissionSay(15);
if (cutscene_timer == 0xce)
Start3DSoundVolPitch(-1, 6, 4, car_data[2].hd.where.t[0], -car_data[2].hd.where.t[1], car_data[2].hd.where.t[2], -0x9c4, 0xc00);
}
if (gInGameCutsceneID == 1 && cutscene_timer == 6)
PrepareXA();
break;
case 0x15:
if (gInGameCutsceneID == 0)
jericho_in_back = 1;
break;
case 0x19:
if (gInGameCutsceneID == 1)
jericho_in_back = gInGameCutsceneID;
break;
case 0x1a:
if (gInGameCutsceneID != 0)
return;
force_siren[2] = 1;
force_siren[1] = 1;
break;
case 0x1b:
if (gInGameCutsceneID != 0)
return;
if (cutscene_timer == 460)
{
cVar1 = GetMissionSound(24);
Start3DTrackingSound(-1, 5, cVar1, (VECTOR *)car_data[2].hd.where.t, NULL);
force_siren[7] = 1;
force_siren[6] = 1;
force_siren[5] = 1;
force_siren[4] = 1;
force_siren[3] = 1;
force_siren[2] = 1;
}
if (cutscene_timer == 0x1fe)
MissionSay(23);
if (cutscene_timer < 0x33)
return;
force_idle[1] = 0;
break;
case 0x1d:
if (gInGameCutsceneID == 1)
{
if (cutscene_timer == 6)
PrepareXA();
if (cutscene_timer == 0xb4)
{
cVar1 = GetMissionSound(26);
Start3DTrackingSound(-1, 5, cVar1, (VECTOR *)car_data[2].hd.where.t,car_data[2].st.n.linearVelocity);
}
if (cutscene_timer < 0x281)
force_siren[3] = 0;
else
force_siren[3] = 1;
}
break;
case 0x21:
if (gInGameCutsceneID != 1)
return;
if (cutscene_timer == 6)
PrepareXA();
if (cutscene_timer == 0x3c0)
SetEnvSndVol(rio_alarm, 3000);
force_idle[1] = 0;
break;
}
}
// decompiled code
// original method signature:
// void /*$ra*/ InitializeMissionSound()
// line 279, offset 0x0005dd10
/* begin block 1 */
// Start line: 280
// Start offset: 0x0005DD10
// Variables:
// int i; // $a1
/* end block 1 */
// End offset: 0x0005E020
// End Line: 308
/* begin block 2 */
// Start line: 559
/* end block 2 */
// End Line: 560
/* begin block 3 */
// Start line: 568
/* end block 3 */
// End Line: 569
/* begin block 4 */
// Start line: 573
/* end block 4 */
// End Line: 574
/* WARNING: Unknown calling convention yet parameter storage is locked */
void InitializeMissionSound(void)
{
UNIMPLEMENTED();
/*
int iVar1;
char cVar2;
undefined3 extraout_var;
undefined3 extraout_var_00;
undefined3 extraout_var_01;
undefined3 extraout_var_02;
undefined3 extraout_var_03;
undefined3 extraout_var_04;
char *pcVar3;
int iVar4;
iVar4 = 0;
pcVar3 = &es_mobile;
bodgevar = 0;
holdall = -1;
MissionStartData.PlayerPos._0_4_ = 0xffffffff;
do {
*pcVar3 = -1;
iVar1 = GameLevel;
iVar4 = iVar4 + -1;
pcVar3 = pcVar3 + -1;
} while (-1 < iVar4);
jericho_in_back = 0;
if (GameLevel == 1) {
if (gCurrentMissionNumber - 0xfU < 2) {
cVar2 = GetMissionSound('\x0e');
iVar4 = AddEnvSnd(3, ' ', 5, CONCAT31(extraout_var, cVar2), 0, -10000, 0);
es_mobile = (char)iVar4;
}
if (gCurrentMissionNumber == 0x14) {
jericho_in_back = iVar1;
}
}
else {
if (GameLevel < 2) {
if (GameLevel == 0) {
iVar4 = AddEnvSnd(3, '\0', 4, 4, -10000, 0, 0);
es_mobile = (char)iVar4;
}
}
else {
if (GameLevel == 2) {
if (gCurrentMissionNumber == 0x16) {
iVar4 = AddEnvSnd(3, '\0', 5, 0, -10000, 0, 0);
es_mobile = (char)iVar4;
}
if (gCurrentMissionNumber == 0x18) {
cVar2 = GetMissionSound('\x1f');
AddEnvSnd(3, ' ', 5, CONCAT31(extraout_var_00, cVar2), 3000, -37000, 0x420a4);
}
}
else {
if (GameLevel == 3) {
if (gCurrentMissionNumber == 0x20) {
cVar2 = GetMissionSound('\x1f');
rio_alarm = AddEnvSnd(3, ' ', 5, CONCAT31(extraout_var_01, cVar2), -10000, -0x1e1c0, -0x3e300);
}
if (gCurrentMissionNumber == 0x21) {
cVar2 = GetMissionSound('\x1f');
rio_alarm = AddEnvSnd(3, ' ', 5, CONCAT31(extraout_var_02, cVar2), -10000, -0x319f2, 0x52e2c);
}
if (gCurrentMissionNumber == 0x23) {
cVar2 = GetMissionSound('$');
iVar4 = AddEnvSnd(3, ' ', 5, CONCAT31(extraout_var_03, cVar2), -10000, 0, 0);
es_mobile = (char)iVar4;
}
if (gCurrentMissionNumber == 0x28) {
cVar2 = GetMissionSound('\'');
holdall = Start3DSoundVolPitch(-1, 5, CONCAT31(extraout_var_04, cVar2), 0, 0, 0, -10000, 0x1000)
;
LockChannel(holdall);
}
}
}
}
}
return;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ DoMissionSound()
// line 321, offset 0x0005e020
/* begin block 1 */
// Start line: 322
// Start offset: 0x0005E020
// Variables:
// int i; // $a2
/* begin block 1.1 */
// Start line: 400
// Start offset: 0x0005E1E4
// Variables:
// long *pos; // $s5
// long *vel; // $s4
/* begin block 1.1.1 */
// Start line: 404
// Start offset: 0x0005E25C
// Variables:
// int chan; // $s1
/* end block 1.1.1 */
// End offset: 0x0005E25C
// End Line: 404
/* end block 1.1 */
// End offset: 0x0005E25C
// End Line: 404
/* begin block 1.2 */
// Start line: 475
// Start offset: 0x0005E348
// Variables:
// struct VECTOR Q[3]; // stack offset -96
// struct VECTOR P; // stack offset -48
/* end block 1.2 */
// End offset: 0x0005E410
// End Line: 478
/* begin block 1.3 */
// Start line: 480
// Start offset: 0x0005E424
// Variables:
// int i; // $s0
/* end block 1.3 */
// End offset: 0x0005E5B8
// End Line: 484
/* begin block 1.4 */
// Start line: 523
// Start offset: 0x0005E6F0
// Variables:
// struct VECTOR Q[3]; // stack offset -96
// struct VECTOR P; // stack offset -48
/* end block 1.4 */
// End offset: 0x0005E7B8
// End Line: 526
/* begin block 1.5 */
// Start line: 528
// Start offset: 0x0005E7CC
// Variables:
// int i; // $s0
/* end block 1.5 */
// End offset: 0x0005E968
// End Line: 532
/* begin block 1.6 */
// Start line: 557
// Start offset: 0x0005EA74
// Variables:
// long V[3]; // stack offset -96
// long *C; // $a1
/* end block 1.6 */
// End offset: 0x0005EB98
// End Line: 566
/* end block 1 */
// End offset: 0x0005EE00
// End Line: 628
/* begin block 2 */
// Start line: 645
/* end block 2 */
// End Line: 646
/* begin block 3 */
// Start line: 659
/* end block 3 */
// End Line: 660
/* begin block 4 */
// Start line: 661
/* end block 4 */
// End Line: 662
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DoMissionSound(void)
{
UNIMPLEMENTED();
/*
char cVar1;
undefined3 extraout_var;
undefined3 extraout_var_00;
undefined3 extraout_var_01;
undefined3 extraout_var_02;
int *piVar2;
undefined3 extraout_var_03;
undefined3 extraout_var_04;
undefined3 extraout_var_05;
undefined3 extraout_var_06;
undefined3 extraout_var_07;
undefined **ppuVar3;
undefined3 extraout_var_08;
undefined3 extraout_var_09;
undefined3 extraout_var_10;
undefined3 extraout_var_11;
int y;
int *piVar4;
int z;
_TARGET *p_Var5;
int iVar6;
int sample;
int sample_00;
undefined *puVar7;
int x;
undefined *puVar8;
undefined *puVar9;
undefined *local_60;
int local_5c;
undefined *local_58;
int local_54[12];
int local_24;
iVar6 = DAT_000d7c2c;
sample_00 = bodgevar;
switch (gCurrentMissionNumber) {
case 0xb:
case 0xd:
case 0x14:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
cVar1 = GetMissionSound('\v');
sample_00 = CONCAT31(extraout_var, cVar1);
goto LAB_0005ed9c;
}
goto LAB_0005e0d0;
case 0x15:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
cVar1 = GetMissionSound('\v');
Start3DSoundVolPitch
(MissionStartData.PlayerPos._0_4_, 5, CONCAT31(extraout_var_00, cVar1), pos[0], pos[1],
pos[2], -1000, 0x1000);
GetMissionSound('\v');
bodgevar = 2;
return;
}
goto LAB_0005e0d0;
case 0x17:
if (holdall == -1) {
if (MissionTargets->data[0] == 2) {
holdall = MissionTargets->data[6];
}
else {
sample_00 = 1;
do {
if (0xf < sample_00) {
return;
}
p_Var5 = MissionTargets + sample_00;
sample_00 = sample_00 + 1;
} while (p_Var5->data[0] != 2);
holdall = p_Var5->data[6];
}
}
else {
sample_00 = (int)player.playerCarId;
if (sample_00 == holdall) {
if ((DAT_000d7c2c != 0) && (DAT_000d7c2c == (DAT_000d7c2c / 3000) * 3000)) {
sample = GetFreeChannel();
cVar1 = GetMissionSound('\x14');
StartSound(sample, 5, CONCAT31(extraout_var_01, cVar1), -0x5dc, 0x1000);
SetChannelPosition3(sample, (VECTOR *)car_data[sample_00].hd.where.t,
(long *)(car_data[sample_00].st + 0x1c), -0x5dc, 0x1000 - iVar6 / 0x2ee,
0);
}
}
}
break;
case 0x19:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
cVar1 = GetMissionSound('\v');
Start3DSoundVolPitch
(MissionStartData.PlayerPos._0_4_, 5, CONCAT31(extraout_var_02, cVar1), pos[0], pos[1],
pos[2], -1000, 0x1000);
holdall = holdall + 1;
bodgevar = 2;
return;
}
LAB_0005e0d0:
if (bodgevar != 3) {
return;
}
StopChannel(MissionStartData.PlayerPos._0_4_);
LAB_0005edd8:
bodgevar = 4;
break;
case 0x1e:
if (bodgevar - 1U < 3) {
piVar2 = &DAT_00010e8c;
piVar4 = &local_60;
do {
sample_00 = piVar2[1];
iVar6 = piVar2[2];
sample = piVar2[3];
*piVar4 = *piVar2;
piVar4[1] = sample_00;
piVar4[2] = iVar6;
piVar4[3] = sample;
piVar2 = piVar2 + 4;
piVar4 = piVar4 + 4;
} while (piVar2 != &DAT_00010ebc);
sample_00 = bodgevar + -1;
local_54[9] = (&local_60)[sample_00 * 4];
local_54[10] = (&local_60)[sample_00 * 4 + 1];
local_54[11] = (&local_60)[sample_00 * 4 + 2];
local_24 = (&local_60)[sample_00 * 4 + 3];
cVar1 = GetMissionSound('\"');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_03, cVar1), local_54[9], local_54[10], local_54[11], -1000,
0x1000);
bodgevar = bodgevar + 4;
}
sample_00 = DAT_000d7c2c;
if (bodgevar < 4) {
return;
}
if (bodgevar == 6) {
LAB_0005e4e8:
if ((sample_00 / 3000) * 3000 == sample_00 + -800) {
cVar1 = GetMissionSound('\x14');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_05, cVar1), -0x34aa, -0xfa, 0xcd5e0, -0x5dc,
0x1000 - sample_00 / 0x2ee);
}
}
else {
if (6 < bodgevar) {
if (bodgevar != 7) {
return;
}
if ((DAT_000d7c2c / 3000) * 3000 == DAT_000d7c2c + -0x514) {
cVar1 = GetMissionSound('\x14');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_04, cVar1), -0x2ffb, -0x113, 0xcd61b, -0x5dc,
0x1000 - sample_00 / 0x2ee);
}
goto LAB_0005e4e8;
}
if (bodgevar != 5) {
return;
}
}
iVar6 = (int)((ulonglong)((longlong)sample_00 * 0x57619f1) >> 0x20);
if ((sample_00 / 3000) * 3000 != sample_00 + -100) {
return;
}
cVar1 = GetMissionSound('\x14');
sample = CONCAT31(extraout_var_06, cVar1);
z = 0xcd383;
x = -0x382c;
y = -0x114;
goto LAB_0005e990;
case 0x20:
if (holdall == -1) {
holdall = 0;
return;
}
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
cVar1 = GetMissionSound('\v');
sample_00 = CONCAT31(extraout_var_07, cVar1);
goto LAB_0005ed9c;
}
if (bodgevar != 3) {
return;
}
if (-1 < MissionStartData.PlayerPos._0_4_) {
StopChannel(MissionStartData.PlayerPos._0_4_);
}
holdall = holdall + 1;
if (holdall == 2) {
SetEnvSndVol(rio_alarm, 3000);
}
goto LAB_0005edd8;
case 0x21:
if (holdall == -1) {
StartSound(2, 2, 0, -10000, 0x81);
holdall = 0;
}
break;
case 0x23:
if (bodgevar - 1U < 3) {
ppuVar3 = (undefined **)&DAT_00010ebc;
piVar4 = &local_60;
do {
puVar7 = ppuVar3[1];
puVar8 = ppuVar3[2];
puVar9 = ppuVar3[3];
*(undefined **)piVar4 = *ppuVar3;
*(undefined **)(piVar4 + 1) = puVar7;
*(undefined **)(piVar4 + 2) = puVar8;
*(undefined **)(piVar4 + 3) = puVar9;
ppuVar3 = ppuVar3 + 4;
piVar4 = piVar4 + 4;
} while (ppuVar3 != switchdataD_00010eec);
sample_00 = bodgevar + -1;
local_54[9] = (&local_60)[sample_00 * 4];
local_54[10] = (&local_60)[sample_00 * 4 + 1];
local_54[11] = (&local_60)[sample_00 * 4 + 2];
local_24 = (&local_60)[sample_00 * 4 + 3];
cVar1 = GetMissionSound('\"');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_08, cVar1), local_54[9], local_54[10], local_54[11], -1000,
0x1000);
bodgevar = bodgevar + 4;
}
sample_00 = DAT_000d7c2c;
if (bodgevar < 4) {
return;
}
if (bodgevar == 6) {
LAB_0005e894:
if ((sample_00 / 3000) * 3000 == sample_00 + -800) {
cVar1 = GetMissionSound('\x14');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_10, cVar1), 0x312b0, -0xb1, 0x5f050, -0x5dc,
0x1000 - sample_00 / 0x2ee);
}
}
else {
if (6 < bodgevar) {
if (bodgevar != 7) {
return;
}
if ((DAT_000d7c2c / 3000) * 3000 == DAT_000d7c2c + -0x514) {
cVar1 = GetMissionSound('\x14');
Start3DSoundVolPitch
(-1, 5, CONCAT31(extraout_var_09, cVar1), 0x30ad0, -0xb1, 0x5f050, -0x5dc,
0x1000 - sample_00 / 0x2ee);
}
goto LAB_0005e894;
}
if (bodgevar != 5) {
return;
}
}
iVar6 = (int)((ulonglong)((longlong)sample_00 * 0x57619f1) >> 0x20);
if ((sample_00 / 3000) * 3000 != sample_00 + -300) {
return;
}
cVar1 = GetMissionSound('\x14');
sample = CONCAT31(extraout_var_11, cVar1);
z = 0x5e0e0;
x = 0x31330;
y = -0xb1;
LAB_0005e990:
Start3DSoundVolPitch(-1, 5, sample, x, y, z, -0x5dc, 0x1000 - ((iVar6 >> 4) - (sample_00 >> 0x1f)));
break;
case 0x27:
if (holdall == -1) {
sample_00 = 0;
p_Var5 = MissionTargets;
while (sample_00 < 0x10) {
if (p_Var5->data[0] == 2) {
if (holdall == -1) {
holdall = 0x14;
}
else {
if (holdall == 0x14) {
holdall = p_Var5->data[6];
return;
}
}
}
p_Var5 = p_Var5 + 1;
sample_00 = sample_00 + 1;
}
}
else {
if ((int)player.playerCarId == holdall) {
jericho_in_back = 1;
}
}
break;
case 0x28:
if (bodgevar == 0) {
if (holdall != -1) {
StopChannel(holdall);
UnlockChannel(holdall);
holdall = -1;
}
}
else {
iVar6 = car_data[player.playerCarId].hd.where.t[0];
sample = *(int *)bodgevar - iVar6;
iVar6 = iVar6 - *(int *)bodgevar;
if (-1 < sample) {
iVar6 = sample;
}
if (iVar6 < 0x8000) {
iVar6 = car_data[player.playerCarId].hd.where.t[2];
sample = *(int *)(bodgevar + 8) - iVar6;
iVar6 = iVar6 - *(int *)(bodgevar + 8);
if (-1 < sample) {
iVar6 = sample;
}
if (iVar6 < 0x8000) {
local_60 = pos[0] - *(int *)bodgevar;
local_5c = pos[1] - *(int *)(bodgevar + 4);
local_58 = pos[2] - *(int *)(bodgevar + 8);
SetChannelPosition3(holdall, (VECTOR *)bodgevar, &local_60, 0, 0x1000, 0);
pos[0] = *(long *)sample_00;
pos[1] = *(long *)(sample_00 + 4);
pos[2] = *(long *)(sample_00 + 8);
return;
}
}
SpuSetVoicePitch(holdall, 0);
}
break;
case 0x34:
case 0x35:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
Start3DSoundVolPitch(MissionStartData.PlayerPos._0_4_, 5, 0, pos[0], pos[1], pos[2], -1000, 0x1000);
bodgevar = 2;
}
else {
if (bodgevar == 3) {
if (-1 < MissionStartData.PlayerPos._0_4_) {
StopChannel(MissionStartData.PlayerPos._0_4_);
}
bodgevar = 4;
}
}
case 0x36:
case 0x37:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
Start3DSoundVolPitch(MissionStartData.PlayerPos._0_4_, 5, 1, pos[0], pos[1], pos[2], -1000, 0x1000);
bodgevar = 2;
}
else {
if (bodgevar == 3) {
if (-1 < MissionStartData.PlayerPos._0_4_) {
StopChannel(MissionStartData.PlayerPos._0_4_);
}
bodgevar = 4;
}
else {
if (bodgevar == 5) {
Start3DSoundVolPitch(-1, 5, 0, -0x26868, -0xfa, (int)&DAT_0009d274, -1000, 0x1000);
bodgevar = 6;
}
}
}
case 0x38:
case 0x39:
goto switchD_0005e06c_caseD_38;
}
return;
switchD_0005e06c_caseD_38:
if (bodgevar == 1) {
MissionStartData.PlayerPos._0_4_ = GetFreeChannel();
sample_00 = 0;
LAB_0005ed9c:
Start3DSoundVolPitch
(MissionStartData.PlayerPos._0_4_, 5, sample_00, pos[0], pos[1], pos[2], -1000, 0x1000);
bodgevar = 2;
return;
}
if (bodgevar != 3) {
return;
}
if (-1 < MissionStartData.PlayerPos._0_4_) {
StopChannel(MissionStartData.PlayerPos._0_4_);
}
goto LAB_0005edd8;*/
}
// decompiled code
// original method signature:
// void /*$ra*/ SetMSoundVar(int var /*$a0*/, struct VECTOR *V /*$a1*/)
// line 636, offset 0x0005f25c
/* begin block 1 */
// Start line: 1453
/* end block 1 */
// End Line: 1454
/* begin block 2 */
// Start line: 1909
/* end block 2 */
// End Line: 1910
void SetMSoundVar(int var, VECTOR *V)
{
UNIMPLEMENTED();
/*
if (V != (VECTOR *)0x0) {
pos[0] = V->vx;
pos[1] = V->vy;
pos[2] = V->vz;
}
bodgevar = var;
return;
*/
}
// decompiled code
// original method signature:
// char /*$ra*/ SilenceThisCar(int car /*$a1*/)
// line 652, offset 0x0005ee00
/* begin block 1 */
// Start line: 1316
/* end block 1 */
// End Line: 1317
/* begin block 2 */
// Start line: 1341
/* end block 2 */
// End Line: 1342
/* WARNING: Type propagation algorithm not settling */
// [D]
char SilenceThisCar(int car)
{
int iVar1;
bool bVar2;
if (gInGameCutsceneActive == 0)
{
bVar2 = false;
if (car_data[car].controlType == 7)
{
bVar2 = car_data[car].ai.c.ctrlState == 7;
}
return (char)bVar2;
}
switch (gCurrentMissionNumber)
{
case 1:
case 0xe:
case 0x11:
if (gInGameCutsceneID != 0)
return 0;
if (car == 1)
return 1;
break;
case 2:
if (gInGameCutsceneID != 1)
return 0;
if (car == 2 && cutscene_timer < 200)
return 1;
if (car != 1)
return 0;
bVar2 = cutscene_timer < 0x23;
goto LAB_0005ef14;
case 3:
case 0x19:
if (gInGameCutsceneID != 0)
return 0;
iVar1 = 2;
goto LAB_0005ef3c;
case 6:
if (gInGameCutsceneID == 0)
{
bVar2 = car - 2U < 2;
}
else
{
if (gInGameCutsceneID != 1)
return 0;
bVar2 = cutscene_timer < 0xfd;
}
LAB_0005ef14:
if (bVar2)
return 1;
return 0;
case 7:
case 0x13:
case 0x15:
case 0x1c:
case 0x1e:
case 0x1f:
if (gInGameCutsceneID != 0) {
return 0;
}
return 1;
case 10:
if (gInGameCutsceneID != 0) {
return 0;
}
iVar1 = 3;
LAB_0005ef3c:
if (car == iVar1) {
return 1;
}
return 0;
case 0x10:
if (gInGameCutsceneID != 0)
return 0;
if (car != 1)
return 1;
break;
case 0x12:
if (gInGameCutsceneID == 0 && car != 1)
return 1;
if (gInGameCutsceneID == 1 && car > 2)
return 1;
if (car == 1)
{
bVar2 = cutscene_timer < 471;
goto LAB_0005f098;
}
break;
case 0x17:
if (gInGameCutsceneID != 0)
return 0;
if (cutscene_timer < 160)
return 1;
if (car != 1)
return 0;
bVar2 = cutscene_timer < 416;
goto LAB_0005f098;
case 0x1b:
if (gInGameCutsceneID != 0)
return 0;
if (car - 6U < 2) {
return 1;
}
if (1 < car - 2U) {
return 0;
}
bVar2 = cutscene_timer < 681;
LAB_0005f098:
if (!bVar2)
return 1;
return 0;
case 0x1d:
if (gInGameCutsceneID == 0)
return 1;
if (gInGameCutsceneID == 1)
{
bVar2 = car - 4U < 2;
goto LAB_0005ef14;
}
break;
case 0x21:
if (gInGameCutsceneID == 1 && car != 1)
return 1;
break;
case 0x26:
if (gInGameCutsceneID == 0)
{
bVar2 = car - 2U < 2;
goto LAB_0005ef14;
}
break;
case 0x27:
if (gInGameCutsceneID == 0)
return 1;
}
return 0;
}
// decompiled code
// original method signature:
// void /*$ra*/ AdjustPlayerCarVolume()
// line 749, offset 0x0005f294
/* begin block 1 */
// Start line: 2136
/* end block 1 */
// End Line: 2137
/* WARNING: Unknown calling convention yet parameter storage is locked */
// [D]
void AdjustPlayerCarVolume(void)
{
if (gInGameCutsceneID == 0)
{
if (gCurrentMissionNumber == 3 || gCurrentMissionNumber == 5 || gCurrentMissionNumber == 27)
{
player[0].revsvol = -0x1a5e;
player[0].idlevol = -10000;
}
else
{
player[0].revsvol = -10000;
player[0].idlevol = -8000;
}
}
}