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
This commit is contained in:
Anghelo Carvajal
2023-10-22 02:52:40 -03:00
committed by GitHub
parent 425238fd5d
commit ec86f10b0f
9 changed files with 124 additions and 40 deletions
+27 -1
View File
@@ -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")
+43 -27
View File
@@ -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);