summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_parameter.c130
1 files changed, 101 insertions, 29 deletions
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index f48f23962..5406db861 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -217,7 +217,7 @@ s32 D_801BF934[] = {
s32 D_801BF968 = 0;
-s32 D_801BF96C = 0;
+u8 D_801BF96C = 0;
s16 D_801BF970 = 99;
@@ -733,34 +733,35 @@ void func_8010EBA0(s16 timer, s16 timerId) {
s32 func_8010EC54(s16 timerId) {
u64 time;
- s16 timeArr[6];
+ s16 timerArr[6];
time = gSaveContext.unk_3DE0[timerId];
// hours
- timeArr[0] = time / 36000;
- time -= timeArr[0] * 36000;
+ timerArr[0] = time / 36000;
+ time -= timerArr[0] * 36000;
// minutes
- timeArr[1] = time / 6000;
- time -= timeArr[1] * 6000;
+ timerArr[1] = time / 6000;
+ time -= timerArr[1] * 6000;
// seconds
- timeArr[2] = time / 1000;
- time -= timeArr[2] * 1000;
+ timerArr[2] = time / 1000;
+ time -= timerArr[2] * 1000;
// 100 milliseconds
- timeArr[3] = time / 100;
- time -= timeArr[3] * 100;
+ timerArr[3] = time / 100;
+ time -= timerArr[3] * 100;
- // 10 miliseconds
- timeArr[4] = time / 10;
- time -= timeArr[4] * 10;
+ // 10 milliseconds
+ timerArr[4] = time / 10;
+ time -= timerArr[4] * 10;
- timeArr[5] = time;
+ // milliseconds
+ timerArr[5] = time;
- return (timeArr[0] << 0x14) | (timeArr[1] << 0x10) | (timeArr[2] << 0xC) | (timeArr[3] << 8) | (timeArr[4] << 4) |
- timeArr[5];
+ return (timerArr[0] << 0x14) | (timerArr[1] << 0x10) | (timerArr[2] << 0xC) | (timerArr[3] << 8) |
+ (timerArr[4] << 4) | timerArr[5];
}
void Interface_NewDay(GlobalContext* globalCtx, s32 day) {
@@ -4892,25 +4893,31 @@ void func_8011C808(GlobalContext* globalCtx) {
globalCtx->unk_1887F = 3;
}
-void func_8011C898(u64 arg0, s16* arg2) {
- u64 timer = arg0;
+void func_8011C898(u64 timer, s16* timerArr) {
+ u64 time = timer;
- arg2[0] = timer / 36000;
- timer -= arg2[0] * 36000;
+ // hours
+ timerArr[0] = time / 36000;
+ time -= timerArr[0] * 36000;
- arg2[1] = timer / 6000;
- timer -= arg2[1] * 6000;
+ // minutes
+ timerArr[1] = time / 6000;
+ time -= timerArr[1] * 6000;
- arg2[3] = timer / 1000;
- timer -= arg2[3] * 1000;
+ // seconds
+ timerArr[3] = time / 1000;
+ time -= timerArr[3] * 1000;
- arg2[4] = timer / 100;
- timer -= arg2[4] * 100;
+ // 100 milliseconds
+ timerArr[4] = time / 100;
+ time -= timerArr[4] * 100;
- arg2[6] = timer / 10;
- timer -= arg2[6] * 10;
+ // 10 milliseconds
+ timerArr[6] = time / 10;
+ time -= timerArr[6] * 10;
- arg2[7] = timer;
+ // milliseconds
+ timerArr[7] = time;
}
s32 D_801BFCE4[] = {
@@ -4940,8 +4947,73 @@ s16 D_801BFD0C[] = {
void Interface_DrawTimers(GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawTimers.s")
+#ifdef NON_MATCHING
+void Interface_UpdateTimers(GlobalContext* globalCtx) {
+ MessageContext* msgCtx = &globalCtx->msgCtx;
+ s16 i;
+ // u64 var0;
+ // u64 var1;
+ // u64 var2;
+ u64 var3;
+ u64 temp_ret;
+ // s32 pad[2];
+
+ if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) &&
+ (globalCtx->gameOverCtx.state == 0) &&
+ ((msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
+ ((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) &&
+ (globalCtx->sceneLoadFlag == 0) && (globalCtx->unk_18B4A == 0) && !Play_InCsMode(globalCtx)) {
+
+ if (D_801BF96C != 0) {
+ temp_ret = osGetTime();
+
+ for (i = 0; i < 6; i++) {
+ if (gSaveContext.unk_101A[i] == 1) {
+ gSaveContext.unk_10B0[i] += temp_ret - D_801BF8F0;
+ }
+ }
+
+ D_801BF96C = 0;
+ }
+
+ D_801BF970 = 99;
+
+ for (i = 0; i < 6; i++) {
+ if (gSaveContext.unk_101A[i] == 1) {
+ temp_ret = osGetTime();
+ temp_ret = temp_ret - gSaveContext.unk_10B0[i];
+ var3 = temp_ret - gSaveContext.unk_1020[i];
+ var3 = var3 / 1000;
+ var3 = var3 * 64;
+ var3 = var3 / 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;
+ } else {
+ gSaveContext.unk_1080[i] = gSaveContext.unk_1050[i] - var3;
+ }
+ } else {
+ gSaveContext.unk_1080[i] = 0;
+
+ if (gSaveContext.save.inventory.items[SLOT_BOTTLE_1 + i] == ITEM_HOT_SPRING_WATER) {
+ Inventory_UpdateItem(globalCtx, i + SLOT_BOTTLE_1, ITEM_SPRING_WATER);
+ Message_StartTextbox(globalCtx, 0xFA, NULL);
+ }
+ gSaveContext.unk_101A[i] = 0;
+ }
+ }
+ }
+ } else if (D_801BF96C == 0) {
+ D_801BF8F0 = osGetTime();
+ D_801BF96C = 1;
+ }
+}
+#else
void Interface_UpdateTimers(GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_UpdateTimers.s")
+#endif
void Interface_DrawMinigameIcons(GlobalContext* globalCtx) {
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;