mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 03:42:34 +01:00
1536 lines
35 KiB
C
1536 lines
35 KiB
C
#include "THISDUST.H"
|
|
#include "CUTSCENE.H"
|
|
|
|
int gInGameCutsceneActive = 0;
|
|
int gInGameCutsceneDelay = 0;
|
|
int gInGameChaseActive = 0;
|
|
int gInGameCutsceneID = -1;
|
|
int gThePlayerCar = -1;
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ InitInGameCutsceneVariables()
|
|
// line 566, offset 0x000325c0
|
|
/* begin block 1 */
|
|
// Start line: 2383
|
|
/* end block 1 */
|
|
// End Line: 2384
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1132
|
|
/* end block 2 */
|
|
// End Line: 1133
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2384
|
|
/* end block 3 */
|
|
// End Line: 2385
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void InitInGameCutsceneVariables(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
CutsceneStreamIndex = 0;
|
|
CutsceneFrameCnt = 0;
|
|
NumCutsceneStreams = 0;
|
|
gHaveInGameCutscene = 0;
|
|
gInGameChaseActive = 0;
|
|
gInGameCutsceneActive = 0;
|
|
gCSDestroyPlayer = 0;
|
|
PreLoadedCutscene = -1;
|
|
CutsceneReplayStart = (char *)0x0;
|
|
CutsceneCamera = (PLAYBACKCAMERA *)0x0;
|
|
CutsceneInReplayBuffer = 0;
|
|
CutsceneEventTrigger = 0;
|
|
CutsceneLength = 0;
|
|
BlackBorderHeight = 0;
|
|
gInGameCutsceneDelay = 0;
|
|
gInGameCutsceneID = -1;
|
|
gCutsceneAtEnd = 0;
|
|
JustReturnedFromCutscene = 0;
|
|
FreeCutsceneBuffer();
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ HandleInGameCutscene()
|
|
// line 594, offset 0x0003262c
|
|
/* begin block 1 */
|
|
// Start line: 596
|
|
// Start offset: 0x0003262C
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 631
|
|
// Start offset: 0x0003270C
|
|
/* end block 1.1 */
|
|
// End offset: 0x00032730
|
|
// End Line: 642
|
|
/* end block 1 */
|
|
// End offset: 0x00032740
|
|
// End Line: 644
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2446
|
|
/* end block 2 */
|
|
// End Line: 2447
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2447
|
|
/* end block 3 */
|
|
// End Line: 2448
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2452
|
|
/* end block 4 */
|
|
// End Line: 2453
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void HandleInGameCutscene(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
|
|
if (gInGameCutsceneDelay != 0) {
|
|
BlackBorderHeight = gInGameCutsceneDelay;
|
|
gInGameCutsceneDelay = gInGameCutsceneDelay + 1;
|
|
if (0x1b < gInGameCutsceneDelay) {
|
|
TriggerInGameCutscene(gInGameCutsceneID);
|
|
gInGameCutsceneDelay = 0;
|
|
BlackBorderHeight = 0x1c;
|
|
}
|
|
}
|
|
if (gHaveInGameCutscene == 0) {
|
|
return;
|
|
}
|
|
if (pauseflag != 0) {
|
|
return;
|
|
}
|
|
if (CameraCnt < 2) {
|
|
BlackBorderHeight = 0x1c;
|
|
}
|
|
if (CutsceneLength + -0x1c < CutsceneFrameCnt) {
|
|
iVar1 = BlackBorderHeight + -1;
|
|
if (BlackBorderHeight < 1) goto LAB_000326f4;
|
|
}
|
|
else {
|
|
iVar1 = BlackBorderHeight + 1;
|
|
if (0x1b < BlackBorderHeight) goto LAB_000326f4;
|
|
}
|
|
BlackBorderHeight = iVar1;
|
|
LAB_000326f4:
|
|
CutsceneFrameCnt = CutsceneFrameCnt + 1;
|
|
if (CutsceneFrameCnt == CutsceneLength) {
|
|
gHaveInGameCutscene = 0;
|
|
if (gInGameCutsceneActive != 0) {
|
|
JustReturnedFromCutscene = 1;
|
|
}
|
|
ReleaseInGameCutscene();
|
|
InitOverheadMap();
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DrawInGameCutscene()
|
|
// line 646, offset 0x00031398
|
|
/* begin block 1 */
|
|
// Start line: 648
|
|
// Start offset: 0x00031398
|
|
// Variables:
|
|
// struct TILE *tile; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x000314E8
|
|
// End Line: 676
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1292
|
|
/* end block 2 */
|
|
// End Line: 1293
|
|
|
|
/* begin block 3 */
|
|
// Start line: 1293
|
|
/* end block 3 */
|
|
// End Line: 1294
|
|
|
|
/* begin block 4 */
|
|
// Start line: 1300
|
|
/* end block 4 */
|
|
// End Line: 1301
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void DrawInGameCutscene(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
short sVar1;
|
|
DB *pDVar2;
|
|
ulong *puVar3;
|
|
uint *puVar4;
|
|
uint *puVar5;
|
|
|
|
if ((gInGameCutsceneActive != 0) || (gInGameCutsceneDelay != 0)) {
|
|
puVar4 = (uint *)current->primptr;
|
|
SetTile(puVar4);
|
|
*(char *)(puVar4 + 1) = '\0';
|
|
*(char *)((int)puVar4 + 5) = '\0';
|
|
*(char *)((int)puVar4 + 6) = '\0';
|
|
pDVar2 = current;
|
|
sVar1 = (short)BlackBorderHeight;
|
|
*(undefined2 *)(puVar4 + 2) = 0;
|
|
*(undefined2 *)((int)puVar4 + 10) = 0;
|
|
*(undefined2 *)(puVar4 + 3) = 0x140;
|
|
*(short *)((int)puVar4 + 0xe) = sVar1;
|
|
*puVar4 = *puVar4 & 0xff000000 | *pDVar2->ot & 0xffffff;
|
|
puVar3 = pDVar2->ot;
|
|
puVar5 = puVar4 + 4;
|
|
*puVar3 = *puVar3 & 0xff000000 | (uint)puVar4 & 0xffffff;
|
|
SetTile(puVar5);
|
|
*(char *)(puVar4 + 5) = '\0';
|
|
*(char *)((int)puVar4 + 0x15) = '\0';
|
|
*(char *)((int)puVar4 + 0x16) = '\0';
|
|
pDVar2 = current;
|
|
sVar1 = (short)BlackBorderHeight;
|
|
*(undefined2 *)(puVar4 + 6) = 0;
|
|
*(undefined2 *)(puVar4 + 7) = 0x140;
|
|
*(short *)((int)puVar4 + 0x1a) = 0x100 - sVar1;
|
|
*(short *)((int)puVar4 + 0x1e) = sVar1;
|
|
*puVar5 = *puVar5 & 0xff000000 | *pDVar2->ot & 0xffffff;
|
|
*pDVar2->ot = *pDVar2->ot & 0xff000000 | (uint)puVar5 & 0xffffff;
|
|
pDVar2->primptr = pDVar2->primptr + 0x20;
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ TriggerChase(int *car /*$s2*/, int cutscene /*$a1*/)
|
|
// line 683, offset 0x000314e8
|
|
/* begin block 1 */
|
|
// Start line: 684
|
|
// Start offset: 0x000314E8
|
|
// Variables:
|
|
// void *inform; // $s3
|
|
// int i; // $a0
|
|
// int length; // $s1
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 695
|
|
// Start offset: 0x00031558
|
|
/* end block 1.1 */
|
|
// End offset: 0x000316A4
|
|
// End Line: 721
|
|
/* end block 1 */
|
|
// End offset: 0x000316EC
|
|
// End Line: 725
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1380
|
|
/* end block 2 */
|
|
// End Line: 1381
|
|
|
|
/* begin block 3 */
|
|
// Start line: 1388
|
|
/* end block 3 */
|
|
// End Line: 1389
|
|
|
|
void TriggerChase(int *car, int cutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
int cutscene_00;
|
|
int *piVar4;
|
|
|
|
cutscene_00 = gRandomChase;
|
|
piVar4 = car_data[*car].inform;
|
|
iVar3 = 0;
|
|
car_data[*car].inform = (int *)0x0;
|
|
gInGameChaseActive = TriggerInGameCutsceneSystem(cutscene_00);
|
|
if (gInGameChaseActive != 0) {
|
|
if (CutsceneStreamIndex < NumReplayStreams) {
|
|
piVar2 = &ReplayStreams[CutsceneStreamIndex].length;
|
|
iVar1 = NumReplayStreams - CutsceneStreamIndex;
|
|
cutscene_00 = iVar3;
|
|
do {
|
|
iVar3 = *piVar2;
|
|
if (*piVar2 < cutscene_00) {
|
|
iVar3 = cutscene_00;
|
|
}
|
|
iVar1 = iVar1 + -1;
|
|
piVar2 = piVar2 + 0x11;
|
|
cutscene_00 = iVar3;
|
|
} while (iVar1 != 0);
|
|
}
|
|
switch (gCurrentMissionNumber) {
|
|
case 2:
|
|
case 4:
|
|
case 6:
|
|
case 10:
|
|
case 0x12:
|
|
DAT_000d7c2c = &DAT_00003a98 + (iVar3 / 0x1e) * 3000;
|
|
break;
|
|
default:
|
|
DAT_000d7c2c = (undefined *)((iVar3 / 0x1e) * 3000 + -15000);
|
|
}
|
|
DAT_000d7c28 = 1;
|
|
*car = CutsceneStreamIndex;
|
|
player.targetCarId = (char)CutsceneStreamIndex;
|
|
InitLeadHorn();
|
|
}
|
|
car_data[*car].inform = piVar4;
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ TriggerInGameCutscene(int cutscene /*$s0*/)
|
|
// line 732, offset 0x00032740
|
|
/* begin block 1 */
|
|
// Start line: 733
|
|
// Start offset: 0x00032740
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 762
|
|
// Start offset: 0x000327F0
|
|
/* end block 1.1 */
|
|
// End offset: 0x0003282C
|
|
// End Line: 769
|
|
/* end block 1 */
|
|
// End offset: 0x0003282C
|
|
// End Line: 770
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2637
|
|
/* end block 2 */
|
|
// End Line: 2638
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2726
|
|
/* end block 3 */
|
|
// End Line: 2727
|
|
|
|
void TriggerInGameCutscene(int cutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
|
|
iVar1 = IsCutsceneResident(cutscene);
|
|
if (iVar1 != 0) {
|
|
gInGameCutsceneID = cutscene;
|
|
if ((CameraCnt < 3) || (0x1b < gInGameCutsceneDelay)) {
|
|
SavedCameraCarId = (int)player.cameraCarId;
|
|
SavedCameraView = ZEXT14(cameraview);
|
|
SavedWorldCentreCarId = (int)player.worldCentreCarId;
|
|
SavedCameraAngle = gCameraAngle;
|
|
SavedSpoolXZ = player.spoolXZ;
|
|
gInGameCutsceneActive = TriggerInGameCutsceneSystem(cutscene);
|
|
if (gInGameCutsceneActive != 0) {
|
|
TerminateSkidding(0);
|
|
TerminateSkidding(1);
|
|
gStopPadReads = 1;
|
|
scr_z = 0x100;
|
|
if (gCSDestroyPlayer != 0) {
|
|
DestroyPlayer(0, 1);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
gCutsceneAtEnd = 1;
|
|
gInGameCutsceneDelay = gInGameCutsceneDelay + 1;
|
|
}
|
|
}
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ CalcInGameCutsceneSize()
|
|
// line 778, offset 0x0003283c
|
|
/* begin block 1 */
|
|
// Start line: 817
|
|
// Start offset: 0x0003283C
|
|
// Variables:
|
|
// struct CUTSCENE_HEADER header; // stack offset -136
|
|
// char filename[64]; // stack offset -72
|
|
/* end block 1 */
|
|
// End offset: 0x000328C8
|
|
// End Line: 830
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2827
|
|
/* end block 2 */
|
|
// End Line: 2828
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2865
|
|
/* end block 3 */
|
|
// End Line: 2866
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2868
|
|
/* end block 4 */
|
|
// End Line: 2869
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
int CalcInGameCutsceneSize(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int iVar1;
|
|
int local_88[16];
|
|
char acStack72[64];
|
|
|
|
if (gCurrentMissionNumber < 0x15) {
|
|
sprintf(acStack72, s_REPLAYS_CUT_d_R_0001058c);
|
|
}
|
|
else {
|
|
sprintf(acStack72, s_REPLAYS_A_CUT_d_R_0001059c);
|
|
}
|
|
iVar1 = FileExists(acStack72);
|
|
if (iVar1 == 0) {
|
|
local_88[0] = 0;
|
|
}
|
|
else {
|
|
LoadfileSeg(acStack72, (char *)local_88, 0, 0x40);
|
|
}
|
|
return local_88[0];
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ ReleaseInGameCutscene()
|
|
// line 838, offset 0x000316ec
|
|
/* begin block 1 */
|
|
// Start line: 840
|
|
// Start offset: 0x000316EC
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 845
|
|
// Start offset: 0x00031748
|
|
// Variables:
|
|
// struct STREAM_SOURCE *pinfo; // $a0
|
|
// int i; // $s0
|
|
/* end block 1.1 */
|
|
// End offset: 0x00031978
|
|
// End Line: 917
|
|
/* end block 1 */
|
|
// End offset: 0x00031A20
|
|
// End Line: 943
|
|
|
|
/* begin block 2 */
|
|
// Start line: 1601
|
|
/* end block 2 */
|
|
// End Line: 1602
|
|
|
|
/* begin block 3 */
|
|
// Start line: 1715
|
|
/* end block 3 */
|
|
// End Line: 1716
|
|
|
|
/* begin block 4 */
|
|
// Start line: 1716
|
|
/* end block 4 */
|
|
// End Line: 1717
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void ReleaseInGameCutscene(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
PEDESTRIAN *pPVar1;
|
|
_PLAYER *p_Var2;
|
|
_PLAYER *p_Var3;
|
|
long lVar4;
|
|
long lVar5;
|
|
long lVar6;
|
|
int plr;
|
|
|
|
if ((gInGameChaseActive != 0) && (DAT_000d7c40 != 0)) {
|
|
_PLAYER_ARRAY_000d979c[0].padid = -0x80;
|
|
}
|
|
if (gInGameCutsceneActive != 0) {
|
|
PingOutAllCivCarsAndCopCars();
|
|
InitCivCars();
|
|
if (CutsceneStreamIndex < NumReplayStreams) {
|
|
plr = CutsceneStreamIndex;
|
|
do {
|
|
if ((PlayerStartInfo8[plr]->flags & 4) == 0) {
|
|
DestroyPlayer(plr, 1);
|
|
}
|
|
else {
|
|
p_Var2 = &player + plr;
|
|
p_Var3 = &player;
|
|
do {
|
|
lVar4 = p_Var2->pos[1];
|
|
lVar5 = p_Var2->pos[2];
|
|
lVar6 = p_Var2->pos[3];
|
|
p_Var3->pos[0] = p_Var2->pos[0];
|
|
p_Var3->pos[1] = lVar4;
|
|
p_Var3->pos[2] = lVar5;
|
|
p_Var3->pos[3] = lVar6;
|
|
p_Var2 = (_PLAYER *)&p_Var2->dir;
|
|
p_Var3 = (_PLAYER *)&p_Var3->dir;
|
|
} while (p_Var2 != (_PLAYER *)&(&player)[plr].crash_timer);
|
|
p_Var3->pos[0] = p_Var2->pos[0];
|
|
if (player.playerType == '\x02') {
|
|
(player.pPed)->padId = '\0';
|
|
SavedWorldCentreCarId = -1;
|
|
pPVar1 = player.pPed;
|
|
}
|
|
else {
|
|
Swap2Cars((int)player.playerCarId, 0);
|
|
SavedWorldCentreCarId = (int)player.playerCarId;
|
|
pPVar1 = (PEDESTRIAN *)&car_data[SavedWorldCentreCarId].hd.where;
|
|
*(undefined4 *)car_data[SavedWorldCentreCarId].ai = 0xd9772;
|
|
}
|
|
SavedSpoolXZ = (VECTOR *)&pPVar1->position;
|
|
SavedCameraCarId = SavedWorldCentreCarId;
|
|
DestroyPlayer(plr, 0);
|
|
}
|
|
plr = plr + 1;
|
|
} while (plr < NumReplayStreams);
|
|
}
|
|
gThePlayerCar = -1;
|
|
player.targetCarId = -1;
|
|
DestroyCivPedestrians();
|
|
AdjustPlayerCarVolume();
|
|
plr = (int)player.playerCarId;
|
|
player.padid = '\0';
|
|
player.worldCentreCarId = (char)SavedWorldCentreCarId;
|
|
player.spoolXZ = SavedSpoolXZ;
|
|
player.cameraCarId = (char)SavedCameraCarId;
|
|
if (plr != -1) {
|
|
*(undefined4 *)car_data[plr].ai = 0xd9772;
|
|
car_data[plr].controlType = '\x01';
|
|
}
|
|
cameraview = (byte)SavedCameraView;
|
|
gCameraAngle = SavedCameraAngle;
|
|
InitCamera(&player);
|
|
player.cameraAngle = 0;
|
|
player.cameraDist = 1000;
|
|
CutsceneEventTrigger = 0;
|
|
}
|
|
if (CutsceneReplayStart != (char *)0x0) {
|
|
replayptr = CutsceneReplayStart;
|
|
}
|
|
NumReplayStreams = NumReplayStreams - NumCutsceneStreams;
|
|
CutsceneReplayStart = (char *)0x0;
|
|
CutsceneStreamIndex = 0;
|
|
NumCutsceneStreams = 0;
|
|
PreLoadedCutscene = -1;
|
|
gHaveInGameCutscene = 0;
|
|
gCSDestroyPlayer = 0;
|
|
CutsceneLength = 0;
|
|
BlackBorderHeight = 0;
|
|
CutsceneCamera = (PLAYBACKCAMERA *)0x0;
|
|
gInGameChaseActive = 0;
|
|
gInGameCutsceneActive = 0;
|
|
CutsceneFrameCnt = 0;
|
|
gInGameCutsceneDelay = 0;
|
|
gStopPadReads = 0;
|
|
xa_timeout = 0x46;
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ PreLoadInGameCutscene(int chase /*$a0*/)
|
|
// line 951, offset 0x000328c8
|
|
/* begin block 1 */
|
|
// Start line: 3054
|
|
/* end block 1 */
|
|
// End Line: 3055
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3176
|
|
/* end block 2 */
|
|
// End Line: 3177
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3177
|
|
/* end block 3 */
|
|
// End Line: 3178
|
|
|
|
// [D]
|
|
int PreLoadInGameCutscene(int chase)
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = LoadInGameCutscene(chase);
|
|
return (uint)(iVar1 != 0);
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ CutsceneCameraChange(int cameracnt /*$s0*/)
|
|
// line 965, offset 0x000328e8
|
|
/* begin block 1 */
|
|
// Start line: 3204
|
|
/* end block 1 */
|
|
// End Line: 3205
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3212
|
|
/* end block 2 */
|
|
// End Line: 3213
|
|
|
|
int CutsceneCameraChange(int cameracnt)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
cameracnt = cameracnt - CutsceneCameraOffset;
|
|
if (CutNextChange->FrameCnt != cameracnt) {
|
|
if (cameracnt < CutNextChange->FrameCnt) {
|
|
IsMovingCamera(CutLastChange, CutNextChange, cameracnt);
|
|
return 0;
|
|
}
|
|
if (CutNextChange->next == -2) {
|
|
return 0;
|
|
}
|
|
}
|
|
if ((CutLastChange != CutNextChange) && (-1 < (CutNextChange->angle).pad)) {
|
|
(CutNextChange->angle).pad = (CutNextChange->angle).pad + (short)CutsceneStreamIndex;
|
|
}
|
|
SetPlaybackCamera(CutNextChange);
|
|
if (-1 < cameracnt) {
|
|
InvalidCamera((int)player.cameraCarId);
|
|
CutLastChange = CutNextChange;
|
|
FindNextCutChange(cameracnt + 1);
|
|
}
|
|
return 1;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ LoadInGameCutscene(int subindex /*$s1*/)
|
|
// line 1010, offset 0x000329b4
|
|
/* begin block 1 */
|
|
// Start line: 1011
|
|
// Start offset: 0x000329B4
|
|
// Variables:
|
|
// int ret; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x00032A34
|
|
// End Line: 1033
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3298
|
|
/* end block 2 */
|
|
// End Line: 3299
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3301
|
|
/* end block 3 */
|
|
// End Line: 3302
|
|
|
|
int LoadInGameCutscene(int subindex)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int iVar1;
|
|
|
|
if (CutsceneInReplayBuffer == 0) {
|
|
iVar1 = LoadCutsceneToBuffer(subindex);
|
|
if (iVar1 != 0) {
|
|
iVar1 = LoadCutsceneToReplayBuffer(0);
|
|
if (iVar1 != 0) {
|
|
CutsceneInReplayBuffer = 1;
|
|
PreLoadedCutscene = subindex;
|
|
}
|
|
FreeCutsceneBuffer();
|
|
}
|
|
}
|
|
else {
|
|
iVar1 = LoadCutsceneToBuffer(subindex);
|
|
}
|
|
return iVar1;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ TriggerInGameCutsceneSystem(int cutscene /*$a0*/)
|
|
// line 1040, offset 0x00031a20
|
|
/* begin block 1 */
|
|
// Start line: 1041
|
|
// Start offset: 0x00031A20
|
|
// Variables:
|
|
// static char padid[8]; // offset 0x0
|
|
// int bDamageOverride; // stack offset -64
|
|
// int i; // $s2
|
|
// int id; // $v1
|
|
|
|
/* begin block 1.1 */
|
|
// Start line: 1058
|
|
// Start offset: 0x00031A64
|
|
|
|
/* begin block 1.1.1 */
|
|
// Start line: 1094
|
|
// Start offset: 0x00031BC4
|
|
// Variables:
|
|
// int car; // $v1
|
|
// int model; // $v1
|
|
// int palette; // $a1
|
|
/* end block 1.1.1 */
|
|
// End offset: 0x00031C1C
|
|
// End Line: 1105
|
|
|
|
/* begin block 1.1.2 */
|
|
// Start line: 1125
|
|
// Start offset: 0x00031CAC
|
|
|
|
/* begin block 1.1.2.1 */
|
|
// Start line: 1130
|
|
// Start offset: 0x00031D0C
|
|
// Variables:
|
|
// int car; // $v1
|
|
/* end block 1.1.2.1 */
|
|
// End offset: 0x00031D90
|
|
// End Line: 1144
|
|
/* end block 1.1.2 */
|
|
// End offset: 0x00031D90
|
|
// End Line: 1152
|
|
/* end block 1.1 */
|
|
// End offset: 0x00031EA0
|
|
// End Line: 1186
|
|
/* end block 1 */
|
|
// End offset: 0x00031EDC
|
|
// End Line: 1191
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2105
|
|
/* end block 2 */
|
|
// End Line: 2106
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2203
|
|
/* end block 3 */
|
|
// End Line: 2204
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2209
|
|
/* end block 4 */
|
|
// End Line: 2210
|
|
|
|
int TriggerInGameCutsceneSystem(int cutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
uchar uVar1;
|
|
ushort uVar2;
|
|
bool bVar3;
|
|
int iVar4;
|
|
_CAR_DATA *cp;
|
|
REPLAY_STREAM *pRVar5;
|
|
int player_id;
|
|
long(*startPos)[4];
|
|
int iVar6;
|
|
int iVar7;
|
|
int local_40;
|
|
int local_3c;
|
|
int local_38;
|
|
char *local_34;
|
|
long(*local_30)[4];
|
|
int local_2c;
|
|
|
|
if ((-1 < cutscene) &&
|
|
(gHaveInGameCutscene = LoadCutsceneInformation(cutscene), gHaveInGameCutscene != 0)) {
|
|
PingOutAllCivCarsAndCopCars();
|
|
InitCivCars();
|
|
DestroyCivPedestrians();
|
|
if (CutsceneStreamIndex <= (int)player.playerCarId) {
|
|
Swap2Cars((int)player.playerCarId, 0);
|
|
SavedCameraCarId = (int)player.cameraCarId;
|
|
SavedWorldCentreCarId = (int)player.playerCarId;
|
|
SavedSpoolXZ = player.spoolXZ;
|
|
}
|
|
if (CutsceneEventTrigger != 0) {
|
|
TriggerEvent(CutsceneEventTrigger);
|
|
}
|
|
gThePlayerCar = -1;
|
|
local_2c = CutsceneStreamIndex * 4;
|
|
if (CutsceneStreamIndex < NumReplayStreams) {
|
|
local_3c = CutsceneStreamIndex * 0x29c;
|
|
iVar6 = CutsceneStreamIndex * 0x74;
|
|
startPos = (long(*)[4])&ReplayStreams[CutsceneStreamIndex].SourceType.position;
|
|
pRVar5 = ReplayStreams + CutsceneStreamIndex;
|
|
local_34 = &(&player)[CutsceneStreamIndex].playerCarId;
|
|
player_id = CutsceneStreamIndex;
|
|
iVar7 = iVar6;
|
|
local_38 = local_3c;
|
|
local_30 = startPos;
|
|
do {
|
|
uVar2 = (pRVar5->SourceType).flags;
|
|
*(REPLAY_STREAM **)((int)PlayerStartInfo8 + local_2c) = pRVar5;
|
|
if (((((uVar2 & 4) != 0) && (gCSDestroyPlayer = 1, (pRVar5->SourceType).type == '\x01')) &&
|
|
(gThePlayerCar = player_id, gCutsceneAtEnd != 0)) && (player.playerType == '\x01')) {
|
|
uVar1 = *(uchar *)(MissionHeader->residentModels +
|
|
(byte)car_data[player.playerCarId].ap.model);
|
|
local_40 = 1;
|
|
(pRVar5->SourceType).palette = car_data[player.playerCarId].ap.palette;
|
|
gCutsceneAtEnd = 0;
|
|
(pRVar5->SourceType).model = uVar1;
|
|
}
|
|
uVar1 = (pRVar5->SourceType).type;
|
|
(&padid_33)[player_id] = -(char)player_id;
|
|
bVar3 = uVar1 == '\x02';
|
|
gStartOnFoot = ZEXT14(bVar3);
|
|
if ((bVar3) || (((pRVar5->SourceType).flags & 1) == 0)) {
|
|
TerminateSkidding(player_id);
|
|
cp = (_CAR_DATA *)((int)car_data[0].hd.where.m + local_38);
|
|
InitPlayer((_PLAYER *)((int)player.pos + iVar6), cp, (pRVar5->SourceType).controlType,
|
|
(uint)(pRVar5->SourceType).rotation, startPos, (uint)(pRVar5->SourceType).model,
|
|
(uint)(pRVar5->SourceType).palette, &padid_33 + player_id);
|
|
if (local_40 != 0) {
|
|
iVar4 = (int)player.playerCarId;
|
|
(&car_data[0].ap.needsDenting)[local_38] = '\x01';
|
|
*(short *)((int)car_data[0].ap.damage + local_38) = car_data[iVar4].ap.damage[0];
|
|
*(short *)((int)car_data[0].ap.damage + local_38 + 2) = car_data[iVar4].ap.damage[1];
|
|
*(short *)((int)car_data[0].ap.damage + local_38 + 4) = car_data[iVar4].ap.damage[2];
|
|
*(short *)((int)car_data[0].ap.damage + local_38 + 6) = car_data[iVar4].ap.damage[3];
|
|
*(short *)((int)car_data[0].ap.damage + local_38 + 8) = car_data[iVar4].ap.damage[4];
|
|
*(short *)((int)car_data[0].ap.damage + local_38 + 10) = car_data[iVar4].ap.damage[5];
|
|
local_40 = 0;
|
|
*(ushort *)((int)&car_data[0].totalDamage + local_38) = car_data[iVar4].totalDamage;
|
|
DentCar(cp);
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = CreateStationaryCivCar
|
|
((uint)(pRVar5->SourceType).rotation, 0, 0x400, local_30,
|
|
(uint)(pRVar5->SourceType).model, (uint)(pRVar5->SourceType).palette, 0);
|
|
if (iVar4 != -1) {
|
|
*local_34 = (char)iVar4;
|
|
SetNullPlayer(player_id);
|
|
}
|
|
}
|
|
if (player_id == CutsceneStreamIndex) {
|
|
if (gStartOnFoot == 0) {
|
|
player.spoolXZ = (VECTOR *)((int)car_data[0].hd.where.t + local_3c);
|
|
player.worldCentreCarId = (char)CutsceneStreamIndex;
|
|
}
|
|
else {
|
|
player.worldCentreCarId = -1;
|
|
player.spoolXZ = (VECTOR *)(*(int *)((int)&player.pPed + iVar7) + 0x14);
|
|
}
|
|
}
|
|
if (CutsceneLength < pRVar5->length) {
|
|
CutsceneLength = pRVar5->length;
|
|
}
|
|
iVar7 = iVar7 + 0x74;
|
|
startPos = (long(*)[4])(startPos + 4 + 1);
|
|
iVar6 = iVar6 + 0x74;
|
|
pRVar5 = pRVar5 + 1;
|
|
player_id = player_id + 1;
|
|
local_3c = local_3c + 0x29c;
|
|
local_38 = local_38 + 0x29c;
|
|
local_34 = local_34 + 0x74;
|
|
local_30 = (long(*)[4])(local_30 + 4 + 1);
|
|
local_2c = local_2c + 4;
|
|
} while (player_id < NumReplayStreams);
|
|
}
|
|
CutsceneCameraOffset = CameraCnt + 1;
|
|
CutNextChange = CutsceneCamera;
|
|
CutLastChange = (PLAYBACKCAMERA *)0x0;
|
|
return 1;
|
|
}
|
|
ShowCutsceneError();
|
|
return 0;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ SetNullPlayer(int plr /*$a0*/)
|
|
// line 1199, offset 0x00031edc
|
|
/* begin block 1 */
|
|
// Start line: 1200
|
|
// Start offset: 0x00031EDC
|
|
/* end block 1 */
|
|
// End offset: 0x00031F60
|
|
// End Line: 1213
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2628
|
|
/* end block 2 */
|
|
// End Line: 2629
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2637
|
|
/* end block 3 */
|
|
// End Line: 2638
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2640
|
|
/* end block 4 */
|
|
// End Line: 2641
|
|
|
|
void SetNullPlayer(int plr)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
|
|
iVar1 = (int)(&player)[plr].playerCarId;
|
|
if (iVar1 != -1) {
|
|
car_data[iVar1].controlType = '\x02';
|
|
car_data[iVar1].ai[0xf9] = 3;
|
|
car_data[iVar1].ai[0xc] = 7;
|
|
*(undefined4 *)(car_data[iVar1].ai + 8) = 0;
|
|
(&player)[plr].playerCarId = -1;
|
|
}
|
|
(&player)[plr].playerType = '\x03';
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ SetNullPlayerDontKill(int plr /*$a0*/)
|
|
// line 1221, offset 0x00031f60
|
|
/* begin block 1 */
|
|
// Start line: 1222
|
|
// Start offset: 0x00031F60
|
|
/* end block 1 */
|
|
// End offset: 0x00031FE0
|
|
// End Line: 1235
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2675
|
|
/* end block 2 */
|
|
// End Line: 2676
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2684
|
|
/* end block 3 */
|
|
// End Line: 2685
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2687
|
|
/* end block 4 */
|
|
// End Line: 2688
|
|
|
|
void SetNullPlayerDontKill(int plr)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
|
|
iVar1 = (int)(&player)[plr].playerCarId;
|
|
if (iVar1 != -1) {
|
|
car_data[iVar1].controlType = '\a';
|
|
car_data[iVar1].ai[0xf9] = 3;
|
|
car_data[iVar1].ai[0xc] = 7;
|
|
*(undefined4 *)(car_data[iVar1].ai + 8) = 0;
|
|
(&player)[plr].playerCarId = -1;
|
|
}
|
|
(&player)[plr].playerType = '\x03';
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ DestroyPlayer(int plr /*$s0*/, int fully /*$a1*/)
|
|
// line 1244, offset 0x00031fe0
|
|
/* begin block 1 */
|
|
// Start line: 2723
|
|
/* end block 1 */
|
|
// End Line: 2724
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2733
|
|
/* end block 2 */
|
|
// End Line: 2734
|
|
|
|
void DestroyPlayer(int plr, int fully)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
if ((PlayerStartInfo8[plr]->flags & 2) == 0) {
|
|
if (fully != 0) {
|
|
if (((&player)[plr].playerType == '\x01') &&
|
|
((int)(&player)[plr].playerCarId != gThePlayerCar)) {
|
|
PingOutCar(car_data + (int)(&player)[plr].playerCarId);
|
|
}
|
|
if ((&player)[plr].pPed != (PEDESTRIAN *)0x0) {
|
|
DestroyPedestrian((&player)[plr].pPed);
|
|
}
|
|
}
|
|
(&player)[plr].playerType = '\x03';
|
|
(&player)[plr].playerCarId = -1;
|
|
(&player)[plr].pPed = (PEDESTRIAN *)0x0;
|
|
}
|
|
else {
|
|
SetNullPlayerDontKill(plr);
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ FindNextCutChange(int cameracnt /*$a0*/)
|
|
// line 1274, offset 0x00032a34
|
|
/* begin block 1 */
|
|
// Start line: 1275
|
|
// Start offset: 0x00032A34
|
|
// Variables:
|
|
// int found; // $t0
|
|
// int count; // $a3
|
|
// int nextframe; // $a2
|
|
/* end block 1 */
|
|
// End offset: 0x00032A98
|
|
// End Line: 1291
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3587
|
|
/* end block 2 */
|
|
// End Line: 3588
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3829
|
|
/* end block 3 */
|
|
// End Line: 3830
|
|
|
|
/* begin block 4 */
|
|
// Start line: 3830
|
|
/* end block 4 */
|
|
// End Line: 3831
|
|
|
|
void FindNextCutChange(int cameracnt)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
bool bVar1;
|
|
int iVar2;
|
|
PLAYBACKCAMERA *pPVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
|
|
bVar1 = false;
|
|
iVar4 = 0x186a1;
|
|
iVar5 = 0x3b;
|
|
pPVar3 = CutsceneCamera;
|
|
do {
|
|
iVar2 = pPVar3->FrameCnt;
|
|
if ((cameracnt <= iVar2) && (iVar2 < iVar4)) {
|
|
bVar1 = true;
|
|
iVar4 = iVar2;
|
|
CutNextChange = pPVar3;
|
|
}
|
|
iVar5 = iVar5 + -1;
|
|
pPVar3 = pPVar3 + 1;
|
|
} while (-1 < iVar5);
|
|
if (!bVar1) {
|
|
CutNextChange->next = -2;
|
|
}
|
|
return;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ LoadCutsceneToReplayBuffer(int residentCutscene /*$a0*/)
|
|
// line 1299, offset 0x00032118
|
|
/* begin block 1 */
|
|
// Start line: 1301
|
|
// Start offset: 0x00032118
|
|
// Variables:
|
|
// struct REPLAY_SAVE_HEADER *rheader; // $a1
|
|
// struct REPLAY_STREAM_HEADER *sheader; // $t1
|
|
// char filename[64]; // stack offset -88
|
|
// char *pt; // $s1
|
|
// int i; // $a0
|
|
// int size; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x0003243C
|
|
// End Line: 1355
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2846
|
|
/* end block 2 */
|
|
// End Line: 2847
|
|
|
|
/* begin block 3 */
|
|
// Start line: 2847
|
|
/* end block 3 */
|
|
// End Line: 2848
|
|
|
|
/* begin block 4 */
|
|
// Start line: 2852
|
|
/* end block 4 */
|
|
// End Line: 2853
|
|
|
|
int LoadCutsceneToReplayBuffer(int residentCutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
bool bVar1;
|
|
char *__dest;
|
|
int iVar2;
|
|
REPLAY_STREAM *pRVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
_PING_PACKET *p_Var6;
|
|
_PING_PACKET *p_Var7;
|
|
int *piVar8;
|
|
_PING_PACKET _Var9;
|
|
_PING_PACKET _Var10;
|
|
_PING_PACKET _Var11;
|
|
int iVar12;
|
|
long lVar13;
|
|
long lVar14;
|
|
uint __n;
|
|
int *piVar15;
|
|
|
|
piVar15 = (int *)CutsceneBuffer.residentPointers[residentCutscene];
|
|
if (((piVar15 == (int *)0x0) || (*piVar15 != 0x14793209)) ||
|
|
(*(_func_4 *)((int)piVar15 + 7) == (_func_4)0x0)) {
|
|
ShowCutsceneError();
|
|
iVar2 = 0;
|
|
}
|
|
else {
|
|
CutsceneStreamIndex = NumReplayStreams;
|
|
NumCutsceneStreams = ZEXT14((byte)*(_func_4 *)((int)piVar15 + 7));
|
|
iVar4 = NumReplayStreams + (uint)(byte)*(_func_4 *)((int)piVar15 + 7);
|
|
CutsceneReplayStart = replayptr;
|
|
CutsceneEventTrigger = ZEXT14((byte)*(_func_4 *)((int)piVar15 + 10));
|
|
bVar1 = NumReplayStreams < iVar4;
|
|
piVar15 = piVar15 + 0x47;
|
|
iVar2 = NumReplayStreams;
|
|
NumReplayStreams = iVar4;
|
|
if (bVar1) {
|
|
do {
|
|
pRVar3 = ReplayStreams + iVar2;
|
|
iVar4 = iVar2 + 1;
|
|
piVar5 = piVar15;
|
|
do {
|
|
iVar12 = piVar5[1];
|
|
lVar13 = piVar5[2];
|
|
lVar14 = piVar5[3];
|
|
*(int *)&pRVar3->SourceType = *piVar5;
|
|
*(int *)&(pRVar3->SourceType).flags = iVar12;
|
|
(pRVar3->SourceType).position.vx = lVar13;
|
|
(pRVar3->SourceType).position.vy = lVar14;
|
|
__dest = replayptr;
|
|
piVar5 = piVar5 + 4;
|
|
pRVar3 = (REPLAY_STREAM *)&(pRVar3->SourceType).position.vz;
|
|
} while (piVar5 != piVar15 + 0xc);
|
|
*(char **)&ReplayStreams[iVar2].InitialPadRecordBuffer = replayptr;
|
|
*(char **)&ReplayStreams[iVar2].PadRecordBuffer = __dest;
|
|
ReplayStreams[iVar2].PadRecordBufferEnd = (PADRECORD *)(__dest + piVar15[0xc]);
|
|
ReplayStreams[iVar2].length = piVar15[0xd];
|
|
ReplayStreams[iVar2].playbackrun = '\0';
|
|
__n = piVar15[0xc] + 3U & 0xfffffffc;
|
|
memcpy(__dest, piVar15 + 0xe, __n);
|
|
replayptr = replayptr + __n;
|
|
piVar15 = (int *)((int)(piVar15 + 0xe) + __n);
|
|
iVar2 = iVar4;
|
|
} while (iVar4 < NumReplayStreams);
|
|
}
|
|
CutsceneCamera = (PLAYBACKCAMERA *)replayptr;
|
|
if ((((uint)piVar15 | (uint)replayptr) & 3) == 0) {
|
|
piVar5 = piVar15;
|
|
piVar8 = (int *)replayptr;
|
|
do {
|
|
iVar4 = piVar5[1];
|
|
iVar12 = piVar5[2];
|
|
iVar2 = piVar5[3];
|
|
*piVar8 = *piVar5;
|
|
piVar8[1] = iVar4;
|
|
piVar8[2] = iVar12;
|
|
piVar8[3] = iVar2;
|
|
piVar5 = piVar5 + 4;
|
|
piVar8 = piVar8 + 4;
|
|
} while (piVar5 != piVar15 + 0x21c);
|
|
}
|
|
else {
|
|
piVar5 = piVar15;
|
|
piVar8 = (int *)replayptr;
|
|
do {
|
|
iVar2 = piVar5[1];
|
|
iVar4 = piVar5[2];
|
|
iVar12 = piVar5[3];
|
|
*piVar8 = *piVar5;
|
|
piVar8[1] = iVar2;
|
|
piVar8[2] = iVar4;
|
|
piVar8[3] = iVar12;
|
|
piVar5 = piVar5 + 4;
|
|
piVar8 = piVar8 + 4;
|
|
} while (piVar5 != piVar15 + 0x21c);
|
|
}
|
|
p_Var7 = (_PING_PACKET *)(piVar15 + 0x21c);
|
|
replayptr = replayptr + 0x870;
|
|
p_Var6 = PingBuffer;
|
|
if ((((uint)p_Var7 | (uint)PingBuffer) & 3) == 0) {
|
|
do {
|
|
_Var10 = p_Var7[1];
|
|
_Var11 = p_Var7[2];
|
|
_Var9 = p_Var7[3];
|
|
*p_Var6 = *p_Var7;
|
|
p_Var6[1] = _Var10;
|
|
p_Var6[2] = _Var11;
|
|
p_Var6[3] = _Var9;
|
|
p_Var7 = p_Var7 + 4;
|
|
p_Var6 = p_Var6 + 4;
|
|
} while (p_Var7 != (_PING_PACKET *)(piVar15 + 0x3ac));
|
|
}
|
|
else {
|
|
do {
|
|
_Var9 = p_Var7[1];
|
|
_Var10 = p_Var7[2];
|
|
_Var11 = p_Var7[3];
|
|
*p_Var6 = *p_Var7;
|
|
p_Var6[1] = _Var9;
|
|
p_Var6[2] = _Var10;
|
|
p_Var6[3] = _Var11;
|
|
p_Var7 = p_Var7 + 4;
|
|
p_Var6 = p_Var6 + 4;
|
|
} while (p_Var7 != (_PING_PACKET *)(piVar15 + 0x3ac));
|
|
}
|
|
PingBufferPos = 0;
|
|
iVar2 = 1;
|
|
}
|
|
return iVar2;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ LoadCutsceneToBuffer(int subindex /*$s3*/)
|
|
// line 1362, offset 0x0003243c
|
|
/* begin block 1 */
|
|
// Start line: 1363
|
|
// Start offset: 0x0003243C
|
|
// Variables:
|
|
// struct CUTSCENE_HEADER header; // stack offset -440
|
|
// struct REPLAY_SAVE_HEADER rheader; // stack offset -376
|
|
// char filename[64]; // stack offset -88
|
|
// int offset; // $a2
|
|
// int size; // $s0
|
|
/* end block 1 */
|
|
// End offset: 0x000325C0
|
|
// End Line: 1440
|
|
|
|
/* begin block 2 */
|
|
// Start line: 3041
|
|
/* end block 2 */
|
|
// End Line: 3042
|
|
|
|
/* begin block 3 */
|
|
// Start line: 3049
|
|
/* end block 3 */
|
|
// End Line: 3050
|
|
|
|
/* begin block 4 */
|
|
// Start line: 3090
|
|
/* end block 4 */
|
|
// End Line: 3091
|
|
|
|
int LoadCutsceneToBuffer(int subindex)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int offset;
|
|
uint loadsize;
|
|
char acStack440[4];
|
|
ushort auStack436[174];
|
|
char acStack88[64];
|
|
|
|
if (gCurrentMissionNumber < 0x15) {
|
|
sprintf(acStack88, s_REPLAYS_CUT_d_R_0001058c);
|
|
}
|
|
else {
|
|
sprintf(acStack88, s_REPLAYS_A_CUT_d_R_0001059c);
|
|
}
|
|
offset = FileExists(acStack88);
|
|
if (offset != 0) {
|
|
LoadfileSeg(acStack88, acStack440, 0, 0x40);
|
|
if (auStack436[subindex * 2] != 0xffff) {
|
|
offset = (uint)auStack436[subindex * 2] << 2;
|
|
loadsize = (uint)auStack436[subindex * 2 + 1];
|
|
if (CutsceneBuffer.bytesFree < (int)loadsize) {
|
|
leadAILoaded = 0;
|
|
pathAILoaded = 0;
|
|
CutsceneBuffer.currentPointer = popNode;
|
|
CutsceneBuffer.bytesFree = 0xc000;
|
|
LoadfileSeg(acStack88, (char *)popNode, offset, loadsize);
|
|
}
|
|
else {
|
|
LoadfileSeg(acStack88, (char *)CutsceneBuffer.currentPointer, offset, loadsize);
|
|
}
|
|
CutsceneBuffer.residentCutscenes[CutsceneBuffer.numResident] = (uchar)subindex;
|
|
CutsceneBuffer.residentPointers[CutsceneBuffer.numResident] = CutsceneBuffer.currentPointer;
|
|
CutsceneBuffer.numResident = CutsceneBuffer.numResident + 1;
|
|
CutsceneBuffer.currentPointer = (code *)((char *)CutsceneBuffer.currentPointer + loadsize);
|
|
CutsceneBuffer.bytesFree = CutsceneBuffer.bytesFree - loadsize;
|
|
return 1;
|
|
}
|
|
}
|
|
ShowCutsceneError();
|
|
return 0;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ ShowCutsceneError()
|
|
// line 1442, offset 0x00032c08
|
|
/* begin block 1 */
|
|
// Start line: 4288
|
|
/* end block 1 */
|
|
// End Line: 4289
|
|
|
|
/* begin block 2 */
|
|
// Start line: 2884
|
|
/* end block 2 */
|
|
// End Line: 2885
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4309
|
|
/* end block 3 */
|
|
// End Line: 4310
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void ShowCutsceneError(void)
|
|
{
|
|
// TODO: some debug codes
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ LoadCutsceneInformation(int cutscene /*$s2*/)
|
|
// line 1471, offset 0x00032a98
|
|
/* begin block 1 */
|
|
// Start line: 1472
|
|
// Start offset: 0x00032A98
|
|
// Variables:
|
|
// int i; // $s1
|
|
/* end block 1 */
|
|
// End offset: 0x00032B54
|
|
// End Line: 1498
|
|
|
|
/* begin block 2 */
|
|
// Start line: 4048
|
|
/* end block 2 */
|
|
// End Line: 4049
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4229
|
|
/* end block 3 */
|
|
// End Line: 4230
|
|
|
|
/* begin block 4 */
|
|
// Start line: 4232
|
|
/* end block 4 */
|
|
// End Line: 4233
|
|
|
|
int LoadCutsceneInformation(int cutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
int residentCutscene;
|
|
int iVar1;
|
|
byte *pbVar2;
|
|
|
|
if (cutscene == PreLoadedCutscene) {
|
|
PreLoadedCutscene = -1;
|
|
residentCutscene = 1;
|
|
}
|
|
else {
|
|
ReleaseInGameCutscene();
|
|
pbVar2 = CutsceneBuffer.residentCutscenes;
|
|
residentCutscene = 0;
|
|
do {
|
|
if ((cutscene == (uint)*pbVar2) &&
|
|
(iVar1 = LoadCutsceneToReplayBuffer(residentCutscene), iVar1 != 0)) {
|
|
*pbVar2 = 0xff;
|
|
CutsceneBuffer.residentPointers[residentCutscene] = (_func_4 *)0x0;
|
|
return 1;
|
|
}
|
|
iVar1 = residentCutscene + 1;
|
|
pbVar2 = CutsceneBuffer.residentCutscenes + residentCutscene + 1;
|
|
residentCutscene = iVar1;
|
|
} while (iVar1 < 4);
|
|
residentCutscene = 0;
|
|
}
|
|
return residentCutscene;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// void /*$ra*/ FreeCutsceneBuffer()
|
|
// line 1505, offset 0x00032b54
|
|
/* begin block 1 */
|
|
// Start line: 1507
|
|
// Start offset: 0x00032B54
|
|
// Variables:
|
|
// int i; // $v1
|
|
/* end block 1 */
|
|
// End offset: 0x00032BC0
|
|
// End Line: 1518
|
|
|
|
/* begin block 2 */
|
|
// Start line: 4307
|
|
/* end block 2 */
|
|
// End Line: 4308
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4315
|
|
/* end block 3 */
|
|
// End Line: 4316
|
|
|
|
/* begin block 4 */
|
|
// Start line: 4316
|
|
/* end block 4 */
|
|
// End Line: 4317
|
|
|
|
/* begin block 5 */
|
|
// Start line: 4318
|
|
/* end block 5 */
|
|
// End Line: 4319
|
|
|
|
/* WARNING: Unknown calling convention yet parameter storage is locked */
|
|
|
|
void FreeCutsceneBuffer(void)
|
|
{
|
|
UNIMPLEMENTED();
|
|
/*
|
|
int iVar1;
|
|
_func_4 **pp_Var2;
|
|
|
|
iVar1 = 0;
|
|
pp_Var2 = CutsceneBuffer.residentPointers;
|
|
do {
|
|
CutsceneBuffer.residentCutscenes[iVar1] = -1;
|
|
*pp_Var2 = (_func_4 *)0x0;
|
|
iVar1 = iVar1 + 1;
|
|
pp_Var2 = pp_Var2 + 1;
|
|
} while (iVar1 < 4);
|
|
CutsceneBuffer.numResident = 0;
|
|
CutsceneBuffer.currentPointer = CutsceneBuffer.buffer;
|
|
CutsceneBuffer.bytesFree = 0x2000;
|
|
ClearMem(CutsceneBuffer.buffer, 0x2000);
|
|
return;*/
|
|
}
|
|
|
|
|
|
|
|
// decompiled code
|
|
// original method signature:
|
|
// int /*$ra*/ IsCutsceneResident(int cutscene /*$a0*/)
|
|
// line 1520, offset 0x00032bc0
|
|
/* begin block 1 */
|
|
// Start line: 1521
|
|
// Start offset: 0x00032BC0
|
|
// Variables:
|
|
// int i; // $a1
|
|
/* end block 1 */
|
|
// End offset: 0x00032C08
|
|
// End Line: 1533
|
|
|
|
/* begin block 2 */
|
|
// Start line: 4349
|
|
/* end block 2 */
|
|
// End Line: 4350
|
|
|
|
/* begin block 3 */
|
|
// Start line: 4352
|
|
/* end block 3 */
|
|
// End Line: 4353
|
|
|
|
/* begin block 4 */
|
|
// Start line: 4355
|
|
/* end block 4 */
|
|
// End Line: 4356
|
|
|
|
int IsCutsceneResident(int cutscene)
|
|
{
|
|
UNIMPLEMENTED();
|
|
return 0;
|
|
/*
|
|
byte *pbVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
if (cutscene != PreLoadedCutscene) {
|
|
pbVar1 = CutsceneBuffer.residentCutscenes;
|
|
iVar2 = 0;
|
|
while (iVar3 = iVar2 + 1, cutscene != (uint)*pbVar1) {
|
|
pbVar1 = CutsceneBuffer.residentCutscenes + iVar2 + 1;
|
|
iVar2 = iVar3;
|
|
if (3 < iVar3) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
return 1;
|
|
*/
|
|
}
|
|
|
|
|
|
|
|
|
|
|