mirror of
https://github.com/zeldaret/oot.git
synced 2025-02-04 02:44:24 +00:00
Match retail z_message_PAL.c (#1736)
This commit is contained in:
parent
d2a1abf8df
commit
10ebdf9ff5
1 changed files with 243 additions and 237 deletions
|
@ -291,17 +291,15 @@ void Message_GrowTextbox(MessageContext* msgCtx) {
|
||||||
void Message_FindMessage(PlayState* play, u16 textId) {
|
void Message_FindMessage(PlayState* play, u16 textId) {
|
||||||
const char* foundSeg;
|
const char* foundSeg;
|
||||||
const char* nextSeg;
|
const char* nextSeg;
|
||||||
|
Font* font = &play->msgCtx.font;
|
||||||
MessageTableEntry* messageTableEntry = sNesMessageEntryTablePtr;
|
MessageTableEntry* messageTableEntry = sNesMessageEntryTablePtr;
|
||||||
const char** languageSegmentTable;
|
const char** languageSegmentTable;
|
||||||
Font* font;
|
|
||||||
const char* seg;
|
const char* seg;
|
||||||
|
|
||||||
if (gSaveContext.language == LANGUAGE_ENG) {
|
if (gSaveContext.language == LANGUAGE_ENG) {
|
||||||
seg = messageTableEntry->segment;
|
seg = messageTableEntry->segment;
|
||||||
|
|
||||||
while (messageTableEntry->textId != 0xFFFF) {
|
while (messageTableEntry->textId != 0xFFFF) {
|
||||||
font = &play->msgCtx.font;
|
|
||||||
|
|
||||||
if (messageTableEntry->textId == textId) {
|
if (messageTableEntry->textId == textId) {
|
||||||
foundSeg = messageTableEntry->segment;
|
foundSeg = messageTableEntry->segment;
|
||||||
font->charTexBuf[0] = messageTableEntry->typePos;
|
font->charTexBuf[0] = messageTableEntry->typePos;
|
||||||
|
@ -323,8 +321,6 @@ void Message_FindMessage(PlayState* play, u16 textId) {
|
||||||
seg = messageTableEntry->segment;
|
seg = messageTableEntry->segment;
|
||||||
|
|
||||||
while (messageTableEntry->textId != 0xFFFF) {
|
while (messageTableEntry->textId != 0xFFFF) {
|
||||||
font = &play->msgCtx.font;
|
|
||||||
|
|
||||||
if (messageTableEntry->textId == textId) {
|
if (messageTableEntry->textId == textId) {
|
||||||
foundSeg = *languageSegmentTable;
|
foundSeg = *languageSegmentTable;
|
||||||
font->charTexBuf[0] = messageTableEntry->typePos;
|
font->charTexBuf[0] = messageTableEntry->typePos;
|
||||||
|
@ -344,7 +340,6 @@ void Message_FindMessage(PlayState* play, u16 textId) {
|
||||||
}
|
}
|
||||||
// "Message not found!!!"
|
// "Message not found!!!"
|
||||||
PRINTF(" メッセージが,見つからなかった!!! = %x\n", textId);
|
PRINTF(" メッセージが,見つからなかった!!! = %x\n", textId);
|
||||||
font = &play->msgCtx.font;
|
|
||||||
messageTableEntry = sNesMessageEntryTablePtr;
|
messageTableEntry = sNesMessageEntryTablePtr;
|
||||||
|
|
||||||
if (gSaveContext.language == LANGUAGE_ENG) {
|
if (gSaveContext.language == LANGUAGE_ENG) {
|
||||||
|
@ -368,13 +363,11 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId) {
|
||||||
const char* foundSeg;
|
const char* foundSeg;
|
||||||
const char* nextSeg;
|
const char* nextSeg;
|
||||||
const char* seg;
|
const char* seg;
|
||||||
|
Font* font = &play->msgCtx.font;
|
||||||
MessageTableEntry* messageTableEntry = sStaffMessageEntryTablePtr;
|
MessageTableEntry* messageTableEntry = sStaffMessageEntryTablePtr;
|
||||||
Font* font;
|
|
||||||
|
|
||||||
seg = messageTableEntry->segment;
|
seg = messageTableEntry->segment;
|
||||||
while (messageTableEntry->textId != 0xFFFF) {
|
while (messageTableEntry->textId != 0xFFFF) {
|
||||||
font = &play->msgCtx.font;
|
|
||||||
|
|
||||||
if (messageTableEntry->textId == textId) {
|
if (messageTableEntry->textId == textId) {
|
||||||
foundSeg = messageTableEntry->segment;
|
foundSeg = messageTableEntry->segment;
|
||||||
font->charTexBuf[0] = messageTableEntry->typePos;
|
font->charTexBuf[0] = messageTableEntry->typePos;
|
||||||
|
@ -981,7 +974,8 @@ void Message_DrawText(PlayState* play, Gfx** gfxP) {
|
||||||
sMessageHasSetSfx = true;
|
sMessageHasSetSfx = true;
|
||||||
// "Sound (SE)"
|
// "Sound (SE)"
|
||||||
PRINTF("サウンド(SE)\n");
|
PRINTF("サウンド(SE)\n");
|
||||||
sfxHi = msgCtx->msgBufDecoded[i + 1] << 8;
|
sfxHi = msgCtx->msgBufDecoded[i + 1];
|
||||||
|
sfxHi <<= 8;
|
||||||
Audio_PlaySfxGeneral(sfxHi | msgCtx->msgBufDecoded[i + 2], &gSfxDefaultPos, 4,
|
Audio_PlaySfxGeneral(sfxHi | msgCtx->msgBufDecoded[i + 2], &gSfxDefaultPos, 4,
|
||||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||||
}
|
}
|
||||||
|
@ -1369,8 +1363,8 @@ void Message_Decode(PlayState* play) {
|
||||||
}
|
}
|
||||||
if (loadChar) {
|
if (loadChar) {
|
||||||
Font_LoadChar(font, digits[i] + '0' - ' ', charTexIdx);
|
Font_LoadChar(font, digits[i] + '0' - ' ', charTexIdx);
|
||||||
msgCtx->msgBufDecoded[decodedBufPos] = digits[i] + '0';
|
|
||||||
charTexIdx += FONT_CHAR_TEX_SIZE;
|
charTexIdx += FONT_CHAR_TEX_SIZE;
|
||||||
|
msgCtx->msgBufDecoded[decodedBufPos] = digits[i] + '0';
|
||||||
PRINTF("%x(%x) ", digits[i] + '0' - ' ', digits[i]);
|
PRINTF("%x(%x) ", digits[i] + '0' - ' ', digits[i]);
|
||||||
decodedBufPos++;
|
decodedBufPos++;
|
||||||
}
|
}
|
||||||
|
@ -1390,8 +1384,8 @@ void Message_Decode(PlayState* play) {
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
if (i == 1 || digits[i] != 0) {
|
if (i == 1 || digits[i] != 0) {
|
||||||
Font_LoadChar(font, digits[i] + '0' - ' ', charTexIdx);
|
Font_LoadChar(font, digits[i] + '0' - ' ', charTexIdx);
|
||||||
msgCtx->msgBufDecoded[decodedBufPos] = digits[i] + '0';
|
|
||||||
charTexIdx += FONT_CHAR_TEX_SIZE;
|
charTexIdx += FONT_CHAR_TEX_SIZE;
|
||||||
|
msgCtx->msgBufDecoded[decodedBufPos] = digits[i] + '0';
|
||||||
PRINTF("%x(%x) ", digits[i] + '0' - ' ', digits[i]);
|
PRINTF("%x(%x) ", digits[i] + '0' - ' ', digits[i]);
|
||||||
decodedBufPos++;
|
decodedBufPos++;
|
||||||
}
|
}
|
||||||
|
@ -1579,9 +1573,10 @@ void Message_OpenText(PlayState* play, u16 textId) {
|
||||||
Font* font = &msgCtx->font;
|
Font* font = &msgCtx->font;
|
||||||
s16 textBoxType;
|
s16 textBoxType;
|
||||||
|
|
||||||
if (msgCtx->msgMode == MSGMODE_NONE) {
|
// clang-format off
|
||||||
gSaveContext.prevHudVisibilityMode = gSaveContext.hudVisibilityMode;
|
if (msgCtx->msgMode == MSGMODE_NONE) { gSaveContext.prevHudVisibilityMode = gSaveContext.hudVisibilityMode; }
|
||||||
}
|
// clang-format on
|
||||||
|
|
||||||
if (R_SCENE_CAM_TYPE == SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) {
|
if (R_SCENE_CAM_TYPE == SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) {
|
||||||
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE);
|
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE);
|
||||||
}
|
}
|
||||||
|
@ -1707,6 +1702,7 @@ void Message_StartTextbox(PlayState* play, u16 textId, Actor* actor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Message_ContinueTextbox(PlayState* play, u16 textId) {
|
void Message_ContinueTextbox(PlayState* play, u16 textId) {
|
||||||
|
s32 pad;
|
||||||
MessageContext* msgCtx = &play->msgCtx;
|
MessageContext* msgCtx = &play->msgCtx;
|
||||||
|
|
||||||
PRINTF(VT_FGCOL(GREEN));
|
PRINTF(VT_FGCOL(GREEN));
|
||||||
|
@ -2951,6 +2947,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
||||||
*p = gfx;
|
*p = gfx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if OOT_DEBUG
|
||||||
/**
|
/**
|
||||||
* If the s16 variable pointed to by `var` changes in value, a black bar and white box
|
* If the s16 variable pointed to by `var` changes in value, a black bar and white box
|
||||||
* are briefly drawn onto the screen. It can only watch one variable per build due to
|
* are briefly drawn onto the screen. It can only watch one variable per build due to
|
||||||
|
@ -3002,14 +2999,19 @@ void Message_DrawDebugText(PlayState* play, Gfx** p) {
|
||||||
*p = GfxPrint_Close(&printer);
|
*p = GfxPrint_Close(&printer);
|
||||||
GfxPrint_Destroy(&printer);
|
GfxPrint_Destroy(&printer);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void Message_Draw(PlayState* play) {
|
void Message_Draw(PlayState* play) {
|
||||||
Gfx* plusOne;
|
Gfx* plusOne;
|
||||||
Gfx* polyOpaP;
|
Gfx* polyOpaP;
|
||||||
|
|
||||||
|
#if OOT_DEBUG
|
||||||
s16 watchVar;
|
s16 watchVar;
|
||||||
|
#endif
|
||||||
|
|
||||||
OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554);
|
OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554);
|
||||||
|
|
||||||
|
#if OOT_DEBUG
|
||||||
watchVar = gSaveContext.save.info.scarecrowLongSongSet;
|
watchVar = gSaveContext.save.info.scarecrowLongSongSet;
|
||||||
Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx);
|
Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx);
|
||||||
if (BREG(0) != 0 && play->msgCtx.textId != 0) {
|
if (BREG(0) != 0 && play->msgCtx.textId != 0) {
|
||||||
|
@ -3021,6 +3023,8 @@ void Message_Draw(PlayState* play) {
|
||||||
POLY_OPA_DISP = plusOne;
|
POLY_OPA_DISP = plusOne;
|
||||||
}
|
}
|
||||||
if (1) {}
|
if (1) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
plusOne = Gfx_Open(polyOpaP = POLY_OPA_DISP);
|
plusOne = Gfx_Open(polyOpaP = POLY_OPA_DISP);
|
||||||
gSPDisplayList(OVERLAY_DISP++, plusOne);
|
gSPDisplayList(OVERLAY_DISP++, plusOne);
|
||||||
Message_DrawMain(play, &plusOne);
|
Message_DrawMain(play, &plusOne);
|
||||||
|
@ -3063,6 +3067,7 @@ void Message_Update(PlayState* play) {
|
||||||
s16 playerFocusScreenPosY;
|
s16 playerFocusScreenPosY;
|
||||||
s16 actorFocusScreenPosY;
|
s16 actorFocusScreenPosY;
|
||||||
|
|
||||||
|
#if OOT_DEBUG
|
||||||
if (BREG(0) != 0) {
|
if (BREG(0) != 0) {
|
||||||
if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN) && CHECK_BTN_ALL(input->cur.button, BTN_L)) {
|
if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN) && CHECK_BTN_ALL(input->cur.button, BTN_L)) {
|
||||||
PRINTF("msgno=%d\n", D_80153D78);
|
PRINTF("msgno=%d\n", D_80153D78);
|
||||||
|
@ -3088,256 +3093,257 @@ void Message_Update(PlayState* play) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (msgCtx->msgLength == 0) {
|
if (msgCtx->msgLength != 0) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (msgCtx->msgMode) {
|
switch (msgCtx->msgMode) {
|
||||||
case MSGMODE_TEXT_START:
|
case MSGMODE_TEXT_START:
|
||||||
D_8014B2F4++;
|
D_8014B2F4++;
|
||||||
|
|
||||||
var = false;
|
var = false;
|
||||||
if (R_SCENE_CAM_TYPE == SCENE_CAM_TYPE_FIXED_MARKET) {
|
if (R_SCENE_CAM_TYPE == SCENE_CAM_TYPE_FIXED_MARKET) {
|
||||||
if (D_8014B2F4 >= 4) {
|
if (D_8014B2F4 >= 4) {
|
||||||
|
var = true;
|
||||||
|
}
|
||||||
|
} else if (R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_DEFAULT ||
|
||||||
|
play->sceneId == SCENE_CASTLE_COURTYARD_GUARDS_DAY) {
|
||||||
|
var = true;
|
||||||
|
} else if (D_8014B2F4 >= 4 || msgCtx->talkActor == NULL) {
|
||||||
var = true;
|
var = true;
|
||||||
}
|
}
|
||||||
} else if (R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_DEFAULT ||
|
|
||||||
play->sceneId == SCENE_CASTLE_COURTYARD_GUARDS_DAY) {
|
|
||||||
var = true;
|
|
||||||
} else if (D_8014B2F4 >= 4 || msgCtx->talkActor == NULL) {
|
|
||||||
var = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (var) {
|
if (var) {
|
||||||
if (msgCtx->talkActor != NULL) {
|
if (msgCtx->talkActor != NULL) {
|
||||||
Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &focusScreenPosX, &playerFocusScreenPosY);
|
Actor_GetScreenPos(play, &GET_PLAYER(play)->actor, &focusScreenPosX, &playerFocusScreenPosY);
|
||||||
Actor_GetScreenPos(play, msgCtx->talkActor, &focusScreenPosX, &actorFocusScreenPosY);
|
Actor_GetScreenPos(play, msgCtx->talkActor, &focusScreenPosX, &actorFocusScreenPosY);
|
||||||
|
|
||||||
if (playerFocusScreenPosY >= actorFocusScreenPosY) {
|
if (playerFocusScreenPosY >= actorFocusScreenPosY) {
|
||||||
averageY = ((playerFocusScreenPosY - actorFocusScreenPosY) / 2) + actorFocusScreenPosY;
|
averageY = ((playerFocusScreenPosY - actorFocusScreenPosY) / 2) + actorFocusScreenPosY;
|
||||||
|
} else {
|
||||||
|
averageY = ((actorFocusScreenPosY - playerFocusScreenPosY) / 2) + playerFocusScreenPosY;
|
||||||
|
}
|
||||||
|
PRINTF("dxpos=%d dypos=%d dypos1 dypos2=%d\n", focusScreenPosX, averageY,
|
||||||
|
playerFocusScreenPosY, actorFocusScreenPosY);
|
||||||
} else {
|
} else {
|
||||||
averageY = ((actorFocusScreenPosY - playerFocusScreenPosY) / 2) + playerFocusScreenPosY;
|
R_TEXTBOX_X = R_TEXTBOX_X_TARGET;
|
||||||
|
R_TEXTBOX_Y = R_TEXTBOX_Y_TARGET;
|
||||||
}
|
}
|
||||||
PRINTF("dxpos=%d dypos=%d dypos1 dypos2=%d\n", focusScreenPosX, averageY, playerFocusScreenPosY,
|
|
||||||
actorFocusScreenPosY);
|
|
||||||
} else {
|
|
||||||
R_TEXTBOX_X = R_TEXTBOX_X_TARGET;
|
|
||||||
R_TEXTBOX_Y = R_TEXTBOX_Y_TARGET;
|
|
||||||
}
|
|
||||||
|
|
||||||
var = msgCtx->textBoxType;
|
var = msgCtx->textBoxType;
|
||||||
|
|
||||||
if (!msgCtx->textBoxPos) { // variable position
|
if (!msgCtx->textBoxPos) { // variable position
|
||||||
if (R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_DEFAULT ||
|
if (R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_DEFAULT ||
|
||||||
play->sceneId == SCENE_CASTLE_COURTYARD_GUARDS_DAY) {
|
play->sceneId == SCENE_CASTLE_COURTYARD_GUARDS_DAY) {
|
||||||
if (averageY < XREG(92)) {
|
if (averageY < XREG(92)) {
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
||||||
|
} else {
|
||||||
|
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
||||||
|
}
|
||||||
|
} else if (play->sceneId == SCENE_MARKET_DAY || play->sceneId == SCENE_MARKET_NIGHT ||
|
||||||
|
play->sceneId == SCENE_MARKET_RUINS) {
|
||||||
|
if (averageY < XREG(93)) {
|
||||||
|
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
||||||
|
} else {
|
||||||
|
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
if (averageY < XREG(94)) {
|
||||||
}
|
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
||||||
} else if (play->sceneId == SCENE_MARKET_DAY || play->sceneId == SCENE_MARKET_NIGHT ||
|
} else {
|
||||||
play->sceneId == SCENE_MARKET_RUINS) {
|
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
||||||
if (averageY < XREG(93)) {
|
}
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
|
||||||
} else {
|
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
|
||||||
}
|
}
|
||||||
|
} else if (msgCtx->textBoxPos == TEXTBOX_POS_TOP) {
|
||||||
|
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
||||||
|
} else if (msgCtx->textBoxPos == TEXTBOX_POS_MIDDLE) {
|
||||||
|
R_TEXTBOX_Y_TARGET = sTextboxMidYPositions[var];
|
||||||
} else {
|
} else {
|
||||||
if (averageY < XREG(94)) {
|
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
|
||||||
} else {
|
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (msgCtx->textBoxPos == TEXTBOX_POS_TOP) {
|
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxUpperYPositions[var];
|
|
||||||
} else if (msgCtx->textBoxPos == TEXTBOX_POS_MIDDLE) {
|
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxMidYPositions[var];
|
|
||||||
} else {
|
|
||||||
R_TEXTBOX_Y_TARGET = sTextboxLowerYPositions[var];
|
|
||||||
}
|
|
||||||
|
|
||||||
R_TEXTBOX_X_TARGET = sTextboxXPositions[var];
|
R_TEXTBOX_X_TARGET = sTextboxXPositions[var];
|
||||||
R_TEXTBOX_END_YPOS = sTextboxEndIconYOffset[var] + R_TEXTBOX_Y_TARGET;
|
R_TEXTBOX_END_YPOS = sTextboxEndIconYOffset[var] + R_TEXTBOX_Y_TARGET;
|
||||||
R_TEXT_CHOICE_YPOS(0) = R_TEXTBOX_Y_TARGET + 20;
|
R_TEXT_CHOICE_YPOS(0) = R_TEXTBOX_Y_TARGET + 20;
|
||||||
R_TEXT_CHOICE_YPOS(1) = R_TEXTBOX_Y_TARGET + 32;
|
R_TEXT_CHOICE_YPOS(1) = R_TEXTBOX_Y_TARGET + 32;
|
||||||
R_TEXT_CHOICE_YPOS(2) = R_TEXTBOX_Y_TARGET + 44;
|
R_TEXT_CHOICE_YPOS(2) = R_TEXTBOX_Y_TARGET + 44;
|
||||||
PRINTF("message->msg_disp_type=%x\n", msgCtx->textBoxProperties & 0xF0);
|
PRINTF("message->msg_disp_type=%x\n", msgCtx->textBoxProperties & 0xF0);
|
||||||
if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_BOTTOM ||
|
if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_BOTTOM ||
|
||||||
msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) {
|
msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) {
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_STARTING;
|
msgCtx->msgMode = MSGMODE_TEXT_STARTING;
|
||||||
R_TEXTBOX_X = R_TEXTBOX_X_TARGET;
|
R_TEXTBOX_X = R_TEXTBOX_X_TARGET;
|
||||||
R_TEXTBOX_Y = R_TEXTBOX_Y_TARGET;
|
R_TEXTBOX_Y = R_TEXTBOX_Y_TARGET;
|
||||||
R_TEXTBOX_WIDTH = 256;
|
R_TEXTBOX_WIDTH = 256;
|
||||||
R_TEXTBOX_HEIGHT = 64;
|
R_TEXTBOX_HEIGHT = 64;
|
||||||
R_TEXTBOX_TEXWIDTH = 512;
|
R_TEXTBOX_TEXWIDTH = 512;
|
||||||
R_TEXTBOX_TEXHEIGHT = 512;
|
R_TEXTBOX_TEXHEIGHT = 512;
|
||||||
} else {
|
} else {
|
||||||
Message_GrowTextbox(msgCtx);
|
Message_GrowTextbox(msgCtx);
|
||||||
Audio_PlaySfxIfNotInCutscene(NA_SE_NONE);
|
Audio_PlaySfxIfNotInCutscene(NA_SE_NONE);
|
||||||
msgCtx->stateTimer = 0;
|
msgCtx->stateTimer = 0;
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_BOX_GROWING;
|
msgCtx->msgMode = MSGMODE_TEXT_BOX_GROWING;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case MSGMODE_TEXT_BOX_GROWING:
|
||||||
case MSGMODE_TEXT_BOX_GROWING:
|
Message_GrowTextbox(msgCtx);
|
||||||
Message_GrowTextbox(msgCtx);
|
break;
|
||||||
break;
|
case MSGMODE_TEXT_STARTING:
|
||||||
case MSGMODE_TEXT_STARTING:
|
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
if (YREG(31) == 0) {
|
||||||
if (YREG(31) == 0) {
|
Interface_SetDoAction(play, DO_ACTION_NEXT);
|
||||||
Interface_SetDoAction(play, DO_ACTION_NEXT);
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case MSGMODE_TEXT_NEXT_MSG:
|
||||||
case MSGMODE_TEXT_NEXT_MSG:
|
|
||||||
Message_Decode(play);
|
|
||||||
if (sTextFade) {
|
|
||||||
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
|
|
||||||
}
|
|
||||||
if (D_80153D74 != 0) {
|
|
||||||
msgCtx->textDrawPos = msgCtx->decodedTextLen;
|
|
||||||
D_80153D74 = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSGMODE_TEXT_CONTINUING:
|
|
||||||
msgCtx->stateTimer--;
|
|
||||||
if (msgCtx->stateTimer == 0) {
|
|
||||||
Message_Decode(play);
|
Message_Decode(play);
|
||||||
}
|
if (sTextFade) {
|
||||||
break;
|
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
|
||||||
case MSGMODE_TEXT_DISPLAYING:
|
}
|
||||||
if (msgCtx->textBoxType != TEXTBOX_TYPE_NONE_BOTTOM && YREG(31) == 0 &&
|
if (D_80153D74 != 0) {
|
||||||
CHECK_BTN_ALL(play->state.input[0].press.button, BTN_B) && !msgCtx->textUnskippable) {
|
msgCtx->textDrawPos = msgCtx->decodedTextLen;
|
||||||
sTextboxSkipped = true;
|
D_80153D74 = 0;
|
||||||
msgCtx->textDrawPos = msgCtx->decodedTextLen;
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case MSGMODE_TEXT_CONTINUING:
|
||||||
case MSGMODE_TEXT_AWAIT_INPUT:
|
|
||||||
if (YREG(31) == 0 && Message_ShouldAdvance(play)) {
|
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
|
|
||||||
msgCtx->textDrawPos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSGMODE_TEXT_DELAYED_BREAK:
|
|
||||||
msgCtx->stateTimer--;
|
|
||||||
if (msgCtx->stateTimer == 0) {
|
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSGMODE_TEXT_AWAIT_NEXT:
|
|
||||||
if (Message_ShouldAdvance(play)) {
|
|
||||||
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
|
||||||
msgCtx->textUnskippable = false;
|
|
||||||
msgCtx->msgBufPos++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSGMODE_TEXT_DONE:
|
|
||||||
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_FADING) {
|
|
||||||
msgCtx->stateTimer--;
|
msgCtx->stateTimer--;
|
||||||
if (msgCtx->stateTimer == 0) {
|
if (msgCtx->stateTimer == 0) {
|
||||||
Message_CloseTextbox(play);
|
Message_Decode(play);
|
||||||
}
|
}
|
||||||
} else if (msgCtx->textboxEndType != TEXTBOX_ENDTYPE_PERSISTENT &&
|
|
||||||
msgCtx->textboxEndType != TEXTBOX_ENDTYPE_EVENT && YREG(31) == 0) {
|
|
||||||
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_2_CHOICE && play->msgCtx.ocarinaMode == OCARINA_MODE_01) {
|
|
||||||
if (Message_ShouldAdvance(play)) {
|
|
||||||
PRINTF("OCARINA_MODE=%d -> ", play->msgCtx.ocarinaMode);
|
|
||||||
play->msgCtx.ocarinaMode = (msgCtx->choiceIndex == 0) ? OCARINA_MODE_02 : OCARINA_MODE_04;
|
|
||||||
PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_HORSES_STATE(), 1,
|
|
||||||
play->msgCtx.ocarinaMode);
|
|
||||||
Message_CloseTextbox(play);
|
|
||||||
PRINTF("OCARINA_MODE=%d\n", play->msgCtx.ocarinaMode);
|
|
||||||
}
|
|
||||||
} else if (Message_ShouldAdvanceSilent(play)) {
|
|
||||||
PRINTF("select=%d\n", msgCtx->textboxEndType);
|
|
||||||
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_HAS_NEXT) {
|
|
||||||
Audio_PlaySfxGeneral(NA_SE_SY_MESSAGE_PASS, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
|
||||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
|
||||||
Message_ContinueTextbox(play, sNextTextId);
|
|
||||||
} else {
|
|
||||||
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
|
||||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
|
||||||
Message_CloseTextbox(play);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MSGMODE_TEXT_CLOSING:
|
|
||||||
msgCtx->stateTimer--;
|
|
||||||
if (msgCtx->stateTimer != 0) {
|
|
||||||
break;
|
break;
|
||||||
}
|
case MSGMODE_TEXT_DISPLAYING:
|
||||||
if ((msgCtx->textId >= 0xC2 && msgCtx->textId < 0xC7) ||
|
if (msgCtx->textBoxType != TEXTBOX_TYPE_NONE_BOTTOM && YREG(31) == 0 &&
|
||||||
(msgCtx->textId >= 0xFA && msgCtx->textId < 0xFE)) {
|
CHECK_BTN_ALL(play->state.input[0].press.button, BTN_B) && !msgCtx->textUnskippable) {
|
||||||
gSaveContext.healthAccumulator = 0x140; // Refill 20 hearts
|
sTextboxSkipped = true;
|
||||||
}
|
msgCtx->textDrawPos = msgCtx->decodedTextLen;
|
||||||
if (msgCtx->textId == 0x301F || msgCtx->textId == 0xA || msgCtx->textId == 0xC || msgCtx->textId == 0xCF ||
|
}
|
||||||
msgCtx->textId == 0x21C || msgCtx->textId == 9 || msgCtx->textId == 0x4078 ||
|
break;
|
||||||
msgCtx->textId == 0x2015 || msgCtx->textId == 0x3040) {
|
case MSGMODE_TEXT_AWAIT_INPUT:
|
||||||
gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL;
|
if (YREG(31) == 0 && Message_ShouldAdvance(play)) {
|
||||||
}
|
msgCtx->msgMode = MSGMODE_TEXT_DISPLAYING;
|
||||||
if (play->csCtx.state == 0) {
|
msgCtx->textDrawPos++;
|
||||||
PRINTF(VT_FGCOL(GREEN));
|
}
|
||||||
PRINTF("day_time=%x active_camera=%d ", gSaveContext.save.cutsceneIndex, play->activeCamId);
|
break;
|
||||||
|
case MSGMODE_TEXT_DELAYED_BREAK:
|
||||||
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
|
msgCtx->stateTimer--;
|
||||||
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
|
if (msgCtx->stateTimer == 0) {
|
||||||
(msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
||||||
PRINTF("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
|
}
|
||||||
if (play->activeCamId == CAM_ID_MAIN) {
|
break;
|
||||||
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
|
case MSGMODE_TEXT_AWAIT_NEXT:
|
||||||
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING ||
|
if (Message_ShouldAdvance(play)) {
|
||||||
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING_ALT) {
|
msgCtx->msgMode = MSGMODE_TEXT_NEXT_MSG;
|
||||||
gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL;
|
msgCtx->textUnskippable = false;
|
||||||
|
msgCtx->msgBufPos++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MSGMODE_TEXT_DONE:
|
||||||
|
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_FADING) {
|
||||||
|
msgCtx->stateTimer--;
|
||||||
|
if (msgCtx->stateTimer == 0) {
|
||||||
|
Message_CloseTextbox(play);
|
||||||
|
}
|
||||||
|
} else if (msgCtx->textboxEndType != TEXTBOX_ENDTYPE_PERSISTENT &&
|
||||||
|
msgCtx->textboxEndType != TEXTBOX_ENDTYPE_EVENT && YREG(31) == 0) {
|
||||||
|
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_2_CHOICE &&
|
||||||
|
play->msgCtx.ocarinaMode == OCARINA_MODE_01) {
|
||||||
|
if (Message_ShouldAdvance(play)) {
|
||||||
|
PRINTF("OCARINA_MODE=%d -> ", play->msgCtx.ocarinaMode);
|
||||||
|
play->msgCtx.ocarinaMode = (msgCtx->choiceIndex == 0) ? OCARINA_MODE_02 : OCARINA_MODE_04;
|
||||||
|
PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_HORSES_STATE(), 1,
|
||||||
|
play->msgCtx.ocarinaMode);
|
||||||
|
Message_CloseTextbox(play);
|
||||||
|
PRINTF("OCARINA_MODE=%d\n", play->msgCtx.ocarinaMode);
|
||||||
|
}
|
||||||
|
} else if (Message_ShouldAdvanceSilent(play)) {
|
||||||
|
PRINTF("select=%d\n", msgCtx->textboxEndType);
|
||||||
|
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_HAS_NEXT) {
|
||||||
|
Audio_PlaySfxGeneral(NA_SE_SY_MESSAGE_PASS, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||||
|
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||||
|
Message_ContinueTextbox(play, sNextTextId);
|
||||||
|
} else {
|
||||||
|
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||||
|
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||||
|
Message_CloseTextbox(play);
|
||||||
}
|
}
|
||||||
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
|
|
||||||
Interface_ChangeHudVisibilityMode(gSaveContext.prevHudVisibilityMode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
PRINTF(VT_RST);
|
case MSGMODE_TEXT_CLOSING:
|
||||||
msgCtx->msgLength = 0;
|
msgCtx->stateTimer--;
|
||||||
msgCtx->msgMode = MSGMODE_NONE;
|
if (msgCtx->stateTimer != 0) {
|
||||||
interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0;
|
break;
|
||||||
msgCtx->textId = msgCtx->stateTimer = 0;
|
}
|
||||||
|
if ((msgCtx->textId >= 0xC2 && msgCtx->textId < 0xC7) ||
|
||||||
|
(msgCtx->textId >= 0xFA && msgCtx->textId < 0xFE)) {
|
||||||
|
gSaveContext.healthAccumulator = 0x140; // Refill 20 hearts
|
||||||
|
}
|
||||||
|
if (msgCtx->textId == 0x301F || msgCtx->textId == 0xA || msgCtx->textId == 0xC ||
|
||||||
|
msgCtx->textId == 0xCF || msgCtx->textId == 0x21C || msgCtx->textId == 9 ||
|
||||||
|
msgCtx->textId == 0x4078 || msgCtx->textId == 0x2015 || msgCtx->textId == 0x3040) {
|
||||||
|
gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL;
|
||||||
|
}
|
||||||
|
if (play->csCtx.state == 0) {
|
||||||
|
PRINTF(VT_FGCOL(GREEN));
|
||||||
|
PRINTF("day_time=%x active_camera=%d ", gSaveContext.save.cutsceneIndex, play->activeCamId);
|
||||||
|
|
||||||
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_PERSISTENT) {
|
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
|
||||||
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
|
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
|
||||||
play->msgCtx.ocarinaMode = OCARINA_MODE_02;
|
(msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
||||||
} else {
|
PRINTF("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
|
||||||
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
|
if (play->activeCamId == CAM_ID_MAIN) {
|
||||||
}
|
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
|
||||||
if ((s32)(gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
|
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING ||
|
||||||
gSaveContext.save.info.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
|
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING_ALT) {
|
||||||
gSaveContext.save.info.playerData.healthCapacity += 0x10;
|
gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL;
|
||||||
gSaveContext.save.info.playerData.health += 0x10;
|
}
|
||||||
}
|
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
|
||||||
if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) {
|
Interface_ChangeHudVisibilityMode(gSaveContext.prevHudVisibilityMode);
|
||||||
if (sLastPlayedSong == OCARINA_SONG_SARIAS) {
|
}
|
||||||
//! @bug The last played song is not unset often, and if something interrupts the message system
|
|
||||||
// before it reaches this point after playing Saria's song, the song will be "stored".
|
|
||||||
// Later, if the ocarina has not been played and another textbox is closed, this handling
|
|
||||||
// for Saria's song will be carried out.
|
|
||||||
player->naviTextId = -0xE0;
|
|
||||||
player->naviActor->flags |= ACTOR_FLAG_16;
|
|
||||||
}
|
|
||||||
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE &&
|
|
||||||
(play->msgCtx.ocarinaMode == OCARINA_MODE_01 || play->msgCtx.ocarinaMode == OCARINA_MODE_0B)) {
|
|
||||||
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
|
||||||
if (msgCtx->unk_E3F2 == OCARINA_SONG_SUNS) {
|
|
||||||
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
PRINTF(VT_RST);
|
||||||
sLastPlayedSong = 0xFF;
|
msgCtx->msgLength = 0;
|
||||||
PRINTF("OCARINA_MODE=%d chk_ocarina_no=%d\n", play->msgCtx.ocarinaMode, msgCtx->unk_E3F2);
|
msgCtx->msgMode = MSGMODE_NONE;
|
||||||
break;
|
interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0;
|
||||||
case MSGMODE_PAUSED:
|
msgCtx->textId = msgCtx->stateTimer = 0;
|
||||||
break;
|
|
||||||
default:
|
if (msgCtx->textboxEndType == TEXTBOX_ENDTYPE_PERSISTENT) {
|
||||||
msgCtx->lastOcarinaButtonIndex = OCARINA_BTN_INVALID;
|
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
|
||||||
break;
|
play->msgCtx.ocarinaMode = OCARINA_MODE_02;
|
||||||
|
} else {
|
||||||
|
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
|
||||||
|
}
|
||||||
|
if ((s32)(gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
|
||||||
|
gSaveContext.save.info.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
|
||||||
|
gSaveContext.save.info.playerData.healthCapacity += 0x10;
|
||||||
|
gSaveContext.save.info.playerData.health += 0x10;
|
||||||
|
}
|
||||||
|
if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) {
|
||||||
|
if (sLastPlayedSong == OCARINA_SONG_SARIAS) {
|
||||||
|
//! @bug The last played song is not unset often, and if something interrupts the message system
|
||||||
|
// before it reaches this point after playing Saria's song, the song will be "stored".
|
||||||
|
// Later, if the ocarina has not been played and another textbox is closed, this handling
|
||||||
|
// for Saria's song will be carried out.
|
||||||
|
player->naviTextId = -0xE0;
|
||||||
|
player->naviActor->flags |= ACTOR_FLAG_16;
|
||||||
|
}
|
||||||
|
if (msgCtx->ocarinaAction == OCARINA_ACTION_FREE_PLAY_DONE &&
|
||||||
|
(play->msgCtx.ocarinaMode == OCARINA_MODE_01 || play->msgCtx.ocarinaMode == OCARINA_MODE_0B)) {
|
||||||
|
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
|
||||||
|
if (msgCtx->unk_E3F2 == OCARINA_SONG_SUNS) {
|
||||||
|
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sLastPlayedSong = 0xFF;
|
||||||
|
PRINTF("OCARINA_MODE=%d chk_ocarina_no=%d\n", play->msgCtx.ocarinaMode, msgCtx->unk_E3F2);
|
||||||
|
break;
|
||||||
|
case MSGMODE_PAUSED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
msgCtx->lastOcarinaButtonIndex = OCARINA_BTN_INVALID;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue