summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorAlejandro Javier Asenjo Nitti <alejandro.asenjo88@gmail.com>2023-11-09 06:34:05 -0300
committerAlejandro Javier Asenjo Nitti <alejandro.asenjo88@gmail.com>2023-11-09 06:34:05 -0300
commitb1633ecd2d0848ef0fc4796919619829ee80a2b2 (patch)
tree4cad70bc0d77c0ca3115572fe3e8b06ece822edb /src/code
parent5c571c25937a60426d3f0ef95008c7bd7dc9cac9 (diff)
Message_Decode matching
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_message.c83
1 files changed, 37 insertions, 46 deletions
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 4d3379136..f4aa59a79 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -2152,34 +2152,29 @@ u16 D_801D027C[] = { 0x2001, 0x2003, 0x2004, 0x2002 };
// Counterpart to NES sMaskCodeTextENG
u16 D_801D0284[] = { 0x90D4, 0x90C2, 0x89A9, 0x97CE };
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/ZTbP4
void Message_Decode(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Font* font = &msgCtx->font; // spF0
Player* player; // spEC
s16 decodedBufPos; // spEA
+ s16 loadChar;
u32 timeToMoonCrash;
- s16 temp2;
+ s16 var_v0;
s16 spE0;
- s32 pad4;
+ u8* ptr2;
s16 digits[4]; // spD4/D6/D8/DA
s16 spD2;
f32 timeInSeconds;
s32 charTexIdx; // spC8
- s16 var_v0;
- s16 loadChar;
- f32 spC0;
f32 var_fs0;
+ f32 spC0;
s16 index;
s16 value;
s16 playerNameLen;
s16 i; // s1
+ u16 index2 = 0;
s16 spAC[4];
- u8 var_s3_8;
u16 curChar;
- u32 temp;
- u8* ptr2;
player = GET_PLAYER(play);
msgCtx->textDelayTimer = 0;
@@ -2219,6 +2214,7 @@ void Message_Decode(PlayState* play) {
}
}
} else {
+ u32 temp;
if ((msgCtx->textBoxType != TEXTBOX_TYPE_3) && (msgCtx->textBoxType != TEXTBOX_TYPE_4)) {
if (spE0 == 0) {
msgCtx->unk11FFA = msgCtx->textboxY + 0x16;
@@ -2228,13 +2224,9 @@ void Message_Decode(PlayState* play) {
}
}
- {
- s32 pad;
-
- if ((curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112)) {
- msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos + 1];
- msgCtx->msgBufPos += 2;
- }
+ if ((curChar == 0x110) || (curChar == 0x111) || (curChar == 0x112)) {
+ msgCtx->decodedBuffer.wchar[++decodedBufPos] = font->msgBuf.wchar[msgCtx->msgBufPos + 1];
+ msgCtx->msgBufPos += 2;
}
msgCtx->decodedTextLen = decodedBufPos;
@@ -2244,6 +2236,7 @@ void Message_Decode(PlayState* play) {
(msgCtx->textBoxType == TEXTBOX_TYPE_B) || (msgCtx->unk11F0C == 3)) {
msgCtx->textDrawPos = msgCtx->decodedTextLen;
}
+
msgCtx->unk120C8 = msgCtx->unk120CE;
msgCtx->unk120CA = msgCtx->unk120D0;
msgCtx->unk120CC = msgCtx->unk120D2;
@@ -2253,29 +2246,33 @@ void Message_Decode(PlayState* play) {
if (curChar == 0x100) {
for (playerNameLen = ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); playerNameLen > 0;
playerNameLen--) {
- if (gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1] != 0x3E) {
+ if (((void)0, gSaveContext.save.saveInfo.playerData.playerName[playerNameLen - 1]) != 0x3E) {
break;
}
}
for (i = 0; i < playerNameLen; i++) {
- ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.playerData.playerName[i]) *
- FONT_CHAR_TEX_SIZE];
+ curChar = gSaveContext.save.saveInfo.playerData.playerName[i];
+ index2 = (curChar & 0xFFFF);
+ ptr2 = &font->fontBuf[index2 * FONT_CHAR_TEX_SIZE];
msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x100;
for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) {
- font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] =
- ptr2[var_v0 + 0] & 0xFF; //! FAKE: Fixes later regalloc
+ font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 0] = ptr2[var_v0 + 0];
font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 1] = ptr2[var_v0 + 1];
font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 2] = ptr2[var_v0 + 2];
font->charBuf[font->unk_11D88][charTexIdx + var_v0 + 3] = ptr2[var_v0 + 3];
}
charTexIdx += FONT_CHAR_TEX_SIZE;
}
+ //! FAKE:
+ ptr2 = &font->fontBuf[index2 * FONT_CHAR_TEX_SIZE];
+
decodedBufPos += playerNameLen - 1;
spC0 += playerNameLen * (16.0f * msgCtx->textCharScale);
} else if (curChar == 0x201) {
- DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000, SEGMENT_ROM_START(message_texture_static), 0x900);
+ DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1000,
+ (uintptr_t)SEGMENT_ROM_START(message_texture_static), 0x900);
DmaMgr_SendRequest0(msgCtx->textboxSegment + 0x1900,
(uintptr_t)SEGMENT_ROM_START(message_texture_static) + 0x900, 0x900);
spE0 = 2;
@@ -2574,23 +2571,22 @@ void Message_Decode(PlayState* play) {
}
decodedBufPos--;
} else if (curChar == 0x223) {
- if (gSaveContext.save.timeSpeedOffset == 0x12) {
- var_s3_8 = 0;
- } else if (gSaveContext.save.timeSpeedOffset == 0) {
- var_s3_8 = 1;
+ if (((void)0, gSaveContext.save.timeSpeedOffset) == 0x12) {
+ index = 0;
+ } else if (((void)0, gSaveContext.save.timeSpeedOffset) == 0) {
+ index = 1;
} else {
- var_s3_8 = 2;
+ index = 2;
}
- for (i = 0; i < 3; i++) {
- msgCtx->decodedBuffer.wchar[decodedBufPos] = D_801D0268[var_s3_8][i];
- Font_LoadChar(play, D_801D0268[var_s3_8][i], charTexIdx);
- decodedBufPos++;
+ for (i = 0; i < 3; i++, decodedBufPos++) {
+ msgCtx->decodedBuffer.wchar[decodedBufPos] = D_801D0268[index][i];
+ Font_LoadChar(play, D_801D0268[index][i], charTexIdx);
charTexIdx += FONT_CHAR_TEX_SIZE;
}
decodedBufPos--;
spC0 += 3.0f * (16.0f * msgCtx->textCharScale);
- msgCtx->choiceIndex = var_s3_8;
+ msgCtx->choiceIndex = index;
} else if (curChar == 0x224) {
Message_LoadOwlWarpText(play, &charTexIdx, &spC0, &decodedBufPos);
} else if (curChar == 0x225) {
@@ -2849,9 +2845,9 @@ void Message_Decode(PlayState* play) {
spC0 += var_fs0 * (16.0f * msgCtx->textCharScale);
decodedBufPos--;
} else if ((curChar == 0x303) || (curChar == 0x304) || (curChar == 0x305)) {
- temp2 = HIGH_SCORE(curChar - 0x303 + HS_BOAT_ARCHERY);
+ value = HIGH_SCORE(curChar - 0x303 + HS_BOAT_ARCHERY);
digits[0] = digits[1] = digits[2] = 0;
- digits[3] = temp2;
+ digits[3] = value;
while (digits[3] >= 60) {
digits[1]++;
@@ -2915,20 +2911,19 @@ void Message_Decode(PlayState* play) {
}
Message_LoadChar(play, 0x9543, &charTexIdx, &spC0, decodedBufPos);
} else if ((curChar == 0x30D) || (curChar == 0x30E) || (curChar == 0x30F)) {
- //! Removing index and casting one version causes gSaveContext to be reloaded
- // index = curChar - 0x30D;
+ index = curChar - 0x30D;
for (playerNameLen = 8; playerNameLen > 0; playerNameLen--) {
- if (gSaveContext.save.saveInfo.inventory
- .dekuPlaygroundPlayerName[(s16)(curChar - 0x30D)][playerNameLen - 1] != 0x3E) {
+ if (gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[index][playerNameLen - 1] !=
+ 0x3E) {
break;
}
}
for (i = 0; i < playerNameLen; i++) {
- ptr2 = &font->fontBuf[((void)0, gSaveContext.save.saveInfo.inventory
- .dekuPlaygroundPlayerName[curChar - 0x30D][i]) *
- FONT_CHAR_TEX_SIZE];
+ curChar = ((void)0, gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[index][i]);
+ //! FAKE: 0xFFFF
+ ptr2 = &font->fontBuf[(curChar & 0xFFFF) * FONT_CHAR_TEX_SIZE];
msgCtx->decodedBuffer.wchar[decodedBufPos + i] = 0x30D;
for (var_v0 = 0; var_v0 < FONT_CHAR_TEX_SIZE; var_v0 += 4) {
@@ -3039,10 +3034,6 @@ void Message_Decode(PlayState* play) {
Message_DecodeNES(play);
}
}
-#else
-void Message_Decode(PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Decode.s")
-#endif
void func_80150A84(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;