NTSC Support (N64) (#4198)
* copy n64 pal 10 doing this so i can check diffs i make * transfer german->jp icon item * overlays, message data, icon item jpn, audio, code todo: title_static, gameplay keep * add kanji and fix title cards * title static * spell folder correctly * boss title cards, do action, icon item, item name, map name * headers for jpn stuff * gameplay_keep * Scenes, audio, jp text extraction, rom support, overlay fixes, sheik & darunia todo: test & disable darunia fix cvar for ntsc * msgptr init fix * icon item offsets * comment out title cards until zapd can fix itself (we extract these in a different file anyway) * compile and font implemented to get past title screen * file select * message, kaleido and everything else but rando * uintptr_t * rando and custom messages working! * ntsc-j 1.0 support * n64 logo? * copy ntsc 10 to 11 * ntsc 11 extraction * change title version names * copy ntsc 11 to 12 * ntsc 12 extraction * clean up some todos * re checkout submodules post merge * fix US filename * support cross-version filenames * add new versions to non-mq list * use correct message table init * Fix ntsc nes message table overriding pal nes message table * actual fix, allows extraction * fix file name using wrong font of file being hovered over * Fix barinade crash * re-add pal * better jabu fix and revert LUS * fix gerudo title cards * better better owl select * more owl fixes * build * fix some name decode issues * Switch Language Mid Text * Fix PAL displaying for JP filenames * Fix AskToEquip Crash * Disable Credits Timing Fix on NTSC * Fix JP Text positioning * basic language switching (BIG todo: file select, title screen) * Title Screen Hopefully working * add ntsc to linux appimage stuff, TODO: add .v64/.n64 support * Update OTRExporter * Fix pause to decide offset * Fix bomb item name crash * fix fire arrows and PoH * builds * update asset changes and fix menu language changing * fix name decode * Fix crashes and add rando/boss rush select stuff * Revive debug feature by setting language cvar too * Fix ocarina text speed softlock, and update jp text speed changes * Merge remote-tracking branch 'upstream/develop' into NTSC * Fix options menu and let pal use japanese fully * Resolve some suggestions * match up gTextSpeed changes to english (still broken!) * Fix text speed crash * Set default filename language on save init funcs * bump otrexporter * Display same correct info for n64 ntsc-j and ntsc-u * quicktext more closely aligned with decomp * linux appimage v64/n64 checksums * bump zapd * Credits Fix Tooltip Adjusted * update supported hashes json * update shasums to include JP n64
This commit is contained in:
@@ -6,6 +6,12 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ResourceManagerHelpers.h"
|
||||
|
||||
#include "message_data_static.h"
|
||||
extern MessageTableEntry* sNesMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sGerMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sFraMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sJpnMessageEntryTablePtr;
|
||||
|
||||
SpeedMeter D_801664D0;
|
||||
VisCvg sVisCvg;
|
||||
VisZBuf sVisZBuf;
|
||||
@@ -339,6 +345,14 @@ void GameState_Update(GameState* gameState) {
|
||||
|
||||
gSaveContext.language = CVarGetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG);
|
||||
|
||||
if (gSaveContext.language == LANGUAGE_JPN && sJpnMessageEntryTablePtr == NULL) {
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
} else if (gSaveContext.language == LANGUAGE_GER && sGerMessageEntryTablePtr == NULL) {
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
} else if (gSaveContext.language == LANGUAGE_FRA && sFraMessageEntryTablePtr == NULL) {
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
}
|
||||
|
||||
GameInteractor_ExecuteOnGameFrameUpdate();
|
||||
gameState->frames++;
|
||||
}
|
||||
|
||||
@@ -847,6 +847,10 @@ void TitleCard_InitBossName(PlayState* play, TitleCardContext* titleCtx, void* t
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
} else if (gSaveContext.language == LANGUAGE_JPN) {
|
||||
newName[length - 6] = 'J';
|
||||
newName[length - 5] = 'P';
|
||||
newName[length - 4] = 'N';
|
||||
}
|
||||
texture = newName;
|
||||
}
|
||||
@@ -1067,6 +1071,11 @@ void TitleCard_InitPlaceName(PlayState* play, TitleCardContext* titleCtx, void*
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
}
|
||||
else if (gSaveContext.language == LANGUAGE_JPN) {
|
||||
newName[length - 6] = 'J';
|
||||
newName[length - 5] = 'P';
|
||||
newName[length - 4] = 'N';
|
||||
}
|
||||
texture = newName;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include <textures/do_action_static/do_action_static.h>
|
||||
#include <assert.h>
|
||||
#include "soh/ResourceManagerHelpers.h"
|
||||
|
||||
void func_80110990(PlayState* play) {
|
||||
Map_Destroy(play);
|
||||
@@ -80,21 +81,21 @@ void func_801109B0(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timer1State));
|
||||
osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timerState));
|
||||
|
||||
if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8) || (gSaveContext.timer2State == 4) ||
|
||||
(gSaveContext.timer2State == 10)) {
|
||||
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8) || (gSaveContext.subTimerState == 4) ||
|
||||
(gSaveContext.subTimerState == 10)) {
|
||||
osSyncPrintf("restart_flag=%d\n", ((void)0, gSaveContext.respawnFlag));
|
||||
|
||||
if ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) {
|
||||
if (gSaveContext.timer1State == 4) {
|
||||
gSaveContext.timer1State = 1;
|
||||
if (gSaveContext.timerState == 4) {
|
||||
gSaveContext.timerState = 1;
|
||||
gSaveContext.timerX[0] = 140;
|
||||
gSaveContext.timerY[0] = 80;
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8)) {
|
||||
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
|
||||
temp = 0;
|
||||
} else {
|
||||
temp = 1;
|
||||
@@ -109,10 +110,10 @@ void func_801109B0(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State >= 11) && (gSaveContext.timer1State < 16)) {
|
||||
gSaveContext.timer1State = 0;
|
||||
if ((gSaveContext.timerState >= 11) && (gSaveContext.timerState < 16)) {
|
||||
gSaveContext.timerState = 0;
|
||||
// "Timer Stop!!!!!!!!!!!!!!!!!!!!!!"
|
||||
osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timer1State);
|
||||
osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timerState);
|
||||
}
|
||||
|
||||
osSyncPrintf("PARAMETER領域=%x\n", parameterSize + 0x5300); // "Parameter Area = %x"
|
||||
@@ -157,7 +158,11 @@ void Message_Init(PlayState* play) {
|
||||
osSyncPrintf("吹き出しgame_alloc=%x\n", 0x2200); // "Textbox game_alloc=%x"
|
||||
assert(msgCtx->textboxSegment != NULL);
|
||||
|
||||
Font_LoadOrderedFont(&play->msgCtx.font);
|
||||
if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL && gSaveContext.language != LANGUAGE_JPN) {
|
||||
Font_LoadOrderedFont(&play->msgCtx.font);
|
||||
} else { // GAME_REGION_NTSC
|
||||
Font_LoadOrderedFontNTSC(&play->msgCtx.font);
|
||||
}
|
||||
|
||||
YREG(31) = 0;
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
|
||||
}
|
||||
|
||||
bool playCutscene = false;
|
||||
if (!CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1) && (cmd->startFrame == csCtx->frames)) {
|
||||
if ((!CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1) || ResourceMgr_GetGameRegion(0) == GAME_REGION_NTSC) && (cmd->startFrame == csCtx->frames)) {
|
||||
playCutscene = true;
|
||||
} else if (CVarGetInteger(CVAR_ENHANCEMENT("CreditsFix"), 1)) {
|
||||
u16 delay = 0;
|
||||
@@ -576,7 +576,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
|
||||
osSyncPrintf("\n分岐先指定!!=[%d]番", cmd->base); // "Future fork designation=No. [%d]"
|
||||
|
||||
if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->frames != cmd->startFrame)) {
|
||||
gSaveContext.unk_13E7 = 1;
|
||||
gSaveContext.forceRisingButtonAlphas = 1;
|
||||
}
|
||||
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
|
||||
@@ -31,8 +31,8 @@ void GameOver_Update(PlayState* play) {
|
||||
case GAMEOVER_DEATH_START:
|
||||
Message_CloseTextbox(play);
|
||||
|
||||
gSaveContext.timer1State = 0;
|
||||
gSaveContext.timer2State = 0;
|
||||
gSaveContext.timerState = 0;
|
||||
gSaveContext.subTimerState = 0;
|
||||
gSaveContext.eventInf[1] &= ~1;
|
||||
|
||||
// search inventory for spoiling items and revert if necessary
|
||||
@@ -77,7 +77,7 @@ void GameOver_Update(PlayState* play) {
|
||||
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
|
||||
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
|
||||
}
|
||||
gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
|
||||
gSaveContext.forceRisingButtonAlphas = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
|
||||
|
||||
Environment_InitGameOverLights(play);
|
||||
gGameOverTimer = 20;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
127
soh/src/code/z_kanji.c
Normal file
127
soh/src/code/z_kanji.c
Normal file
@@ -0,0 +1,127 @@
|
||||
#include "global.h"
|
||||
#include "macros.h"
|
||||
|
||||
u16 T_800AF828_ne0[] = {
|
||||
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D,
|
||||
0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B,
|
||||
0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029,
|
||||
0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
|
||||
0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
|
||||
0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053,
|
||||
0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061,
|
||||
0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072,
|
||||
0x0073, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
|
||||
0x0079, 0x007A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
|
||||
0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098,
|
||||
0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009C, 0x009D, 0x009E, 0x009F,
|
||||
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD,
|
||||
0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
|
||||
0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB,
|
||||
0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9,
|
||||
0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||||
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105,
|
||||
0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010B, 0x010C, 0x010D, 0x010E, 0x010F, 0x0110, 0x0111, 0x0112, 0x0113,
|
||||
0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120, 0x0121,
|
||||
0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0125,
|
||||
0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133,
|
||||
0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141,
|
||||
0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F,
|
||||
0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015C, 0x015D,
|
||||
0x015E, 0x015F, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B,
|
||||
0x016C, 0x016D, 0x016E, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 0x017F,
|
||||
0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018A, 0x018B, 0x018C, 0x018D,
|
||||
0x018E, 0x018F, 0x0190, 0x0191, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0193,
|
||||
0x0194, 0x0195, 0x0196, 0x0197, 0x0198, 0x0199, 0x019A, 0x019B, 0x019C, 0x019D, 0x019E, 0x019F, 0x01A0, 0x01A1,
|
||||
0x01A2, 0x01A3, 0x01A4, 0x01A5, 0x01A6, 0x01A7, 0x01A8, 0x01A9, 0x01AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4,
|
||||
0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA, 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2,
|
||||
0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01CC, 0x01CD, 0x01CE, 0x01CF,
|
||||
0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4, 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC, 0x01DD,
|
||||
0x01DE, 0x01DF, 0x01E0, 0x01E1, 0x01E2, 0x01E3, 0x01E4, 0x01E5, 0x01E6, 0x01E7, 0x01E8, 0x01E9, 0x01EA, 0x01EB,
|
||||
0x01EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x01ED, 0x01EE, 0x01EF, 0x01F0, 0x01F1, 0x01F2, 0x01F3, 0x01F4, 0x01F5, 0x01F6, 0x01F7, 0x01F8, 0x01F9, 0x01FA,
|
||||
0x01FB, 0x01FC, 0x01FD, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208,
|
||||
0x0209, 0x020A, 0x020B, 0x020C, 0x020D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x020E, 0x020F, 0x0210, 0x0211,
|
||||
0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E, 0x021F,
|
||||
0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223,
|
||||
0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231,
|
||||
0x0232, 0x0233, 0x0234, 0x0235, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0236, 0x0237, 0x0238, 0x0239, 0x023A, 0x023B, 0x023C, 0x023D, 0x023E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x023F, 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246,
|
||||
0x0247, 0x0248, 0x0000, 0x0000, 0x0000, 0x0000, 0x0249, 0x024A, 0x024B, 0x024C, 0x024D, 0x024E, 0x024F, 0x0250,
|
||||
0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0258, 0x0259,
|
||||
0x025A, 0x025B, 0x025C, 0x025D, 0x025E, 0x025F, 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0267, 0x0268, 0x0269, 0x026A,
|
||||
0x026B, 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278,
|
||||
0x0279, 0x027A, 0x027B, 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D,
|
||||
0x028E, 0x028F, 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B,
|
||||
0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02A0, 0x02A1, 0x02A2, 0x02A3, 0x02A4, 0x02A5,
|
||||
0x02A6, 0x02A7, 0x02A8, 0x02A9, 0x02AA, 0x02AB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x02AC, 0x02AD, 0x02AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02AF, 0x02B0, 0x02B1, 0x02B2,
|
||||
0x02B3, 0x02B4, 0x02B5, 0x02B6, 0x02B7, 0x02B8, 0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5,
|
||||
0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF, 0x02D0, 0x02D1, 0x02D2, 0x02D3,
|
||||
0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x02D9, 0x02DA, 0x02DB, 0x02DC, 0x02DD, 0x02DE, 0x02DF, 0x02E0, 0x02E1, 0x02E2,
|
||||
0x02E3, 0x02E4, 0x02E5, 0x02E6, 0x02E7, 0x02E8, 0x02E9, 0x02EA, 0x02EB, 0x02EC, 0x02ED, 0x02EE, 0x02EF, 0x02F0,
|
||||
0x02F1, 0x02F2, 0x02F3, 0x02F4, 0x02F5, 0x02F6, 0x02F7, 0x02F8, 0x02F9, 0x02FA, 0x02FB, 0x02FC, 0x02FD, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02FE, 0x02FF, 0x0300, 0x0301, 0x0302, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0303, 0x0304, 0x0305, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0307, 0x0308, 0x0309,
|
||||
};
|
||||
|
||||
// Handwritten Function
|
||||
s32 Kanji_OffsetFromShiftJIS(u32 arg0) {
|
||||
s32 var_a3;
|
||||
|
||||
if (arg0 >= 0x8800) {
|
||||
var_a3 = (arg0 & 0xFF) - 0x40;
|
||||
if (var_a3 >= 0x40) {
|
||||
var_a3--;
|
||||
}
|
||||
return (var_a3 + 0x30A + (0xBC * ((arg0 >> 8) - 0x88))) << 7;
|
||||
}
|
||||
var_a3 = (arg0 & 0xFF) - 0x40;
|
||||
if (var_a3 >= 0x40) {
|
||||
var_a3--;
|
||||
}
|
||||
|
||||
// #Region SOH
|
||||
int index = var_a3 + (0xBC * ((arg0 >> 8) - 0x81));
|
||||
if (index < 0 || index >= ARRAY_COUNT(T_800AF828_ne0)) {
|
||||
// Invalid font char found
|
||||
// @bug: Some characters e.g. 0x0222 can reach here incorrectly
|
||||
return 0;
|
||||
}
|
||||
// #End region
|
||||
|
||||
return T_800AF828_ne0[var_a3 + (0xBC * ((arg0 >> 8) - 0x81))] << 7;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,12 @@
|
||||
#include "soh/ResourceManagerHelpers.h"
|
||||
#include "soh/Enhancements/gameplaystats.h"
|
||||
|
||||
#include "message_data_static.h"
|
||||
extern MessageTableEntry* sNesMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sGerMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sFraMessageEntryTablePtr;
|
||||
extern MessageTableEntry* sJpnMessageEntryTablePtr;
|
||||
|
||||
#define DO_ACTION_TEX_WIDTH() 48
|
||||
#define DO_ACTION_TEX_HEIGHT() 16
|
||||
#define DO_ACTION_TEX_SIZE() ((DO_ACTION_TEX_WIDTH() * DO_ACTION_TEX_HEIGHT()) / 2)
|
||||
@@ -318,7 +324,7 @@ void func_80082644(PlayState* play, s16 alpha) {
|
||||
void func_8008277C(PlayState* play, s16 maxAlpha, s16 alpha) {
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
|
||||
if (gSaveContext.unk_13E7 != 0) {
|
||||
if (gSaveContext.forceRisingButtonAlphas != 0) {
|
||||
func_80082644(play, alpha);
|
||||
return;
|
||||
}
|
||||
@@ -843,12 +849,12 @@ void func_80083108(PlayState* play) {
|
||||
|
||||
if ((gSaveContext.cutsceneIndex < 0xFFF0) ||
|
||||
((play->sceneNum == SCENE_LON_LON_RANCH) && (gSaveContext.cutsceneIndex == 0xFFF0))) {
|
||||
gSaveContext.unk_13E7 = 0;
|
||||
gSaveContext.forceRisingButtonAlphas = 0;
|
||||
|
||||
if ((player->stateFlags1 & PLAYER_STATE1_ON_HORSE) || (play->shootingGalleryStatus > 1) ||
|
||||
((play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
|
||||
if (gSaveContext.equips.buttonItems[0] != ITEM_NONE || randoCanTrackSwordless) {
|
||||
gSaveContext.unk_13E7 = 1;
|
||||
gSaveContext.forceRisingButtonAlphas = 1;
|
||||
|
||||
if (gSaveContext.buttonStatus[0] == BTN_DISABLED) {
|
||||
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
|
||||
@@ -915,7 +921,7 @@ void func_80083108(PlayState* play) {
|
||||
} else if (play->sceneNum == SCENE_CHAMBER_OF_THE_SAGES && !IS_BOSS_RUSH) {
|
||||
Interface_ChangeAlpha(1);
|
||||
} else if (play->sceneNum == SCENE_FISHING_POND) {
|
||||
gSaveContext.unk_13E7 = 2;
|
||||
gSaveContext.forceRisingButtonAlphas = 2;
|
||||
if (play->interfaceCtx.unk_260 != 0) {
|
||||
if (gSaveContext.equips.buttonItems[0] != ITEM_FISHING_POLE) {
|
||||
gSaveContext.buttonStatus[0] = gSaveContext.equips.buttonItems[0];
|
||||
@@ -2796,6 +2802,10 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l
|
||||
newName[loadOffset][length - 6] = 'G';
|
||||
newName[loadOffset][length - 5] = 'E';
|
||||
newName[loadOffset][length - 4] = 'R';
|
||||
} else if (gSaveContext.language == LANGUAGE_JPN) {
|
||||
newName[loadOffset][length - 6] = 'J';
|
||||
newName[loadOffset][length - 5] = 'P';
|
||||
newName[loadOffset][length - 4] = 'N';
|
||||
}
|
||||
doAction = newName[loadOffset];
|
||||
}
|
||||
@@ -2861,6 +2871,10 @@ void Interface_LoadActionLabelB(PlayState* play, u16 action) {
|
||||
newName[length - 6] = 'G';
|
||||
newName[length - 5] = 'E';
|
||||
newName[length - 4] = 'R';
|
||||
} else if (gSaveContext.language == LANGUAGE_JPN) {
|
||||
newName[length - 6] = 'J';
|
||||
newName[length - 5] = 'P';
|
||||
newName[length - 4] = 'N';
|
||||
}
|
||||
doAction = newName;
|
||||
}
|
||||
@@ -3750,21 +3764,21 @@ void func_80088AA0(s16 arg0) {
|
||||
gSaveContext.timerX[1] = 140;
|
||||
gSaveContext.timerY[1] = 80;
|
||||
D_80125A5C = 0;
|
||||
gSaveContext.timer2Value = arg0;
|
||||
gSaveContext.subTimerSeconds = arg0;
|
||||
|
||||
if (arg0 != 0) {
|
||||
gSaveContext.timer2State = 1;
|
||||
gSaveContext.subTimerState = 1;
|
||||
} else {
|
||||
gSaveContext.timer2State = 7;
|
||||
gSaveContext.subTimerState = 7;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80088AF0(PlayState* play) {
|
||||
if (gSaveContext.timer2State != 0) {
|
||||
if (gSaveContext.subTimerState != 0) {
|
||||
if (gSaveContext.eventInf[1] & 1) {
|
||||
gSaveContext.timer2Value = 239;
|
||||
gSaveContext.subTimerSeconds = 239;
|
||||
} else {
|
||||
gSaveContext.timer2Value = 1;
|
||||
gSaveContext.subTimerSeconds = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3773,12 +3787,12 @@ void func_80088B34(s16 arg0) {
|
||||
gSaveContext.timerX[0] = 140;
|
||||
gSaveContext.timerY[0] = 80;
|
||||
D_80125A5C = 0;
|
||||
gSaveContext.timer1Value = arg0;
|
||||
gSaveContext.timerSeconds = arg0;
|
||||
|
||||
if (arg0 != 0) {
|
||||
gSaveContext.timer1State = 5;
|
||||
gSaveContext.timerState = 5;
|
||||
} else {
|
||||
gSaveContext.timer1State = 11;
|
||||
gSaveContext.timerState = 11;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3795,8 +3809,8 @@ void Interface_DrawActionLabel(GraphicsContext* gfxCtx, void* texture) {
|
||||
}
|
||||
|
||||
void Interface_DrawItemButtons(PlayState* play) {
|
||||
static void* cUpLabelTextures[] = { gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex };
|
||||
static s16 startButtonLeftPos[] = { 132, 130, 130 };
|
||||
static void* cUpLabelTextures[] = { gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpENGTex, gNaviCUpJPTex };
|
||||
static s16 startButtonLeftPos[] = { 132, 130, 130, 132 };
|
||||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
Player* player = GET_PLAYER(play);
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
@@ -4970,6 +4984,13 @@ void Interface_Draw(PlayState* play) {
|
||||
s16 svar5;
|
||||
s16 svar6;
|
||||
bool fullUi = !CVarGetInteger(CVAR_ENHANCEMENT("MinimalUI"), 0) || !R_MINIMAP_DISABLED || play->pauseCtx.state != 0;
|
||||
// #region SOH [NTSC]
|
||||
s32 languageOffset = gSaveContext.language;
|
||||
|
||||
if (languageOffset == LANGUAGE_JPN) {
|
||||
languageOffset = LANGUAGE_ENG;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
if (GameInteractor_NoUIActive()) {
|
||||
return;
|
||||
@@ -5256,10 +5277,10 @@ void Interface_Draw(PlayState* play) {
|
||||
// B Button Do Action Label
|
||||
s16 PosX_adjust;
|
||||
s16 PosY_adjust;
|
||||
if (gSaveContext.language == 2) {
|
||||
if (gSaveContext.language == LANGUAGE_FRA) {
|
||||
PosX_adjust = -12;
|
||||
PosY_adjust = 5;
|
||||
} else if (gSaveContext.language == 1) { //ger
|
||||
} else if (gSaveContext.language == LANGUAGE_GER) {
|
||||
PosY_adjust = 6;
|
||||
PosX_adjust = -9;
|
||||
} else {
|
||||
@@ -5292,8 +5313,8 @@ void Interface_Draw(PlayState* play) {
|
||||
BbtnPosX = -9999;
|
||||
}
|
||||
} else {
|
||||
BbtnPosX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(gSaveContext.language)+X_Margins_BtnB_label);
|
||||
BbtnPosY = R_B_LABEL_Y(gSaveContext.language)+Y_Margins_BtnB_label;
|
||||
BbtnPosX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(languageOffset)+X_Margins_BtnB_label);
|
||||
BbtnPosY = R_B_LABEL_Y(languageOffset)+Y_Margins_BtnB_label;
|
||||
}
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5304,7 +5325,7 @@ void Interface_Draw(PlayState* play) {
|
||||
DO_ACTION_TEX_WIDTH(), DO_ACTION_TEX_HEIGHT(), 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
||||
R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f);
|
||||
R_B_LABEL_DD = (1 << 10) / (WREG(37 + languageOffset) / 100.0f);
|
||||
gSPWideTextureRectangle(OVERLAY_DISP++, BbtnPosX << 2, BbtnPosY << 2,
|
||||
(BbtnPosX + DO_ACTION_TEX_WIDTH()) << 2,
|
||||
(BbtnPosY + DO_ACTION_TEX_HEIGHT()) << 2, G_TX_RENDERTILE, 0, 0,
|
||||
@@ -5498,7 +5519,7 @@ void Interface_Draw(PlayState* play) {
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha);
|
||||
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
|
||||
Matrix_Translate(-138.0f + rAIconX, rAIconY, WREG(46 + gSaveContext.language) / 10.0f, MTXMODE_NEW);
|
||||
Matrix_Translate(-138.0f + rAIconX, rAIconY, WREG(46 + languageOffset) / 10.0f, MTXMODE_NEW);
|
||||
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateX(interfaceCtx->unk_1F4 / 10000.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(OVERLAY_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
|
||||
@@ -5664,13 +5685,13 @@ void Interface_Draw(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer2State == 5) && (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
|
||||
if ((gSaveContext.subTimerState == 5) && (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
|
||||
// Trade quest timer reached 0
|
||||
D_8015FFE6 = 40;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
gSaveContext.timer2State = 0;
|
||||
gSaveContext.subTimerState = 0;
|
||||
|
||||
if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
|
||||
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
|
||||
@@ -5711,28 +5732,28 @@ void Interface_Draw(PlayState* play) {
|
||||
(play->shootingGalleryStatus <= 1) &&
|
||||
!((play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
|
||||
svar6 = 0;
|
||||
switch (gSaveContext.timer1State) {
|
||||
switch (gSaveContext.timerState) {
|
||||
case 1:
|
||||
D_8015FFE2 = 20;
|
||||
D_8015FFE0 = 20;
|
||||
gSaveContext.timer1Value = gSaveContext.health >> 1;
|
||||
gSaveContext.timer1State = 2;
|
||||
gSaveContext.timerSeconds = gSaveContext.health >> 1;
|
||||
gSaveContext.timerState = 2;
|
||||
break;
|
||||
case 2:
|
||||
D_8015FFE2--;
|
||||
if (D_8015FFE2 == 0) {
|
||||
D_8015FFE2 = 20;
|
||||
gSaveContext.timer1State = 3;
|
||||
gSaveContext.timerState = 3;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case 11:
|
||||
D_8015FFE2 = 20;
|
||||
D_8015FFE0 = 20;
|
||||
if (gSaveContext.timer1State == 5) {
|
||||
gSaveContext.timer1State = 6;
|
||||
if (gSaveContext.timerState == 5) {
|
||||
gSaveContext.timerState = 6;
|
||||
} else {
|
||||
gSaveContext.timer1State = 12;
|
||||
gSaveContext.timerState = 12;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
@@ -5740,10 +5761,10 @@ void Interface_Draw(PlayState* play) {
|
||||
D_8015FFE2--;
|
||||
if (D_8015FFE2 == 0) {
|
||||
D_8015FFE2 = 20;
|
||||
if (gSaveContext.timer1State == 6) {
|
||||
gSaveContext.timer1State = 7;
|
||||
if (gSaveContext.timerState == 6) {
|
||||
gSaveContext.timerState = 7;
|
||||
} else {
|
||||
gSaveContext.timer1State = 13;
|
||||
gSaveContext.timerState = 13;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -5770,15 +5791,15 @@ void Interface_Draw(PlayState* play) {
|
||||
gSaveContext.timerY[0] = 46;
|
||||
}
|
||||
|
||||
if (gSaveContext.timer1State == 3) {
|
||||
gSaveContext.timer1State = 4;
|
||||
if (gSaveContext.timerState == 3) {
|
||||
gSaveContext.timerState = 4;
|
||||
} else {
|
||||
gSaveContext.timer1State = 8;
|
||||
gSaveContext.timerState = 8;
|
||||
}
|
||||
}
|
||||
case 4:
|
||||
case 8:
|
||||
if ((gSaveContext.timer1State == 4) || (gSaveContext.timer1State == 8)) {
|
||||
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
gSaveContext.timerY[0] = 54;
|
||||
} else {
|
||||
@@ -5786,28 +5807,28 @@ void Interface_Draw(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer1State >= 3) && (msgCtx->msgLength == 0)) {
|
||||
if ((gSaveContext.timerState >= 3) && (msgCtx->msgLength == 0)) {
|
||||
D_8015FFE0--;
|
||||
if (D_8015FFE0 == 0) {
|
||||
if (gSaveContext.timer1Value != 0) {
|
||||
gSaveContext.timer1Value--;
|
||||
if (gSaveContext.timerSeconds != 0) {
|
||||
gSaveContext.timerSeconds--;
|
||||
}
|
||||
|
||||
D_8015FFE0 = 20;
|
||||
|
||||
if (gSaveContext.timer1Value == 0) {
|
||||
gSaveContext.timer1State = 10;
|
||||
if (gSaveContext.timerSeconds == 0) {
|
||||
gSaveContext.timerState = 10;
|
||||
if (D_80125A5C != 0) {
|
||||
gSaveContext.health = 0;
|
||||
play->damagePlayer(play, -(gSaveContext.health + 2));
|
||||
}
|
||||
D_80125A5C = 0;
|
||||
} else if (gSaveContext.timer1Value > 60) {
|
||||
} else if (gSaveContext.timerSeconds > 60) {
|
||||
if (timerDigits[4] == 1) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
} else if (gSaveContext.timer1Value >= 11) {
|
||||
} else if (gSaveContext.timerSeconds >= 11) {
|
||||
if (timerDigits[4] & 1) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
@@ -5840,10 +5861,10 @@ void Interface_Draw(PlayState* play) {
|
||||
gSaveContext.timerY[0] = 46;
|
||||
}
|
||||
|
||||
gSaveContext.timer1State = 14;
|
||||
gSaveContext.timerState = 14;
|
||||
}
|
||||
case 14:
|
||||
if (gSaveContext.timer1State == 14) {
|
||||
if (gSaveContext.timerState == 14) {
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
gSaveContext.timerY[0] = 54;
|
||||
} else {
|
||||
@@ -5851,15 +5872,15 @@ void Interface_Draw(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if (gSaveContext.timer1State >= 3) {
|
||||
if (gSaveContext.timerState >= 3) {
|
||||
D_8015FFE0--;
|
||||
if (D_8015FFE0 == 0) {
|
||||
gSaveContext.timer1Value++;
|
||||
gSaveContext.timerSeconds++;
|
||||
D_8015FFE0 = 20;
|
||||
|
||||
if (gSaveContext.timer1Value == 3599) {
|
||||
if (gSaveContext.timerSeconds == 3599) {
|
||||
D_8015FFE2 = 40;
|
||||
gSaveContext.timer1State = 15;
|
||||
gSaveContext.timerState = 15;
|
||||
} else {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
@@ -5868,37 +5889,37 @@ void Interface_Draw(PlayState* play) {
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (gSaveContext.timer2State != 0) {
|
||||
if (gSaveContext.subTimerState != 0) {
|
||||
D_8015FFE6 = 20;
|
||||
D_8015FFE4 = 20;
|
||||
gSaveContext.timerX[1] = 140;
|
||||
gSaveContext.timerY[1] = 80;
|
||||
|
||||
if (gSaveContext.timer2State < 7) {
|
||||
gSaveContext.timer2State = 2;
|
||||
if (gSaveContext.subTimerState < 7) {
|
||||
gSaveContext.subTimerState = 2;
|
||||
} else {
|
||||
gSaveContext.timer2State = 8;
|
||||
gSaveContext.subTimerState = 8;
|
||||
}
|
||||
|
||||
gSaveContext.timer1State = 0;
|
||||
gSaveContext.timerState = 0;
|
||||
} else {
|
||||
gSaveContext.timer1State = 0;
|
||||
gSaveContext.timerState = 0;
|
||||
}
|
||||
case 15:
|
||||
break;
|
||||
default:
|
||||
svar6 = 1;
|
||||
switch (gSaveContext.timer2State) {
|
||||
switch (gSaveContext.subTimerState) {
|
||||
case 1:
|
||||
case 7:
|
||||
D_8015FFE6 = 20;
|
||||
D_8015FFE4 = 20;
|
||||
gSaveContext.timerX[1] = 140;
|
||||
gSaveContext.timerY[1] = 80;
|
||||
if (gSaveContext.timer2State == 1) {
|
||||
gSaveContext.timer2State = 2;
|
||||
if (gSaveContext.subTimerState == 1) {
|
||||
gSaveContext.subTimerState = 2;
|
||||
} else {
|
||||
gSaveContext.timer2State = 8;
|
||||
gSaveContext.subTimerState = 8;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -5906,10 +5927,10 @@ void Interface_Draw(PlayState* play) {
|
||||
D_8015FFE6--;
|
||||
if (D_8015FFE6 == 0) {
|
||||
D_8015FFE6 = 20;
|
||||
if (gSaveContext.timer2State == 2) {
|
||||
gSaveContext.timer2State = 3;
|
||||
if (gSaveContext.subTimerState == 2) {
|
||||
gSaveContext.subTimerState = 3;
|
||||
} else {
|
||||
gSaveContext.timer2State = 9;
|
||||
gSaveContext.subTimerState = 9;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -5917,7 +5938,7 @@ void Interface_Draw(PlayState* play) {
|
||||
case 9:
|
||||
osSyncPrintf("event_xp[1]=%d, event_yp[1]=%d TOTAL_EVENT_TM=%d\n",
|
||||
svar5 = gSaveContext.timerX[1], svar2 = gSaveContext.timerY[1],
|
||||
gSaveContext.timer2Value);
|
||||
gSaveContext.subTimerSeconds);
|
||||
svar1 = (gSaveContext.timerX[1] - 26) / D_8015FFE6;
|
||||
gSaveContext.timerX[1] -= svar1;
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
@@ -5938,15 +5959,15 @@ void Interface_Draw(PlayState* play) {
|
||||
gSaveContext.timerY[1] = 46;
|
||||
}
|
||||
|
||||
if (gSaveContext.timer2State == 3) {
|
||||
gSaveContext.timer2State = 4;
|
||||
if (gSaveContext.subTimerState == 3) {
|
||||
gSaveContext.subTimerState = 4;
|
||||
} else {
|
||||
gSaveContext.timer2State = 10;
|
||||
gSaveContext.subTimerState = 10;
|
||||
}
|
||||
}
|
||||
case 4:
|
||||
case 10:
|
||||
if ((gSaveContext.timer2State == 4) || (gSaveContext.timer2State == 10)) {
|
||||
if ((gSaveContext.subTimerState == 4) || (gSaveContext.subTimerState == 10)) {
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
gSaveContext.timerY[1] = 54;
|
||||
} else {
|
||||
@@ -5954,35 +5975,35 @@ void Interface_Draw(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if (gSaveContext.timer2State >= 3) {
|
||||
if (gSaveContext.subTimerState >= 3) {
|
||||
D_8015FFE4--;
|
||||
if (D_8015FFE4 == 0) {
|
||||
D_8015FFE4 = 20;
|
||||
if (gSaveContext.timer2State == 4) {
|
||||
gSaveContext.timer2Value--;
|
||||
osSyncPrintf("TOTAL_EVENT_TM=%d\n", gSaveContext.timer2Value);
|
||||
if (gSaveContext.subTimerState == 4) {
|
||||
gSaveContext.subTimerSeconds--;
|
||||
osSyncPrintf("TOTAL_EVENT_TM=%d\n", gSaveContext.subTimerSeconds);
|
||||
|
||||
if (gSaveContext.timer2Value <= 0) {
|
||||
if (gSaveContext.subTimerSeconds <= 0) {
|
||||
if (!Flags_GetSwitch(play, 0x37) ||
|
||||
((play->sceneNum != SCENE_GANON_BOSS) &&
|
||||
(play->sceneNum != SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) &&
|
||||
(play->sceneNum != SCENE_GANONS_TOWER_COLLAPSE_INTERIOR) &&
|
||||
(play->sceneNum != SCENE_INSIDE_GANONS_CASTLE_COLLAPSE))) {
|
||||
D_8015FFE6 = 40;
|
||||
gSaveContext.timer2State = 5;
|
||||
gSaveContext.subTimerState = 5;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
Message_StartTextbox(play, 0x71B0, NULL);
|
||||
Player_SetCsActionWithHaltedActors(play, NULL, 8);
|
||||
} else {
|
||||
D_8015FFE6 = 40;
|
||||
gSaveContext.timer2State = 6;
|
||||
gSaveContext.subTimerState = 6;
|
||||
}
|
||||
} else if (gSaveContext.timer2Value > 60) {
|
||||
} else if (gSaveContext.subTimerSeconds > 60) {
|
||||
if (timerDigits[4] == 1) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
} else if (gSaveContext.timer2Value > 10) {
|
||||
} else if (gSaveContext.subTimerSeconds > 10) {
|
||||
if ((timerDigits[4] & 1)) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
@@ -5992,17 +6013,17 @@ void Interface_Draw(PlayState* play) {
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
} else {
|
||||
gSaveContext.timer2Value++;
|
||||
gSaveContext.subTimerSeconds++;
|
||||
if (gSaveContext.eventInf[1] & 1) {
|
||||
if (gSaveContext.timer2Value == 240) {
|
||||
if (gSaveContext.subTimerSeconds == 240) {
|
||||
Message_StartTextbox(play, 0x6083, NULL);
|
||||
gSaveContext.eventInf[1] &= ~1;
|
||||
gSaveContext.timer2State = 0;
|
||||
gSaveContext.subTimerState = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((gSaveContext.timer2Value % 60) == 0) {
|
||||
if ((gSaveContext.subTimerSeconds % 60) == 0) {
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
@@ -6012,22 +6033,22 @@ void Interface_Draw(PlayState* play) {
|
||||
case 6:
|
||||
D_8015FFE6--;
|
||||
if (D_8015FFE6 == 0) {
|
||||
gSaveContext.timer2State = 0;
|
||||
gSaveContext.subTimerState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (((gSaveContext.timer1State != 0) && (gSaveContext.timer1State != 10)) ||
|
||||
(gSaveContext.timer2State != 0)) {
|
||||
if (((gSaveContext.timerState != 0) && (gSaveContext.timerState != 10)) ||
|
||||
(gSaveContext.subTimerState != 0)) {
|
||||
timerDigits[0] = timerDigits[1] = svar2 = timerDigits[3] = 0;
|
||||
timerDigits[2] = 10; // digit 10 is used as ':' (colon)
|
||||
|
||||
if (gSaveContext.timer1State != 0) {
|
||||
timerDigits[4] = gSaveContext.timer1Value;
|
||||
if (gSaveContext.timerState != 0) {
|
||||
timerDigits[4] = gSaveContext.timerSeconds;
|
||||
} else {
|
||||
timerDigits[4] = gSaveContext.timer2Value;
|
||||
timerDigits[4] = gSaveContext.subTimerSeconds;
|
||||
}
|
||||
|
||||
while (timerDigits[4] >= 60) {
|
||||
@@ -6079,14 +6100,14 @@ void Interface_Draw(PlayState* play) {
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
|
||||
TEXEL0, 0, PRIMITIVE, 0);
|
||||
|
||||
if (gSaveContext.timer1State != 0) {
|
||||
if ((gSaveContext.timer1Value < 10) && (gSaveContext.timer1State < 11)) {
|
||||
if (gSaveContext.timerState != 0) {
|
||||
if ((gSaveContext.timerSeconds < 10) && (gSaveContext.timerState < 11)) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
|
||||
} else {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
|
||||
}
|
||||
} else {
|
||||
if ((gSaveContext.timer2Value < 10) && (gSaveContext.timer2State < 6)) {
|
||||
if ((gSaveContext.subTimerSeconds < 10) && (gSaveContext.subTimerState < 6)) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
|
||||
} else {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255);
|
||||
@@ -6243,14 +6264,24 @@ void Interface_Update(PlayState* play) {
|
||||
|
||||
GameInteractor_ExecuteOnInterfaceUpdate();
|
||||
|
||||
bool isPal = ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL;
|
||||
|
||||
if (CHECK_BTN_ALL(debugInput->press.button, BTN_DLEFT)) {
|
||||
gSaveContext.language = LANGUAGE_ENG;
|
||||
CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG);
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DUP)) {
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DUP) && sGerMessageEntryTablePtr != NULL) {
|
||||
gSaveContext.language = LANGUAGE_GER;
|
||||
CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_GER);
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DRIGHT)) {
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DRIGHT) && sFraMessageEntryTablePtr != NULL) {
|
||||
gSaveContext.language = LANGUAGE_FRA;
|
||||
CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_FRA);
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
} else if (CHECK_BTN_ALL(debugInput->press.button, BTN_DDOWN) && sJpnMessageEntryTablePtr != NULL) {
|
||||
// Add this in to have an equivalent ntsc language debugging feature
|
||||
gSaveContext.language = LANGUAGE_JPN;
|
||||
CVarSetInteger(CVAR_SETTING("Languages"), LANGUAGE_JPN);
|
||||
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
|
||||
}
|
||||
|
||||
@@ -6397,7 +6428,7 @@ void Interface_Update(PlayState* play) {
|
||||
|
||||
HealthMeter_Update(play);
|
||||
|
||||
if ((gSaveContext.timer1State >= 3) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
|
||||
if ((gSaveContext.timerState >= 3) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
|
||||
(msgCtx->msgMode == MSGMODE_NONE) && !(player->stateFlags2 & PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
|
||||
(play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) {}
|
||||
|
||||
@@ -6516,16 +6547,16 @@ void Interface_Update(PlayState* play) {
|
||||
Interface_UpdateMagicBar(play);
|
||||
}
|
||||
|
||||
if (gSaveContext.timer1State == 0) {
|
||||
if (gSaveContext.timerState == 0) {
|
||||
if (((D_80125A58 == 1) || (D_80125A58 == 2) || (D_80125A58 == 4)) && ((gSaveContext.health >> 1) != 0)) {
|
||||
gSaveContext.timer1State = 1;
|
||||
gSaveContext.timerState = 1;
|
||||
gSaveContext.timerX[0] = 140;
|
||||
gSaveContext.timerY[0] = 80;
|
||||
D_80125A5C = 1;
|
||||
}
|
||||
} else {
|
||||
if (((D_80125A58 == 0) || (D_80125A58 == 3)) && (gSaveContext.timer1State < 5)) {
|
||||
gSaveContext.timer1State = 0;
|
||||
if (((D_80125A58 == 0) || (D_80125A58 == 3)) && (gSaveContext.timerState < 5)) {
|
||||
gSaveContext.timerState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "soh/Enhancements/randomizer/savefile.h"
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "soh/SaveManager.h"
|
||||
#include "soh/ResourceManagerHelpers.h"
|
||||
|
||||
#define NUM_DUNGEONS 8
|
||||
#define NUM_COWS 10
|
||||
@@ -238,6 +239,11 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
||||
gSaveContext.linkAge = 1;
|
||||
gSaveContext.dayTime = 0x6AAB;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
if (ResourceMgr_GetGameRegion(0) == GAME_REGION_PAL && gSaveContext.language != LANGUAGE_JPN) {
|
||||
gSaveContext.ship.filenameLanguage = NAME_LANGUAGE_PAL;
|
||||
} else { // GAME_REGION_NTSC
|
||||
gSaveContext.ship.filenameLanguage = (gSaveContext.language == LANGUAGE_JPN) ? NAME_LANGUAGE_NTSC_JPN : NAME_LANGUAGE_NTSC_ENG;
|
||||
}
|
||||
|
||||
if ((fileChooseCtx->buttonIndex == 0 && CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0))) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
|
||||
Reference in New Issue
Block a user