summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-10-22 02:52:40 -0300
committerGitHub <noreply@github.com>2023-10-22 16:52:40 +1100
commitec86f10b0f933fd848036e149d1ef34f28571c37 (patch)
treede4bcf58005c8f0d349de61c403e97d5aeaa72f6 /src/code
parent425238fd5d0d6962e2c1c334c28a944593e91511 (diff)
`SCHEDULE_TIME` (#1438)
* SCHEDULE_CALC_TIME_ALT * add s32 cast to avoid f32 -> u16 direct cast * SCHEDULE_TIME * remove the alts * Update explanation about the script
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_kankyo.c28
-rw-r--r--src/code/z_schedule.c70
2 files changed, 70 insertions, 28 deletions
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 30ea04e16..6dda9090d 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -702,9 +702,35 @@ s32 Environment_IsSceneUpsideDown(PlayState* play) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s")
+void func_800F88C4(u16 weekEventFlag);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s")
+void func_800F8970(void) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_27_40) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(9, 31))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_27_40);
+ func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN);
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_27_80) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 3))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_27_80);
+ func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN);
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_01) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 35))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_01);
+ func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN);
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_02) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 53))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_02);
+ func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN);
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_04) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(11, 25))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_04);
+ func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN);
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s")
diff --git a/src/code/z_schedule.c b/src/code/z_schedule.c
index fdefb0f42..38bcb58c3 100644
--- a/src/code/z_schedule.c
+++ b/src/code/z_schedule.c
@@ -4,7 +4,7 @@
(temp) = (hour)*60.0f; \
(temp) += (minute); \
(dest) = (temp) * (0x10000 / 60 / 24.0f); \
- (dest) = SCHEDULE_CONVERT_TIME(dest);
+ (dest) = SCHEDULE_CONVERT_TIME(dest)
s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) {
ScheduleCmdCheckFlagS* cmd = (ScheduleCmdCheckFlagS*)*script;
@@ -239,34 +239,50 @@ s32 Schedule_BranchL(PlayState* play, u8** script, ScheduleOutput* output) {
return false;
}
-static s32 (*sScheduleCmdFuncs[])(PlayState*, u8**, ScheduleOutput*) = {
- Schedule_CheckFlagS, Schedule_CheckFlagL, Schedule_CheckTimeRangeS, Schedule_CheckTimeRangeL,
- Schedule_ReturnValueL, Schedule_ReturnNone, Schedule_ReturnEmpty, Schedule_Nop,
- Schedule_CheckMiscS, Schedule_ReturnValueS, Schedule_CheckNotInSceneS, Schedule_CheckNotInSceneL,
- Schedule_CheckNotInDayS, Schedule_CheckNotInDayL, Schedule_ReturnTime, Schedule_CheckBeforeTimeS,
- Schedule_CheckBeforeTimeL, Schedule_BranchS, Schedule_BranchL,
+typedef s32 (*ScheduleCmdFunc)(PlayState*, u8**, ScheduleOutput*);
+
+static ScheduleCmdFunc sScheduleCmdFuncs[] = {
+ Schedule_CheckFlagS, // SCHEDULE_CMD_ID_CHECK_FLAG_S
+ Schedule_CheckFlagL, // SCHEDULE_CMD_ID_CHECK_FLAG_L
+ Schedule_CheckTimeRangeS, // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S
+ Schedule_CheckTimeRangeL, // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_L
+ Schedule_ReturnValueL, // SCHEDULE_CMD_ID_RET_VAL_L
+ Schedule_ReturnNone, // SCHEDULE_CMD_ID_RET_NONE
+ Schedule_ReturnEmpty, // SCHEDULE_CMD_ID_RET_EMPTY
+ Schedule_Nop, // SCHEDULE_CMD_ID_NOP
+ Schedule_CheckMiscS, // SCHEDULE_CMD_ID_CHECK_MISC_S
+ Schedule_ReturnValueS, // SCHEDULE_CMD_ID_RET_VAL_S
+ Schedule_CheckNotInSceneS, // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_S
+ Schedule_CheckNotInSceneL, // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_L
+ Schedule_CheckNotInDayS, // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_S
+ Schedule_CheckNotInDayL, // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_L
+ Schedule_ReturnTime, // SCHEDULE_CMD_ID_RET_TIME
+ Schedule_CheckBeforeTimeS, // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S
+ Schedule_CheckBeforeTimeL, // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L
+ Schedule_BranchS, // SCHEDULE_CMD_ID_BRANCH_S
+ Schedule_BranchL, // SCHEDULE_CMD_ID_BRANCH_L
};
static u8 sScheduleCmdSizes[] = {
- sizeof(ScheduleCmdCheckFlagS),
- sizeof(ScheduleCmdCheckFlagL),
- sizeof(ScheduleCmdCheckTimeRangeS),
- sizeof(ScheduleCmdCheckTimeRangeL),
- sizeof(ScheduleCmdReturnValueL),
- sizeof(ScheduleCmdBase),
- sizeof(ScheduleCmdBase),
- sizeof(ScheduleCmdNop),
- sizeof(ScheduleCmdCheckMiscS),
- sizeof(ScheduleCmdReturnValueS),
- sizeof(ScheduleCmdCheckNotInSceneS),
- sizeof(ScheduleCmdCheckNotInSceneL),
- sizeof(ScheduleCmdCheckNotInDayS),
- sizeof(ScheduleCmdCheckNotInDayL),
- sizeof(ScheduleCmdReturnTime),
- sizeof(ScheduleCmdCheckBeforeTimeS),
- sizeof(ScheduleCmdCheckBeforeTimeL),
- sizeof(ScheduleCmdBranchS),
- sizeof(ScheduleCmdBranchL),
+ sizeof(ScheduleCmdCheckFlagS), // SCHEDULE_CMD_ID_CHECK_FLAG_S
+ sizeof(ScheduleCmdCheckFlagL), // SCHEDULE_CMD_ID_CHECK_FLAG_L
+ sizeof(ScheduleCmdCheckTimeRangeS), // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S
+ sizeof(ScheduleCmdCheckTimeRangeL), // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_L
+ sizeof(ScheduleCmdReturnValueL), // SCHEDULE_CMD_ID_RET_VAL_L
+ sizeof(ScheduleCmdBase), // SCHEDULE_CMD_ID_RET_NONE
+ sizeof(ScheduleCmdBase), // SCHEDULE_CMD_ID_RET_EMPTY
+ sizeof(ScheduleCmdNop), // SCHEDULE_CMD_ID_NOP
+ sizeof(ScheduleCmdCheckMiscS), // SCHEDULE_CMD_ID_CHECK_MISC_S
+ sizeof(ScheduleCmdReturnValueS), // SCHEDULE_CMD_ID_RET_VAL_S
+ sizeof(ScheduleCmdCheckNotInSceneS), // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_S
+ sizeof(ScheduleCmdCheckNotInSceneL), // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_L
+ sizeof(ScheduleCmdCheckNotInDayS), // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_S
+ sizeof(ScheduleCmdCheckNotInDayL), // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_L
+ sizeof(ScheduleCmdReturnTime), // SCHEDULE_CMD_ID_RET_TIME
+ sizeof(ScheduleCmdCheckBeforeTimeS), // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S
+ sizeof(ScheduleCmdCheckBeforeTimeL), // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L
+ sizeof(ScheduleCmdBranchS), // SCHEDULE_CMD_ID_BRANCH_S
+ sizeof(ScheduleCmdBranchL), // SCHEDULE_CMD_ID_BRANCH_L
};
s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output) {
@@ -275,7 +291,7 @@ s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output) {
do {
size = sScheduleCmdSizes[*script];
- stop = (*sScheduleCmdFuncs[*script])(play, &script, output);
+ stop = sScheduleCmdFuncs[*script](play, &script, output);
script += size;
} while (!stop);