REDRIVER2/src_rebuild/GAME/C/MC_SND.C
Ilya Shurumov c40d40bd22 - added sources rebuilt with TDR and partially decompiled intro sequence
- moved necessary data to new sources
- running intro with TOMB5 HLE emulator
2020-03-28 03:25:35 +06:00

1336 lines
30 KiB
C

#include "THISDUST.H"
#include "MC_SND.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},
};
// 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
char GetMissionSound(char id)
{
byte bVar1;
long lVar2;
uint uVar3;
char *pcVar4;
uint uVar5;
bVar1 = (&missionstarts)[gCurrentMissionNumber];
uVar5 = (uint)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)
{
__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)
{
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
void InitializeCutsceneSound(int cutscene)
{
char *pcVar1;
char *pcVar2;
int iVar3;
cutscene_timer = 0;
iVar3 = 0;
do {
pcVar1 = &force_idle + iVar3;
pcVar2 = &force_siren + iVar3;
iVar3 = iVar3 + 1;
*pcVar1 = -1;
*pcVar2 = '\0';
} while (iVar3 < 8);
return;
}
// 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 */
void DoCutsceneSound(void)
{
char cVar1;
undefined3 extraout_var;
undefined3 extraout_var_00;
cutscene_timer = cutscene_timer + 1;
switch(gCurrentMissionNumber) {
case 2:
if (gInGameCutsceneID != 1) {
return;
}
if (0x4a < cutscene_timer) {
s__000aafd1[0] = -1;
return;
}
goto LAB_0005dcfc;
case 5:
if (gInGameCutsceneID != 0) {
return;
}
if (cutscene_timer < 0x97) {
if (0x8c < cutscene_timer) {
CHAR_00h_000aafe1 = '\x01';
CHAR_00h_000aafe2 = '\0';
return;
}
CHAR_00h_000aafe1 = '\0';
CHAR_00h_000aafe2 = '\0';
return;
}
goto LAB_0005db74;
case 7:
if (gInGameCutsceneID == 0) {
if (cutscene_timer < 100) {
s__000aafd1[0] = '\0';
}
else {
s__000aafd1[0] = -1;
}
}
if (gInGameCutsceneID != 1) {
return;
}
goto LAB_0005dcfc;
case 0x12:
if (gInGameCutsceneID == 0) {
if (cutscene_timer == 1) {
MissionSay(0xf);
}
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;
}
LAB_0005db74:
CHAR_00h_000aafe2 = '\x01';
CHAR_00h_000aafe1 = '\x01';
break;
case 0x1b:
if (gInGameCutsceneID != 0) {
return;
}
if (cutscene_timer == 0x1cc) {
cVar1 = GetMissionSound('\x18');
Start3DTrackingSound
(-1,5,CONCAT31(extraout_var,cVar1),(VECTOR *)car_data[2].hd.where.t,(long *)0x0);
CHAR_00h_000aafe7 = '\x01';
CHAR_00h_000aafe6 = '\x01';
CHAR_00h_000aafe5 = '\x01';
CHAR_00h_000aafe4 = '\x01';
CHAR_00h_000aafe3 = '\x01';
CHAR_00h_000aafe2 = '\x01';
}
if (cutscene_timer == 0x1fe) {
MissionSay(0x17);
}
if (cutscene_timer < 0x33) {
return;
}
goto LAB_0005dcfc;
case 0x1d:
if (gInGameCutsceneID == 1) {
if (cutscene_timer == 6) {
PrepareXA();
}
if (cutscene_timer == 0xb4) {
cVar1 = GetMissionSound('\x1a');
Start3DTrackingSound
(-1,5,CONCAT31(extraout_var_00,cVar1),(VECTOR *)car_data[2].hd.where.t,
(long *)(car_data[2].st + 0x1c));
}
if (cutscene_timer < 0x281) {
CHAR_00h_000aafe3 = '\0';
}
else {
CHAR_00h_000aafe3 = '\x01';
}
}
break;
case 0x21:
if (gInGameCutsceneID != 1) {
return;
}
if (cutscene_timer == 6) {
PrepareXA();
}
if (cutscene_timer == 0x3c0) {
SetEnvSndVol(rio_alarm,3000);
}
LAB_0005dcfc:
s__000aafd1[0] = '\0';
}
return;
}
// 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)
{
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)
{
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)
{
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 */
char SilenceThisCar(int car)
{
int iVar1;
bool bVar2;
if (gInGameCutsceneActive == 0) {
bVar2 = false;
if (car_data[car].controlType == '\a') {
bVar2 = car_data[car].ai[0xc] == 7;
}
return (char)bVar2;
}
switch(gCurrentMissionNumber) {
case 1:
case 0xe:
case 0x11:
if (gInGameCutsceneID != 0) {
return '\0';
}
if (car == 1) {
return '\x01';
}
break;
case 2:
if (gInGameCutsceneID != 1) {
return '\0';
}
if ((car == 2) && (cutscene_timer < 200)) {
return '\x01';
}
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 '\x01';
}
return '\0';
case 7:
case 0x13:
case 0x15:
case 0x1c:
case 0x1e:
case 0x1f:
if (gInGameCutsceneID != 0) {
return '\0';
}
return '\x01';
case 10:
if (gInGameCutsceneID != 0) {
return '\0';
}
iVar1 = 3;
LAB_0005ef3c:
if (car == iVar1) {
return '\x01';
}
return '\0';
case 0x10:
if (gInGameCutsceneID != 0) {
return '\0';
}
if (car != 1) {
return '\x01';
}
break;
case 0x12:
if ((gInGameCutsceneID == 0) && (car != 1)) {
return '\x01';
}
if ((gInGameCutsceneID == 1) && (2 < car)) {
return '\x01';
}
if (car == 1) {
bVar2 = cutscene_timer < 0x1d7;
goto LAB_0005f098;
}
break;
case 0x17:
if (gInGameCutsceneID != 0) {
return '\0';
}
if (cutscene_timer < 0xa0) {
return '\x01';
}
if (car != 1) {
return '\0';
}
bVar2 = cutscene_timer < 0x1a0;
goto LAB_0005f098;
case 0x1b:
if (gInGameCutsceneID != 0) {
return '\0';
}
if (car - 6U < 2) {
return '\x01';
}
if (1 < car - 2U) {
return '\0';
}
bVar2 = cutscene_timer < 0x2a9;
LAB_0005f098:
if (!bVar2) {
return '\x01';
}
return '\0';
case 0x1d:
if (gInGameCutsceneID == 0) {
return '\x01';
}
if (gInGameCutsceneID == 1) {
bVar2 = car - 4U < 2;
goto LAB_0005ef14;
}
break;
case 0x21:
if ((gInGameCutsceneID == 1) && (car != 1)) {
return '\x01';
}
break;
case 0x26:
if (gInGameCutsceneID == 0) {
bVar2 = car - 2U < 2;
goto LAB_0005ef14;
}
break;
case 0x27:
if (gInGameCutsceneID == 0) {
return '\x01';
}
}
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 */
void AdjustPlayerCarVolume(void)
{
if (gInGameCutsceneID == 0) {
if (((gCurrentMissionNumber == 3) || (gCurrentMissionNumber == 5)) ||
(gCurrentMissionNumber == 0x1b)) {
player.revsvol = -0x1a5e;
player.idlevol = -10000;
}
else {
player.revsvol = -10000;
player.idlevol = -8000;
}
}
return;
}