summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_demo.c38
-rw-r--r--src/code/z_message.c67
2 files changed, 38 insertions, 67 deletions
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 223f76b5a..8923669a7 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -488,6 +488,7 @@ void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
}
}
#else
+void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/func_800EADB0.s")
#endif
@@ -1111,8 +1112,6 @@ void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) {
}
}
-#ifdef NON_MATCHING
-// Some stack issues, and a few instructions in the "wrong" places
/**
* Loops over the cutscene data itself (`cutscenePtr`), applying the effects of each command instantaneously (for most
* commands).
@@ -1141,14 +1140,13 @@ void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) {
*/
void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutscenePtr) {
s32 i;
- s16 phi_s0;
- s32 totalEntries;
s32 j;
- u32 cmdType; // sp5C
s32 pad;
- s32 cmdEntries; // sp58
- s32 cutsceneEndFrame; // sp50
- s16 phi_s0_23;
+ s32 totalEntries;
+ u32 cmdType;
+ s32 cmdEntries;
+ s32 pad2;
+ s32 cutsceneEndFrame;
CsCmdBase* cmd;
// Read the command list count and the ending frame for this cutscene
@@ -1177,14 +1175,14 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
// Check special cases of command types. This are generic ActorActions
// Ranges: [0x64, 0x96), 0xC9, [0x1C2, 0x258)
if (((cmdType >= 100) && (cmdType < 150)) || (cmdType == 201) || ((cmdType >= 450) && (cmdType < 600))) {
- for (phi_s0 = 0; phi_s0 < ARRAY_COUNT(D_801F4DC8); phi_s0++) {
- if ((u16)cmdType == D_801F4DC8[phi_s0]) {
- func_800ECD7C(csCtx, &cutscenePtr, phi_s0);
+ for (j = 0; j < ARRAY_COUNT(D_801F4DC8); j = (s16)(j + 1)) {
+ if (D_801F4DC8[j] == (u16)cmdType) {
+ func_800ECD7C(csCtx, &cutscenePtr, j);
cmdType = -2;
break;
- } else if (D_801F4DC8[phi_s0] == 0) {
- D_801F4DC8[phi_s0] = cmdType;
- func_800ECD7C(csCtx, &cutscenePtr, phi_s0);
+ } else if (D_801F4DC8[j] == 0) {
+ D_801F4DC8[j] = cmdType;
+ func_800ECD7C(csCtx, &cutscenePtr, j);
cmdType = -2;
break;
}
@@ -1314,15 +1312,15 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
cutscenePtr += sizeof(s32);
for (j = 0; j < cmdEntries; j++) {
cmd = (CsCmdBase*)cutscenePtr;
- if ((csCtx->frames >= cmd->startFrame) && (csCtx->frames < cmd->endFrame)) {
- csCtx->playerAction = (CsCmdActorAction*)cutscenePtr;
+ if ((cmd->startFrame <= csCtx->frames) && (csCtx->frames < cmd->endFrame)) {
+ csCtx->playerAction = (CsCmdActorAction*)cmd;
}
cutscenePtr += sizeof(CsCmdActorAction);
}
break;
case CS_CMD_CAMERA:
- cutscenePtr = &cutscenePtr[Cutscene_Command_Camera(play, cutscenePtr)];
+ cutscenePtr += Cutscene_Command_Camera(play, cutscenePtr);
break;
case CS_CMD_TERMINATOR:
@@ -1349,7 +1347,7 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
for (j = 0; j < cmdEntries; j++) {
cmd = (CsCmdBase*)cutscenePtr;
if (cmd->base != 0xFFFF) {
- Cutscene_Command_Textbox(play, csCtx, (CsCmdTextbox*)cutscenePtr);
+ Cutscene_Command_Textbox(play, csCtx, (CsCmdTextbox*)cmd);
}
cutscenePtr += sizeof(CsCmdTextbox);
}
@@ -1395,10 +1393,6 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
}
}
}
-#else
-void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutscenePtr);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/Cutscene_ProcessCommands.s")
-#endif
/* End of command handling section */
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 14fe241c4..16e1203d7 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -254,62 +254,39 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s")
-#ifdef NON_EQUIVALENT
-extern u16* D_801D0188;
-extern s16* D_801D0250;
+extern u16 D_801D0188[][9];
+extern s16 D_801D0250[];
void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) {
- f32 sp3C;
- s16 temp_s0;
- s16 temp_s1;
- s16 temp_s1_2;
+ MessageContext* msgCtx = &play->msgCtx;
+ PauseContext* pauseCtx = &play->pauseCtx;
s16 temp_s6;
- s32 temp_s2;
- s32 temp_s2_2;
- u16* temp_v0;
+ s16 temp_s1 = *arg3;
+ s32 temp_s2 = *arg1;
+ f32 sp3C = *arg2;
s16 phi_v0;
s16 phi_s0;
- s16 phi_s1;
- s32 phi_s2;
- s16 phi_s1_2;
- s32 phi_s2_2;
-
- temp_s1 = *arg3;
- temp_s2 = *arg1;
- sp3C = *arg2;
+
if ((func_8010A0A4(play) != 0) || (play->sceneNum == 0x4F)) {
phi_v0 = 0xA;
} else {
- phi_v0 = play->pauseCtx.unk_238[PAUSE_WORLD_MAP];
+ phi_v0 = pauseCtx->unk_238[PAUSE_WORLD_MAP];
}
- temp_s6 = *(&D_801D0250 + (phi_v0 * 2));
- phi_s0 = 0;
- phi_s1_2 = temp_s1;
- phi_s2_2 = temp_s2;
- if ((s32)temp_s6 > 0) {
- phi_s1 = temp_s1;
- phi_s2 = temp_s2;
- do {
- temp_v0 = (phi_v0 * 0x12) + &D_801D0188 + (phi_s0 * 2);
- (play + 0x4908 + (phi_s1 * 2))->decodedBuffer = (u16)*temp_v0;
- Font_LoadChar(play, *temp_v0, phi_s2);
- temp_s0 = phi_s0 + 1;
- temp_s1_2 = phi_s1 + 1;
- temp_s2_2 = phi_s2 + 0x80;
- phi_s0 = temp_s0;
- phi_s1 = temp_s1_2;
- phi_s2 = temp_s2_2;
- phi_s1_2 = temp_s1_2;
- phi_s2_2 = temp_s2_2;
- } while ((s32)temp_s0 < (s32)temp_s6);
+
+ temp_s6 = D_801D0250[phi_v0];
+
+ for (phi_s0 = 0; phi_s0 < temp_s6; phi_s0++, temp_s1++, temp_s2 += 0x80) {
+ msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[phi_v0][phi_s0];
+ Font_LoadChar(play, D_801D0188[phi_v0][phi_s0], temp_s2);
}
- *arg3 = phi_s1_2 - 1;
- *arg1 = phi_s2_2;
- *arg2 = sp3C + ((f32)(temp_s6 - 1) * (16.0f * play->msgCtx.unk12098));
+
+ temp_s1--;
+ sp3C += (temp_s6 - 1) * (16.0f * msgCtx->unk12098);
+
+ *arg3 = temp_s1;
+ *arg1 = temp_s2;
+ *arg2 = sp3C;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D62C.s")
-#endif
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D7B4.s")