diff --git a/include/functions.h b/include/functions.h index 6e61dc816..94f977dfa 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1866,8 +1866,8 @@ void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); // void func_8010DC58(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); // void func_8010DE38(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); // void Interface_InitVertices(void); -// void func_8010E968(void); -void func_8010E9F0(s16 arg0, s16 arg1); +// void Interface_TimerCallback(void); +void func_8010E9F0(s16 timerId, s16 timeLimit); void func_8010EA9C(s16 timeLimit, s16 arg1); // void func_8010EB50(void); // void func_8010EBA0(void); @@ -1929,7 +1929,7 @@ void func_8011C808(PlayState* play); // void func_80121000(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14); // void Interface_AllocStory(void); // void Interface_Update(void); -// void func_80121F94(void); +// void Interface_Destroy(void); void Interface_Init(PlayState* play); Path* Path_GetByIndex(PlayState* play, s16 index, s16 max); f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw); diff --git a/include/variables.h b/include/variables.h index e45076e78..5547f2eb0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1048,7 +1048,7 @@ extern UNK_PTR D_801BF5C0; // extern UNK_TYPE1 D_801BF96A; // extern UNK_TYPE1 D_801BF96C; // extern UNK_TYPE1 D_801BF96E; -// extern UNK_TYPE2 D_801BF970; +// extern UNK_TYPE2 sTimerId; // extern UNK_TYPE1 D_801BF972; // extern UNK_TYPE2 D_801BF974; // extern UNK_TYPE2 D_801BF978; diff --git a/include/z64save.h b/include/z64save.h index 8565daf2b..8339e6ce1 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -54,6 +54,38 @@ typedef enum { #define MAGIC_NORMAL_METER 0x30 #define MAGIC_DOUBLE_METER (2 * MAGIC_NORMAL_METER) +typedef enum { + /* 0 */ TIMER_STATE_OFF, + /* 1 */ TIMER_STATE_1, + /* 2 */ TIMER_STATE_2, + /* 3 */ TIMER_STATE_3, + /* 4 */ TIMER_STATE_4, + /* 5 */ TIMER_STATE_5, + /* 6 */ TIMER_STATE_6, + /* 7 */ TIMER_STATE_7, + /* 8 */ TIMER_STATE_8, + /* 9 */ TIMER_STATE_9, + /* 10 */ TIMER_STATE_10, + /* 11 */ TIMER_STATE_11, + /* 12 */ TIMER_STATE_12, + /* 13 */ TIMER_STATE_13, + /* 14 */ TIMER_STATE_14, + /* 15 */ TIMER_STATE_15, + /* 16 */ TIMER_STATE_16 +} TimerState; + +typedef enum { + /* 0 */ TIMER_ID_0, + /* 1 */ TIMER_ID_1, + /* 2 */ TIMER_ID_2, + /* 3 */ TIMER_ID_3, // countdown until mooncrash + /* 4 */ TIMER_ID_4, + /* 5 */ TIMER_ID_5, + /* 6 */ TIMER_ID_6, + /* 7 */ TIMER_ID_MAX, + /* 99 */ TIMER_ID_NONE = 99, +} TimerId; + typedef struct SramContext { /* 0x00 */ u8* readBuff; /* 0x04 */ u8 *saveBuf; @@ -214,11 +246,11 @@ typedef struct SaveContext { /* 0x1015 */ u8 unk_1015; /* 0x1016 */ u16 jinxTimer; /* 0x1018 */ s16 rupeeAccumulator; // "lupy_udct" - /* 0x101A */ u8 unk_101A[6]; // "bottle_status", one entry for each bottle - /* 0x1020 */ OSTime unk_1020[6]; // "bottle_ostime", one entry for each bottle - /* 0x1050 */ OSTime unk_1050[6]; // "bottle_sub", one entry for each bottle - /* 0x1080 */ OSTime unk_1080[6]; // "bottle_time", one entry for each bottle - /* 0x10B0 */ OSTime unk_10B0[6]; // "bottle_stop_time", one entry for each bottle + /* 0x101A */ u8 bottleStatus[6]; // "bottle_status", one entry for each bottle + /* 0x1020 */ OSTime bottleTimer1Value[6]; // "bottle_ostime", one entry for each bottle + /* 0x1050 */ OSTime bottleTimer2Value[6]; // "bottle_sub", one entry for each bottle + /* 0x1080 */ OSTime bottleTimer3Value[6]; // "bottle_time", one entry for each bottle + /* 0x10B0 */ OSTime bottleTimer4Value[6]; // "bottle_stop_time", one entry for each bottle /* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo /* 0x3CA0 */ s32 fileNum; // "file_no" /* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer" @@ -237,14 +269,14 @@ typedef struct SaveContext { /* 0x3DBF */ u8 showTitleCard; // "name_display" /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" /* 0x3DC2 */ u8 unk_3DC2; // "pad1" - /* 0x3DC8 */ OSTime unk_3DC8; // "get_time" - /* 0x3DD0 */ u8 unk_3DD0[7]; // "event_fg" + /* 0x3DC8 */ OSTime timerOsTime; // "get_time" + /* 0x3DD0 */ u8 timerState[7]; // "event_fg" /* 0x3DD7 */ u8 timersNoTimeLimit[7]; // "calc_flag" - /* 0x3DE0 */ OSTime unk_3DE0[7]; // "event_ostime" - /* 0x3E18 */ OSTime unk_3E18[7]; // "event_sub" - /* 0x3E50 */ OSTime unk_3E50[7]; // "func_time" - /* 0x3E88 */ OSTime unk_3E88[7]; // "func_end_time" - /* 0x3EC0 */ OSTime unk_3EC0[7]; // "func_stop_time" + /* 0x3DE0 */ OSTime eventTimer1Value[7]; // "event_ostime" + /* 0x3E18 */ OSTime eventTimer2Value[7]; // "event_sub" + /* 0x3E50 */ OSTime funcTimer1Value[7]; // "func_time" + /* 0x3E88 */ OSTime funcTimer2Value[7]; // "func_end_time" + /* 0x3EC0 */ OSTime funcTimer3Value[7]; // "func_stop_time" /* 0x3EF8 */ s16 timerX[7]; // "event_xp" /* 0x3F06 */ s16 timerY[7]; // "event_yp" /* 0x3F14 */ s16 unk_3F14; // "character_change" diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index fa30c5f37..afb377943 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -688,7 +688,7 @@ void Inventory_SetMapVisibility(s16 tingleIndex) { void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) { s16 i; - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.unk_3DE0[timerId]; + gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.eventTimer1Value[timerId]; for (i = 0; i < 8; i++) { gSaveContext.save.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index 613517b62..946fb0faf 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -18,14 +18,14 @@ static s16 sGameOverTimer = 0; void GameOver_Update(PlayState* play) { GameOverContext* gameOverCtx = &play->gameOverCtx; - s16 i; + s16 timerId; switch (gameOverCtx->state) { case GAMEOVER_DEATH_START: func_801477B4(play); - for (i = 0; i < ARRAY_COUNT(gSaveContext.unk_3DD0); i++) { - gSaveContext.unk_3DD0[i] = 0; + for (timerId = 0; timerId < TIMER_ID_MAX; timerId++) { + gSaveContext.timerState[timerId] = TIMER_STATE_OFF; } gSaveContext.eventInf[1] &= ~1; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 7be34d362..7041c5d63 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -196,7 +196,7 @@ OSTime D_801BF930[] = { u8 D_801BF968 = false; u8 D_801BF96C = false; -s16 D_801BF970 = 99; +s16 sTimerId = TIMER_ID_NONE; s16 D_801BF974 = 0; s16 D_801BF978 = 10; s16 D_801BF97C = 255; @@ -580,14 +580,14 @@ void Interface_InitVertices(PlayState* play) { } s32 D_801BFA84 = 0; -void func_8010E968(s32 arg0) { +void Interface_TimerCallback(s32 arg0) { s32 btnAPressed; func_80175E68(&D_801F5850[0], 0); btnAPressed = CHECK_BTN_ALL(D_801F5850[0].cur.button, BTN_A); if ((btnAPressed != D_801BFA84) && btnAPressed) { - gSaveContext.unk_3DC8 = osGetTime(); - gSaveContext.unk_3DD0[0] = 15; + gSaveContext.timerOsTime = osGetTime(); + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_15; } D_801BFA84 = btnAPressed; @@ -599,55 +599,55 @@ void func_8010E9F0(s16 timerId, s16 timeLimit) { D_801BF8E0 = 0; - gSaveContext.unk_3DE0[timerId] = timeLimit * 100; - gSaveContext.unk_3E18[timerId] = gSaveContext.unk_3DE0[timerId]; + gSaveContext.eventTimer1Value[timerId] = timeLimit * 100; + gSaveContext.eventTimer2Value[timerId] = gSaveContext.eventTimer1Value[timerId]; - if (gSaveContext.unk_3DE0[timerId] != 0) { + if (gSaveContext.eventTimer1Value[timerId] != 0) { gSaveContext.timersNoTimeLimit[timerId] = false; } else { gSaveContext.timersNoTimeLimit[timerId] = true; } - gSaveContext.unk_3DD0[timerId] = 1; + gSaveContext.timerState[timerId] = TIMER_STATE_1; } void func_8010EA9C(s16 timeLimit, s16 arg1) { - gSaveContext.timerX[0] = 115; - gSaveContext.timerY[0] = 80; + gSaveContext.timerX[TIMER_ID_0] = 115; + gSaveContext.timerY[TIMER_ID_0] = 80; D_801BF8E4 = arg1; - gSaveContext.unk_3DE0[0] = timeLimit * 100; - gSaveContext.unk_3E18[0] = gSaveContext.unk_3DE0[0]; + gSaveContext.eventTimer1Value[TIMER_ID_0] = timeLimit * 100; + gSaveContext.eventTimer2Value[TIMER_ID_0] = gSaveContext.eventTimer1Value[TIMER_ID_0]; - if (gSaveContext.unk_3DE0[0] != 0) { - gSaveContext.timersNoTimeLimit[0] = false; + if (gSaveContext.eventTimer1Value[TIMER_ID_0] != 0) { + gSaveContext.timersNoTimeLimit[TIMER_ID_0] = false; } else { - gSaveContext.timersNoTimeLimit[0] = true; + gSaveContext.timersNoTimeLimit[TIMER_ID_0] = true; } - gSaveContext.unk_3DD0[0] = 13; + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_13; - gSaveContext.unk_3E88[0] = 0; - gSaveContext.unk_3EC0[0] = 0; + gSaveContext.funcTimer2Value[TIMER_ID_0] = 0; + gSaveContext.funcTimer3Value[TIMER_ID_0] = 0; } void func_8010EB50(s32 arg0) { - if (gSaveContext.unk_3DD0[6] != 0) { + if (gSaveContext.timerState[TIMER_ID_6] != TIMER_STATE_OFF) { // Goron race started if (gSaveContext.eventInf[1] & 1) { - gSaveContext.unk_3DE0[6] = 239; + gSaveContext.eventTimer1Value[TIMER_ID_6] = 239; } else { - gSaveContext.unk_3DE0[6] = 1; + gSaveContext.eventTimer1Value[TIMER_ID_6] = 1; } } } void func_8010EBA0(s16 timer, s16 timerId) { - gSaveContext.unk_101A[timerId] = 1; - gSaveContext.unk_1080[timerId] = timer * 100; - gSaveContext.unk_1050[timerId] = gSaveContext.unk_1080[timerId]; - gSaveContext.unk_1020[timerId] = osGetTime(); - gSaveContext.unk_10B0[timerId] = 0; + gSaveContext.bottleStatus[timerId] = 1; + gSaveContext.bottleTimer3Value[timerId] = timer * 100; + gSaveContext.bottleTimer2Value[timerId] = gSaveContext.bottleTimer3Value[timerId]; + gSaveContext.bottleTimer1Value[timerId] = osGetTime(); + gSaveContext.bottleTimer4Value[timerId] = 0; D_801BF8F0 = 0; } @@ -655,7 +655,7 @@ s32 func_8010EC54(s16 timerId) { u64 time; s16 timerArr[6]; - time = gSaveContext.unk_3DE0[timerId]; + time = gSaveContext.eventTimer1Value[timerId]; // hours timerArr[0] = time / 36000; @@ -5238,175 +5238,175 @@ void Interface_DrawTimers(PlayState* play) { spD0 = osGetTime(); for (j = 0; j < 7; j++) { - if (gSaveContext.unk_3DD0[j] == 4) { - gSaveContext.unk_3EC0[j] += spD0 - D_801BF8E8; + if (gSaveContext.timerState[j] == TIMER_STATE_4) { + gSaveContext.funcTimer3Value[j] += spD0 - D_801BF8E8; } } D_801BF968 = false; } - D_801BF970 = 99; + sTimerId = TIMER_ID_NONE; for (i = 0; i < 7; i++) { - if (gSaveContext.unk_3DD0[i] != 0) { - D_801BF970 = i; - if (D_801BF970 == 0) { - switch (gSaveContext.unk_3DD0[0]) { - case 13: - if (gSaveContext.timersNoTimeLimit[0]) { - gSaveContext.unk_3E50[0] = osGetTime(); + if (gSaveContext.timerState[i] != TIMER_STATE_OFF) { + sTimerId = i; + if (sTimerId == TIMER_ID_0) { + switch (gSaveContext.timerState[TIMER_ID_0]) { + case TIMER_STATE_13: + if (gSaveContext.timerState[TIMER_ID_0]) { + gSaveContext.funcTimer1Value[TIMER_ID_0] = osGetTime(); } - gSaveContext.unk_3DD0[0] = 14; + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_14; D_801BFA84 = 1; - func_80174F7C(func_8010E968, NULL); + func_80174F7C(Interface_TimerCallback, NULL); break; - case 15: - spCC = gSaveContext.unk_3DC8; - gSaveContext.unk_3DE0[0] = - (spCC - ((void)0, gSaveContext.unk_3E50[0]) - ((void)0, gSaveContext.unk_3EC0[0])) * + case TIMER_STATE_15: + spCC = gSaveContext.timerOsTime; + gSaveContext.eventTimer1Value[TIMER_ID_0] = + (spCC - ((void)0, gSaveContext.funcTimer1Value[TIMER_ID_0]) - + ((void)0, gSaveContext.funcTimer3Value[TIMER_ID_0])) * 64 / 3000 / 10000; - gSaveContext.unk_3DD0[0] = 16; + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_16; - func_80174F9C(func_8010E968, NULL); + func_80174F9C(Interface_TimerCallback, NULL); break; - case 14: - case 16: + case TIMER_STATE_14: + case TIMER_STATE_16: break; } break; } else { - switch (gSaveContext.unk_3DD0[D_801BF970]) { - case 1: - case 9: + switch (gSaveContext.timerState[sTimerId]) { + case TIMER_STATE_1: + case TIMER_STATE_9: D_801BFCE4 = 20; if (interfaceCtx->unk_280 != 0) { - gSaveContext.timerX[D_801BF970] = 26; + gSaveContext.timerX[sTimerId] = 26; if (interfaceCtx->magicAlpha != 255) { - gSaveContext.timerY[D_801BF970] = 22; + gSaveContext.timerY[sTimerId] = 22; } else if (gSaveContext.save.playerData.healthCapacity > 0xA0) { - gSaveContext.timerY[D_801BF970] = 54; + gSaveContext.timerY[sTimerId] = 54; } else { - gSaveContext.timerY[D_801BF970] = 46; + gSaveContext.timerY[sTimerId] = 46; } if ((interfaceCtx->unk_280 == 8) || (interfaceCtx->unk_280 == 30)) { - if (gSaveContext.unk_3DD0[D_801BF970] == 1) { - gSaveContext.unk_3DD0[D_801BF970] = 4; + if (gSaveContext.timerState[sTimerId] == TIMER_STATE_1) { + gSaveContext.timerState[sTimerId] = TIMER_STATE_4; } else { - gSaveContext.unk_3DD0[D_801BF970] = 11; - D_801BF8F8[D_801BF970] = osGetTime(); - D_801BF930[D_801BF970] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_11; + D_801BF8F8[sTimerId] = osGetTime(); + D_801BF930[sTimerId] = 0; } - gSaveContext.unk_3E50[D_801BF970] = osGetTime(); - gSaveContext.unk_3E88[D_801BF970] = 0; - gSaveContext.unk_3EC0[D_801BF970] = 0; + gSaveContext.funcTimer1Value[sTimerId] = osGetTime(); + gSaveContext.funcTimer2Value[sTimerId] = 0; + gSaveContext.funcTimer3Value[sTimerId] = 0; } } else { - gSaveContext.unk_3DD0[D_801BF970] = 2; + gSaveContext.timerState[sTimerId] = TIMER_STATE_2; } break; - case 2: + case TIMER_STATE_2: D_801BFCE4--; if (D_801BFCE4 == 0) { D_801BFCE4 = 20; - gSaveContext.unk_3DD0[D_801BF970] = 3; + gSaveContext.timerState[sTimerId] = TIMER_STATE_3; } break; - case 3: - if (D_801BF970 == 3) { + case TIMER_STATE_3: + if (sTimerId == TIMER_ID_3) { // TODO: s16 casts - timerTemp = ((((void)0, gSaveContext.timerX[D_801BF970]) - XREG(81)) / D_801BFCE4); - gSaveContext.timerX[D_801BF970] -= timerTemp; - timerTemp = ((((void)0, gSaveContext.timerY[D_801BF970]) - XREG(80)) / D_801BFCE4); + timerTemp = ((((void)0, gSaveContext.timerX[sTimerId]) - XREG(81)) / D_801BFCE4); + gSaveContext.timerX[sTimerId] -= timerTemp; + timerTemp = ((((void)0, gSaveContext.timerY[sTimerId]) - XREG(80)) / D_801BFCE4); dummy:; // TODO: Needed? - gSaveContext.timerY[D_801BF970] -= timerTemp; + gSaveContext.timerY[sTimerId] -= timerTemp; } else { - timerTemp = ((((void)0, gSaveContext.timerX[D_801BF970]) - 26) / D_801BFCE4); - gSaveContext.timerX[D_801BF970] -= timerTemp; + timerTemp = ((((void)0, gSaveContext.timerX[sTimerId]) - 26) / D_801BFCE4); + gSaveContext.timerX[sTimerId] -= timerTemp; timerTemp = (gSaveContext.save.playerData.healthCapacity > 0xA0) - ? ((((void)0, gSaveContext.timerY[D_801BF970]) - 54) / D_801BFCE4) - : ((((void)0, gSaveContext.timerY[D_801BF970]) - 46) / D_801BFCE4); - gSaveContext.timerY[D_801BF970] -= timerTemp; + ? ((((void)0, gSaveContext.timerY[sTimerId]) - 54) / D_801BFCE4) + : ((((void)0, gSaveContext.timerY[sTimerId]) - 46) / D_801BFCE4); + gSaveContext.timerY[sTimerId] -= timerTemp; } D_801BFCE4--; if (D_801BFCE4 == 0) { D_801BFCE4 = 20; - if (D_801BF970 == 3) { - gSaveContext.timerY[D_801BF970] = XREG(80); + if (sTimerId == TIMER_ID_3) { + gSaveContext.timerY[sTimerId] = XREG(80); } else { - gSaveContext.timerX[D_801BF970] = 26; + gSaveContext.timerX[sTimerId] = 26; if (gSaveContext.save.playerData.healthCapacity > 0xA0) { - gSaveContext.timerY[D_801BF970] = 54; + gSaveContext.timerY[sTimerId] = 54; } else { - gSaveContext.timerY[D_801BF970] = 46; + gSaveContext.timerY[sTimerId] = 46; } } - gSaveContext.unk_3DD0[D_801BF970] = 4; - gSaveContext.unk_3E50[D_801BF970] = osGetTime(); - gSaveContext.unk_3E88[D_801BF970] = 0; - gSaveContext.unk_3EC0[D_801BF970] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_4; + gSaveContext.funcTimer1Value[sTimerId] = osGetTime(); + gSaveContext.funcTimer2Value[sTimerId] = 0; + gSaveContext.funcTimer3Value[sTimerId] = 0; } // fallthrough - - case 4: - if ((gSaveContext.unk_3DD0[D_801BF970] == 4) && (D_801BF970 == 3)) { - gSaveContext.timerX[3] = XREG(81); + case TIMER_STATE_4: + if ((gSaveContext.timerState[sTimerId] == TIMER_STATE_4) && (sTimerId == TIMER_ID_3)) { + gSaveContext.timerX[TIMER_ID_3] = XREG(81); if (1) {} if (1) {} if (1) {} if (1) {} // TODO: Needed? - gSaveContext.timerY[3] = XREG(80); + gSaveContext.timerY[TIMER_ID_3] = XREG(80); } break; - case 10: - D_801BF8F8[D_801BF970] = osGetTime(); - D_801BF930[D_801BF970] = 0; - gSaveContext.unk_3DD0[D_801BF970] = 11; + case TIMER_STATE_10: + D_801BF8F8[sTimerId] = osGetTime(); + D_801BF930[sTimerId] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_11; // fallthrough - - case 11: - D_801BF930[D_801BF970] = osGetTime() - D_801BF8F8[D_801BF970]; + case TIMER_STATE_11: + D_801BF930[sTimerId] = osGetTime() - D_801BF8F8[sTimerId]; break; - case 12: + case TIMER_STATE_12: spD0 = osGetTime(); - gSaveContext.unk_3EC0[D_801BF970] = - gSaveContext.unk_3EC0[D_801BF970] + spD0 - D_801BF8F8[D_801BF970]; - D_801BF930[D_801BF970] = 0; - gSaveContext.unk_3DD0[D_801BF970] = 4; + gSaveContext.funcTimer3Value[sTimerId] = + gSaveContext.funcTimer3Value[sTimerId] + spD0 - D_801BF8F8[sTimerId]; + D_801BF930[sTimerId] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_4; break; - case 8: - gSaveContext.unk_3DE0[D_801BF970] = (gSaveContext.save.playerData.health >> 1) * 100; - gSaveContext.timersNoTimeLimit[D_801BF970] = false; - gSaveContext.unk_3E18[D_801BF970] = gSaveContext.unk_3DE0[D_801BF970]; + case TIMER_STATE_8: + gSaveContext.eventTimer1Value[sTimerId] = (gSaveContext.save.playerData.health >> 1) * 100; + gSaveContext.timersNoTimeLimit[sTimerId] = false; + gSaveContext.eventTimer2Value[sTimerId] = gSaveContext.eventTimer1Value[sTimerId]; D_801BFCE4 = 20; - gSaveContext.unk_3DD0[D_801BF970] = 3; + gSaveContext.timerState[sTimerId] = TIMER_STATE_3; break; - case 5: + case TIMER_STATE_5: spD0 = osGetTime(); - gSaveContext.unk_3E88[D_801BF970] = (spD0 - ((void)0, gSaveContext.unk_3E50[D_801BF970]) - - ((void)0, gSaveContext.unk_3EC0[D_801BF970])) * - 64 / 3000 / 10000; + gSaveContext.funcTimer2Value[sTimerId] = + (spD0 - ((void)0, gSaveContext.funcTimer1Value[sTimerId]) - + ((void)0, gSaveContext.funcTimer3Value[sTimerId])) * + 64 / 3000 / 10000; - gSaveContext.unk_3DD0[D_801BF970] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_OFF; - if (D_801BF970 == 3) { + if (sTimerId == TIMER_ID_3) { gSaveContext.save.day = 4; if ((play->sceneNum == SCENE_OKUJOU) && (gSaveContext.sceneSetupIndex == 3)) { play->nextEntranceIndex = 0x5410; @@ -5415,40 +5415,41 @@ void Interface_DrawTimers(PlayState* play) { } else { func_8011C808(play); } - } else if (gSaveContext.unk_3DD0[6] != 0) { - gSaveContext.timerX[6] = 115; - gSaveContext.timerY[6] = 80; - if (gSaveContext.unk_3DD0[6] < 0xB) { - gSaveContext.unk_3DD0[6] = 3; + } else if (gSaveContext.timerState[TIMER_ID_6] != TIMER_STATE_OFF) { + gSaveContext.timerX[TIMER_ID_6] = 115; + gSaveContext.timerY[TIMER_ID_6] = 80; + if (gSaveContext.timerState[TIMER_ID_6] <= TIMER_STATE_10) { + gSaveContext.timerState[TIMER_ID_6] = TIMER_STATE_3; } } break; - case 6: + case TIMER_STATE_6: spD0 = osGetTime(); - gSaveContext.unk_3E88[D_801BF970] = (spD0 - ((void)0, gSaveContext.unk_3E50[D_801BF970]) - - ((void)0, gSaveContext.unk_3EC0[D_801BF970])) * - 64 / 3000 / 10000; + gSaveContext.funcTimer2Value[sTimerId] = + (spD0 - ((void)0, gSaveContext.funcTimer1Value[sTimerId]) - + ((void)0, gSaveContext.funcTimer3Value[sTimerId])) * + 64 / 3000 / 10000; if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { - if (gSaveContext.unk_3E88[D_801BF970] >= 12000) { - gSaveContext.unk_3E88[D_801BF970] = 12000; - gSaveContext.unk_3DE0[D_801BF970] = 12000; + if (gSaveContext.funcTimer2Value[sTimerId] >= 12000) { + gSaveContext.funcTimer2Value[sTimerId] = 12000; + gSaveContext.eventTimer1Value[sTimerId] = 12000; } } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneNum == SCENE_DEKUTES) && - (gSaveContext.unk_3E88[D_801BF970] >= 12000)) { - gSaveContext.unk_3DE0[D_801BF970] = 12000; + (gSaveContext.funcTimer2Value[sTimerId] >= 12000)) { + gSaveContext.eventTimer1Value[sTimerId] = 12000; } - gSaveContext.unk_3DD0[D_801BF970] = 7; + gSaveContext.timerState[sTimerId] = TIMER_STATE_7; - if (gSaveContext.unk_3DD0[6] != 0) { - gSaveContext.timerX[6] = 115; - gSaveContext.timerY[6] = 80; - if (gSaveContext.unk_3DD0[6] < 11) { - gSaveContext.unk_3DD0[6] = 3; + if (gSaveContext.timerState[TIMER_ID_6] != TIMER_STATE_OFF) { + gSaveContext.timerX[TIMER_ID_6] = 115; + gSaveContext.timerY[TIMER_ID_6] = 80; + if (gSaveContext.timerState[TIMER_ID_6] <= TIMER_STATE_10) { + gSaveContext.timerState[TIMER_ID_6] = TIMER_STATE_3; } - gSaveContext.unk_3DD0[D_801BF970] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_OFF; } break; } @@ -5457,35 +5458,37 @@ void Interface_DrawTimers(PlayState* play) { } } - if ((D_801BF970 != 99) && gSaveContext.unk_3DD0[D_801BF970]) { // TODO: No != 0 - if (!gSaveContext.timersNoTimeLimit[D_801BF970]) { + if ((sTimerId != TIMER_ID_NONE) && gSaveContext.timerState[sTimerId]) { // TODO: No != 0 + if (!gSaveContext.timersNoTimeLimit[sTimerId]) { D_801BFCE8[0] = D_801BFCE8[1] = D_801BFCE8[3] = D_801BFCE8[4] = D_801BFCE8[6] = 0; D_801BFCE8[2] = D_801BFCE8[5] = 10; - if ((gSaveContext.unk_3DD0[D_801BF970] == 4) || (gSaveContext.unk_3DD0[D_801BF970] == 10) || - (gSaveContext.unk_3DD0[D_801BF970] == 11) || (gSaveContext.unk_3DD0[D_801BF970] == 14)) { + if ((gSaveContext.timerState[sTimerId] == TIMER_STATE_4) || + (gSaveContext.timerState[sTimerId] == TIMER_STATE_10) || + (gSaveContext.timerState[sTimerId] == TIMER_STATE_11) || + (gSaveContext.timerState[sTimerId] == TIMER_STATE_14)) { spD0 = osGetTime(); - spD0 = (spD0 - ((void)0, gSaveContext.unk_3EC0[D_801BF970]) - D_801BF930[D_801BF970] - - ((void)0, gSaveContext.unk_3E50[D_801BF970])) * + spD0 = (spD0 - ((void)0, gSaveContext.funcTimer3Value[sTimerId]) - D_801BF930[sTimerId] - + ((void)0, gSaveContext.funcTimer1Value[sTimerId])) * 64 / 3000 / 10000; } else { - if (gSaveContext.unk_3DD0[D_801BF970] == 7) { - spD0 = gSaveContext.unk_3E88[D_801BF970]; + if (gSaveContext.timerState[sTimerId] == TIMER_STATE_7) { + spD0 = gSaveContext.funcTimer2Value[sTimerId]; } else { spD0 = 0; } } if (spD0 == 0) { - gSaveContext.unk_3DE0[D_801BF970] = gSaveContext.unk_3E18[D_801BF970] - spD0; - } else if (gSaveContext.unk_3E18[D_801BF970] >= spD0) { - if (gSaveContext.unk_3E18[D_801BF970] <= spD0) { - gSaveContext.unk_3DE0[D_801BF970] = 0; + gSaveContext.eventTimer1Value[sTimerId] = gSaveContext.eventTimer2Value[sTimerId] - spD0; + } else if (gSaveContext.eventTimer2Value[sTimerId] >= spD0) { + if (gSaveContext.eventTimer2Value[sTimerId] <= spD0) { + gSaveContext.eventTimer1Value[sTimerId] = 0; } else { - gSaveContext.unk_3DE0[D_801BF970] = gSaveContext.unk_3E18[D_801BF970] - spD0; + gSaveContext.eventTimer1Value[sTimerId] = gSaveContext.eventTimer2Value[sTimerId] - spD0; } } else { - gSaveContext.unk_3DE0[D_801BF970] = 0; - gSaveContext.unk_3DD0[D_801BF970] = 5; + gSaveContext.eventTimer1Value[sTimerId] = 0; + gSaveContext.timerState[sTimerId] = TIMER_STATE_5; if (D_801BF8E0 != 0) { gSaveContext.save.playerData.health = 0; play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 2)); @@ -5493,14 +5496,14 @@ void Interface_DrawTimers(PlayState* play) { D_801BF8E0 = 0; } - func_8011C898(((void)0, gSaveContext.unk_3DE0[D_801BF970]), D_801BFCE8); + func_8011C898(((void)0, gSaveContext.eventTimer1Value[sTimerId]), D_801BFCE8); - if (gSaveContext.unk_3DE0[D_801BF970] > 6000) { + if (gSaveContext.eventTimer1Value[sTimerId] > 6000) { if ((D_801BFCF8 != D_801BFCE8[4]) && (D_801BFCE8[4] == 1)) { play_sound(NA_SE_SY_MESSAGE_WOMAN); D_801BFCF8 = D_801BFCE8[4]; } - } else if (gSaveContext.unk_3DE0[D_801BF970] > 1000) { + } else if (gSaveContext.eventTimer1Value[sTimerId] > 1000) { if ((D_801BFCF8 != D_801BFCE8[4]) && ((D_801BFCE8[4] % 2) != 0)) { play_sound(NA_SE_SY_WARNING_COUNT_N); D_801BFCF8 = D_801BFCE8[4]; @@ -5513,15 +5516,16 @@ void Interface_DrawTimers(PlayState* play) { D_801BFCE8[0] = D_801BFCE8[1] = D_801BFCE8[3] = D_801BFCE8[4] = D_801BFCE8[6] = 0; D_801BFCE8[2] = D_801BFCE8[5] = 10; - if ((gSaveContext.unk_3DD0[D_801BF970] == 4) || (gSaveContext.unk_3DD0[D_801BF970] == 14)) { + if ((gSaveContext.timerState[sTimerId] == TIMER_STATE_4) || + (gSaveContext.timerState[sTimerId] == TIMER_STATE_14)) { spD0 = osGetTime(); - spD0 = (spD0 - ((void)0, gSaveContext.unk_3E50[D_801BF970]) - - ((void)0, gSaveContext.unk_3EC0[D_801BF970]) - D_801BF930[D_801BF970]) * + spD0 = (spD0 - ((void)0, gSaveContext.funcTimer1Value[sTimerId]) - + ((void)0, gSaveContext.funcTimer3Value[sTimerId]) - D_801BF930[sTimerId]) * 64 / 3000 / 10000; - } else if (gSaveContext.unk_3DD0[D_801BF970] == 7) { - spD0 = gSaveContext.unk_3E88[D_801BF970]; - } else if (D_801BF970 == 0) { - spD0 = gSaveContext.unk_3DE0[D_801BF970]; + } else if (gSaveContext.timerState[sTimerId] == TIMER_STATE_7) { + spD0 = gSaveContext.funcTimer2Value[sTimerId]; + } else if (sTimerId == TIMER_ID_0) { + spD0 = gSaveContext.eventTimer1Value[sTimerId]; } else { spD0 = 0; } @@ -5534,16 +5538,16 @@ void Interface_DrawTimers(PlayState* play) { spD0 = 12000; } - gSaveContext.unk_3DE0[D_801BF970] = spD0; + gSaveContext.eventTimer1Value[sTimerId] = spD0; func_8011C898(spD0, D_801BFCE8); if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { - if ((gSaveContext.unk_3DE0[D_801BF970] > 11000) && (D_801BFCF8 != D_801BFCE8[4])) { + if ((gSaveContext.eventTimer1Value[sTimerId] > 11000) && (D_801BFCF8 != D_801BFCE8[4])) { play_sound(NA_SE_SY_WARNING_COUNT_E); D_801BFCF8 = D_801BFCE8[4]; } } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneNum == SCENE_DEKUTES)) { - if ((((void)0, gSaveContext.unk_3DE0[D_801BF970]) > + if ((((void)0, gSaveContext.eventTimer1Value[sTimerId]) > (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - 900)) && (D_801BFCF8 != D_801BFCE8[4])) { play_sound(NA_SE_SY_WARNING_COUNT_E); @@ -5556,69 +5560,70 @@ void Interface_DrawTimers(PlayState* play) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); OVERLAY_DISP = - Gfx_TextureIA8(OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[D_801BF970]), - ((void)0, gSaveContext.timerY[D_801BF970]) + 2, 0x10, 0x10, 1 << 10, 1 << 10); + Gfx_TextureIA8(OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[sTimerId]), + ((void)0, gSaveContext.timerY[sTimerId]) + 2, 0x10, 0x10, 1 << 10, 1 << 10); gDPPipeSync(OVERLAY_DISP++); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); - if (((D_801BF970 == 0) && (gSaveContext.unk_3DD0[0] == 14) && (D_801BF8E4 == 0) && - (gSaveContext.unk_3DE0[0] < 300)) || - (D_801BF8E4 == 2) || (gSaveContext.unk_3DD0[D_801BF970] < 13)) { - if (gSaveContext.unk_3DD0[D_801BF970]) { // TODO: No != 0 - if (D_801BF970 == 2) { - if ((gSaveContext.unk_3DE0[D_801BF970] == 0) || (gSaveContext.unk_3DD0[D_801BF970] == 4)) { + if (((sTimerId == TIMER_ID_0) && (gSaveContext.timerState[TIMER_ID_0] == TIMER_STATE_14) && + (D_801BF8E4 == 0) && (gSaveContext.eventTimer1Value[TIMER_ID_0] < 300)) || + (D_801BF8E4 == 2) || (gSaveContext.timerState[sTimerId] <= TIMER_STATE_12)) { + if (gSaveContext.timerState[sTimerId]) { // TODO: No != 0 + if (sTimerId == TIMER_ID_2) { + if ((gSaveContext.eventTimer1Value[sTimerId] == 0) || + (gSaveContext.timerState[sTimerId] == TIMER_STATE_4)) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } } else if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { - if (gSaveContext.unk_3DE0[D_801BF970] >= 11000) { + if (gSaveContext.eventTimer1Value[sTimerId] >= 11000) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneNum == SCENE_DEKUTES)) { - if (((void)0, gSaveContext.unk_3DE0[D_801BF970]) >= + if (((void)0, gSaveContext.eventTimer1Value[sTimerId]) >= gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); - } else if (((void)0, gSaveContext.unk_3DE0[D_801BF970]) >= + } else if (((void)0, gSaveContext.eventTimer1Value[sTimerId]) >= (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - 900)) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } - } else if ((gSaveContext.unk_3DE0[D_801BF970] < 1000) && - !gSaveContext.timersNoTimeLimit[D_801BF970] && - (gSaveContext.unk_3DD0[D_801BF970] != 11)) { + } else if ((gSaveContext.eventTimer1Value[sTimerId] < 1000) && + !gSaveContext.timersNoTimeLimit[sTimerId] && + (gSaveContext.timerState[sTimerId] != TIMER_STATE_11)) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } } - if (D_801BF970 == 0) { + if (sTimerId == TIMER_ID_0) { if (D_801BF8E4 == 2) { for (j = 0; j < 4; j++) { OVERLAY_DISP = Gfx_TextureI8( OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[j + 3])), 8, 0x10, - ((void)0, gSaveContext.timerX[D_801BF970]) + D_801BFCFC[j], - ((void)0, gSaveContext.timerY[D_801BF970]), D_801BFD0C[j], 0xFA, 0x370, 0x370); + ((void)0, gSaveContext.timerX[sTimerId]) + D_801BFCFC[j], + ((void)0, gSaveContext.timerY[sTimerId]), D_801BFD0C[j], 0xFA, 0x370, 0x370); } } else { for (j = 0; j < 5; j++) { OVERLAY_DISP = Gfx_TextureI8( OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[j + 3])), 8, 0x10, - ((void)0, gSaveContext.timerX[D_801BF970]) + D_801BFCFC[j], - ((void)0, gSaveContext.timerY[D_801BF970]), D_801BFD0C[j], 0xFA, 0x370, 0x370); + ((void)0, gSaveContext.timerX[sTimerId]) + D_801BFCFC[j], + ((void)0, gSaveContext.timerY[sTimerId]), D_801BFD0C[j], 0xFA, 0x370, 0x370); } } } else { for (j = 0; j < 8; j++) { - OVERLAY_DISP = Gfx_TextureI8( - OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[j])), 8, 0x10, - ((void)0, gSaveContext.timerX[D_801BF970]) + D_801BFCFC[j], - ((void)0, gSaveContext.timerY[D_801BF970]), D_801BFD0C[j], 0xFA, 0x370, 0x370); + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[j])), 8, 0x10, + ((void)0, gSaveContext.timerX[sTimerId]) + D_801BFCFC[j], + ((void)0, gSaveContext.timerY[sTimerId]), D_801BFD0C[j], 0xFA, 0x370, 0x370); } } } @@ -5663,38 +5668,40 @@ void Interface_UpdateTimers(PlayState* play) { var3 = osGetTime(); for (j = BOTTLE_FIRST; j < BOTTLE_MAX; j++) { - if (gSaveContext.unk_101A[j] == 1) { - gSaveContext.unk_10B0[j] += var3 - D_801BF8F0; + if (gSaveContext.bottleStatus[j] == 1) { + gSaveContext.bottleTimer4Value[j] += var3 - D_801BF8F0; } } D_801BF96C = false; } - D_801BF970 = 99; + sTimerId = TIMER_ID_NONE; for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.unk_101A[i] == 1) { + if (gSaveContext.bottleStatus[i] == 1) { var3 = osGetTime(); - var3 = (((var3 - ((void)0, gSaveContext.unk_10B0[i]) - ((void)0, gSaveContext.unk_1020[i])) / 10000) * + var3 = (((var3 - ((void)0, gSaveContext.bottleTimer4Value[i]) - + ((void)0, gSaveContext.bottleTimer1Value[i])) / + 10000) * 64) / 3000; if (var3 == 0) { - gSaveContext.unk_1080[i] = gSaveContext.unk_1050[i] - var3; - } else if (gSaveContext.unk_1050[i] >= var3) { - if (gSaveContext.unk_1050[i] <= var3) { - gSaveContext.unk_1080[i] = 0; + gSaveContext.bottleTimer3Value[i] = gSaveContext.bottleTimer2Value[i] - var3; + } else if (gSaveContext.bottleTimer2Value[i] >= var3) { + if (gSaveContext.bottleTimer2Value[i] <= var3) { + gSaveContext.bottleTimer3Value[i] = 0; } else { - gSaveContext.unk_1080[i] = gSaveContext.unk_1050[i] - var3; + gSaveContext.bottleTimer3Value[i] = gSaveContext.bottleTimer2Value[i] - var3; } } else { - gSaveContext.unk_1080[i] = 0; + gSaveContext.bottleTimer3Value[i] = 0; if (gSaveContext.save.inventory.items[i + SLOT_BOTTLE_1] == ITEM_HOT_SPRING_WATER) { Inventory_UpdateItem(play, i + SLOT_BOTTLE_1, ITEM_SPRING_WATER); Message_StartTextbox(play, 0xFA, NULL); } - gSaveContext.unk_101A[i] = 0; + gSaveContext.bottleStatus[i] = 0; } } } @@ -6605,23 +6612,23 @@ void Interface_Update(PlayState* play) { Magic_UpdateAddRequest(); } - if (gSaveContext.unk_3DD0[5] == 0) { + if (gSaveContext.timerState[TIMER_ID_5] == TIMER_STATE_OFF) { if ((D_801BF8DC == 1) || (D_801BF8DC == 4)) { if (CUR_FORM != PLAYER_FORM_ZORA) { if (play->gameOverCtx.state == 0) { if ((gSaveContext.save.playerData.health >> 1) != 0) { - gSaveContext.unk_3DD0[5] = 8; - gSaveContext.timerX[5] = 115; - gSaveContext.timerY[5] = 80; + gSaveContext.timerState[TIMER_ID_5] = TIMER_STATE_8; + gSaveContext.timerX[TIMER_ID_5] = 115; + gSaveContext.timerY[TIMER_ID_5] = 80; D_801BF8E0 = 1; - gSaveContext.timersNoTimeLimit[5] = false; + gSaveContext.timersNoTimeLimit[TIMER_ID_5] = false; } } } } } else { - if (((D_801BF8DC == 0) || (D_801BF8DC == 3)) && (gSaveContext.unk_3DD0[5] < 5)) { - gSaveContext.unk_3DD0[5] = 0; + if (((D_801BF8DC == 0) || (D_801BF8DC == 3)) && (gSaveContext.timerState[TIMER_ID_5] <= TIMER_STATE_4)) { + gSaveContext.timerState[TIMER_ID_5] = TIMER_STATE_OFF; } } @@ -6733,12 +6740,11 @@ void Interface_Update(PlayState* play) { } } -void func_80121F94(void) { +void Interface_Destroy(void) { Map_Destroy(); - func_80174F9C(func_8010E968, NULL); + func_80174F9C(Interface_TimerCallback, NULL); } -// OoT func_801109B0 (from z_construct.c) void Interface_Init(PlayState* play) { s32 pad; InterfaceContext* interfaceCtx = &play->interfaceCtx; @@ -6787,11 +6793,13 @@ void Interface_Init(PlayState* play) { Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_RIGHT); } - if (((gSaveContext.unk_3DD0[4] == 4) || (gSaveContext.unk_3DD0[6] == 4)) && - ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) && (gSaveContext.unk_3DD0[4] == 4)) { - gSaveContext.unk_3DD0[4] = 1; - gSaveContext.timerX[4] = 115; - gSaveContext.timerY[4] = 80; + if (((gSaveContext.timerState[TIMER_ID_4] == TIMER_STATE_4) || + (gSaveContext.timerState[TIMER_ID_6] == TIMER_STATE_4)) && + ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) && + (gSaveContext.timerState[TIMER_ID_4] == TIMER_STATE_4)) { + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_1; + gSaveContext.timerX[TIMER_ID_4] = 115; + gSaveContext.timerY[TIMER_ID_4] = 80; } LifeMeter_Init(play); @@ -6804,19 +6812,19 @@ void Interface_Init(PlayState* play) { if (gSaveContext.eventInf[3] & 0x10) { gSaveContext.eventInf[3] &= (u8)~0x10; - gSaveContext.unk_3DD0[4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_OFF; } - gSaveContext.unk_3DD0[1] = 0; - gSaveContext.unk_3DE0[1] = 0; - gSaveContext.unk_3E18[1] = 0; - gSaveContext.unk_3E50[1] = 0; - gSaveContext.unk_3E88[1] = 0; - gSaveContext.unk_3EC0[1] = 0; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_OFF; + gSaveContext.eventTimer1Value[TIMER_ID_1] = 0; + gSaveContext.eventTimer2Value[TIMER_ID_1] = 0; + gSaveContext.funcTimer1Value[TIMER_ID_1] = 0; + gSaveContext.funcTimer2Value[TIMER_ID_1] = 0; + gSaveContext.funcTimer3Value[TIMER_ID_1] = 0; for (i = 0; i < 7; i++) { - if (gSaveContext.unk_3DD0[i] == 7) { - gSaveContext.unk_3DD0[i] = 0; + if (gSaveContext.timerState[i] == TIMER_STATE_7) { + gSaveContext.timerState[i] = TIMER_STATE_OFF; } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index da7d9248d..dfe5b2bd5 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -873,13 +873,13 @@ void func_80144A94(SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; } - for (i = 0; i < ARRAY_COUNT(gSaveContext.unk_3DD0); i++) { - gSaveContext.unk_3DD0[i] = 0; - gSaveContext.unk_3DE0[i] = 0; - gSaveContext.unk_3E18[i] = 0; - gSaveContext.unk_3E50[i] = 0; - gSaveContext.unk_3E88[i] = 0; - gSaveContext.unk_3EC0[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveContext.timerState); i++) { + gSaveContext.timerState[i] = TIMER_STATE_OFF; + gSaveContext.eventTimer1Value[i] = 0; + gSaveContext.eventTimer2Value[i] = 0; + gSaveContext.funcTimer1Value[i] = 0; + gSaveContext.funcTimer2Value[i] = 0; + gSaveContext.funcTimer3Value[i] = 0; } D_801BDAA0 = 1; @@ -944,13 +944,13 @@ void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; } - for (i = 0; i < ARRAY_COUNT(gSaveContext.unk_3DD0); i++) { - gSaveContext.unk_3DD0[i] = 0; - gSaveContext.unk_3DE0[i] = 0; - gSaveContext.unk_3E18[i] = 0; - gSaveContext.unk_3E50[i] = 0; - gSaveContext.unk_3E88[i] = 0; - gSaveContext.unk_3EC0[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveContext.timerState); i++) { + gSaveContext.timerState[i] = TIMER_STATE_OFF; + gSaveContext.eventTimer1Value[i] = 0; + gSaveContext.eventTimer2Value[i] = 0; + gSaveContext.funcTimer1Value[i] = 0; + gSaveContext.funcTimer2Value[i] = 0; + gSaveContext.funcTimer3Value[i] = 0; } if (gSaveContext.save.isFirstCycle) { diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 0c3f69c51..88439c993 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1046,9 +1046,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { if (gSaveContext.save.entranceIndex == 0x2C00) { if (gSaveContext.sceneSetupIndex == 0) { - if (gSaveContext.unk_3DD0[3] == 0) { + if (gSaveContext.timerState[TIMER_ID_3] == TIMER_STATE_OFF) { // Starts a 5 minute (300 second) timer until the moon falls. - func_8010E9F0(3, 300); + func_8010E9F0(TIMER_ID_3, 300); XREG(80) = 200; XREG(81) = 115; } @@ -1063,10 +1063,10 @@ void DmStk_Init(Actor* thisx, PlayState* play) { } else if (gSaveContext.sceneSetupIndex == 3) { this->animationId = SK_ANIMATION_FLOATING_ARMS_CROSSED; - if (gSaveContext.unk_3DD0[3] == 0) { + if (gSaveContext.timerState[TIMER_ID_3] == TIMER_STATE_OFF) { // This code is called when the Giants fail to stop the moon. // Starts a 1 minute (60 second) timer until the moon falls. - func_8010E9F0(3, 60); + func_8010E9F0(TIMER_ID_3, 60); XREG(80) = 200; XREG(81) = 115; } diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index e2e8e4145..cbe44d834 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -216,7 +216,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { } else { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 14, &this->unk_32C); thisx->room = -1; - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); this->unk_3B0 |= 1; this->actionFunc = func_80A72438; @@ -817,7 +817,7 @@ void func_80A73244(EnDno* this, PlayState* play) { this->unk_328 = 2; this->actor.speedXZ = 0.0f; Flags_UnsetSwitch(play, ENDNO_GET_3F80(&this->actor)); - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; this->unk_44E = 0; this->actionFunc = func_80A732C8; } diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index a6d5b8ab6..04e498715 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -401,7 +401,7 @@ void func_80962340(EnFu* this, PlayState* play) { Message_StartTextbox(play, 0x287E, &this->actor); this->unk_552 = 0x287E; } - } else if ((gSaveContext.unk_3DE0[4] == 0) && (this->unk_552 != 0x2888)) { + } else if ((gSaveContext.eventTimer1Value[TIMER_ID_4] == 0) && (this->unk_552 != 0x2888)) { Message_StartTextbox(play, 0x2886, &this->actor); this->unk_552 = 0x2886; } else { @@ -644,7 +644,7 @@ void func_80962A10(EnFu* this, PlayState* play) { play_sound(NA_SE_SY_FOUND); player->stateFlags1 &= ~0x20; - func_8010E9F0(4, 60); + func_8010E9F0(TIMER_ID_4, 60); if (this->unk_546 == 1) { func_809616E0(this, play); } else { @@ -682,7 +682,7 @@ void func_80962BCC(EnFu* this, PlayState* play) { play_sound(NA_SE_SY_FOUND); player->stateFlags1 &= ~0x20; player->stateFlags3 |= 0x400000; - func_8010E9F0(4, 60); + func_8010E9F0(TIMER_ID_4, 60); if (this->unk_546 == 1) { func_809616E0(this, play); @@ -713,7 +713,7 @@ void func_80962D60(EnFu* this, PlayState* play) { play_sound(NA_SE_SY_FOUND); player->stateFlags1 &= ~0x20; player->stateFlags3 |= 0x400000; - func_8010E9F0(4, 60); + func_8010E9F0(TIMER_ID_4, 60); if (this->unk_546 == 1) { func_809616E0(this, play); @@ -761,11 +761,11 @@ void func_80962F4C(EnFu* this, PlayState* play) { break; } - if (gSaveContext.unk_3DE0[4] < 2000) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] < 2000) { s16 val = D_80964B00[this->unk_542] + 200; Math_SmoothStepToS(&fuKaiten->rotationSpeed, val, 10, 5, 5); - } else if (gSaveContext.unk_3DE0[4] < 4000) { + } else if (gSaveContext.eventTimer1Value[TIMER_ID_4] < 4000) { s16 val = D_80964B00[this->unk_542] + 100; Math_SmoothStepToS(&fuKaiten->rotationSpeed, val, 10, 5, 5); @@ -777,12 +777,12 @@ void func_80962F4C(EnFu* this, PlayState* play) { if ((!DynaPolyActor_IsInRidingRotatingState((DynaPolyActor*)this->actor.child) && (player->actor.bgCheckFlags & 1)) || - (gSaveContext.unk_3DE0[4] < 1) || (this->unk_548 == this->unk_54C)) { + (gSaveContext.eventTimer1Value[TIMER_ID_4] < 1) || (this->unk_548 == this->unk_54C)) { player->stateFlags3 &= ~0x400000; func_80961E88(play); player->stateFlags1 |= 0x20; if (this->unk_548 < this->unk_54C) { - if (gSaveContext.unk_3DE0[4] == 0) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] == 0) { Message_StartTextbox(play, 0x2885, &this->actor); this->unk_552 = 0x2885; } else { @@ -790,15 +790,15 @@ void func_80962F4C(EnFu* this, PlayState* play) { this->unk_552 = 0x2888; } func_801A2C20(); - gSaveContext.unk_3DE0[4] = 0; - gSaveContext.unk_3DD0[4] = 5; + gSaveContext.eventTimer1Value[TIMER_ID_4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; this->unk_548 = 0; func_809632D0(this); } else { this->unk_548 = 0; func_801A2C20(); - gSaveContext.unk_3DE0[4] = 0; - gSaveContext.unk_3DD0[4] = 5; + gSaveContext.eventTimer1Value[TIMER_ID_4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; func_801A3098(NA_BGM_GET_ITEM | 0x900); Interface_SetPerfectMinigame(play, 1); this->unk_54A = 3; diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 92b727838..12104c324 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -459,7 +459,7 @@ void func_80B10240(EnGb2* this, PlayState* play) { D_80B119B0[this->unk_280].unk_04.y, D_80B119B0[this->unk_280].unk_04.z, 0, 0, 0, this->unk_27E); if (this->unk_280 == 0) { - func_8010E9F0(1, 180); + func_8010E9F0(TIMER_ID_1, 180); } this->actionFunc = func_80B10344; } else { @@ -487,7 +487,7 @@ void func_80B10344(EnGb2* this, PlayState* play) { if (this->unk_26C & 0x200) { if (this->unk_280 == 3) { this->unk_26C &= ~0x200; - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; func_800FE498(); gSaveContext.eventInf[4] |= 0x40; func_80B0FE7C(play); @@ -506,7 +506,7 @@ void func_80B10344(EnGb2* this, PlayState* play) { } if (gSaveContext.save.playerData.health < 49) { - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; gSaveContext.eventInf[4] |= 0x40; gSaveContext.eventInf[4] |= 0x20; @@ -519,8 +519,8 @@ void func_80B10344(EnGb2* this, PlayState* play) { } func_80B0FE7C(play); - } else if (gSaveContext.unk_3DE0[1] == 0) { - gSaveContext.unk_3DD0[1] = 5; + } else if (gSaveContext.eventTimer1Value[TIMER_ID_1] == 0) { + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; gSaveContext.eventInf[4] |= 0x40; gSaveContext.eventInf[4] |= 0x10; diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 90c67839c..1cd96bd32 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -121,7 +121,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { return false; } - func_8010E9F0(4, 0); + func_8010E9F0(TIMER_ID_4, 0); play->interfaceCtx.unk_280 = 1; this->horse1 = @@ -145,7 +145,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { } s32 func_808F8E94(EnHorseGameCheck* this, PlayState* play) { - gSaveContext.unk_3DD0[4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_OFF; return true; } @@ -247,11 +247,11 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { return true; } - if (gSaveContext.unk_3DE0[4] >= 0x4650) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] >= 0x4650) { Audio_QueueSeqCmd(0x8041); play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; SET_RACE_FLAGS(RACE_FLAG_4); this->unk_174 = 60; } @@ -284,7 +284,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { Audio_QueueSeqCmd(0x8041); play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; SET_RACE_FLAGS(RACE_FLAG_3); this->unk_174 = 60; } @@ -317,7 +317,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { Audio_QueueSeqCmd(0x8041); play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x02000000; - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; SET_RACE_FLAGS(RACE_FLAG_3); this->unk_174 = 60; } @@ -346,7 +346,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { Audio_QueueSeqCmd(0x8041); play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x800; - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; SET_RACE_FLAGS(RACE_FLAG_2); this->unk_174 = 60; } diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index ef99496be..57da759e1 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -155,7 +155,7 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (this->actor.flags & ACTOR_FLAG_10000) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (gSaveContext.unk_3DE0[4] > 0) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] > 0) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1); Message_StartTextbox(play, 0x10A2, &this->actor); this->unk_300 = 0x10A2; @@ -287,7 +287,7 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) { play->interfaceCtx.unk_280 = 1; Interface_InitMinigame(play); gSaveContext.save.weekEventReg[90] |= 0x20; - func_8010E9F0(4, 0x78); + func_8010E9F0(TIMER_ID_4, 120); this->actionFunc = func_80C1418C; } @@ -352,7 +352,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) { func_80C14030(this); } - if (gSaveContext.unk_3DE0[4] == 0) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] == 0) { Message_StartTextbox(play, 0x10A1, &this->actor); this->unk_300 = 0x10A1; player->stateFlags1 |= 0x20; @@ -479,7 +479,7 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { case 0x10A1: func_801477B4(play); gSaveContext.minigameState = 3; - gSaveContext.unk_3DD0[4] = 5; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; gSaveContext.save.weekEventReg[90] &= (u8)~0x20; func_80C144E4(this); break; diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 1d40d36a9..51131b05e 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -678,7 +678,7 @@ void EnMa4_HorsebackGameCheckPlayerInteractions(EnMa4* this, PlayState* play) { // "You're feeling confident" Message_StartTextbox(play, 0x336E, &this->actor); this->actionFunc = EnMa4_HorsebackGameTalking; - } else if ((gSaveContext.unk_3DE0[4] < 115 * 100)) { // timer < 115 seconds + } else if ((gSaveContext.eventTimer1Value[TIMER_ID_4] < 115 * 100)) { // timer < 115 seconds func_800B8614(&this->actor, play, 100.0f); } } @@ -693,7 +693,7 @@ void EnMa4_InitHorsebackGame(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); play->interfaceCtx.unk_280 = 1; - func_8010E9F0(4, 0); + func_8010E9F0(TIMER_ID_4, 0); gSaveContext.save.weekEventReg[8] |= 1; Interface_InitMinigame(play); player->stateFlags1 |= 0x20; @@ -721,9 +721,9 @@ void EnMa4_HorsebackGameWait(EnMa4* this, PlayState* play) { play->interfaceCtx.unk_25C = 1; } - if ((gSaveContext.unk_3DE0[4] >= 2 * 60 * 100) // timer >= 2 minutes + if ((gSaveContext.eventTimer1Value[TIMER_ID_4] >= 2 * 60 * 100) // timer >= 2 minutes || (this->poppedBalloonCounter == 10)) { - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; EnMa4_SetupHorsebackGameEnd(this, play); D_80AC0258 = 0; } @@ -902,13 +902,13 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { gSaveContext.save.weekEventReg[21] |= 0x40; } } else if (this->state == MA4_STATE_AFTERHORSEBACKGAME) { - if (gSaveContext.unk_3DE0[4] >= 2 * 60 * 100) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] >= 2 * 60 * 100) { // "Too bad Grasshopper" EnMa4_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x336D, &this->actor); this->textId = 0x336D; } else { - time = gSaveContext.unk_3DE0[4]; + time = gSaveContext.eventTimer1Value[TIMER_ID_4]; if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { // [Score] New record! gSaveContext.save.horseBackBalloonHighScore = time; @@ -947,12 +947,12 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x3354, &this->actor); this->textId = 0x3354; } else if (this->state == MA4_STATE_AFTERHORSEBACKGAME) { - if (gSaveContext.unk_3DE0[4] >= 2 * 60 * 100) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] >= 2 * 60 * 100) { // "Try again?" Message_StartTextbox(play, 0x3356, &this->actor); this->textId = 0x3356; } else { - time = gSaveContext.unk_3DE0[4]; + time = gSaveContext.eventTimer1Value[TIMER_ID_4]; if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { gSaveContext.save.horseBackBalloonHighScore = time; EnMa4_SetFaceExpression(this, 0, 3); @@ -974,12 +974,12 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x3358, &this->actor); this->textId = 0x3358; } else if (this->state == MA4_STATE_AFTERHORSEBACKGAME) { - if (gSaveContext.unk_3DE0[4] >= 2 * 60 * 100) { + if (gSaveContext.eventTimer1Value[TIMER_ID_4] >= 2 * 60 * 100) { // "Try again?" Message_StartTextbox(play, 0x3356, &this->actor); this->textId = 0x3356; } else { - time = gSaveContext.unk_3DE0[4]; + time = gSaveContext.eventTimer1Value[TIMER_ID_4]; if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { // New record gSaveContext.save.horseBackBalloonHighScore = time; diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index 4e182dfb6..553e216ba 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -245,13 +245,14 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { break; case 0x2791: - if (gSaveContext.unk_3DE0[0] == 1000) { + if (gSaveContext.eventTimer1Value[TIMER_ID_0] == 1000) { Message_StartTextbox(play, 0x2792, &this->actor); this->unk_2B4 = 0x2792; - } else if ((gSaveContext.unk_3DE0[0] >= 1500)) { + } else if ((gSaveContext.eventTimer1Value[TIMER_ID_0] >= 1500)) { Message_StartTextbox(play, 0x2797, &this->actor); this->unk_2B4 = 0x2797; - } else if ((gSaveContext.unk_3DE0[0] <= 1050) && (gSaveContext.unk_3DE0[0] >= 950)) { + } else if ((gSaveContext.eventTimer1Value[TIMER_ID_0] <= 1050) && + (gSaveContext.eventTimer1Value[TIMER_ID_0] >= 950)) { Message_StartTextbox(play, 0x2795, &this->actor); this->unk_2B4 = 0x2795; } else { @@ -297,7 +298,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { } else if ((this->unk_2AC > 0) && (this->unk_2B4 == 0x2791)) { this->unk_2AC--; if (this->unk_2AC == 0) { - if (gSaveContext.unk_3DE0[0] == 1000) { + if (gSaveContext.eventTimer1Value[TIMER_ID_0] == 1000) { func_801A3098(0x922); } else { play_sound(NA_SE_SY_ERROR); @@ -376,18 +377,18 @@ void func_80A6FBA0(EnMm3* this) { void func_80A6FBFC(EnMm3* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.unk_3DD0[0] == 0x10) { + if (gSaveContext.timerState[TIMER_ID_0] == TIMER_STATE_16) { player->stateFlags1 &= ~0x20; this->actor.flags |= ACTOR_FLAG_10000; - if (gSaveContext.unk_3DE0[0] > 1500) { - gSaveContext.unk_3DE0[0] = 1500; - } else if ((((void)0, gSaveContext.unk_3DE0[0]) >= (OSTime)(995 - XREG(16))) && - (((void)0, gSaveContext.unk_3DE0[0]) <= (OSTime)(1005 + XREG(17)))) { - gSaveContext.unk_3DE0[0] = 1000; + if (gSaveContext.eventTimer1Value[TIMER_ID_0] > 1500) { + gSaveContext.eventTimer1Value[TIMER_ID_0] = 1500; + } else if ((((void)0, gSaveContext.eventTimer1Value[TIMER_ID_0]) >= (OSTime)(995 - XREG(16))) && + (((void)0, gSaveContext.eventTimer1Value[TIMER_ID_0]) <= (OSTime)(1005 + XREG(17)))) { + gSaveContext.eventTimer1Value[TIMER_ID_0] = 1000; } - } else if (gSaveContext.unk_3DE0[0] > 1500) { - gSaveContext.unk_3DD0[0] = 15; - gSaveContext.unk_3DC8 = osGetTime(); + } else if (gSaveContext.eventTimer1Value[TIMER_ID_0] > 1500) { + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_15; + gSaveContext.timerOsTime = osGetTime(); } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -396,7 +397,7 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) { Message_StartTextbox(play, 0x2791, &this->actor); this->unk_2B4 = 0x2791; this->unk_2AC = 7; - gSaveContext.unk_3DD0[0] = 0; + gSaveContext.timerState[TIMER_ID_0] = TIMER_STATE_OFF; this->actor.flags &= ~ACTOR_FLAG_10000; play_sound(NA_SE_SY_START_SHOT); func_80A6F9C8(this); diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index abd820d4d..7de90998b 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -253,7 +253,7 @@ s32 EnMttag_ExitRace(PlayState* play, s32 arg1, s32 nextTransition) { * Displays the text which says that the player has made a false start. */ void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) { - gSaveContext.unk_3DD0[4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_OFF; Message_StartTextbox(play, 0xE95, NULL); // An entrant made a false start func_800B7298(play, &this->actor, 7); Audio_QueueSeqCmd(0x101400FF); @@ -314,7 +314,7 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) { gSaveContext.eventInf[1] |= 8; } else { if (DECR(this->timer) == 60) { - func_8010E9F0(4, 0); + func_8010E9F0(TIMER_ID_4, 0); play->interfaceCtx.unk_280 = 1; Audio_QueueSeqCmd(NA_BGM_GORON_RACE | 0x8000); play->envCtx.unk_E4 = 0xFE; @@ -359,14 +359,14 @@ void EnMttag_Race(EnMttag* this, PlayState* play) { s32 playerCheatStatus; if (EnMttag_IsInFinishLine(playerPos)) { - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; play_sound(NA_SE_SY_START_SHOT); Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000); this->timer = 55; gSaveContext.eventInf[1] |= 2; this->actionFunc = EnMttag_RaceFinish; } else if (EnMttag_IsAnyRaceGoronOverFinishLine(this)) { - gSaveContext.unk_3DD0[4] = 6; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_6; play_sound(NA_SE_SY_START_SHOT); Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000); this->timer = 55; @@ -457,7 +457,7 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { if (play->msgCtx.choiceIndex != 0) { // Exit the race func_8019F230(); - gSaveContext.unk_3DD0[4] = 0; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_OFF; EnMttag_ExitRace(play, 2, 2); gSaveContext.eventInf[1] &= (u8)~8; gSaveContext.eventInf[1] |= 4; @@ -503,8 +503,8 @@ void EnMttag_Init(Actor* thisx, PlayState* play) { void EnMttag_Destroy(Actor* thisx, PlayState* play) { EnMttag* this = THIS; - if (gSaveContext.unk_3DD0[4] != 6) { - gSaveContext.unk_3DD0[4] = 5; + if (gSaveContext.timerState[TIMER_ID_4] != TIMER_STATE_6) { + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; } } diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index f0f0a225b..43d191c45 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -270,7 +270,7 @@ void func_80A2C2E0(EnSyatekiDekunuts* this, PlayState* play) { void func_80A2C33C(EnSyatekiDekunuts* this, PlayState* play) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; - if ((gSaveContext.unk_3DE0[1] <= 0) || (syatekiMan->unk_26A != 1)) { + if ((gSaveContext.eventTimer1Value[TIMER_ID_1] <= 0) || (syatekiMan->unk_26A != 1)) { func_80A2C3AC(this); } diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index 35595fca0..0229e0807 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -894,7 +894,7 @@ void func_809C80C0(EnSyatekiMan* this, PlayState* play) { this->unk_27A = 0; this->unk_27C = 0; this->unk_26E = 0; - func_8010E9F0(1, 100); + func_8010E9F0(TIMER_ID_1, 100); this->actor.draw = NULL; this->actionFunc = func_809C81D0; } @@ -937,9 +937,9 @@ void func_809C81D0(EnSyatekiMan* this, PlayState* play) { } this->unk_26C++; - if (gSaveContext.unk_3DE0[1] == 0) { - gSaveContext.unk_3DE0[1] = 0; - gSaveContext.unk_3DD0[1] = 5; + if (gSaveContext.eventTimer1Value[TIMER_ID_1] == 0) { + gSaveContext.eventTimer1Value[TIMER_ID_1] = 0; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; this->actor.draw = EnSyatekiMan_Draw; this->unk_27E = 0; this->unk_27C = 0; @@ -957,10 +957,10 @@ void func_809C81D0(EnSyatekiMan* this, PlayState* play) { this->unk_26A = 5; if (this->unk_280 == 0x848) { Interface_SetPerfectMinigame(play, 2); - gSaveContext.unk_3DD0[1] = 6; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_6; this->actionFunc = func_809C8610; } else { - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; this->actionFunc = func_809C8488; } } @@ -1016,15 +1016,15 @@ void func_809C8610(EnSyatekiMan* this, PlayState* play) { player->stateFlags1 |= 0x20; if (!play->interfaceCtx.isMinigamePerfect) { - if (gSaveContext.unk_3DE0[1] == 0) { - gSaveContext.unk_3DE0[1] = 0; - gSaveContext.unk_3DD0[1] = 5; + if (gSaveContext.eventTimer1Value[TIMER_ID_1] == 0) { + gSaveContext.eventTimer1Value[TIMER_ID_1] = 0; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; this->unk_27E = 0; this->unk_27C = 0; this->actionFunc = func_809C8488; D_809C94A0 = 0; } else if (D_809C94A0 > 10) { - gSaveContext.unk_3E88[1] += 100; + gSaveContext.funcTimer2Value[TIMER_ID_1] += 100; play->interfaceCtx.unk_25C += 10; this->unk_280 += 10; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); @@ -1084,7 +1084,7 @@ void func_809C8808(EnSyatekiMan* this, PlayState* play) { this->unk_26C = 70; this->unk_26E = 0; D_809C94A4 = 30; - func_8010E9F0(1, 75); + func_8010E9F0(TIMER_ID_1, 75); this->actor.draw = NULL; this->actionFunc = func_809C898C; } @@ -1097,15 +1097,15 @@ void func_809C898C(EnSyatekiMan* this, PlayState* play) { }; static s32 D_809C94A8 = 0; Player* player = GET_PLAYER(play); - s32 sp30 = (((void)0, gSaveContext.unk_3DE0[1]) * 0.1f) + 1.0f; + s32 sp30 = (((void)0, gSaveContext.eventTimer1Value[TIMER_ID_1]) * 0.1f) + 1.0f; if (sp30 < 0x2EF) { s32 temp; if (D_809C94A8 == 0) { - temp = ((void)0, gSaveContext.unk_3DE0[1]) % 500; + temp = ((void)0, gSaveContext.eventTimer1Value[TIMER_ID_1]) % 500; } else { - temp = (((void)0, gSaveContext.unk_3DE0[1]) + 250) % 500; + temp = (((void)0, gSaveContext.eventTimer1Value[TIMER_ID_1]) + 250) % 500; } if (temp < 100) { @@ -1114,7 +1114,7 @@ void func_809C898C(EnSyatekiMan* this, PlayState* play) { if (this->unk_26E != 0) { if (this->unk_26E == 2) { - gSaveContext.unk_3E18[1] -= 250; + gSaveContext.eventTimer2Value[TIMER_ID_1] -= 250; D_809C94A8 = (D_809C94A8 + 25) % 50; } this->unk_26E = 0; @@ -1132,11 +1132,11 @@ void func_809C898C(EnSyatekiMan* this, PlayState* play) { } } - if (gSaveContext.unk_3DE0[1] == 0) { + if (gSaveContext.eventTimer1Value[TIMER_ID_1] == 0) { this->unk_27E = 0; this->unk_26C = 80; - gSaveContext.unk_3DE0[1] = 0; - gSaveContext.unk_3DD0[1] = 5; + gSaveContext.eventTimer1Value[TIMER_ID_1] = 0; + gSaveContext.timerState[TIMER_ID_1] = TIMER_STATE_5; player->stateFlags1 |= 0x20; D_809C94A8 = 0; this->actor.draw = EnSyatekiMan_Draw; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 62634561d..2ed585d04 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -90,7 +90,7 @@ void func_80AC9FE4(EnTimeTag* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); this->actionFunc = func_80AC9FD4; - gSaveContext.unk_3DD0[3] = 0; + gSaveContext.timerState[TIMER_ID_3] = TIMER_STATE_OFF; if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { gSaveContext.save.weekEventReg[25] |= 2; @@ -107,7 +107,7 @@ void func_80ACA0A8(EnTimeTag* this, PlayState* play) { if (this->actor.cutscene != -1) { this->actionFunc = func_80AC9FE4; ActorCutscene_SetIntentToPlay(this2->actor.cutscene); - gSaveContext.unk_3DD0[3] = 0; + gSaveContext.timerState[TIMER_ID_3] = TIMER_STATE_OFF; } play->msgCtx.ocarinaMode = 4; } diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c index b39187c75..d9f1aea5d 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -45,14 +45,14 @@ void ObjRoomtimer_Init(Actor* thisx, PlayState* play) { void ObjRoomtimer_Destroy(Actor* thisx, PlayState* play) { ObjRoomtimer* this = THIS; - if (this->actor.params != 0x1FF && gSaveContext.unk_3DD0[4] > 0) { - gSaveContext.unk_3DD0[4] = 5; + if (this->actor.params != 0x1FF && gSaveContext.timerState[TIMER_ID_4] >= TIMER_STATE_1) { + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; } } void func_80973CD8(ObjRoomtimer* this, PlayState* play) { if (this->actor.params != 0x1FF) { - func_8010E9F0(4, this->actor.params); + func_8010E9F0(TIMER_ID_4, this->actor.params); } func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_PROP); @@ -62,11 +62,11 @@ void func_80973CD8(ObjRoomtimer* this, PlayState* play) { void func_80973D3C(ObjRoomtimer* this, PlayState* play) { if (Flags_GetClearTemp(play, this->actor.room)) { if (this->actor.params != 0x1FF) { - gSaveContext.unk_3DD0[4] = 5; + gSaveContext.timerState[TIMER_ID_4] = TIMER_STATE_5; } ActorCutscene_SetIntentToPlay(this->actor.cutscene); this->actionFunc = func_80973DE0; - } else if (this->actor.params != 0x1FF && gSaveContext.unk_3DD0[4] == 0) { + } else if (this->actor.params != 0x1FF && gSaveContext.timerState[TIMER_ID_4] == TIMER_STATE_OFF) { play_sound(NA_SE_OC_ABYSS); func_80169EFC(&play->state); Actor_MarkForDeath(&this->actor); diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 413cc4b66..c0252c57b 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -365,13 +365,13 @@ void Select_UpdateMenu(SelectContext* this) { if (this->verticalInputAccumulator == 0) { if (CHECK_BTN_ALL(controller1->press.button, BTN_A) || CHECK_BTN_ALL(controller1->press.button, BTN_START)) { - for (i = 0; i < ARRAY_COUNT(gSaveContext.unk_3EC0); i++) { - gSaveContext.unk_3DD0[i] = 0; - gSaveContext.unk_3DE0[i] = 0; - gSaveContext.unk_3E18[i] = 0; - gSaveContext.unk_3E50[i] = 0; - gSaveContext.unk_3E88[i] = 0; - gSaveContext.unk_3EC0[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveContext.funcTimer3Value); i++) { + gSaveContext.timerState[i] = TIMER_STATE_OFF; + gSaveContext.eventTimer1Value[i] = 0; + gSaveContext.eventTimer2Value[i] = 0; + gSaveContext.funcTimer1Value[i] = 0; + gSaveContext.funcTimer2Value[i] = 0; + gSaveContext.funcTimer3Value[i] = 0; } gSaveContext.minigameState = 0; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 9c225a650..8ea00efde 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2093,7 +2093,7 @@ 0x8010DC58:("func_8010DC58",), 0x8010DE38:("func_8010DE38",), 0x8010E028:("Interface_InitVertices",), - 0x8010E968:("func_8010E968",), + 0x8010E968:("Interface_TimerCallback",), 0x8010E9F0:("func_8010E9F0",), 0x8010EA9C:("func_8010EA9C",), 0x8010EB50:("func_8010EB50",), @@ -2165,7 +2165,7 @@ 0x80120F90:("Interface_LoadStory",), 0x80121064:("Interface_AllocStory",), 0x801210E0:("Interface_Update",), - 0x80121F94:("func_80121F94",), + 0x80121F94:("Interface_Destroy",), 0x80121FC4:("Interface_Init",), 0x801224E0:("Path_GetByIndex",), 0x80122524:("Path_OrientAndGetDistSq",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 800913461..f1ce9f834 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1083,7 +1083,7 @@ 0x801BF930:("D_801BF930","u64","[7]",0x38), 0x801BF968:("D_801BF968","UNK_TYPE4","",0x4), 0x801BF96C:("D_801BF96C","UNK_TYPE4","",0x4), - 0x801BF970:("D_801BF970","UNK_TYPE4","",0x4), + 0x801BF970:("sTimerId","UNK_TYPE4","",0x4), 0x801BF974:("D_801BF974","UNK_TYPE4","",0x4), 0x801BF978:("D_801BF978","UNK_TYPE4","",0x4), 0x801BF97C:("D_801BF97C","UNK_TYPE4","",0x4), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index fcb340f87..582a2355d 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1607,7 +1607,7 @@ asm/non_matchings/code/z_parameter/func_8010D9F4.s,func_8010D9F4,0x8010D9F4,0x99 asm/non_matchings/code/z_parameter/func_8010DC58.s,func_8010DC58,0x8010DC58,0x78 asm/non_matchings/code/z_parameter/func_8010DE38.s,func_8010DE38,0x8010DE38,0x7C asm/non_matchings/code/z_parameter/Interface_InitVertices.s,Interface_InitVertices,0x8010E028,0x250 -asm/non_matchings/code/z_parameter/func_8010E968.s,func_8010E968,0x8010E968,0x22 +asm/non_matchings/code/z_parameter/Interface_TimerCallback.s,Interface_TimerCallback,0x8010E968,0x22 asm/non_matchings/code/z_parameter/func_8010E9F0.s,func_8010E9F0,0x8010E9F0,0x2B asm/non_matchings/code/z_parameter/func_8010EA9C.s,func_8010EA9C,0x8010EA9C,0x2D asm/non_matchings/code/z_parameter/func_8010EB50.s,func_8010EB50,0x8010EB50,0x14 @@ -1679,7 +1679,7 @@ asm/non_matchings/code/z_parameter/Interface_Draw.s,Interface_Draw,0x8011F0E0,0x asm/non_matchings/code/z_parameter/Interface_LoadStory.s,Interface_LoadStory,0x80120F90,0x35 asm/non_matchings/code/z_parameter/Interface_AllocStory.s,Interface_AllocStory,0x80121064,0x1F asm/non_matchings/code/z_parameter/Interface_Update.s,Interface_Update,0x801210E0,0x3AD -asm/non_matchings/code/z_parameter/func_80121F94.s,func_80121F94,0x80121F94,0xC +asm/non_matchings/code/z_parameter/Interface_Destroy.s,Interface_Destroy,0x80121F94,0xC asm/non_matchings/code/z_parameter/Interface_Init.s,Interface_Init,0x80121FC4,0x147 asm/non_matchings/code/z_path/func_801224E0.s,func_801224E0,0x801224E0,0x11 asm/non_matchings/code/z_path/func_80122524.s,func_80122524,0x80122524,0x2A