Decomp import: rename timer-related functions and variables (#5896)

This commit is contained in:
Jordan Longstaff
2026-01-08 13:56:01 -05:00
committed by GitHub
parent feb1429471
commit 9ca5ce0b53
33 changed files with 349 additions and 288 deletions

View File

@@ -1089,9 +1089,9 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange);
void Magic_Fill(PlayState* play);
void Magic_Reset(PlayState* play);
s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type);
void func_80088AA0(s16 seconds);
void func_80088AF0(PlayState* play);
void func_80088B34(s16 arg0);
void Interface_SetSubTimer(s16 seconds);
void Interface_SetSubTimerToFinalSecond(PlayState* play);
void Interface_SetTimer(s16 arg0);
void Interface_Draw(PlayState* play);
void Interface_DrawTotalGameplayTimer(PlayState* play);
void Interface_Update(PlayState* play);

View File

@@ -85,6 +85,14 @@ typedef enum PlayerMask {
/* 0x09 */ PLAYER_MASK_MAX
} PlayerMask;
typedef enum PlayerEnvHazard {
/* 0x0 */ PLAYER_ENV_HAZARD_NONE,
/* 0x1 */ PLAYER_ENV_HAZARD_HOTROOM,
/* 0x2 */ PLAYER_ENV_HAZARD_UNDERWATER_FLOOR,
/* 0x3 */ PLAYER_ENV_HAZARD_SWIMMING,
/* 0x4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE
} PlayerEnvHazard;
typedef enum PlayerIdleType {
/* -0x1 */ PLAYER_IDLE_CRIT_HEALTH = -1,
/* 0x0 */ PLAYER_IDLE_DEFAULT,

View File

@@ -152,6 +152,45 @@ typedef struct {
/* 0x24 */ s32 tempCollectFlags;
} FaroresWindData; // size = 0x28
typedef enum TimerState {
/* 0x0 */ TIMER_STATE_OFF,
/* 0x1 */ TIMER_STATE_ENV_HAZARD_INIT, // Init env timer that counts down, total time based on health, resets on
// void-out, kills at 0
/* 0x2 */ TIMER_STATE_ENV_HAZARD_PREVIEW, // Display initial time, keep it fixed at the screen center
/* 0x3 */ TIMER_STATE_ENV_HAZARD_MOVE, // Move to top-left corner
/* 0x4 */ TIMER_STATE_ENV_HAZARD_TICK, // Counting down
/* 0x5 */ TIMER_STATE_DOWN_INIT, // Init timer that counts down
/* 0x6 */ TIMER_STATE_DOWN_PREVIEW, // Display initial time, keep it fixed at the screen center
/* 0x7 */ TIMER_STATE_DOWN_MOVE, // Move to top-left corner
/* 0x8 */ TIMER_STATE_DOWN_TICK, // Counting down
/* 0xA */ TIMER_STATE_STOP = 10,
/* 0xB */ TIMER_STATE_UP_INIT, // Init timer that counts up
/* 0xC */ TIMER_STATE_UP_PREVIEW, // Display initial time, keep it fixed at the screen center
/* 0xD */ TIMER_STATE_UP_MOVE, // Move to top-left corner
/* 0xE */ TIMER_STATE_UP_TICK, // Counting up
/* 0xF */ TIMER_STATE_UP_FREEZE // Stop counting the timer
} TimerState;
typedef enum SubTimerState {
/* 0x0 */ SUBTIMER_STATE_OFF,
/* 0x1 */ SUBTIMER_STATE_DOWN_INIT, // Init timer that counts down
/* 0x2 */ SUBTIMER_STATE_DOWN_PREVIEW, // Display initial time, keep it fixed at the screen center
/* 0x3 */ SUBTIMER_STATE_DOWN_MOVE, // Move to top-left corner
/* 0x4 */ SUBTIMER_STATE_DOWN_TICK, // Counting down
/* 0x5 */ SUBTIMER_STATE_RESPAWN, // Time is up, trigger a transition, reset button items, spoil trade quest items
/* 0x6 */ SUBTIMER_STATE_STOP, // Time is up, stop counting
/* 0x7 */ SUBTIMER_STATE_UP_INIT, // Init timer that counts up
/* 0x8 */ SUBTIMER_STATE_UP_PREVIEW, // Display initial time, keep it fixed at the screen center
/* 0x9 */ SUBTIMER_STATE_UP_MOVE, // Move to top-left corner
/* 0xA */ SUBTIMER_STATE_UP_TICK // Counting up
} SubTimerState;
typedef enum TimerId {
/* 0 */ TIMER_ID_MAIN, // Takes priority in both counting and drawing. See `timerState` and `timerSeconds`
/* 1 */ TIMER_ID_SUB, // See `subTimerState` and `subTimerSeconds`
/* 2 */ TIMER_ID_MAX
} TimerId;
typedef struct {
RandomizerCheck check;
RandomizerCheck hintedCheck;
@@ -270,8 +309,8 @@ typedef struct {
/* 0x13D0 */ s16 timerSeconds;
/* 0x13D2 */ s16 subTimerState;
/* 0x13D4 */ s16 subTimerSeconds;
/* 0x13D6 */ s16 timerX[2];
/* 0x13DA */ s16 timerY[2];
/* 0x13D6 */ s16 timerX[TIMER_ID_MAX];
/* 0x13DA */ s16 timerY[TIMER_ID_MAX];
/* 0x13DE */ char unk_13DE[0x0002];
/* 0x13E0 */ u8 seqId;
/* 0x13E1 */ u8 natureAmbienceId;

View File

@@ -61,7 +61,7 @@ static void PauseWarp_Execute() {
for (int i = 0; i < ARRAY_COUNT(ocarinaSongMap); i++) {
if (gPlayState->msgCtx.lastPlayedSong == ocarinaSongMap[i]) {
gPlayState->nextEntranceIndex = entranceIndexMap[i];
func_80088AF0(gPlayState);
Interface_SetSubTimerToFinalSecond(gPlayState);
return;
}
}

View File

@@ -99,20 +99,20 @@ static void TimeDisplayGetTimer(uint32_t timeID) {
timeDisplayTime = convertDayTime(gSaveContext.dayTime).c_str();
break;
case DISPLAY_CONDITIONAL_TIMER:
if (gSaveContext.timerState > 0) {
if (gSaveContext.timerState > TIMER_STATE_OFF) {
timeDisplayTime = formatHotWaterDisplay(gSaveContext.timerSeconds).c_str();
textColor =
gSaveContext.timerState <= 4
gSaveContext.timerState <= TIMER_STATE_ENV_HAZARD_TICK
? (gPlayState->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3 ? COLOR_LIGHT_RED
: COLOR_LIGHT_BLUE)
: COLOR_WHITE;
if (gSaveContext.timerState <= 4) {
if (gSaveContext.timerState <= TIMER_STATE_ENV_HAZARD_TICK) {
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
gPlayState->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3
? itemMapping[ITEM_TUNIC_GORON].name
: itemMapping[ITEM_TUNIC_ZORA].name);
}
if (gSaveContext.timerState >= 6) {
if (gSaveContext.timerState >= TIMER_STATE_DOWN_PREVIEW) {
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
itemMapping[ITEM_SWORD_MASTER].name);
}

View File

@@ -143,9 +143,9 @@ void RegisterOnInterfaceUpdateHook() {
static char ttsAnnounceBuf[32];
uint32_t timer = 0;
if (gSaveContext.timerState != 0) {
if (gSaveContext.timerState != TIMER_STATE_OFF) {
timer = gSaveContext.timerSeconds;
} else if (gSaveContext.subTimerState != 0) {
} else if (gSaveContext.subTimerState != SUBTIMER_STATE_OFF) {
timer = gSaveContext.subTimerSeconds;
}

View File

@@ -2586,8 +2586,8 @@ typedef struct {
/* 0x13D0 */ s16 timerSeconds;
/* 0x13D2 */ s16 subTimerState;
/* 0x13D4 */ s16 subTimerSeconds;
/* 0x13D6 */ s16 timerX[2];
/* 0x13DA */ s16 timerY[2];
/* 0x13D6 */ s16 timerX[TIMER_ID_MAX];
/* 0x13DA */ s16 timerY[TIMER_ID_MAX];
/* 0x13DE */ char unk_13DE[0x0002];
/* 0x13E0 */ u8 seqId;
/* 0x13E1 */ u8 natureAmbienceId;

View File

@@ -10,7 +10,7 @@ void func_80110990(PlayState* play) {
void func_801109B0(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
u32 parameterSize;
u8 temp;
u8 timerId;
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
gSaveContext.unk_13E8 = gSaveContext.unk_13EA = 0;
@@ -83,35 +83,38 @@ void func_801109B0(PlayState* play) {
osSyncPrintf("%d\n", ((void)0, gSaveContext.timerState));
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8) || (gSaveContext.subTimerState == 4) ||
(gSaveContext.subTimerState == 10)) {
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK) ||
(gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_TICK) ||
(gSaveContext.subTimerState == SUBTIMER_STATE_UP_TICK)) {
osSyncPrintf("restart_flag=%d\n", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) {
if (gSaveContext.timerState == 4) {
gSaveContext.timerState = 1;
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
if (gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) {
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_INIT;
gSaveContext.timerX[TIMER_ID_MAIN] = 140;
gSaveContext.timerY[TIMER_ID_MAIN] = 80;
}
}
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
temp = 0;
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK)) {
timerId = TIMER_ID_MAIN;
} else {
temp = 1;
timerId = TIMER_ID_SUB;
}
gSaveContext.timerX[temp] = 26;
gSaveContext.timerX[timerId] = 26;
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[temp] = 54;
gSaveContext.timerY[timerId] = 54;
} else {
gSaveContext.timerY[temp] = 46;
gSaveContext.timerY[timerId] = 46;
}
}
if ((gSaveContext.timerState >= 11) && (gSaveContext.timerState < 16)) {
gSaveContext.timerState = 0;
if ((gSaveContext.timerState >= TIMER_STATE_UP_INIT) && (gSaveContext.timerState <= TIMER_STATE_UP_FREEZE)) {
gSaveContext.timerState = TIMER_STATE_OFF;
// "Timer Stop!!!!!!!!!!!!!!!!!!!!!!"
osSyncPrintf("タイマー停止!!!!!!!!!!!!!!!!!!!!! = %d\n", gSaveContext.timerState);
}

View File

@@ -31,8 +31,8 @@ void GameOver_Update(PlayState* play) {
case GAMEOVER_DEATH_START:
Message_CloseTextbox(play);
gSaveContext.timerState = 0;
gSaveContext.subTimerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
gSaveContext.eventInf[1] &= ~1;
// search inventory for spoiling items and revert if necessary

View File

@@ -172,8 +172,8 @@ static s16 sExtraItemBases[] = {
ITEM_BOW, ITEM_BOW, ITEM_SEEDS, ITEM_BOMBCHU, ITEM_BOMBCHU, ITEM_STICK, ITEM_STICK, ITEM_NUT, ITEM_NUT,
};
static s16 D_80125A58 = 0;
static s16 D_80125A5C = 0;
static s16 sEnvHazard = PLAYER_ENV_HAZARD_NONE;
static s16 sEnvHazardActive = false;
static Gfx sSetupDL_80125A60[] = {
gsDPPipeSync(),
@@ -3757,21 +3757,21 @@ void Interface_DrawEnemyHealthBar(TargetContext* targetCtx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
void func_80088AA0(s16 arg0) {
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
D_80125A5C = 0;
gSaveContext.subTimerSeconds = arg0;
void Interface_SetSubTimer(s16 seconds) {
gSaveContext.timerX[TIMER_ID_SUB] = 140;
gSaveContext.timerY[TIMER_ID_SUB] = 80;
sEnvHazardActive = false;
gSaveContext.subTimerSeconds = seconds;
if (arg0 != 0) {
gSaveContext.subTimerState = 1;
if (seconds) {
gSaveContext.subTimerState = SUBTIMER_STATE_DOWN_INIT;
} else {
gSaveContext.subTimerState = 7;
gSaveContext.subTimerState = SUBTIMER_STATE_UP_INIT;
}
}
void func_80088AF0(PlayState* play) {
if (gSaveContext.subTimerState != 0) {
void Interface_SetSubTimerToFinalSecond(PlayState* play) {
if (gSaveContext.subTimerState != SUBTIMER_STATE_OFF) {
if (gSaveContext.eventInf[1] & 1) {
gSaveContext.subTimerSeconds = 239;
} else {
@@ -3780,16 +3780,16 @@ void func_80088AF0(PlayState* play) {
}
}
void func_80088B34(s16 arg0) {
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
D_80125A5C = 0;
gSaveContext.timerSeconds = arg0;
void Interface_SetTimer(s16 seconds) {
gSaveContext.timerX[TIMER_ID_MAIN] = 140;
gSaveContext.timerY[TIMER_ID_MAIN] = 80;
sEnvHazardActive = false;
gSaveContext.timerSeconds = seconds;
if (arg0 != 0) {
gSaveContext.timerState = 5;
if (seconds) {
gSaveContext.timerState = TIMER_STATE_DOWN_INIT;
} else {
gSaveContext.timerState = 11;
gSaveContext.timerState = TIMER_STATE_UP_INIT;
}
}
@@ -5120,10 +5120,10 @@ void Interface_Draw(PlayState* play) {
static s16 spoilingItemEntrances[] = { ENTR_LOST_WOODS_2, ENTR_ZORAS_DOMAIN_3, ENTR_ZORAS_DOMAIN_3 };
static f32 D_80125B54[] = { -40.0f, -35.0f }; // unused
static s16 D_80125B5C[] = { 91, 91 }; // unused
static s16 D_8015FFE0;
static s16 D_8015FFE2;
static s16 D_8015FFE4;
static s16 D_8015FFE6;
static s16 sTimerNextSecondTimer;
static s16 sTimerStateTimer;
static s16 sSubTimerNextSecondTimer;
static s16 sSubTimerStateTimer;
static s16 timerDigits[5];
InterfaceContext* interfaceCtx = &play->interfaceCtx;
PauseContext* pauseCtx = &play->pauseCtx;
@@ -5134,7 +5134,7 @@ void Interface_Draw(PlayState* play) {
s16 svar3;
s16 svar4;
s16 svar5;
s16 svar6;
s16 timerId;
bool fullUi = !CVarGetInteger(CVAR_ENHANCEMENT("MinimalUI"), 0) || !R_MINIMAP_DISABLED || play->pauseCtx.state != 0;
// #region SOH [NTSC]
s32 languageOffset = gSaveContext.language;
@@ -5901,13 +5901,14 @@ void Interface_Draw(PlayState* play) {
}
}
if ((gSaveContext.subTimerState == 5) && (Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
if ((gSaveContext.subTimerState == SUBTIMER_STATE_RESPAWN) &&
(Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
// Trade quest timer reached 0
D_8015FFE6 = 40;
sSubTimerStateTimer = 40;
gSaveContext.cutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
@@ -5947,98 +5948,99 @@ void Interface_Draw(PlayState* play) {
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
!Play_InCsMode(play) && (gSaveContext.minigameState != 1) && (play->shootingGalleryStatus <= 1) &&
!((play->sceneNum == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
svar6 = 0;
timerId = TIMER_ID_MAIN;
switch (gSaveContext.timerState) {
case 1:
D_8015FFE2 = 20;
D_8015FFE0 = 20;
case TIMER_STATE_ENV_HAZARD_INIT:
sTimerStateTimer = 20;
sTimerNextSecondTimer = 20;
gSaveContext.timerSeconds = gSaveContext.health >> 1;
gSaveContext.timerState = 2;
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_PREVIEW;
break;
case 2:
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
gSaveContext.timerState = 3;
case TIMER_STATE_ENV_HAZARD_PREVIEW:
sTimerStateTimer--;
if (sTimerStateTimer == 0) {
sTimerStateTimer = 20;
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_MOVE;
}
break;
case 5:
case 11:
D_8015FFE2 = 20;
D_8015FFE0 = 20;
if (gSaveContext.timerState == 5) {
gSaveContext.timerState = 6;
case TIMER_STATE_DOWN_INIT:
case TIMER_STATE_UP_INIT:
sTimerStateTimer = 20;
sTimerNextSecondTimer = 20;
if (gSaveContext.timerState == TIMER_STATE_DOWN_INIT) {
gSaveContext.timerState = TIMER_STATE_DOWN_PREVIEW;
} else {
gSaveContext.timerState = 12;
gSaveContext.timerState = TIMER_STATE_UP_PREVIEW;
}
break;
case 6:
case 12:
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
if (gSaveContext.timerState == 6) {
gSaveContext.timerState = 7;
case TIMER_STATE_DOWN_PREVIEW:
case TIMER_STATE_UP_PREVIEW:
sTimerStateTimer--;
if (sTimerStateTimer == 0) {
sTimerStateTimer = 20;
if (gSaveContext.timerState == TIMER_STATE_DOWN_PREVIEW) {
gSaveContext.timerState = TIMER_STATE_DOWN_MOVE;
} else {
gSaveContext.timerState = 13;
gSaveContext.timerState = TIMER_STATE_UP_MOVE;
}
}
break;
case 3:
case 7:
svar1 = (gSaveContext.timerX[0] - 26) / D_8015FFE2;
gSaveContext.timerX[0] -= svar1;
case TIMER_STATE_ENV_HAZARD_MOVE:
case TIMER_STATE_DOWN_MOVE:
svar1 = (gSaveContext.timerX[TIMER_ID_MAIN] - 26) / sTimerStateTimer;
gSaveContext.timerX[TIMER_ID_MAIN] -= svar1;
if (gSaveContext.healthCapacity > 0xA0) {
svar1 = (gSaveContext.timerY[0] - 54) / D_8015FFE2;
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 54) / sTimerStateTimer;
} else {
svar1 = (gSaveContext.timerY[0] - 46) / D_8015FFE2;
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 46) / sTimerStateTimer;
}
gSaveContext.timerY[0] -= svar1;
gSaveContext.timerY[TIMER_ID_MAIN] -= svar1;
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
gSaveContext.timerX[0] = 26;
sTimerStateTimer--;
if (sTimerStateTimer == 0) {
sTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_MAIN] = 26;
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
gSaveContext.timerY[TIMER_ID_MAIN] = 54;
} else {
gSaveContext.timerY[0] = 46;
gSaveContext.timerY[TIMER_ID_MAIN] = 46;
}
if (gSaveContext.timerState == 3) {
gSaveContext.timerState = 4;
if (gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_MOVE) {
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_TICK;
} else {
gSaveContext.timerState = 8;
gSaveContext.timerState = TIMER_STATE_DOWN_TICK;
}
}
case 4:
case 8:
if ((gSaveContext.timerState == 4) || (gSaveContext.timerState == 8)) {
case TIMER_STATE_ENV_HAZARD_TICK:
case TIMER_STATE_DOWN_TICK:
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK)) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
gSaveContext.timerY[TIMER_ID_MAIN] = 54;
} else {
gSaveContext.timerY[0] = 46;
gSaveContext.timerY[TIMER_ID_MAIN] = 46;
}
}
if ((gSaveContext.timerState >= 3) && (msgCtx->msgLength == 0)) {
D_8015FFE0--;
if (D_8015FFE0 == 0) {
if ((gSaveContext.timerState >= TIMER_STATE_ENV_HAZARD_MOVE) && (msgCtx->msgLength == 0)) {
sTimerNextSecondTimer--;
if (sTimerNextSecondTimer == 0) {
if (gSaveContext.timerSeconds != 0) {
gSaveContext.timerSeconds--;
}
D_8015FFE0 = 20;
sTimerNextSecondTimer = 20;
if (gSaveContext.timerSeconds == 0) {
gSaveContext.timerState = 10;
if (D_80125A5C != 0) {
gSaveContext.timerState = TIMER_STATE_STOP;
if (sEnvHazardActive) {
gSaveContext.health = 0;
play->damagePlayer(play, -(gSaveContext.health + 2));
}
D_80125A5C = 0;
sEnvHazardActive = false;
} else if (gSaveContext.timerSeconds > 60) {
if (timerDigits[4] == 1) {
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gSfxDefaultPos, 4,
@@ -6059,47 +6061,47 @@ void Interface_Draw(PlayState* play) {
}
}
break;
case 13:
svar1 = (gSaveContext.timerX[0] - 26) / D_8015FFE2;
gSaveContext.timerX[0] -= svar1;
case TIMER_STATE_UP_MOVE:
svar1 = (gSaveContext.timerX[TIMER_ID_MAIN] - 26) / sTimerStateTimer;
gSaveContext.timerX[TIMER_ID_MAIN] -= svar1;
if (gSaveContext.healthCapacity > 0xA0) {
svar1 = (gSaveContext.timerY[0] - 54) / D_8015FFE2;
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 54) / sTimerStateTimer;
} else {
svar1 = (gSaveContext.timerY[0] - 46) / D_8015FFE2;
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 46) / sTimerStateTimer;
}
gSaveContext.timerY[0] -= svar1;
gSaveContext.timerY[TIMER_ID_MAIN] -= svar1;
D_8015FFE2--;
if (D_8015FFE2 == 0) {
D_8015FFE2 = 20;
gSaveContext.timerX[0] = 26;
sTimerStateTimer--;
if (sTimerStateTimer == 0) {
sTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_MAIN] = 26;
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
gSaveContext.timerY[TIMER_ID_MAIN] = 54;
} else {
gSaveContext.timerY[0] = 46;
gSaveContext.timerY[TIMER_ID_MAIN] = 46;
}
gSaveContext.timerState = 14;
gSaveContext.timerState = TIMER_STATE_UP_TICK;
}
case 14:
if (gSaveContext.timerState == 14) {
case TIMER_STATE_UP_TICK:
if (gSaveContext.timerState == TIMER_STATE_UP_TICK) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[0] = 54;
gSaveContext.timerY[TIMER_ID_MAIN] = 54;
} else {
gSaveContext.timerY[0] = 46;
gSaveContext.timerY[TIMER_ID_MAIN] = 46;
}
}
if (gSaveContext.timerState >= 3) {
D_8015FFE0--;
if (D_8015FFE0 == 0) {
if (gSaveContext.timerState >= TIMER_STATE_ENV_HAZARD_MOVE) {
sTimerNextSecondTimer--;
if (sTimerNextSecondTimer == 0) {
gSaveContext.timerSeconds++;
D_8015FFE0 = 20;
sTimerNextSecondTimer = 20;
if (gSaveContext.timerSeconds == 3599) {
D_8015FFE2 = 40;
gSaveContext.timerState = 15;
sTimerStateTimer = 40;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
} else {
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gSfxDefaultPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
@@ -6108,98 +6110,99 @@ void Interface_Draw(PlayState* play) {
}
}
break;
case 10:
if (gSaveContext.subTimerState != 0) {
D_8015FFE6 = 20;
D_8015FFE4 = 20;
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
case TIMER_STATE_STOP:
if (gSaveContext.subTimerState != SUBTIMER_STATE_OFF) {
sSubTimerStateTimer = 20;
sSubTimerNextSecondTimer = 20;
gSaveContext.timerX[TIMER_ID_SUB] = 140;
gSaveContext.timerY[TIMER_ID_SUB] = 80;
if (gSaveContext.subTimerState < 7) {
gSaveContext.subTimerState = 2;
if (gSaveContext.subTimerState <= SUBTIMER_STATE_STOP) {
gSaveContext.subTimerState = SUBTIMER_STATE_DOWN_PREVIEW;
} else {
gSaveContext.subTimerState = 8;
gSaveContext.subTimerState = SUBTIMER_STATE_UP_PREVIEW;
}
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
} else {
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
case 15:
case TIMER_STATE_UP_FREEZE:
break;
default:
svar6 = 1;
timerId = TIMER_ID_SUB;
switch (gSaveContext.subTimerState) {
case 1:
case 7:
D_8015FFE6 = 20;
D_8015FFE4 = 20;
gSaveContext.timerX[1] = 140;
gSaveContext.timerY[1] = 80;
if (gSaveContext.subTimerState == 1) {
gSaveContext.subTimerState = 2;
case SUBTIMER_STATE_DOWN_INIT:
case SUBTIMER_STATE_UP_INIT:
sSubTimerStateTimer = 20;
sSubTimerNextSecondTimer = 20;
gSaveContext.timerX[TIMER_ID_SUB] = 140;
gSaveContext.timerY[TIMER_ID_SUB] = 80;
if (gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_INIT) {
gSaveContext.subTimerState = SUBTIMER_STATE_DOWN_PREVIEW;
} else {
gSaveContext.subTimerState = 8;
gSaveContext.subTimerState = SUBTIMER_STATE_UP_PREVIEW;
}
break;
case 2:
case 8:
D_8015FFE6--;
if (D_8015FFE6 == 0) {
D_8015FFE6 = 20;
if (gSaveContext.subTimerState == 2) {
gSaveContext.subTimerState = 3;
case SUBTIMER_STATE_DOWN_PREVIEW:
case SUBTIMER_STATE_UP_PREVIEW:
sSubTimerStateTimer--;
if (sSubTimerStateTimer == 0) {
sSubTimerStateTimer = 20;
if (gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_PREVIEW) {
gSaveContext.subTimerState = SUBTIMER_STATE_DOWN_MOVE;
} else {
gSaveContext.subTimerState = 9;
gSaveContext.subTimerState = SUBTIMER_STATE_UP_MOVE;
}
}
break;
case 3:
case 9:
case SUBTIMER_STATE_DOWN_MOVE:
case SUBTIMER_STATE_UP_MOVE:
osSyncPrintf("event_xp[1]=%d, event_yp[1]=%d TOTAL_EVENT_TM=%d\n",
svar5 = gSaveContext.timerX[1], svar2 = gSaveContext.timerY[1],
gSaveContext.subTimerSeconds);
svar1 = (gSaveContext.timerX[1] - 26) / D_8015FFE6;
gSaveContext.timerX[1] -= svar1;
svar5 = gSaveContext.timerX[TIMER_ID_SUB],
svar2 = gSaveContext.timerY[TIMER_ID_SUB], gSaveContext.subTimerSeconds);
svar1 = (gSaveContext.timerX[TIMER_ID_SUB] - 26) / sSubTimerStateTimer;
gSaveContext.timerX[TIMER_ID_SUB] -= svar1;
if (gSaveContext.healthCapacity > 0xA0) {
svar1 = (gSaveContext.timerY[1] - 54) / D_8015FFE6;
svar1 = (gSaveContext.timerY[TIMER_ID_SUB] - 54) / sSubTimerStateTimer;
} else {
svar1 = (gSaveContext.timerY[1] - 46) / D_8015FFE6;
svar1 = (gSaveContext.timerY[TIMER_ID_SUB] - 46) / sSubTimerStateTimer;
}
gSaveContext.timerY[1] -= svar1;
gSaveContext.timerY[TIMER_ID_SUB] -= svar1;
D_8015FFE6--;
if (D_8015FFE6 == 0) {
D_8015FFE6 = 20;
gSaveContext.timerX[1] = 26;
sSubTimerStateTimer--;
if (sSubTimerStateTimer == 0) {
sSubTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_SUB] = 26;
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[1] = 54;
gSaveContext.timerY[TIMER_ID_SUB] = 54;
} else {
gSaveContext.timerY[1] = 46;
gSaveContext.timerY[TIMER_ID_SUB] = 46;
}
if (gSaveContext.subTimerState == 3) {
gSaveContext.subTimerState = 4;
if (gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_MOVE) {
gSaveContext.subTimerState = SUBTIMER_STATE_DOWN_TICK;
} else {
gSaveContext.subTimerState = 10;
gSaveContext.subTimerState = SUBTIMER_STATE_UP_TICK;
}
}
case 4:
case 10:
if ((gSaveContext.subTimerState == 4) || (gSaveContext.subTimerState == 10)) {
case SUBTIMER_STATE_DOWN_TICK:
case SUBTIMER_STATE_UP_TICK:
if ((gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_TICK) ||
(gSaveContext.subTimerState == SUBTIMER_STATE_UP_TICK)) {
if (gSaveContext.healthCapacity > 0xA0) {
gSaveContext.timerY[1] = 54;
gSaveContext.timerY[TIMER_ID_SUB] = 54;
} else {
gSaveContext.timerY[1] = 46;
gSaveContext.timerY[TIMER_ID_SUB] = 46;
}
}
if (gSaveContext.subTimerState >= 3) {
D_8015FFE4--;
if (D_8015FFE4 == 0) {
D_8015FFE4 = 20;
if (gSaveContext.subTimerState == 4) {
if (gSaveContext.subTimerState >= SUBTIMER_STATE_DOWN_MOVE) {
sSubTimerNextSecondTimer--;
if (sSubTimerNextSecondTimer == 0) {
sSubTimerNextSecondTimer = 20;
if (gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_TICK) {
gSaveContext.subTimerSeconds--;
osSyncPrintf("TOTAL_EVENT_TM=%d\n", gSaveContext.subTimerSeconds);
@@ -6209,14 +6212,14 @@ void Interface_Draw(PlayState* play) {
(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.subTimerState = 5;
sSubTimerStateTimer = 40;
gSaveContext.subTimerState = SUBTIMER_STATE_RESPAWN;
gSaveContext.cutsceneIndex = 0;
Message_StartTextbox(play, 0x71B0, NULL);
Player_SetCsActionWithHaltedActors(play, NULL, 8);
} else {
D_8015FFE6 = 40;
gSaveContext.subTimerState = 6;
sSubTimerStateTimer = 40;
gSaveContext.subTimerState = SUBTIMER_STATE_STOP;
}
} else if (gSaveContext.subTimerSeconds > 60) {
if (timerDigits[4] == 1) {
@@ -6241,7 +6244,7 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.subTimerSeconds == 240) {
Message_StartTextbox(play, 0x6083, NULL);
gSaveContext.eventInf[1] &= ~1;
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
}
}
}
@@ -6255,21 +6258,21 @@ void Interface_Draw(PlayState* play) {
}
break;
case 6:
D_8015FFE6--;
if (D_8015FFE6 == 0) {
gSaveContext.subTimerState = 0;
sSubTimerStateTimer--;
if (sSubTimerStateTimer == 0) {
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
}
break;
}
break;
}
if (((gSaveContext.timerState != 0) && (gSaveContext.timerState != 10)) ||
(gSaveContext.subTimerState != 0)) {
if (((gSaveContext.timerState != TIMER_STATE_OFF) && (gSaveContext.timerState != TIMER_STATE_STOP)) ||
(gSaveContext.subTimerState != SUBTIMER_STATE_OFF)) {
timerDigits[0] = timerDigits[1] = svar2 = timerDigits[3] = 0;
timerDigits[2] = 10; // digit 10 is used as ':' (colon)
if (gSaveContext.timerState != 0) {
if (gSaveContext.timerState != TIMER_STATE_OFF) {
timerDigits[4] = gSaveContext.timerSeconds;
} else {
timerDigits[4] = gSaveContext.subTimerSeconds;
@@ -6301,8 +6304,8 @@ void Interface_Draw(PlayState* play) {
} else {
X_Margins_Timer = 0;
}
svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6] + X_Margins_Timer);
svar2 = gSaveContext.timerY[svar6];
svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[timerId] + X_Margins_Timer);
svar2 = gSaveContext.timerY[timerId];
if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) != ORIGINAL_LOCATION) {
svar2 = (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosY"), 0));
if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == ANCHOR_LEFT) {
@@ -6332,14 +6335,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.timerState != 0) {
if ((gSaveContext.timerSeconds < 10) && (gSaveContext.timerState < 11)) {
if (gSaveContext.timerState != TIMER_STATE_OFF) {
if ((gSaveContext.timerSeconds < 10) && (gSaveContext.timerState <= TIMER_STATE_STOP)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
}
} else {
if ((gSaveContext.subTimerSeconds < 10) && (gSaveContext.subTimerState < 6)) {
if ((gSaveContext.subTimerSeconds < 10) && (gSaveContext.subTimerState <= SUBTIMER_STATE_RESPAWN)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255);
@@ -6349,7 +6352,7 @@ void Interface_Draw(PlayState* play) {
for (svar1 = 0; svar1 < 5; svar1++) {
// clang-format off
//svar5 = svar5 + 8;
//svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]);
//svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[timerId]);
OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, digitTextures[timerDigits[svar1]], 8, 16,
svar5 + timerDigitLeftPos[svar1],
svar2, digitWidth[svar1], VREG(42), VREG(43) << 1,
@@ -6650,24 +6653,25 @@ void Interface_Update(PlayState* play) {
}
HealthMeter_HandleCriticalAlarm(play);
D_80125A58 = Player_GetEnvironmentalHazard(play);
sEnvHazard = Player_GetEnvironmentalHazard(play);
if (D_80125A58 == 1) {
if (sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) {
if (CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_GORON ||
CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) != 0) {
D_80125A58 = 0;
sEnvHazard = PLAYER_ENV_HAZARD_NONE;
}
} else if ((Player_GetEnvironmentalHazard(play) >= 2) && (Player_GetEnvironmentalHazard(play) < 5)) {
if (CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_ZORA ||
CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) != 0) {
D_80125A58 = 0;
sEnvHazard = PLAYER_ENV_HAZARD_NONE;
}
}
HealthMeter_Update(play);
if ((gSaveContext.timerState >= 3) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
(msgCtx->msgMode == MSGMODE_NONE) && !(player->stateFlags2 & PLAYER_STATE2_ATTEMPT_PLAY_FOR_ACTOR) &&
if ((gSaveContext.timerState >= TIMER_STATE_ENV_HAZARD_MOVE) && (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)) {}
@@ -6788,16 +6792,19 @@ void Interface_Update(PlayState* play) {
Interface_UpdateMagicBar(play);
}
if (gSaveContext.timerState == 0) {
if (((D_80125A58 == 1) || (D_80125A58 == 2) || (D_80125A58 == 4)) && ((gSaveContext.health >> 1) != 0)) {
gSaveContext.timerState = 1;
gSaveContext.timerX[0] = 140;
gSaveContext.timerY[0] = 80;
D_80125A5C = 1;
if (gSaveContext.timerState == TIMER_STATE_OFF) {
if (((sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) || (sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) ||
(sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FREE)) &&
((gSaveContext.health >> 1) != 0)) {
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_INIT;
gSaveContext.timerX[TIMER_ID_MAIN] = 140;
gSaveContext.timerY[TIMER_ID_MAIN] = 80;
sEnvHazardActive = true;
}
} else {
if (((D_80125A58 == 0) || (D_80125A58 == 3)) && (gSaveContext.timerState < 5)) {
gSaveContext.timerState = 0;
if (((sEnvHazard == PLAYER_ENV_HAZARD_NONE) || (sEnvHazard == PLAYER_ENV_HAZARD_SWIMMING)) &&
(gSaveContext.timerState <= TIMER_STATE_ENV_HAZARD_TICK)) {
gSaveContext.timerState = TIMER_STATE_OFF;
}
}

View File

@@ -932,28 +932,32 @@ return_neg:
s32 Player_GetEnvironmentalHazard(PlayState* play) {
Player* this = GET_PLAYER(play);
TextTriggerEntry* triggerEntry;
s32 var;
s32 envHazard;
if (play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) { // Room is hot
var = 0;
envHazard = PLAYER_ENV_HAZARD_HOTROOM - 1;
} else if ((this->underwaterTimer > 80) &&
((this->currentBoots == PLAYER_BOOTS_IRON) || (this->underwaterTimer >= 300))) { // Deep underwater
var = ((this->currentBoots == PLAYER_BOOTS_IRON) && (this->actor.bgCheckFlags & 1)) ? 1 : 3;
envHazard = ((this->currentBoots == PLAYER_BOOTS_IRON) && (this->actor.bgCheckFlags & 1))
? (PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1)
: (PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1);
} else if (this->stateFlags1 & PLAYER_STATE1_IN_WATER) { // Swimming
var = 2;
envHazard = PLAYER_ENV_HAZARD_SWIMMING - 1;
} else {
return 0;
return PLAYER_ENV_HAZARD_NONE;
}
// Trigger general textboxes under certain conditions, like "It's so hot in here!"
if (!Player_InCsMode(play)) {
triggerEntry = &sTextTriggers[var];
triggerEntry = &sTextTriggers[envHazard];
if ((triggerEntry->flag != 0) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) &&
(((var == 0) &&
(((envHazard == (PLAYER_ENV_HAZARD_HOTROOM - 1)) &&
(this->currentTunic != PLAYER_TUNIC_GORON && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 &&
CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)) ||
(((var == 1) || (var == 3)) && (this->currentBoots == PLAYER_BOOTS_IRON) &&
(((envHazard == (PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1)) ||
(envHazard == (PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1))) &&
(this->currentBoots == PLAYER_BOOTS_IRON) &&
(this->currentTunic != PLAYER_TUNIC_ZORA && CVarGetInteger(CVAR_CHEAT("SuperTunic"), 0) == 0 &&
CVarGetInteger(CVAR_ENHANCEMENT("DisableTunicWarningText"), 0) == 0)))) {
Message_StartTextbox(play, triggerEntry->textId, NULL);
@@ -961,7 +965,7 @@ s32 Player_GetEnvironmentalHazard(PlayState* play) {
}
}
return var + 1;
return envHazard + 1;
}
u8 sEyeMouthIndexes[][2] = {

View File

@@ -230,7 +230,7 @@ void BgPoEvent_Destroy(Actor* thisx, PlayState* play) {
} else {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
if ((this->type == 1) && (gSaveContext.timerSeconds > 0)) {
gSaveContext.timerState = 0xA;
gSaveContext.timerState = TIMER_STATE_STOP;
}
}
}
@@ -319,7 +319,7 @@ void BgPoEvent_BlockFall(BgPoEvent* this, PlayState* play) {
} else {
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_STONE_BOUND);
func_80033E88(&this->dyna.actor, play, 5, 5);
func_80088B34(this->timer);
Interface_SetTimer(this->timer);
if (firstFall == 0) {
firstFall = 1;
} else {
@@ -345,7 +345,7 @@ void BgPoEvent_BlockIdle(BgPoEvent* this, PlayState* play) {
OnePointCutscene_Init(play, 3170, 30, amy, MAIN_CAM);
}
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
gSaveContext.timerState = 0xA;
gSaveContext.timerState = TIMER_STATE_STOP;
}
} else {
if ((gSaveContext.timerSeconds == 0) && (sBgPoEventBlocksAtRest == 5)) {

View File

@@ -159,7 +159,7 @@ void func_808A9234(BgRelayObjects* this, PlayState* play) {
Flags_UnsetSwitch(play, this->switchFlag);
this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (play->roomCtx.curRoom.num == 4) {
gSaveContext.timerState = 0xF;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
}
this->actionFunc = BgRelayObjects_DoNothing;
}

View File

@@ -833,7 +833,7 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) {
this->unk_150[i].unk_22++;
}
} else if (i + 1 == this->sparkleCounter && play->csCtx.state == CS_STATE_IDLE) {
func_80088AF0(play);
Interface_SetSubTimerToFinalSecond(play);
Actor_Kill(&this->actor);
}
break;

View File

@@ -108,7 +108,7 @@ void EnDivingGame_Destroy(Actor* thisx, PlayState* play) {
if (this->unk_31F == 0) {
sHasSpawned = false;
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
Collider_DestroyCylinder(play, &this->collider);
@@ -132,9 +132,9 @@ void EnDivingGame_SpawnRuppy(EnDivingGame* this, PlayState* play) {
}
s32 EnDivingGame_HasMinigameFinished(EnDivingGame* this, PlayState* play) {
if (gSaveContext.timerState == 10 && !Play_InCsMode(play)) {
if (gSaveContext.timerState == TIMER_STATE_STOP && !Play_InCsMode(play)) {
// Failed.
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
func_800F5B58();
Sfx_PlaySfxCentered(NA_SE_SY_FOUND);
this->actor.textId = 0x71AD;
@@ -152,7 +152,7 @@ s32 EnDivingGame_HasMinigameFinished(EnDivingGame* this, PlayState* play) {
}
if (this->grabbedRupeesCounter >= rupeesNeeded) {
// Won.
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
this->allRupeesThrown = this->state = this->phase = this->unk_2A2 = this->grabbedRupeesCounter = 0;
if (!Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_SILVER_SCALE)) {
this->actor.textId = 0x4055;
@@ -418,9 +418,9 @@ void func_809EE800(EnDivingGame* this, PlayState* play) {
if (this->unk_292 == Message_GetState(&play->msgCtx) && Message_ShouldAdvance(play)) {
Message_CloseTextbox(play);
if (!Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_SILVER_SCALE)) {
func_80088B34(BREG(2) + 50);
Interface_SetTimer(BREG(2) + 50);
} else {
func_80088B34(BREG(2) + 50);
Interface_SetTimer(BREG(2) + 50);
}
func_800F5ACC(NA_BGM_TIMED_MINI_GAME);
Player_SetCsActionWithHaltedActors(play, NULL, 7);

View File

@@ -95,7 +95,7 @@ void EnDs_GiveOddPotion(EnDs* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play) || !GameInteractor_Should(VB_TRADE_ODD_MUSHROOM, true, this)) {
this->actor.parent = NULL;
this->actionFunc = EnDs_DisplayOddPotionText;
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
} else {
Actor_OfferGetItem(&this->actor, play, GI_ODD_POTION, 10000.0f, 50.0f);
}

View File

@@ -871,7 +871,7 @@ void EnGo_BiggoronActionFunc(EnGo* this, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
EnGo_SetupAction(this, EnGo_Eyedrops);
play->msgCtx.msgMode = MSGMODE_PAUSED;
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
OnePointCutscene_Init(play, 4190, -99, &this->actor, MAIN_CAM);
} else {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;

View File

@@ -1068,7 +1068,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
this->actor.textId = 0x3058;
}
if (this->actor.textId == 0x3059) {
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
}
player->actor.textId = this->actor.textId;

View File

@@ -130,7 +130,7 @@ void EnHorseGameCheck_FinishIngoRace(EnHorseGameCheckIngoRace* this, PlayState*
}
DREG(25) = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play) {
@@ -142,7 +142,7 @@ s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play)
if ((this->startTimer > 50) && !(this->startFlags & INGORACE_SET_TIMER)) {
this->startFlags |= INGORACE_SET_TIMER;
func_80088B34(0);
Interface_SetTimer(0);
} else if ((this->startTimer > 80) && (player->rideActor != NULL) && !(this->startFlags & INGORACE_PLAYER_MOVE)) {
this->startFlags |= INGORACE_PLAYER_MOVE;
horse = (EnHorse*)player->rideActor;
@@ -301,7 +301,7 @@ void EnHorseGameCheck_FinishMalonRace(EnHorseGameCheckMalonRace* this, PlayState
play->transitionTrigger = TRANS_TRIGGER_START;
} else if (this->result == MALONRACE_FAILURE) {
gSaveContext.timerSeconds = 240;
gSaveContext.timerState = 0xF;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
gSaveContext.cutsceneIndex = 0;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_7;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST);
@@ -330,7 +330,7 @@ s32 EnHorseGameCheck_UpdateMalonRace(EnHorseGameCheckBase* base, PlayState* play
}
if ((this->startTimer > 50) && !(this->raceFlags & MALONRACE_SET_TIMER)) {
this->raceFlags |= MALONRACE_SET_TIMER;
func_80088B34(0);
Interface_SetTimer(0);
} else if ((this->startTimer > 80) && (player->rideActor != NULL) && !(this->raceFlags & MALONRACE_PLAYER_MOVE)) {
this->raceFlags |= MALONRACE_PLAYER_MOVE;
horse = (EnHorse*)player->rideActor;
@@ -385,7 +385,7 @@ s32 EnHorseGameCheck_UpdateMalonRace(EnHorseGameCheckBase* base, PlayState* play
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->result = MALONRACE_SUCCESS;
this->finishTimer = 70;
gSaveContext.timerState = 0xF;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
} else if ((this->fenceCheck[7] == 1) && !(this->raceFlags & MALONRACE_SECOND_LAP)) {
this->lapCount = 1;
this->raceFlags |= MALONRACE_SECOND_LAP;
@@ -406,7 +406,7 @@ s32 EnHorseGameCheck_UpdateMalonRace(EnHorseGameCheckBase* base, PlayState* play
gSaveContext.timerSeconds = 240;
this->result = MALONRACE_TIME_UP;
this->finishTimer = 30;
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
} else {
if (this->finishTimer > 0) {

View File

@@ -133,7 +133,7 @@ void func_80A6E5EC(EnHs* this, PlayState* play) {
void func_80A6E630(EnHs* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
if (GameInteractor_Should(VB_TRADE_TIMER_ODD_MUSHROOM, true)) {
func_80088AA0(180);
Interface_SetSubTimer(180);
gSaveContext.eventInf[1] &= ~1;
}
func_80A6E3A0(this, func_80A6E6B0);

View File

@@ -440,7 +440,7 @@ void func_80A79BAC(EnIn* this, PlayState* play, s32 index, u32 transitionType) {
if (index == 0) {
AREG(6) = 0;
}
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
void func_80A79C78(EnIn* this, PlayState* play) {
@@ -585,7 +585,7 @@ void func_80A79FB0(EnIn* this, PlayState* play) {
this->actor.targetMode = 3;
EnIn_ChangeAnim(this, ENIN_ANIM_2);
this->actionFunc = func_80A7A568;
func_80088B34(0x3C);
Interface_SetTimer(0x3C);
break;
case 3:
EnIn_ChangeAnim(this, ENIN_ANIM_4);
@@ -662,12 +662,12 @@ void func_80A7A568(EnIn* this, PlayState* play) {
if (!Flags_GetEventChkInf(EVENTCHKINF_RENTED_HORSE_FROM_INGO) && (player->stateFlags1 & PLAYER_STATE1_ON_HORSE)) {
Flags_SetInfTable(INFTABLE_AB);
}
if (gSaveContext.timerState == 10) {
if (gSaveContext.timerState == TIMER_STATE_STOP) {
Audio_PlaySoundGeneral(NA_SE_SY_FOUND, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
func_80A79C78(this, play);
this->actionFunc = func_80A7B024;
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
} else if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
if (play->msgCtx.choiceIndex == 0) {
if (gSaveContext.rupees < 50) {
@@ -931,7 +931,7 @@ void EnIn_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->actionFunc != func_80A7A304) {
func_80A79AB4(this, play);
if (gSaveContext.subTimerSeconds < 6 && gSaveContext.subTimerState != 0 &&
if (gSaveContext.subTimerSeconds < 6 && gSaveContext.subTimerState != SUBTIMER_STATE_OFF &&
this->interactInfo.talkState == NPC_TALK_STATE_IDLE) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {}
} else {

View File

@@ -519,7 +519,7 @@ void EnKz_SetupGetItem(EnKz* this, PlayState* play) {
void EnKz_StartTimer(EnKz* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
if (GameInteractor_Should(VB_TRADE_TIMER_FROG, INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_FROG)) {
func_80088AA0(180); // start timer2 with 3 minutes
Interface_SetSubTimer(180); // start timer2 with 3 minutes
gSaveContext.eventInf[1] &= ~1;
}
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;

View File

@@ -122,7 +122,7 @@ s16 func_80AA2BD4(PlayState* play, Actor* thisx) {
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_BLACK, TCS_FAST);
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.eventInf[0] |= 0x400;
gSaveContext.timerState = 0xF;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
}
break;
case TEXT_STATE_CHOICE:
@@ -156,7 +156,7 @@ s16 func_80AA2BD4(PlayState* play, Actor* thisx) {
gSaveContext.eventInf[0] &= ~0x400;
thisx->flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
ret = NPC_TALK_STATE_IDLE;
gSaveContext.timerState = 0xA;
gSaveContext.timerState = TIMER_STATE_STOP;
break;
case 0x2002:
Flags_SetInfTable(INFTABLE_B9);

View File

@@ -99,7 +99,7 @@ void func_80AACA94(EnMk* this, PlayState* play) {
this->actor.parent = NULL;
if (GameInteractor_Should(VB_TRADE_TIMER_EYEDROPS, true, this)) {
this->actionFunc = func_80AACA40;
func_80088AA0(240);
Interface_SetSubTimer(240);
gSaveContext.eventInf[1] &= ~1;
}
} else {
@@ -266,7 +266,7 @@ void EnMk_Wait(EnMk* this, PlayState* play) {
Animation_Change(&this->skelAnime, &object_mk_Anim_000368, 1.0f, 0.0f,
Animation_GetLastFrame(&object_mk_Anim_000368), ANIMMODE_ONCE, -4.0f);
this->flags &= ~2;
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
Sfx_PlaySfxCentered(NA_SE_SY_TRE_BOX_APPEAR);
break;
default:

View File

@@ -107,14 +107,14 @@ void func_80AAEF70(EnMm2* this, PlayState* play) {
} else if (Flags_GetInfTable(INFTABLE_17F)) {
if (gSaveContext.eventInf[1] & 1) {
this->actor.textId = 0x6082;
} else if (gSaveContext.subTimerState != 0) {
} else if (gSaveContext.subTimerState != SUBTIMER_STATE_OFF) {
this->actor.textId = 0x6076;
} else if (HIGH_SCORE(HS_MARATHON) == 158) {
this->actor.textId = 0x607E;
} else {
this->actor.textId = 0x6081;
}
} else if (gSaveContext.subTimerState) {
} else if (gSaveContext.subTimerState != SUBTIMER_STATE_OFF) {
this->actor.textId = 0x6076;
} else {
this->actor.textId = 0x607D;
@@ -197,7 +197,7 @@ void func_80AAF330(EnMm2* this, PlayState* play) {
if (!(this->unk_1F4 & 2)) {
Message_CloseTextbox(play);
}
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
gSaveContext.eventInf[1] &= ~1;
}
}
@@ -238,7 +238,7 @@ void func_80AAF3C0(EnMm2* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
if (this->actor.textId == 0x607F) {
func_80088AA0(0);
Interface_SetSubTimer(0);
this->actionFunc = func_80AAF57C;
} else {
this->actionFunc = func_80AAF57C;

View File

@@ -146,7 +146,7 @@ void EnPoRelay_SetupRace(EnPoRelay* this) {
EnPoRelay_Vec3sToVec3f(&vec, &D_80AD8C30[this->pathIndex]);
this->actionTimer = ((s16)(this->actor.shape.rot.y - this->actor.world.rot.y - 0x8000) >> 0xB) % 32U;
func_80088B34(0);
Interface_SetTimer(0);
this->hookshotSlotFull =
(INV_CONTENT(ITEM_HOOKSHOT) != ITEM_NONE && !IS_RANDO) || (IS_RANDO && Flags_GetTreasure(gPlayState, 0x1E));
this->unk_19A = Actor_WorldYawTowardPoint(&this->actor, &vec);
@@ -274,7 +274,7 @@ void EnPoRelay_EndRace(EnPoRelay* this, PlayState* play) {
this->actionFunc = EnPoRelay_Talk2;
} else if (play->roomCtx.curRoom.num == 5) {
Actor_Kill(&this->actor);
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
} else if (Actor_IsFacingAndNearPlayer(&this->actor, 150.0f, 0x3000)) {
this->actor.textId = this->textId;
func_8002F2CC(&this->actor, play, 250.0f);
@@ -295,7 +295,7 @@ void EnPoRelay_Talk2(EnPoRelay* this, PlayState* play) {
Message_ContinueTextbox(play, this->actor.textId);
}
} else if (Actor_TextboxIsClosing(&this->actor, play)) {
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
this->actionTimer = 0;
this->actionFunc = EnPoRelay_DisappearAndReward;
}

View File

@@ -496,7 +496,7 @@ void func_80B12460(EnSyatekiNiw* this, PlayState* play) {
void func_80B128D8(EnSyatekiNiw* this, PlayState* play) {
if (this->unk_25E == 1) {
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
}

View File

@@ -239,7 +239,7 @@ void EnTa_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
if (this->actor.params != 1 && this->actor.params != 2 && play->sceneNum == SCENE_LON_LON_BUILDINGS) {
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
}
if (this->unk_2E0 & 0x200) {
@@ -707,7 +707,7 @@ void EnTa_RunCuccoGame(EnTa* this, PlayState* play) {
switch (EnTa_GetSuperCuccosCount(this, play)) {
case 1:
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
Player_SetCsActionWithHaltedActors(play, &this->actor, 1);
Message_StartTextbox(play, 0x2084, &this->actor);
@@ -749,7 +749,7 @@ void EnTa_RunCuccoGame(EnTa* this, PlayState* play) {
Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_STOP);
this->unk_2E0 &= ~0x200;
Sfx_PlaySfxCentered(NA_SE_SY_FOUND);
gSaveContext.timerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
Player_SetCsActionWithHaltedActors(play, &this->actor, 1);
Message_StartTextbox(play, 0x2081, &this->actor);
this->actionFunc = func_80B15424;
@@ -814,7 +814,7 @@ void func_80B15AD4(EnTa* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gTalonSitHandsUpAnim, 1.0f, 1.0f,
Animation_GetLastFrame(&gTalonSitHandsUpAnim), ANIMMODE_ONCE, 0.0f);
this->unk_2CC = 50;
func_80088B34(0x1E);
Interface_SetTimer(0x1E);
func_800F5ACC(NA_BGM_TIMED_MINI_GAME);
this->unk_2E0 |= 0x200;
Message_CloseTextbox(play);

View File

@@ -1610,7 +1610,7 @@ void EnZl2_Init(Actor* thisx, PlayState* play) {
Audio_SetSoundBanksMute(0x6F);
break;
case 4:
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
break;
}
}

View File

@@ -2492,7 +2492,7 @@ s32 func_80B59698(EnZl3* this, PlayState* play) {
u8 curSpawn = play->curSpawn;
if ((func_80B54DB4(this) == 0x20) && (curSpawn == 0) &&
((gSaveContext.subTimerSeconds <= 0) || (gSaveContext.subTimerState == 0))) {
((gSaveContext.subTimerSeconds <= 0) || (gSaveContext.subTimerState == SUBTIMER_STATE_OFF))) {
return 1;
}
}
@@ -2535,7 +2535,7 @@ void func_80B59828(EnZl3* this, PlayState* play) {
}
if (func_80B59698(this, play) != 0) {
func_80088AA0(180);
Interface_SetSubTimer(180);
func_80B53468();
gSaveContext.healthAccumulator = 320;
Magic_Fill(play);
@@ -2581,7 +2581,7 @@ void func_80B59AD0(EnZl3* this, PlayState* play) {
Actor* thisx = &this->actor; // unused, necessary to use 'this' first to fix regalloc
Flags_SetSwitch(play, 0x36);
func_80088AA0(180);
Interface_SetSubTimer(180);
func_80B54EA4(this, play);
func_80B53614(this, play);
Flags_UnsetEventChkInf(EVENTCHKINF_WATCHED_GANONS_CASTLE_COLLAPSE_CAUGHT_BY_GERUDO);
@@ -2669,7 +2669,7 @@ void EnZl3_Init(Actor* thisx, PlayState* play) {
switch (func_80B54DD4(this)) {
case 1:
gSaveContext.subTimerState = 0;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
break;
case 3:
func_80B59A80(this, play);

View File

@@ -51,13 +51,13 @@ void ObjRoomtimer_Destroy(Actor* thisx, PlayState* play) {
ObjRoomtimer* this = (ObjRoomtimer*)thisx;
if ((this->actor.params != 0x3FF) && (gSaveContext.timerSeconds > 0)) {
gSaveContext.timerState = 10;
gSaveContext.timerState = TIMER_STATE_STOP;
}
}
void func_80B9D054(ObjRoomtimer* this, PlayState* play) {
if (this->actor.params != 0x3FF) {
func_80088B34(this->actor.params);
Interface_SetTimer(this->actor.params);
}
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_PROP);
@@ -67,7 +67,7 @@ void func_80B9D054(ObjRoomtimer* this, PlayState* play) {
void func_80B9D0B0(ObjRoomtimer* this, PlayState* play) {
if (Flags_GetTempClear(play, this->actor.room)) {
if (this->actor.params != 0x3FF) {
gSaveContext.timerState = 10;
gSaveContext.timerState = TIMER_STATE_STOP;
}
Flags_SetClear(play, this->actor.room);
Flags_SetSwitch(play, this->switchFlag);

View File

@@ -2634,7 +2634,7 @@ void Player_UpdateItems(Player* this, PlayState* play) {
((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_SHIELDING)) &&
(gSaveContext.health != 0) && (play->csCtx.state == CS_STATE_IDLE) && (this->csAction == 0) &&
(play->shootingGalleryStatus == 0) && (play->activeCamera == MAIN_CAM) &&
(play->transitionTrigger != TRANS_TRIGGER_START) && (gSaveContext.timerState != 10)) {
(play->transitionTrigger != TRANS_TRIGGER_START) && (gSaveContext.timerState != TIMER_STATE_STOP)) {
Player_ProcessItemButtons(this, play);
}
@@ -15346,7 +15346,7 @@ void Player_Action_8085063C(Player* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
func_80088AF0(play);
Interface_SetSubTimerToFinalSecond(play);
return;
}

View File

@@ -2542,8 +2542,8 @@ void FileChoose_LoadGame(GameState* thisx) {
if (!CVarGetInteger(CVAR_ENHANCEMENT("DogFollowsEverywhere"), 0)) {
gSaveContext.dogParams = 0;
}
gSaveContext.timerState = 0;
gSaveContext.subTimerState = 0;
gSaveContext.timerState = TIMER_STATE_OFF;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
gSaveContext.eventInf[0] = 0;
gSaveContext.eventInf[1] = 0;
gSaveContext.eventInf[2] = 0;