mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-14 14:08:01 -04:00
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:
+27
-1
@@ -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
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user