diff --git a/.gitignore b/.gitignore index 8c5705f185..f0e828aab1 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ graphs/ tools/**/*dSYM/ tools/decomp-permuter/ tools/mips_to_c/ +*.schl.inc # Assets *.png diff --git a/Makefile b/Makefile index 38f7af1285..8f2cfbb0ef 100644 --- a/Makefile +++ b/Makefile @@ -125,6 +125,9 @@ ZAPD := tools/ZAPD/ZAPD.out FADO := tools/fado/fado.elf MAKEYAR := $(PYTHON) tools/buildtools/makeyar.py CHECKSUMMER := $(PYTHON) tools/buildtools/checksummer.py +SCHC := tools/buildtools/schc.py + +SCHC_FLAGS := OPTFLAGS := -O2 -g3 ASFLAGS := -march=vr4300 -32 -Iinclude @@ -189,6 +192,7 @@ TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG:.png=.inc.c),build/$f) \ C_FILES := $(foreach dir,$(SRC_DIRS) $(ASSET_BIN_DIRS_C_FILES),$(wildcard $(dir)/*.c)) S_FILES := $(shell grep -F "build/asm" spec | sed 's/.*build\/// ; s/\.o\".*/.s/') \ $(shell grep -F "build/data" spec | sed 's/.*build\/// ; s/\.o\".*/.s/') +SCHEDULE_FILES:= $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.schl)) BASEROM_FILES := $(shell grep -F "build/baserom" spec | sed 's/.*build\/// ; s/\.o\".*//') ARCHIVES_O := $(shell grep -F ".yar.o" spec | sed 's/.*include "// ; s/\.o\".*/.o/') O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \ @@ -198,6 +202,8 @@ O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \ OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' ) +SCHEDULE_INC_FILES := $(foreach f,$(SCHEDULE_FILES:.schl=.schl.inc),build/$f) + # Automatic dependency files # (Only asm_processor dependencies and reloc dependencies are handled for now) DEP_FILES := $(O_FILES:.o=.asmproc.d) $(OVL_RELOC_FILES:.o=.d) @@ -295,7 +301,10 @@ $(OVL_RELOC_FILES): | o_files asset_files: $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES): | asset_files -.PHONY: o_files asset_files +schedule_inc_files: $(SCHEDULE_INC_FILES) +$(O_FILES): | schedule_inc_files + +.PHONY: o_files asset_files schedule_inc_files #### Main commands #### @@ -428,6 +437,9 @@ build/assets/%.bin.inc.c: assets/%.bin build/assets/%.jpg.inc.c: assets/%.jpg $(ZAPD) bren -eh -i $< -o $@ +build/%.schl.inc: %.schl + $(SCHC) $(SCHC_FLAGS) -o $@ $< + -include $(DEP_FILES) # Print target for debugging diff --git a/docs/schedule_scripting_language.md b/docs/schedule_scripting_language.md new file mode 100644 index 0000000000..872eac06a0 --- /dev/null +++ b/docs/schedule_scripting_language.md @@ -0,0 +1,925 @@ +# Schedule scripting language + +The Schedule scripting language is a high level language that was made to help +reading and modifying the schedule scripts used by various actors. + +It should be noted that the language discussed on this document was invented +and made up by the community. There's no presence of higher level abstraction +on the game ROM, neither it was used by the original development team at +Nintendo. + +- [Schedule scripting language](#schedule-scripting-language) + - [Features of the schedule system](#features-of-the-schedule-system) + - [Short and long commands](#short-and-long-commands) + - [How a schedule script looks like](#how-a-schedule-script-looks-like) + - [Syntax](#syntax) + - [Compiling](#compiling) + - [Commands](#commands) + - [Generics and non-generics](#generics-and-non-generics) + - [Command arguments](#command-arguments) + - [Conditional checks](#conditional-checks) + - [`if_week_event_reg`](#if_week_event_reg) + - [`if_week_event_reg` arguments](#if_week_event_reg-arguments) + - [`if_week_event_reg` example](#if_week_event_reg-example) + - [`if_week_event_reg` non-generics](#if_week_event_reg-non-generics) + - [`if_time_range`](#if_time_range) + - [`if_time_range` arguments](#if_time_range-arguments) + - [`if_time_range` example](#if_time_range-example) + - [`if_time_range` non-generics](#if_time_range-non-generics) + - [`if_misc`](#if_misc) + - [`if_misc` arguments](#if_misc-arguments) + - [`if_misc` example](#if_misc-example) + - [`if_misc` non-generics](#if_misc-non-generics) + - [`if_scene`](#if_scene) + - [`if_scene` arguments](#if_scene-arguments) + - [`if_scene` example](#if_scene-example) + - [`if_scene` non-generics](#if_scene-non-generics) + - [`if_day`](#if_day) + - [`if_day` arguments](#if_day-arguments) + - [`if_day` example](#if_day-example) + - [`if_day` non-generics](#if_day-non-generics) + - [`if_before_time`](#if_before_time) + - [`if_before_time` arguments](#if_before_time-arguments) + - [`if_before_time` example](#if_before_time-example) + - [`if_before_time` non-generics](#if_before_time-non-generics) + - [`if_before_time` notes](#if_before_time-notes) + - [`if_since_time`](#if_since_time) + - [`if_since_time` arguments](#if_since_time-arguments) + - [`if_since_time` example](#if_since_time-example) + - [`if_since_time` non-generics](#if_since_time-non-generics) + - [`if_since_time` notes](#if_since_time-notes) + - [Unconditional branches](#unconditional-branches) + - [`branch`](#branch) + - [`branch` arguments](#branch-arguments) + - [`branch` example](#branch-example) + - [`branch` non-generics](#branch-non-generics) + - [`else`](#else) + - [`else` example](#else-example) + - [Return commands](#return-commands) + - [`return_s`](#return_s) + - [`return_s` arguments](#return_s-arguments) + - [`return_s` example](#return_s-example) + - [`return_l`](#return_l) + - [`return_l` arguments](#return_l-arguments) + - [`return_l` example](#return_l-example) + - [`return_none`](#return_none) + - [`return_none` arguments](#return_none-arguments) + - [`return_none` example](#return_none-example) + - [`return_empty`](#return_empty) + - [`return_empty` arguments](#return_empty-arguments) + - [`return_empty` example](#return_empty-example) + - [`return_time`](#return_time) + - [`return_time` arguments](#return_time-arguments) + - [`return_time` example](#return_time-example) + - [Other commands](#other-commands) + - [`nop`](#nop) + - [`nop` arguments](#nop-arguments) + - [`nop` example](#nop-example) + - [Operators](#operators) + - [`not`](#not) + - [`not` example](#not-example) + - [Labels](#labels) + - [Formal grammar](#formal-grammar) + - [Tokens](#tokens) + +## Features of the schedule system + +The Schedule system is a very simple scripting language, it is composed of a +series of commands that can check the state of the game and return a value +depending on said state. This system can't declare variables, hold its own +state or modify the game's state. + +A schedule script can check the state of the following: + +- Current in-game [day](#if_day). +- If a [WeekEventReg flag](#if_week_event_reg) is set or not. +- Current time is in a specified [time range](#if_time_range). +- Current time is [before](#if_before_time)/[after](#if_since_time) a specified + time. +- Some other [miscellaneous](#if_misc) checks (see the `ScheduleCheckMisc` + enum). + +All of those checks act as conditional branches into some other command. The +schedule system also supports unconditional branches. + +The schedule script is run until a return command is executed. There are various +return commands that allow different things: + +- [Return none](#return_none): The schedule finished without returning a value. +- [Return empty](#return_empty): The schedule finished without changing the + previous value. +- [Return s](#return_s): The script returns a value that's 1 byte long. +- [Return l](#return_l): The script returns a value that's 2 bytes long (Note + this is bugged and will be truncated to 1 byte). +- [Return time](#return_time): Returns a time range and a 1 byte value. + +Running an unknown command or branching to the middle of a command is undefined +behaviour. + +A low level schedule script can be compared to a multi byte assembly language, +on which each command occupies 1 byte plus a variable number of arguments. + +### Short and long commands + +Due to the commands themselves using a variable amount of bytes it is possible +to do some small optimizations, like if a branch distance (which is the amount +of bytes the interpreter should skip if a check evaluates to true) can fit on a +signed byte then a **short** (noted with the `_S` suffix) command is used, +otherwise a **long** version (noted with the `_L` suffix) of the command is used +instead. + +A long command uses two bytes to store the branch distance, meaning the command +itself will be one byte longer. + +There are no commands that use more than 2 bytes to store the branch distance. + +The short and long distinction also exists for the returned value, in case the +user wants to return a value that wouldn't fit on a single unsigned byte and +requires an unsigned short (two bytes) instead. Please note that the vanilla +built-in system interpreter has a bug on which the upper byte of a long returned +value will be discarded, so please ensure your returned values always fit on the +0-255 range. + +## How a schedule script looks like + +An extracted schedule script is just an array of raw data. A macroified version +looks like this: + +```c +static ScheduleScript D_80BD3DB0[] = { + /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x21 - 0x04), + /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x0B - 0x08), + /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), + /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), + /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19), + /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), + /* 0x1C */ SCHEDULE_CMD_RET_NONE(), + /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), + /* 0x20 */ SCHEDULE_CMD_RET_NONE(), + /* 0x21 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x37 - 0x25), + /* 0x25 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x36 - 0x29), + /* 0x29 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x30 - 0x2F), + /* 0x2F */ SCHEDULE_CMD_RET_NONE(), + /* 0x30 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 2), + /* 0x36 */ SCHEDULE_CMD_RET_NONE(), + /* 0x37 */ SCHEDULE_CMD_RET_NONE(), +}; +``` + +Having these scripts as arrays like this has two major flaws: + +- The control flow is not clear at a first glance (this is especially problematic + for larger scripts). +- The branch distances are hardcoded into each command, making the script itself + hard to modify. + +As a solution, the high level Schedule script language uses a C-like syntax to +better represent the control flow. The above script can be written as the +following: + +```c +D_80BD3DB0 { + if_scene (SCENE_YADOYA) { + if_day (3) { + return_l (1) + } else if_day (2) { + if_time_range (21, 0, 23, 0) { + return_l (3) + } else if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + return_none + } else { + return_l (1) + } + } else { + return_none + } + } else if_scene (SCENE_OMOYA) { + if_day (3) { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} +``` + +## Syntax + +The syntax is simple, it consists on the name of the schedule script followed +by a succession of commands. Some commands require arguments (by using +parentheses) and some (conditional checks) can have bodies with subcommands and +an optional `else` with its corresponding body with subcommands. + +Like in C, both whitespace and newlines are not part of the language and they +get ignored during compilation. At the same time, this language accepts both C +and C++ styles of comments, known as block comments (`/**/`) and line comments +(`//`). + +Each top-level schedule script consists on its name, followed by a list of +commands delimited by braces (`{` and `}`). A schedule script must always have +at least one command on its body. + +A command's body is delimited by braces (`{` and `}`). A body must follow either +a [conditional check](#conditional-checks) command or an `else`, meaning +top-level bodies are not allowed. At the same time a conditional check must be +followed by a body. An `else` must be followed by either a body or another +conditional check command. + +Even if this language's syntax is inspired by C, there are a few key differences: + +- Commands are not separated by semicolons (`;`). Instead whitespace is used as + separation. +- Instead of having a single `if` conditional of which its parameters should + evaluate to non-zero, this language uses + [conditional checks](#conditional-checks). These are commands that receive + parameters and have a body with parameters that would be executed if the + command itself evaluated to true. This commands may be followed by an `else`, + which has its own body. +- There's no concept of functions, variables, loops, scopes, etc. + - Each schedule script could be seen as a function itself, but said script + can't "call" another scripts. + +## Compiling + +Compiling a high level schedule script should produce an array for each script +in the file. Each array should contain a series of macros that can be +`#include`d by a C preprocessor, like in the following example: + +File: `build/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl.inc` + +```c +static ScheduleScript D_80BD3DB0[] = { + /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x21 - 0x04), + /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x0B - 0x08), + /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), + /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), + /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19), + /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), + /* 0x1C */ SCHEDULE_CMD_RET_NONE(), + /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), + /* 0x20 */ SCHEDULE_CMD_RET_NONE(), + /* 0x21 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x37 - 0x25), + /* 0x25 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x36 - 0x29), + /* 0x29 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x30 - 0x2F), + /* 0x2F */ SCHEDULE_CMD_RET_NONE(), + /* 0x30 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 2), + /* 0x36 */ SCHEDULE_CMD_RET_NONE(), + /* 0x37 */ SCHEDULE_CMD_RET_NONE(), +}; +``` + +In the actor's C code: + +```c +#include "build/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl.inc" +``` + +## Commands + +Commands are the fundamental (and almost only) building block of this language. +A schedule script file must always contain at least one script, and a schedule +script must always have at least one command. It's undefined behaviour if the +script's control flow doesn't always lead to a return command. + +To see how the command arguments work, please see the +[corresponding section](#command-arguments). + +Commands can be categorized in 4 major types: +[Conditional checks](#conditional-checks), +[unconditional branches](#unconditional-branches), +[return commands](#return-commands) and +[other commands](#other-commands). + +### Generics and non-generics + +Schedule scripts use both [short and long commands](#short-and-long-commands) +for most of the [conditional checks](#conditional-checks) and +[unconditional branches](#unconditional-branches) commands, making it optimal +space-wise, but terrible to worry about when actually writing a schedule script +from the user's point of view. + +Due to this, this high level language allows for generic versions of those +commands (a.k.a. suffix-less versions) that allow not having to worry about how +many commands the body of a check has (and the byte length of them). + +The rest of this section will mostly refer to the generic versions of the +commands. The non-generic versions of each command are available to be used too, +but their use is not recommended. + +### Command arguments + +Some commands require arguments. Arguments are used by checking commands to +check something specific of the state of the game (what's the current day? what's +the current scene? etc.) and take a decision based on it (branch to another +command). + +Arguments are enclosed in parentheses (`(` and `)`) and passed verbatim to the +generated output, allowing a compiler for this language to not need to recognize +any identifier used in arguments, allowing to use any custom identifier +(specially useful for schedule result enums). Note this behaviour may +change in a future version of the language. + +### Conditional checks + +Conditional checks commands are commands that take a decision based on +the state of the game, allowing it to decide which set of subcommands to +execute. + +All conditional checks require an argument and a body of subcommands. A +conditional check can optionally be followed by an `else`. + +If the condition of a command is not satisfied and that command has +an `else`, then control jumps to the body of that `else`. If +there's no `else` and the condition isn't satisfied then control just +falls through into the next command. + +#### `if_week_event_reg` + +Checks if the passed WeekEventReg flag is set, and execute the body of the +command if it is set. + +##### `if_week_event_reg` arguments + +- Argument 0: A WeekEventReg flag. `WEEKEVENTREG_` macros are preferred. + +##### `if_week_event_reg` example + +```c +if_week_event_reg (WEEKEVENTREG_61_02) { + return_s (31) +} +return_s (30) +``` + +##### `if_week_event_reg` non-generics + +`if_week_event_reg_s` and `if_week_event_reg_l` + +#### `if_time_range` + +Checks if the current time is between the passed time range. + +##### `if_time_range` arguments + +- Argument 0: Hour component of the start time +- Argument 1: Minute component of the start time +- Argument 2: Hour component of the end time +- Argument 3: Minute component of the end time + +##### `if_time_range` example + +```c +// Checks if the current time is between 18:00 ~ 6:00 +if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) +} else { + return_none +} +``` + +##### `if_time_range` non-generics + +`if_time_range_s` and `if_time_range_l` + +#### `if_misc` + +Checks if the passed miscellaneous argument is true. + +##### `if_misc` arguments + +- Argument 0: A value of the `ScheduleCheckMisc` enum. + +##### `if_misc` example + +```c +if_misc (SCHEDULE_CHECK_MISC_MASK_ROMANI) { + return_s (33) +} else { + return_s (34) +} +``` + +##### `if_misc` non-generics + +`if_misc_s`. Note there's no long version of this command. It is advised to +minimize the amount of commands used on a `ìf_misc` body and `else`'s body. + +#### `if_scene` + +Checks if the current scene matches the one passed as argument. + +##### `if_scene` arguments + +- Argument 0: A value of the `SceneId` enum. + +##### `if_scene` example + +```c +if_scene (SCENE_SECOM) { + return_s (7) +} +``` + +##### `if_scene` non-generics + +`if_scene_s` and `if_scene_l` + +#### `if_day` + +Checks if the current day matches the passed argument. + +##### `if_day` arguments + +- Argument 0: The day to check. For example, passing `1` will check for day 1. + +##### `if_day` example + +```c +if_day (3) { + return_l (1) +} +``` + +##### `if_day` non-generics + +`if_day_s` and `if_day_l` + +#### `if_before_time` + +Checks if the current time is before the time passed as argument. + +##### `if_before_time` arguments + +- Argument 0: The hour component of the time. +- Argument 1: The minute component of the time. + +##### `if_before_time` example + +```c +if_before_time (8, 0) { + return_s (19) +} else { + return_none +} +``` + +##### `if_before_time` non-generics + +`if_before_time_s` and `if_before_time_l` + +##### `if_before_time` notes + +This command performs the opposite check of `if_since_time`. + +#### `if_since_time` + +Checks if the current time is after or equal to the time passed as argument. + +##### `if_since_time` arguments + +- Argument 0: The hour component of the time. +- Argument 1: The minute component of the time. + +##### `if_since_time` example + +```c +if_since_time (13, 0) { + return_s (9) +} else { + return_none +} +``` + +##### `if_since_time` non-generics + +`if_since_time_s` and `if_since_time_l` + +##### `if_since_time` notes + +This command performs the contrary check to `if_before_time`. + +### Unconditional branches + +Unconditional branches are basically the equivalent of C's `goto`s. They require +a [label](#labels) to know where to branch to. + +#### `branch` + +Unconditionally transfer control to the passed label. + +##### `branch` arguments + +- Argument 0: The label to branch to. + +##### `branch` example + +```c +if_day (3) { + if_since_time (10, 0) { + label_0x8: + return_none + } else { + branch (label_0xF) + } +} else { + if_time_range (10, 0, 20, 0) { + branch (label_0x8) + } else { + label_0xF: + return_s (21) + } +} +``` + +##### `branch` non-generics + +`branch_s` and `branch_l` + +### `else` + +An `else` signals which commands should be executed in case a +[conditional check](#conditional-checks) does not evaluates to true. The `else` +signals this by either having those instructions inside its own body (marked by +braces) or by not having those braces but being immediately followed by another +conditional check command, similar to C's `else if`. + +#### `else` example + +The following two scripts are equivalent: + +```c +if_time_range (9, 50, 18, 1) { + return_time (9, 50, 18, 1, 1) +} else { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) + } else { + return_l (0) + } +} +``` + +```c +if_time_range (9, 50, 18, 1) { + return_time (9, 50, 18, 1, 1) +} else if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) +} else { + return_l (0) +} +``` + +### Return commands + +A return command signals the end of the script and halts its execution. + +A return command allows to optionally return a value and/or a time range to the +calling actor so it can change behavior accordingly. + +A schedule script with a control flow that leads to no return command is +undefined behaviour. + +#### `return_s` + +Allows to return a short (one byte) value. + +##### `return_s` arguments + +- Argument 0: The value to return. It must fit in a `u8`. + +##### `return_s` example + +```c +if_time_range (8, 0, 12, 0) { + return_s (EN_NB_SCH_1) +} +``` + +#### `return_l` + +Allows to return a long (two bytes) value. + +Please note that the vanilla interpreter for the schedule scripts has a bug on +which the upper byte of a long returned value will be discarded (will be +truncated to a `u8`), so please ensure your returned values always fit in the +0-255 range. + +##### `return_l` arguments + +- Argument 0: The value to return. It must fit in a `u16`. + +##### `return_l` example + +```c +if_scene (SCENE_TOWN) { + return_l (1) +} else { + return_none +} +``` + +#### `return_none` + +The schedule finished without returning a value. The internal `hasResult` +member of the `ScheduleOutput` struct will be set to `false`. + +##### `return_none` arguments + +No arguments. + +##### `return_none` example + +```c +if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + return_none +} +``` + +#### `return_empty` + +The schedule finished without changing the previous value. The internal `hasResult` +member of the `ScheduleOutput` struct will be set to `true`. + +##### `return_empty` arguments + +No arguments. + +##### `return_empty` example + +```c +if_time_range (15, 50, 16, 15) { + return_empty +} +``` + +#### `return_time` + +Returns a time range and a 1 byte value. + +##### `return_time` arguments + +- Argument 0: Hour component of the start time +- Argument 1: Minute component of the start time +- Argument 2: Hour component of the end time +- Argument 3: Minute component of the end time +- Argument 4: A value to return. It must fit in a `u8` + +##### `return_time` example + +```c +if_time_range (0, 0, 6, 0) { + return_time (0, 0, 6, 0, TOILET_HAND_SCH_AVAILABLE) +} else { + return_none +} +``` + +### Other commands + +#### `nop` + +No operation. Doesn't perform an action or a check. + +##### `nop` arguments + +- Argument 0: Unknown meaning. +- Argument 1: Unknown meaning. +- Argument 2: Unknown meaning. + +##### `nop` example + +```c +nop (0, 1, 2) +``` + +### Operators + +Operators can be applied to some commands. + +Currently only one operator is allowed on the language, the [`not`](#not) operator. + +#### `not` + +A `not` is a special kind of command that doesn't get compiled into the actual +low level script, instead it changes the meaning of the check that's right next +to it by inverting the logic of the check. In other words, the subcommands of a +conditional check command will be executed if the check of said command +evaluates to false instead of true. + +A `not` must always be followed by a [conditional check command](#conditional-checks). + +##### `not` example + +The following two scripts are equivalent: + +```c +if_week_event_reg (WEEKEVENTREG_51_08) { + if_since_time (22, 0) { + return_s (12) + } else { + return_none + } +} else { + return_s (12) +} +``` + +```c +not if_week_event_reg (WEEKEVENTREG_51_08) { + return_s (12) +} else { + if_since_time (22, 0) { + return_s (12) + } else { + return_none + } +} +``` + +### Labels + +A label is a special kind of command that doesn't get compiled into the actual +low level script, instead it is used as a marker to be used for +[`branch`es](#branch). + +A label is defined as an alphanumeric identifier (a to z, digits and +underscores) followed by a colon (`:`). The colon is not considered part of the +label's name. + +A label must always be followed by another command that isn't another label. + +## Formal grammar + +This section presents the formal grammar for the Schedule scripting language. + +```yac + : + ; + + : + | + ; + + : IDENTIFIER '{' '}' + ; + + : + | + ; + + : + | IDENTIFIER ':' + ; + + : + | + | + | + ; + + : + | + ; + + : + ; + + : RETURN_S + | RETURN_L + | RETURN_NONE + | RETURN_EMPTY + | RETURN_TIME + ; + + : NOP + ; + + : NOT + | + ; + + : + | + | + | + | + | + | + ; + + : ELSE + | ELSE + ; + + : IF_WEEK_EVENT_REG + | IF_WEEK_EVENT_REG_S + | IF_WEEK_EVENT_REG_L + ; + + : IF_TIME_RANGE + | IF_TIME_RANGE_S + | IF_TIME_RANGE_L + ; + + : IF_MISC + | IF_MISC_S + ; + + : IF_SCENE + | IF_SCENE_S + | IF_SCENE_L + ; + + : IF_DAY + | IF_DAY_S + | IF_DAY_L + ; + + : IF_BEFORE_TIME + | IF_BEFORE_TIME_S + | IF_BEFORE_TIME_L + ; + + : IF_SINCE_TIME + | IF_SINCE_TIME_S + | IF_SINCE_TIME_L + ; + + : BRANCH + | BRANCH_S + | BRANCH_L + ; + + : '{' '}' + | '{' '}' + ; + + : '(' ')' + | '(' ')' + ; + + : + | ',' + ; + + : NO_PARENTHESIS + | + ; +``` + +### Tokens + +The presented grammar expects a few tokens. + +First column is the corresponding token and right is a regular expression to +match said token. + +```regex +IDENTIFIER [a-zA-Z0-9_]+ + +IF_WEEK_EVENT_REG if_week_event_reg +IF_WEEK_EVENT_REG_S if_week_event_reg_s +IF_WEEK_EVENT_REG_L if_week_event_reg_l +IF_TIME_RANGE if_time_range +IF_TIME_RANGE_S if_time_range_s +IF_TIME_RANGE_L if_time_range_l +IF_MISC if_misc +IF_MISC_S if_misc_s +IF_SCENE if_scene +IF_SCENE_S if_scene_s +IF_SCENE_L if_scene_l +IF_DAY if_day +IF_DAY_S if_day_s +IF_DAY_L if_day_l +IF_BEFORE_TIME if_before_time +IF_BEFORE_TIME_S if_before_time_s +IF_BEFORE_TIME_L if_before_time_l +IF_SINCE_TIME if_since_time +IF_SINCE_TIME_S if_since_time_s +IF_SINCE_TIME_L if_since_time_l + +BRANCH branch +BRANCH_S branch_s +BRANCH_L branch_l + +RETURN_S return_s +RETURN_L return_l +RETURN_NONE return_none +RETURN_EMPTY return_empty +RETURN_TIME return_time + +NOP nop + +ELSE else +NOT not + +NO_PARENTHESIS [^\(\)]+ +``` diff --git a/format.py b/format.py index a9983cf5df..fa3bd1f928 100755 --- a/format.py +++ b/format.py @@ -181,6 +181,7 @@ def main(): else: files = glob.glob("src/**/*.c", recursive=True) extra_files = glob.glob("assets/**/*.xml", recursive=True) + extra_files += glob.glob("src/**/*.schl", recursive=True) format_files(files, extra_files, nb_jobs) diff --git a/include/functions.h b/include/functions.h index 854552539b..9310b8c83b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -518,8 +518,6 @@ void Inventory_IncrementSkullTokenCount(s16 sceneIndex); s16 Inventory_GetSkullTokenCount(s16 sceneIndex); void Inventory_SaveLotteryCodeGuess(PlayState* play); -s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output); - uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); diff --git a/include/variables.h b/include/variables.h index ff10765bc9..3b12d539e8 100644 --- a/include/variables.h +++ b/include/variables.h @@ -37,6 +37,7 @@ extern ObjectId gObjectTableSize; extern RomFile gObjectTable[OBJECT_ID_MAX]; extern SceneTableEntry gSceneTable[SCENE_MAX]; + extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2]; extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; diff --git a/include/z64schedule.h b/include/z64schedule.h index c70809adb3..1fabc7c5d0 100644 --- a/include/z64schedule.h +++ b/include/z64schedule.h @@ -27,6 +27,8 @@ * - HandleSchedule: Holds the actual logic of how to actually follow the schedule based on the processed output, called by FollowSchedule */ +struct PlayState; + // Macro to convert the time format used in the save struct into the format used in Schedule #define SCHEDULE_CONVERT_TIME(time) ((s32)((time) - 0x10000 / 360 * 90)) @@ -256,4 +258,8 @@ typedef struct { #define SCHEDULE_CMD_BRANCH_L(offset) \ SCHEDULE_CMD_ID_BRANCH_L, SCHEDULE_PACK_S16(offset) +typedef u8 ScheduleScript; + +s32 Schedule_RunScript(struct PlayState* play, ScheduleScript* script, ScheduleOutput* output); + #endif diff --git a/src/code/z_schedule.c b/src/code/z_schedule.c index 38bcb58c32..716111ff1f 100644 --- a/src/code/z_schedule.c +++ b/src/code/z_schedule.c @@ -285,7 +285,7 @@ static u8 sScheduleCmdSizes[] = { sizeof(ScheduleCmdBranchL), // SCHEDULE_CMD_ID_BRANCH_L }; -s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output) { +s32 Schedule_RunScript(PlayState* play, ScheduleScript* script, ScheduleOutput* output) { u8 size; s32 stop; diff --git a/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl b/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl new file mode 100644 index 0000000000..61b766e0b1 --- /dev/null +++ b/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl @@ -0,0 +1,29 @@ +D_80BD3DB0 { + if_scene (SCENE_YADOYA) { + if_day (3) { + return_l (1) + } else if_day (2) { + if_time_range (21, 0, 23, 0) { + return_l (3) + } else if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + return_none + } else { + return_l (1) + } + } else { + return_none + } + } else if_scene (SCENE_OMOYA) { + if_day (3) { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index 96882ab526..26f4417d5d 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -18,25 +18,7 @@ void EnAh_Draw(Actor* thisx, PlayState* play); void func_80BD3768(EnAh* this, PlayState* play); -static u8 D_80BD3DB0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x21 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x0B - 0x08), - /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), - /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), - /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19), - /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), - /* 0x1C */ SCHEDULE_CMD_RET_NONE(), - /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), - /* 0x20 */ SCHEDULE_CMD_RET_NONE(), - /* 0x21 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x37 - 0x25), - /* 0x25 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x36 - 0x29), - /* 0x29 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x30 - 0x2F), - /* 0x2F */ SCHEDULE_CMD_RET_NONE(), - /* 0x30 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 2), - /* 0x36 */ SCHEDULE_CMD_RET_NONE(), - /* 0x37 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Ah/scheduleScripts.schl.inc" s32 D_80BD3DE8[] = { 0x0E28FF0C, 0x10000000 }; diff --git a/src/overlays/actors/ovl_En_Al/scheduleScripts.schl b/src/overlays/actors/ovl_En_Al/scheduleScripts.schl new file mode 100644 index 0000000000..4b0349f868 --- /dev/null +++ b/src/overlays/actors/ovl_En_Al/scheduleScripts.schl @@ -0,0 +1,25 @@ +D_80BDFC70 { + if_day (3) { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) + } else { + return_none + } + } else { + if_time_range (8, 0, 10, 0) { + return_l (1) + } else if_time_range (10, 0, 10, 55) { + return_time (10, 0, 10, 55, 1) + } else if_time_range (10, 55, 11, 45) { + if_day (2) { + return_time (10, 55, 11, 45, 1) + } else { + return_time (10, 55, 11, 45, 3) + } + } else if_time_range (11, 45, 20, 0) { + return_time (11, 45, 20, 0, 1) + } else { + return_none + } + } +} diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 87ddc54d8f..75cdfc300d 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -17,23 +17,7 @@ void EnAl_Draw(Actor* thisx, PlayState* play); void func_80BDF6C4(EnAl* this, PlayState* play); -static u8 D_80BDFC70[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x11 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x0B - 0x0A), - /* 0x0A */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 2), - /* 0x11 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 10, 0, 0x46 - 0x17), - /* 0x17 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 10, 55, 0x40 - 0x1D), - /* 0x1D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 55, 11, 45, 0x30 - 0x23), - /* 0x23 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 45, 20, 0, 0x2A - 0x29), - /* 0x29 */ SCHEDULE_CMD_RET_NONE(), - /* 0x2A */ SCHEDULE_CMD_RET_TIME(11, 45, 20, 0, 1), - /* 0x30 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x3A - 0x34), - /* 0x34 */ SCHEDULE_CMD_RET_TIME(10, 55, 11, 45, 1), - /* 0x3A */ SCHEDULE_CMD_RET_TIME(10, 55, 11, 45, 3), - /* 0x40 */ SCHEDULE_CMD_RET_TIME(10, 0, 10, 55, 1), - /* 0x46 */ SCHEDULE_CMD_RET_VAL_L(1), -}; +#include "build/src/overlays/actors/ovl_En_Al/scheduleScripts.schl.inc" s32 D_80BDFCBC[] = { 0x09000017, 0x0E27A50C, 0x09000018, 0x0E27A60C, 0x09000017, 0x0E27A70C, 0x09000018, 0x0E27A80C, diff --git a/src/overlays/actors/ovl_En_An/scheduleScripts.schl b/src/overlays/actors/ovl_En_An/scheduleScripts.schl new file mode 100644 index 0000000000..d20e528f76 --- /dev/null +++ b/src/overlays/actors/ovl_En_An/scheduleScripts.schl @@ -0,0 +1,233 @@ +sScheduleScript { + if_day (1) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 10, 55) { + return_time (6, 0, 10, 55, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (10, 55, 11, 10) { + return_time (10, 55, 11, 10, ANJU_SCH_WALKING_40) + } else if_time_range (11, 10, 11, 30) { + return_time (11, 10, 11, 30, ANJU_SCH_COOKING) + } else if_time_range (11, 30, 11, 50) { + return_time (11, 30, 11, 50, ANJU_SCH_WALKING_42) + } else if_time_range (11, 50, 11, 55) { + return_time (11, 50, 11, 55, ANJU_SCH_DOOR_26) + } else if_time_range (11, 55, 12, 0) { + return_time (11, 55, 12, 0, ANJU_SCH_WALKING_43) + } else if_time_range (12, 0, 12, 15) { + return_time (12, 0, 12, 15, ANJU_SCH_GIVE_LUNCH_TO_GRANNY) + } else if_time_range (12, 15, 12, 20) { + return_time (12, 15, 12, 20, ANJU_SCH_WALKING_44) + } else if_time_range (12, 20, 12, 25) { + return_time (12, 20, 12, 25, ANJU_SCH_DOOR_27) + } else if_time_range (12, 25, 12, 55) { + return_time (12, 25, 12, 55, ANJU_SCH_WALKING_45) + } else if_time_range (12, 55, 13, 0) { + return_time (12, 55, 13, 0, ANJU_SCH_DOOR_28) + } else if_time_range (13, 15, 13, 20) { + return_time (13, 15, 13, 20, ANJU_SCH_DOOR_29) + } else if_time_range (13, 20, 13, 50) { + return_time (13, 20, 13, 50, ANJU_SCH_WALKING_46) + } else if_time_range (13, 50, 14, 8) { + return_time (13, 50, 14, 8, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (14, 8, 14, 18) { + return_time (14, 8, 14, 18, ANJU_SCH_RECEIVE_LETTER_FROM_POSTMAN) + } else if_time_range (14, 18, 16, 10) { + return_time (14, 18, 16, 10, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (16, 10, 16, 30) { + return_time (16, 10, 16, 30, ANJU_SCH_ATTEND_GORON) + } else if_time_range (16, 30, 19, 50) { + return_time (16, 30, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (19, 50, 20, 20) { + return_time (19, 50, 20, 20, ANJU_SCH_WALKING_47) + } else if_time_range (20, 20, 20, 30) { + return_time (20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME) + } else if_time_range (20, 30, 21, 5) { + return_time (20, 30, 21, 5, ANJU_SCH_WALKING_48) + } else if_time_range (21, 5, 21, 10) { + return_time (21, 5, 21, 10, ANJU_SCH_DOOR_30) + } else if_week_event_reg (WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING) { + if_time_range (23, 10, 23, 15) { + return_time (23, 10, 23, 15, ANJU_SCH_DOOR_31) + } else if_time_range (23, 15, 0, 0) { + return_time (23, 15, 0, 0, ANJU_SCH_WALKING_49) + } else if_time_range (0, 0, 6, 0) { + if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + return_none + } else { + return_time (0, 0, 6, 0, ANJU_SCH_MIDNIGHT_MEETING) + } + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } + } else if_day (2) { + if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 10, 55) { + return_time (6, 0, 10, 55, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (10, 55, 11, 10) { + return_time (10, 55, 11, 10, ANJU_SCH_WALKING_40) + } else if_time_range (11, 10, 11, 30) { + return_time (11, 10, 11, 30, ANJU_SCH_COOKING) + } else if_time_range (11, 30, 11, 50) { + return_time (11, 30, 11, 50, ANJU_SCH_WALKING_42) + } else if_time_range (11, 50, 11, 55) { + return_time (11, 50, 11, 55, ANJU_SCH_DOOR_26) + } else if_time_range (11, 55, 12, 0) { + return_time (11, 55, 12, 0, ANJU_SCH_WALKING_43) + } else if_time_range (12, 0, 12, 15) { + return_time (12, 0, 12, 15, ANJU_SCH_GIVE_LUNCH_TO_GRANNY) + } else if_time_range (12, 15, 12, 20) { + return_time (12, 15, 12, 20, ANJU_SCH_WALKING_44) + } else if_time_range (12, 20, 12, 25) { + return_time (12, 20, 12, 25, ANJU_SCH_DOOR_27) + } else if_time_range (12, 25, 12, 55) { + return_time (12, 25, 12, 55, ANJU_SCH_WALKING_45) + } else if_time_range (12, 55, 13, 0) { + return_time (12, 55, 13, 0, ANJU_SCH_DOOR_28) + } else if_time_range (13, 15, 13, 20) { + return_time (13, 15, 13, 20, ANJU_SCH_DOOR_29) + } else if_time_range (13, 20, 13, 50) { + return_time (13, 20, 13, 50, ANJU_SCH_WALKING_46) + } else if_time_range (13, 50, 19, 50) { + return_time (13, 50, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (19, 50, 20, 20) { + return_time (19, 50, 20, 20, ANJU_SCH_WALKING_47) + } else if_time_range (20, 20, 20, 30) { + return_time (20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME) + } else if_time_range (20, 30, 21, 5) { + return_time (20, 30, 21, 5, ANJU_SCH_WALKING_48) + } else if_time_range (21, 5, 21, 10) { + return_time (21, 5, 21, 10, ANJU_SCH_DOOR_30) + } else if_time_range (21, 30, 23, 0) { + return_time (21, 30, 23, 0, ANJU_SCH_TALKING_WITH_MOM) + } else { + return_none + } + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (11, 3, 11, 9) { + return_time (11, 3, 11, 9, ANJU_SCH_DOOR_32) + } else if_time_range (11, 9, 11, 29) { + return_time (11, 9, 11, 29, ANJU_SCH_WALKING_50) + } else if_time_range (11, 29, 11, 39) { + return_time (11, 29, 11, 39, ANJU_SCH_DOOR_33) + } else if_time_range (17, 24, 17, 30) { + return_time (17, 24, 17, 30, ANJU_SCH_DOOR_34) + } else if_time_range (17, 30, 17, 55) { + return_time (17, 30, 17, 55, ANJU_SCH_WALKING_51) + } else if_time_range (17, 55, 18, 0) { + return_time (17, 55, 18, 0, ANJU_SCH_DOOR_35) + } else if_time_range (18, 0, 19, 50) { + return_time (18, 0, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE) + } else if_time_range (19, 50, 20, 20) { + return_time (19, 50, 20, 20, ANJU_SCH_WALKING_47) + } else if_time_range (20, 20, 20, 30) { + return_time (20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME) + } else if_time_range (20, 30, 21, 0) { + return_time (20, 30, 21, 0, ANJU_SCH_WALKING_48) + } else if_time_range (21, 0, 21, 5) { + return_time (21, 0, 21, 5, ANJU_SCH_DOOR_30) + } else if_time_range (21, 30, 23, 0) { + return_time (21, 30, 23, 0, ANJU_SCH_TALKING_WITH_MOM) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (11, 29, 11, 39) { + return_time (11, 29, 11, 39, ANJU_SCH_DOOR_37) + } else if_time_range (11, 39, 12, 25) { + return_time (11, 39, 12, 25, ANJU_SCH_WALKING_54) + } else if_time_range (12, 25, 13, 15) { + return_time (12, 25, 13, 15, ANJU_SCH_WALKING_55) + } else if_time_range (15, 55, 16, 45) { + return_time (15, 55, 16, 45, ANJU_SCH_WALKING_58) + } else if_time_range (16, 45, 17, 24) { + return_time (16, 45, 17, 24, ANJU_SCH_WALKING_59) + } else if_time_range (17, 24, 17, 30) { + return_time (17, 24, 17, 30, ANJU_SCH_DOOR_38) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (11, 39, 12, 25) { + return_time (11, 39, 12, 25, ANJU_SCH_WALKING_60) + } else if_time_range (12, 25, 13, 15) { + return_time (12, 25, 13, 15, ANJU_SCH_WALKING_61) + } else if_time_range (15, 55, 16, 45) { + return_time (15, 55, 16, 45, ANJU_SCH_WALKING_62) + } else if_time_range (16, 45, 17, 24) { + return_time (16, 45, 17, 24, ANJU_SCH_WALKING_63) + } else { + return_none + } + } else if_scene (SCENE_ALLEY) { + if_time_range (13, 15, 13, 45) { + return_time (13, 15, 13, 45, ANJU_SCH_WALKING_56) + } else if_time_range (13, 45, 15, 25) { + return_time (13, 45, 15, 25, ANJU_SCH_LAUNDRY_POOL_SIT) + } else if_time_range (15, 25, 15, 55) { + return_time (15, 25, 15, 55, ANJU_SCH_WALKING_57) + } else { + return_none + } + } else { + return_none + } + } else if_day (3) { + if_week_event_reg (WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 11, 0) { + return_time (6, 0, 11, 0, ANJU_SCH_SWEEPING) + } else if_time_range (11, 0, 11, 25) { + return_time (11, 0, 11, 25, ANJU_SCH_WALKING_52) + } else if_time_range (11, 25, 11, 30) { + return_time (11, 25, 11, 30, ANJU_SCH_DOOR_36) + } else if_time_range (11, 30, 11, 50) { + return_time (11, 30, 11, 50, ANJU_SCH_WALKING_53) + } else if_time_range (11, 50, 12, 0) { + return_time (11, 50, 12, 0, ANJU_SCH_DOOR_39) + } else if_time_range (18, 0, 5, 0) { + return_time (18, 0, 5, 0, ANJU_SCH_WAITING_FOR_KAFEI) + } else if_time_range (5, 0, 6, 0) { + return_time (5, 0, 6, 0, ANJU_SCH_WAITING_FOR_KAFEI) + } else { + return_none + } + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 11, 0) { + return_time (6, 0, 11, 0, ANJU_SCH_SWEEPING) + } else if_time_range (11, 0, 11, 25) { + return_time (11, 0, 11, 25, ANJU_SCH_WALKING_52) + } else if_time_range (11, 25, 11, 30) { + return_time (11, 25, 11, 30, ANJU_SCH_DOOR_36) + } else if_time_range (11, 30, 11, 50) { + return_time (11, 30, 11, 50, ANJU_SCH_WALKING_53) + } else if_time_range (11, 50, 12, 0) { + return_time (11, 50, 12, 0, ANJU_SCH_DOOR_39) + } else { + return_none + } + } else if_scene (SCENE_OMOYA) { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, ANJU_SCH_RANCH) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_An/z_en_an.c b/src/overlays/actors/ovl_En_An/z_en_an.c index d8fab59086..d908d17c0c 100644 --- a/src/overlays/actors/ovl_En_An/z_en_an.c +++ b/src/overlays/actors/ovl_En_An/z_en_an.c @@ -158,442 +158,7 @@ typedef enum AnjuScheduleResult { /* 64 */ ANJU_SCH_MAX } AnjuScheduleResult; -static u8 sScheduleScript[] = { - /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(1, 0x151 - 0x005), - /* 0x005 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_L(SCENE_YADOYA, 0x150 - 0x00A), - /* 0x00A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(6, 0, 10, 55, 0x14A - 0x011), - /* 0x011 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(10, 55, 11, 10, 0x144 - 0x018), - /* 0x018 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 10, 11, 30, 0x13E - 0x01F), - /* 0x01F */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 30, 11, 50, 0x138 - 0x026), - /* 0x026 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 50, 11, 55, 0x132 - 0x02D), - /* 0x02D */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 55, 12, 0, 0x12C - 0x034), - /* 0x034 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 12, 15, 0x126 - 0x03B), - /* 0x03B */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 15, 12, 20, 0x120 - 0x042), - /* 0x042 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 20, 12, 25, 0x11A - 0x049), - /* 0x049 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 25, 12, 55, 0x114 - 0x050), - /* 0x050 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 55, 13, 0, 0x10E - 0x057), - /* 0x057 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(13, 15, 13, 20, 0x108 - 0x05E), - /* 0x05E */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(13, 20, 13, 50, 0x102 - 0x065), - /* 0x065 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(13, 50, 14, 8, 0x0FC - 0x06C), - /* 0x06C */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(14, 8, 14, 18, 0x0F6 - 0x073), - /* 0x073 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 18, 16, 10, 0x0F0 - 0x079), - /* 0x079 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0x0EA - 0x07F), - /* 0x07F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 19, 50, 0x0E4 - 0x085), - /* 0x085 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 50, 20, 20, 0x0DE - 0x08B), - /* 0x08B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 20, 20, 30, 0x0D8 - 0x091), - /* 0x091 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 30, 21, 5, 0x0D2 - 0x097), - /* 0x097 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 5, 21, 10, 0x0CC - 0x09D), - /* 0x09D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING, 0x0A2 - 0x0A1), - /* 0x0A1 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0A2 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(23, 10, 23, 15, 0x0C6 - 0x0A8), - /* 0x0A8 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(23, 15, 0, 0, 0x0C0 - 0x0AE), - /* 0x0AE */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 6, 0, 0x0B5 - 0x0B4), - /* 0x0B4 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B5 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x0BF - 0x0B9), - /* 0x0B9 */ SCHEDULE_CMD_RET_TIME(0, 0, 6, 0, ANJU_SCH_MIDNIGHT_MEETING), - /* 0x0BF */ SCHEDULE_CMD_RET_NONE(), - /* 0x0C0 */ SCHEDULE_CMD_RET_TIME(23, 15, 0, 0, ANJU_SCH_WALKING_49), - /* 0x0C6 */ SCHEDULE_CMD_RET_TIME(23, 10, 23, 15, ANJU_SCH_DOOR_31), - /* 0x0CC */ SCHEDULE_CMD_RET_TIME(21, 5, 21, 10, ANJU_SCH_DOOR_30), - /* 0x0D2 */ SCHEDULE_CMD_RET_TIME(20, 30, 21, 5, ANJU_SCH_WALKING_48), - /* 0x0D8 */ SCHEDULE_CMD_RET_TIME(20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME), - /* 0x0DE */ SCHEDULE_CMD_RET_TIME(19, 50, 20, 20, ANJU_SCH_WALKING_47), - /* 0x0E4 */ SCHEDULE_CMD_RET_TIME(16, 30, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x0EA */ SCHEDULE_CMD_RET_TIME(16, 10, 16, 30, ANJU_SCH_ATTEND_GORON), - /* 0x0F0 */ SCHEDULE_CMD_RET_TIME(14, 18, 16, 10, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x0F6 */ SCHEDULE_CMD_RET_TIME(14, 8, 14, 18, ANJU_SCH_RECEIVE_LETTER_FROM_POSTMAN), - /* 0x0FC */ SCHEDULE_CMD_RET_TIME(13, 50, 14, 8, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x102 */ SCHEDULE_CMD_RET_TIME(13, 20, 13, 50, ANJU_SCH_WALKING_46), - /* 0x108 */ SCHEDULE_CMD_RET_TIME(13, 15, 13, 20, ANJU_SCH_DOOR_29), - /* 0x10E */ SCHEDULE_CMD_RET_TIME(12, 55, 13, 0, ANJU_SCH_DOOR_28), - /* 0x114 */ SCHEDULE_CMD_RET_TIME(12, 25, 12, 55, ANJU_SCH_WALKING_45), - /* 0x11A */ SCHEDULE_CMD_RET_TIME(12, 20, 12, 25, ANJU_SCH_DOOR_27), - /* 0x120 */ SCHEDULE_CMD_RET_TIME(12, 15, 12, 20, ANJU_SCH_WALKING_44), - /* 0x126 */ SCHEDULE_CMD_RET_TIME(12, 0, 12, 15, ANJU_SCH_GIVE_LUNCH_TO_GRANNY), - /* 0x12C */ SCHEDULE_CMD_RET_TIME(11, 55, 12, 0, ANJU_SCH_WALKING_43), - /* 0x132 */ SCHEDULE_CMD_RET_TIME(11, 50, 11, 55, ANJU_SCH_DOOR_26), - /* 0x138 */ SCHEDULE_CMD_RET_TIME(11, 30, 11, 50, ANJU_SCH_WALKING_42), - /* 0x13E */ SCHEDULE_CMD_RET_TIME(11, 10, 11, 30, ANJU_SCH_COOKING), - /* 0x144 */ SCHEDULE_CMD_RET_TIME(10, 55, 11, 10, ANJU_SCH_WALKING_40), - /* 0x14A */ SCHEDULE_CMD_RET_TIME(6, 0, 10, 55, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x150 */ SCHEDULE_CMD_RET_NONE(), - /* 0x151 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x391 - 0x156), - /* 0x156 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x29E - 0x15B), - /* 0x15B */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_L(SCENE_YADOYA, 0x1F2 - 0x160), - /* 0x160 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 3, 11, 9, 0x1EC - 0x167), - /* 0x167 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 9, 11, 29, 0x1E6 - 0x16D), - /* 0x16D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 29, 11, 39, 0x1E0 - 0x173), - /* 0x173 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 24, 17, 30, 0x1DA - 0x179), - /* 0x179 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 30, 17, 55, 0x1D4 - 0x17F), - /* 0x17F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 55, 18, 0, 0x1CE - 0x185), - /* 0x185 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 19, 50, 0x1C8 - 0x18B), - /* 0x18B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 50, 20, 20, 0x1C2 - 0x191), - /* 0x191 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 20, 20, 30, 0x1BC - 0x197), - /* 0x197 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 30, 21, 0, 0x1B6 - 0x19D), - /* 0x19D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 21, 5, 0x1B0 - 0x1A3), - /* 0x1A3 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 30, 23, 0, 0x1AA - 0x1A9), - /* 0x1A9 */ SCHEDULE_CMD_RET_NONE(), - /* 0x1AA */ SCHEDULE_CMD_RET_TIME(21, 30, 23, 0, ANJU_SCH_TALKING_WITH_MOM), - /* 0x1B0 */ SCHEDULE_CMD_RET_TIME(21, 0, 21, 5, ANJU_SCH_DOOR_30), - /* 0x1B6 */ SCHEDULE_CMD_RET_TIME(20, 30, 21, 0, ANJU_SCH_WALKING_48), - /* 0x1BC */ SCHEDULE_CMD_RET_TIME(20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME), - /* 0x1C2 */ SCHEDULE_CMD_RET_TIME(19, 50, 20, 20, ANJU_SCH_WALKING_47), - /* 0x1C8 */ SCHEDULE_CMD_RET_TIME(18, 0, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x1CE */ SCHEDULE_CMD_RET_TIME(17, 55, 18, 0, ANJU_SCH_DOOR_35), - /* 0x1D4 */ SCHEDULE_CMD_RET_TIME(17, 30, 17, 55, ANJU_SCH_WALKING_51), - /* 0x1DA */ SCHEDULE_CMD_RET_TIME(17, 24, 17, 30, ANJU_SCH_DOOR_34), - /* 0x1E0 */ SCHEDULE_CMD_RET_TIME(11, 29, 11, 39, ANJU_SCH_DOOR_33), - /* 0x1E6 */ SCHEDULE_CMD_RET_TIME(11, 9, 11, 29, ANJU_SCH_WALKING_50), - /* 0x1EC */ SCHEDULE_CMD_RET_TIME(11, 3, 11, 9, ANJU_SCH_DOOR_32), - /* 0x1F2 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x23F - 0x1F6), - /* 0x1F6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 29, 11, 39, 0x239 - 0x1FC), - /* 0x1FC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 39, 12, 25, 0x233 - 0x202), - /* 0x202 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 25, 13, 15, 0x22D - 0x208), - /* 0x208 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 55, 16, 45, 0x227 - 0x20E), - /* 0x20E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 45, 17, 24, 0x221 - 0x214), - /* 0x214 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 24, 17, 30, 0x21B - 0x21A), - /* 0x21A */ SCHEDULE_CMD_RET_NONE(), - /* 0x21B */ SCHEDULE_CMD_RET_TIME(17, 24, 17, 30, ANJU_SCH_DOOR_38), - /* 0x221 */ SCHEDULE_CMD_RET_TIME(16, 45, 17, 24, ANJU_SCH_WALKING_59), - /* 0x227 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 45, ANJU_SCH_WALKING_58), - /* 0x22D */ SCHEDULE_CMD_RET_TIME(12, 25, 13, 15, ANJU_SCH_WALKING_55), - /* 0x233 */ SCHEDULE_CMD_RET_TIME(11, 39, 12, 25, ANJU_SCH_WALKING_54), - /* 0x239 */ SCHEDULE_CMD_RET_TIME(11, 29, 11, 39, ANJU_SCH_DOOR_37), - /* 0x23F */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x274 - 0x243), - /* 0x243 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 39, 12, 25, 0x26E - 0x249), - /* 0x249 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 25, 13, 15, 0x268 - 0x24F), - /* 0x24F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 55, 16, 45, 0x262 - 0x255), - /* 0x255 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 45, 17, 24, 0x25C - 0x25B), - /* 0x25B */ SCHEDULE_CMD_RET_NONE(), - /* 0x25C */ SCHEDULE_CMD_RET_TIME(16, 45, 17, 24, ANJU_SCH_WALKING_63), - /* 0x262 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 45, ANJU_SCH_WALKING_62), - /* 0x268 */ SCHEDULE_CMD_RET_TIME(12, 25, 13, 15, ANJU_SCH_WALKING_61), - /* 0x26E */ SCHEDULE_CMD_RET_TIME(11, 39, 12, 25, ANJU_SCH_WALKING_60), - /* 0x274 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x29D - 0x278), - /* 0x278 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 15, 13, 45, 0x297 - 0x27E), - /* 0x27E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 45, 15, 25, 0x291 - 0x284), - /* 0x284 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 55, 0x28B - 0x28A), - /* 0x28A */ SCHEDULE_CMD_RET_NONE(), - /* 0x28B */ SCHEDULE_CMD_RET_TIME(15, 25, 15, 55, ANJU_SCH_WALKING_57), - /* 0x291 */ SCHEDULE_CMD_RET_TIME(13, 45, 15, 25, ANJU_SCH_LAUNDRY_POOL_SIT), - /* 0x297 */ SCHEDULE_CMD_RET_TIME(13, 15, 13, 45, ANJU_SCH_WALKING_56), - /* 0x29D */ SCHEDULE_CMD_RET_NONE(), - /* 0x29E */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_L(SCENE_YADOYA, 0x390 - 0x2A3), - /* 0x2A3 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(6, 0, 10, 55, 0x38A - 0x2AA), - /* 0x2AA */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(10, 55, 11, 10, 0x384 - 0x2B1), - /* 0x2B1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 10, 11, 30, 0x37E - 0x2B8), - /* 0x2B8 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 30, 11, 50, 0x378 - 0x2BF), - /* 0x2BF */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 50, 11, 55, 0x372 - 0x2C6), - /* 0x2C6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(11, 55, 12, 0, 0x36C - 0x2CD), - /* 0x2CD */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 12, 15, 0x366 - 0x2D4), - /* 0x2D4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 15, 12, 20, 0x360 - 0x2DB), - /* 0x2DB */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 20, 12, 25, 0x35A - 0x2E1), - /* 0x2E1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 25, 12, 55, 0x354 - 0x2E7), - /* 0x2E7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 55, 13, 0, 0x34E - 0x2ED), - /* 0x2ED */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 15, 13, 20, 0x348 - 0x2F3), - /* 0x2F3 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 20, 13, 50, 0x342 - 0x2F9), - /* 0x2F9 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 50, 19, 50, 0x33C - 0x2FF), - /* 0x2FF */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 50, 20, 20, 0x336 - 0x305), - /* 0x305 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 20, 20, 30, 0x330 - 0x30B), - /* 0x30B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(20, 30, 21, 5, 0x32A - 0x311), - /* 0x311 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 5, 21, 10, 0x324 - 0x317), - /* 0x317 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 30, 23, 0, 0x31E - 0x31D), - /* 0x31D */ SCHEDULE_CMD_RET_NONE(), - /* 0x31E */ SCHEDULE_CMD_RET_TIME(21, 30, 23, 0, ANJU_SCH_TALKING_WITH_MOM), - /* 0x324 */ SCHEDULE_CMD_RET_TIME(21, 5, 21, 10, ANJU_SCH_DOOR_30), - /* 0x32A */ SCHEDULE_CMD_RET_TIME(20, 30, 21, 5, ANJU_SCH_WALKING_48), - /* 0x330 */ SCHEDULE_CMD_RET_TIME(20, 20, 20, 30, ANJU_SCH_WAITING_CLOSING_TIME), - /* 0x336 */ SCHEDULE_CMD_RET_TIME(19, 50, 20, 20, ANJU_SCH_WALKING_47), - /* 0x33C */ SCHEDULE_CMD_RET_TIME(13, 50, 19, 50, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x342 */ SCHEDULE_CMD_RET_TIME(13, 20, 13, 50, ANJU_SCH_WALKING_46), - /* 0x348 */ SCHEDULE_CMD_RET_TIME(13, 15, 13, 20, ANJU_SCH_DOOR_29), - /* 0x34E */ SCHEDULE_CMD_RET_TIME(12, 55, 13, 0, ANJU_SCH_DOOR_28), - /* 0x354 */ SCHEDULE_CMD_RET_TIME(12, 25, 12, 55, ANJU_SCH_WALKING_45), - /* 0x35A */ SCHEDULE_CMD_RET_TIME(12, 20, 12, 25, ANJU_SCH_DOOR_27), - /* 0x360 */ SCHEDULE_CMD_RET_TIME(12, 15, 12, 20, ANJU_SCH_WALKING_44), - /* 0x366 */ SCHEDULE_CMD_RET_TIME(12, 0, 12, 15, ANJU_SCH_GIVE_LUNCH_TO_GRANNY), - /* 0x36C */ SCHEDULE_CMD_RET_TIME(11, 55, 12, 0, ANJU_SCH_WALKING_43), - /* 0x372 */ SCHEDULE_CMD_RET_TIME(11, 50, 11, 55, ANJU_SCH_DOOR_26), - /* 0x378 */ SCHEDULE_CMD_RET_TIME(11, 30, 11, 50, ANJU_SCH_WALKING_42), - /* 0x37E */ SCHEDULE_CMD_RET_TIME(11, 10, 11, 30, ANJU_SCH_COOKING), - /* 0x384 */ SCHEDULE_CMD_RET_TIME(10, 55, 11, 10, ANJU_SCH_WALKING_40), - /* 0x38A */ SCHEDULE_CMD_RET_TIME(6, 0, 10, 55, ANJU_SCH_RECEPTIONIST_IDLE), - /* 0x390 */ SCHEDULE_CMD_RET_NONE(), - /* 0x391 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x447 - 0x396), - /* 0x396 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x3ED - 0x39A), - /* 0x39A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x3DB - 0x39E), - /* 0x39E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 11, 0, 0x3D5 - 0x3A4), - /* 0x3A4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 0, 11, 25, 0x3CF - 0x3AA), - /* 0x3AA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 25, 11, 30, 0x3C9 - 0x3B0), - /* 0x3B0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 30, 11, 50, 0x3C3 - 0x3B6), - /* 0x3B6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 50, 12, 0, 0x3BD - 0x3BC), - /* 0x3BC */ SCHEDULE_CMD_RET_NONE(), - /* 0x3BD */ SCHEDULE_CMD_RET_TIME(11, 50, 12, 0, ANJU_SCH_DOOR_39), - /* 0x3C3 */ SCHEDULE_CMD_RET_TIME(11, 30, 11, 50, ANJU_SCH_WALKING_53), - /* 0x3C9 */ SCHEDULE_CMD_RET_TIME(11, 25, 11, 30, ANJU_SCH_DOOR_36), - /* 0x3CF */ SCHEDULE_CMD_RET_TIME(11, 0, 11, 25, ANJU_SCH_WALKING_52), - /* 0x3D5 */ SCHEDULE_CMD_RET_TIME(6, 0, 11, 0, ANJU_SCH_SWEEPING), - /* 0x3DB */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x3EC - 0x3DF), - /* 0x3DF */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x3E6 - 0x3E5), - /* 0x3E5 */ SCHEDULE_CMD_RET_NONE(), - /* 0x3E6 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, ANJU_SCH_RANCH), - /* 0x3EC */ SCHEDULE_CMD_RET_NONE(), - /* 0x3ED */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x446 - 0x3F1), - /* 0x3F1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 11, 0, 0x440 - 0x3F7), - /* 0x3F7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 0, 11, 25, 0x43A - 0x3FD), - /* 0x3FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 25, 11, 30, 0x434 - 0x403), - /* 0x403 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 30, 11, 50, 0x42E - 0x409), - /* 0x409 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 50, 12, 0, 0x428 - 0x40F), - /* 0x40F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 5, 0, 0x422 - 0x415), - /* 0x415 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(5, 0, 6, 0, 0x41C - 0x41B), - /* 0x41B */ SCHEDULE_CMD_RET_NONE(), - /* 0x41C */ SCHEDULE_CMD_RET_TIME(5, 0, 6, 0, ANJU_SCH_WAITING_FOR_KAFEI), - /* 0x422 */ SCHEDULE_CMD_RET_TIME(18, 0, 5, 0, ANJU_SCH_WAITING_FOR_KAFEI), - /* 0x428 */ SCHEDULE_CMD_RET_TIME(11, 50, 12, 0, ANJU_SCH_DOOR_39), - /* 0x42E */ SCHEDULE_CMD_RET_TIME(11, 30, 11, 50, ANJU_SCH_WALKING_53), - /* 0x434 */ SCHEDULE_CMD_RET_TIME(11, 25, 11, 30, ANJU_SCH_DOOR_36), - /* 0x43A */ SCHEDULE_CMD_RET_TIME(11, 0, 11, 25, ANJU_SCH_WALKING_52), - /* 0x440 */ SCHEDULE_CMD_RET_TIME(6, 0, 11, 0, ANJU_SCH_SWEEPING), - /* 0x446 */ SCHEDULE_CMD_RET_NONE(), - /* 0x447 */ SCHEDULE_CMD_RET_NONE(), -}; - -/** - * The schedule script is roughly equivalent to the following pseudo-code: - -s32 scheduleScript(PlayState* play) { - if (gSaveContext.save.day == 1) { - if (play->sceneId == SCENE_YADOYA) { - if ((6, 0) <= NOW <= (10, 55)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((10, 55) <= NOW <= (11, 10)) { - return ANJU_SCH_WALKING_40; - } else if ((11, 10) <= NOW <= (11, 30)) { - return ANJU_SCH_COOKING; - } else if ((11, 30) <= NOW <= (11, 50)) { - return ANJU_SCH_WALKING_42; - } else if ((11, 50) <= NOW <= (11, 55)) { - return ANJU_SCH_DOOR_26; - } else if ((11, 55) <= NOW <= (12, 0)) { - return ANJU_SCH_WALKING_43; - } else if ((12, 0) <= NOW <= (12, 15)) { - return ANJU_SCH_GIVE_LUNCH_TO_GRANNY; - } else if ((12, 15) <= NOW <= (12, 20)) { - return ANJU_SCH_WALKING_44; - } else if ((12, 20) <= NOW <= (12, 25)) { - return ANJU_SCH_DOOR_27; - } else if ((12, 25) <= NOW <= (12, 55)) { - return ANJU_SCH_WALKING_45; - } else if ((12, 55) <= NOW <= (13, 0)) { - return ANJU_SCH_DOOR_28; - } else if ((13, 15) <= NOW <= (13, 20)) { - return ANJU_SCH_DOOR_29; - } else if ((13, 20) <= NOW <= (13, 50)) { - return ANJU_SCH_WALKING_46; - } else if ((13, 50) <= NOW <= (14, 8)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((14, 8) <= NOW <= (14, 18)) { - return ANJU_SCH_RECEIVE_LETTER_FROM_POSTMAN; - } else if ((14, 18) <= NOW <= (16, 10)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((16, 10) <= NOW <= (16, 30)) { - return ANJU_SCH_ATTEND_GORON; - } else if ((16, 30) <= NOW <= (19, 50)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((19, 50) <= NOW <= (20, 20)) { - return ANJU_SCH_WALKING_47; - } else if ((20, 20) <= NOW <= (20, 30)) { - return ANJU_SCH_WAITING_CLOSING_TIME; - } else if ((20, 30) <= NOW <= (21, 5)) { - return ANJU_SCH_WALKING_48; - } else if ((21, 5) <= NOW <= (21, 10)) { - return ANJU_SCH_DOOR_30; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING)) { - if ((23, 10) <= NOW <= (23, 15)) { - return ANJU_SCH_DOOR_31; - } else if ((23, 15) <= NOW <= (0, 0)) { - return ANJU_SCH_WALKING_49; - } else if ((0, 0) <= NOW <= (6, 0)) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_HAD_MIDNIGHT_MEETING)) { - return None; - } - return ANJU_SCH_MIDNIGHT_MEETING; - } else { - return None; - } - } else { - return None; - } - } else { - return None; - } - } else if (gSaveContext.save.day == 2) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_HAD_MIDNIGHT_MEETING)) { - if (play->sceneId == SCENE_YADOYA) { - if ((6, 0) <= NOW <= (10, 55)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((10, 55) <= NOW <= (11, 10)) { - return ANJU_SCH_WALKING_40; - } else if ((11, 10) <= NOW <= (11, 30)) { - return ANJU_SCH_COOKING; - } else if ((11, 30) <= NOW <= (11, 50)) { - return ANJU_SCH_WALKING_42; - } else if ((11, 50) <= NOW <= (11, 55)) { - return ANJU_SCH_DOOR_26; - } else if ((11, 55) <= NOW <= (12, 0)) { - return ANJU_SCH_WALKING_43; - } else if ((12, 0) <= NOW <= (12, 15)) { - return ANJU_SCH_GIVE_LUNCH_TO_GRANNY; - } else if ((12, 15) <= NOW <= (12, 20)) { - return ANJU_SCH_WALKING_44; - } else if ((12, 20) <= NOW <= (12, 25)) { - return ANJU_SCH_DOOR_27; - } else if ((12, 25) <= NOW <= (12, 55)) { - return ANJU_SCH_WALKING_45; - } else if ((12, 55) <= NOW <= (13, 0)) { - return ANJU_SCH_DOOR_28; - } else if ((13, 15) <= NOW <= (13, 20)) { - return ANJU_SCH_DOOR_29; - } else if ((13, 20) <= NOW <= (13, 50)) { - return ANJU_SCH_WALKING_46; - } else if ((13, 50) <= NOW <= (19, 50)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((19, 50) <= NOW <= (20, 20)) { - return ANJU_SCH_WALKING_47; - } else if ((20, 20) <= NOW <= (20, 30)) { - return ANJU_SCH_WAITING_CLOSING_TIME; - } else if ((20, 30) <= NOW <= (21, 5)) { - return ANJU_SCH_WALKING_48; - } else if ((21, 5) <= NOW <= (21, 10)) { - return ANJU_SCH_DOOR_30; - } else if ((21, 30) <= NOW <= (23, 0)) { - return ANJU_SCH_TALKING_WITH_MOM; - } else { - return None; - } - } else { - return None; - } - } else if (play->sceneId == SCENE_YADOYA) { - if ((11, 3) <= NOW <= (11, 9)) { - return ANJU_SCH_DOOR_32; - } else if ((11, 9) <= NOW <= (11, 29)) { - return ANJU_SCH_WALKING_50; - } else if ((11, 29) <= NOW <= (11, 39)) { - return ANJU_SCH_DOOR_33; - } else if ((17, 24) <= NOW <= (17, 30)) { - return ANJU_SCH_DOOR_34; - } else if ((17, 30) <= NOW <= (17, 55)) { - return ANJU_SCH_WALKING_51; - } else if ((17, 55) <= NOW <= (18, 0)) { - return ANJU_SCH_DOOR_35; - } else if ((18, 0) <= NOW <= (19, 50)) { - return ANJU_SCH_RECEPTIONIST_IDLE; - } else if ((19, 50) <= NOW <= (20, 20)) { - return ANJU_SCH_WALKING_47; - } else if ((20, 20) <= NOW <= (20, 30)) { - return ANJU_SCH_WAITING_CLOSING_TIME; - } else if ((20, 30) <= NOW <= (21, 0)) { - return ANJU_SCH_WALKING_48; - } else if ((21, 0) <= NOW <= (21, 5)) { - return ANJU_SCH_DOOR_30; - } else if ((21, 30) <= NOW <= (23, 0)) { - return ANJU_SCH_TALKING_WITH_MOM; - } else { - return None; - } - } else if (play->sceneId == SCENE_TOWN) { - if ((11, 29) <= NOW <= (11, 39)) { - return ANJU_SCH_DOOR_37; - } else if ((11, 39) <= NOW <= (12, 25)) { - return ANJU_SCH_WALKING_54; - } else if ((12, 25) <= NOW <= (13, 15)) { - return ANJU_SCH_WALKING_55; - } else if ((15, 55) <= NOW <= (16, 45)) { - return ANJU_SCH_WALKING_58; - } else if ((16, 45) <= NOW <= (17, 24)) { - return ANJU_SCH_WALKING_59; - } else if ((17, 24) <= NOW <= (17, 30)) { - return ANJU_SCH_DOOR_38; - } else { - return None; - } - } else if (play->sceneId == SCENE_CLOCKTOWER) { - if ((11, 39) <= NOW <= (12, 25)) { - return ANJU_SCH_WALKING_60; - } else if ((12, 25) <= NOW <= (13, 15)) { - return ANJU_SCH_WALKING_61; - } else if ((15, 55) <= NOW <= (16, 45)) { - return ANJU_SCH_WALKING_62; - } else if ((16, 45) <= NOW <= (17, 24)) { - return ANJU_SCH_WALKING_63; - } else { - return None; - } - } else if (play->sceneId == SCENE_ALLEY) { - if ((13, 15) <= NOW <= (13, 45)) { - return ANJU_SCH_WALKING_56; - } else if ((13, 45) <= NOW <= (15, 25)) { - return ANJU_SCH_LAUNDRY_POOL_SIT; - } else if ((15, 25) <= NOW <= (15, 55)) { - return ANJU_SCH_WALKING_57; - } else { - return None; - } - } else { - return None; - } - } else if (gSaveContext.save.day == 3) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES)) { - if (play->sceneId == SCENE_YADOYA) { - if ((6, 0) <= NOW <= (11, 0)) { - return ANJU_SCH_SWEEPING; - } else if ((11, 0) <= NOW <= (11, 25)) { - return ANJU_SCH_WALKING_52; - } else if ((11, 25) <= NOW <= (11, 30)) { - return ANJU_SCH_DOOR_36; - } else if ((11, 30) <= NOW <= (11, 50)) { - return ANJU_SCH_WALKING_53; - } else if ((11, 50) <= NOW <= (12, 0)) { - return ANJU_SCH_DOOR_39; - } else if ((18, 0) <= NOW <= (5, 0)) { - return ANJU_SCH_WAITING_FOR_KAFEI; - } else if ((5, 0) <= NOW <= (6, 0)) { - return ANJU_SCH_WAITING_FOR_KAFEI; - } else { - return None; - } - } else { - return None; - } - } else if (play->sceneId == SCENE_YADOYA) { - if ((6, 0) <= NOW <= (11, 0)) { - return ANJU_SCH_SWEEPING; - } else if ((11, 0) <= NOW <= (11, 25)) { - return ANJU_SCH_WALKING_52; - } else if ((11, 25) <= NOW <= (11, 30)) { - return ANJU_SCH_DOOR_36; - } else if ((11, 30) <= NOW <= (11, 50)) { - return ANJU_SCH_WALKING_53; - } else if ((11, 50) <= NOW <= (12, 0)) { - return ANJU_SCH_DOOR_39; - } else { - return None; - } - } else if (play->sceneId == SCENE_OMOYA) { - if ((18, 0) <= NOW <= (6, 0)) { - return ANJU_SCH_RANCH; - } else { - return None; - } - } else { - return None; - } - } else { - return None; - } -} - */ +#include "build/src/overlays/actors/ovl_En_An/scheduleScripts.schl.inc" static s32 sSearchTimePathLimit[ANJU_SCH_MAX] = { -1, // ANJU_SCH_NONE diff --git a/src/overlays/actors/ovl_En_Baba/scheduleScripts.schl b/src/overlays/actors/ovl_En_Baba/scheduleScripts.schl new file mode 100644 index 0000000000..2aa71abce7 --- /dev/null +++ b/src/overlays/actors/ovl_En_Baba/scheduleScripts.schl @@ -0,0 +1,17 @@ +sSchedule { + if_day (1) { + if_scene (SCENE_BACKTOWN) { + if_time_range (0, 0, 0, 30) { + return_time (0, 0, 0, 30, BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH) + } else if_since_time (0, 30) { + return_l (BOMB_SHOP_LADY_SCH_KNOCKED_OVER) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index 89a40ce2a1..3dc83e1bf7 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -129,17 +129,7 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static u8 sSchedule[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x1D - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_BACKTOWN, 0x1C - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 30, 0x16 - 0x0E), - /* 0x0E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(0, 30, 0x15 - 0x12), - /* 0x12 */ SCHEDULE_CMD_RET_VAL_L(BOMB_SHOP_LADY_SCH_KNOCKED_OVER), - /* 0x15 */ SCHEDULE_CMD_RET_NONE(), - /* 0x16 */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 30, BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH), - /* 0x1C */ SCHEDULE_CMD_RET_NONE(), - /* 0x1D */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Baba/scheduleScripts.schl.inc" static s32 sSearchTimePathLimit[] = { -1, -1, 0 }; diff --git a/src/overlays/actors/ovl_En_Bjt/scheduleScripts.schl b/src/overlays/actors/ovl_En_Bjt/scheduleScripts.schl new file mode 100644 index 0000000000..7fff002a34 --- /dev/null +++ b/src/overlays/actors/ovl_En_Bjt/scheduleScripts.schl @@ -0,0 +1,11 @@ +sScheduleScript { + if_scene (SCENE_YADOYA) { + if_time_range (0, 0, 6, 0) { + return_time (0, 0, 6, 0, TOILET_HAND_SCH_AVAILABLE) + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index 32226e7362..a21f80c8aa 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -29,13 +29,7 @@ typedef enum { /* 1 */ TOILET_HAND_SCH_AVAILABLE } ToiletHandScheduleResult; -static u8 sScheduleScript[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x11 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 6, 0, 0x0B - 0x0A), - /* 0x0A */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B */ SCHEDULE_CMD_RET_TIME(0, 0, 6, 0, TOILET_HAND_SCH_AVAILABLE), - /* 0x11 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Bjt/scheduleScripts.schl.inc" static u8 sMsgEventScript[] = { 0x0E, 0x29, 0x48, 0x0C, 0x0E, 0x00, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x52, 0x00, 0x5F, 0x2C, 0x29, 0x4A, 0x0C, 0x2F, diff --git a/src/overlays/actors/ovl_En_Door/scheduleScripts.schl b/src/overlays/actors/ovl_En_Door/scheduleScripts.schl new file mode 100644 index 0000000000..7f6c2ea081 --- /dev/null +++ b/src/overlays/actors/ovl_En_Door/scheduleScripts.schl @@ -0,0 +1,344 @@ +D_808675D0 { + if_day (3) { + not if_time_range (6, 0, 23, 0) { + not if_time_range (0, 0, 6, 0) { + return_s (7) + } + } + } + return_none +} + +D_808675E4 { + if_before_time (9, 0) { + return_s (9) + } else if_before_time (12, 0) { + branch (label_0x1D) + } else { + if_day (1) { + branch (label_0x0E) + + label_0x0E: + if_before_time (13, 0) { + branch (label_0x1C) + } else if_before_time (15, 0) { + branch (label_0x1D) + } else if_before_time (0, 0) { + branch (label_0x1C) + } else { + return_s (9) + } + + label_0x1C: + return_none + + label_0x1D: + return_s (8) + } else if_day (2) { + if_week_event_reg (WEEKEVENTREG_28_08) { + if_before_time (13, 0) { + branch (label_0x1C) + } else if_before_time (17, 0) { + branch (label_0x1D) + } else if_before_time (0, 0) { + branch (label_0x1C) + } else { + return_s (9) + } + } else if_since_time (13, 0) { + return_s (9) + } else { + return_none + } + } else if_before_time (13, 0) { + branch (label_0x1C) + } else if_before_time (13, 0) { + branch (label_0x1D) + } else if_before_time (18, 0) { + return_s (9) + } else { + return_none + } + } +} + +D_80867634 { + if_time_range (6, 0, 23, 0) { + return_none + } else { + return_s (28) + } +} + +D_80867640 { + if_time_range (21, 0, 22, 0) { + return_s (11) + } else { + return_none + } +} + +D_8086764C { + not if_time_range (22, 0, 5, 0) { + return_s (10) + } else { + return_none + } +} + +D_80867658 { + if_day (2) { + not if_week_event_reg (WEEKEVENTREG_28_08) { + return_s (12) + } else if_time_range (15, 10, 22, 0) { + return_none + } else { + return_s (12) + } + } + if_day (3) { + if_since_time (13, 0) { + not if_week_event_reg (WEEKEVENTREG_51_08) { + return_s (12) + } else if_since_time (22, 0) { + return_s (12) + } else { + return_none + } + } + } + return_s (12) +} + +D_80867684 { + return_none +} + +D_80867688 { + if_since_time (22, 0) { + return_s (15) + } else { + return_none + } +} + +D_80867690 { + if_since_time (22, 0) { + return_s (16) + } else { + return_none + } +} + +D_80867698 { + if_since_time (22, 0) { + return_s (17) + } else { + return_none + } +} + +D_808676A0 { + if_time_range (10, 0, 21, 0) { + return_none + } else if_time_range (22, 0, 5, 0) { + if_misc (SCHEDULE_CHECK_MISC_MASK_ROMANI) { + return_s (33) + } else { + return_s (34) + } + } else { + return_s (18) + } +} + +D_808676B8 { + not if_misc (SCHEDULE_CHECK_MISC_ROOM_KEY) { + if_day (3) { + if_before_time (8, 0) { + return_s (19) + } else { + return_none + } + } else if_time_range (8, 0, 20, 30) { + return_none + } else { + return_s (19) + } + } else { + return_none + } +} + +D_808676D0 { + return_none +} + +D_808676D4 { + return_none +} + +D_808676D8 { + if_day (3) { + if_since_time (18, 0) { + return_none + } + } + return_s (20) +} + +D_808676E4 { + not if_misc (SCHEDULE_CHECK_MISC_ROOM_KEY) { + return_s (22) + } else { + return_none + } +} + +D_808676EC { + return_none +} + +D_808676F0 { + if_day (3) { + if_since_time (10, 0) { + label_0x8: + return_none + } else { + branch (label_0xF) + } + } else { + if_time_range (10, 0, 20, 0) { + branch (label_0x8) + } else { + label_0xF: + return_s (21) + } + } +} + +D_80867704 { + return_none +} + +D_80867708 { + return_none +} + +D_8086770C { + return_none +} + +D_80867710 { + return_none +} + +D_80867714 { + if_since_time (20, 0) { + return_s (23) + } else { + return_none + } +} + +D_8086771C { + if_day (1) { + if_since_time (2, 30) { + return_s (24) + } else { + label_0x0A: + return_none + } + } else if_day (3) { + if_since_time (20, 0) { + return_s (12) + } else { + branch (label_0x0A) + } + } else { + branch (label_0x0A) + } +} + +D_80867734 { + if_since_time (20, 0) { + return_s (25) + } else { + return_none + } +} + +D_8086773C { + if_since_time (20, 0) { + return_s (26) + } else { + return_none + } +} + +D_80867744 { + not if_day (2) { + branch (label_0x08) + } else { + if_week_event_reg (WEEKEVENTREG_99_80) { + branch (label_0x0E) + } else { + label_0x08: + if_before_time (20, 0) { + branch (label_0x14) + } else { + return_s (27) + } + } + } + + label_0x0E: + if_before_time (18, 0) { + branch (label_0x14) + } else { + return_s (27) + } + + label_0x14: + return_none +} + +D_8086775C { + not if_week_event_reg (WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) { + not if_week_event_reg (WEEKEVENTREG_75_20) { + not if_week_event_reg (WEEKEVENTREG_14_04) { + return_s (29) + } else not if_week_event_reg (WEEKEVENTREG_59_01) { + if_week_event_reg (WEEKEVENTREG_61_02) { + return_s (31) + } else { + return_s (30) + } + } else { + return_none + } + } + } + + return_none +} + +D_80867778 { + return_s (32) +} + +D_8086777C{ + return_none +} + +D_80867780 { + return_none +} + +D_80867784 { + if_since_time (22, 0) { + return_s (35) + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 1323ac8380..4521bf0285 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -36,240 +36,9 @@ void func_80867144(EnDoor* this, PlayState* play); void func_808670F0(EnDoor* this, PlayState* play); void func_80866A5C(EnDoor* this, PlayState* play); -u8 D_808675D0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x12 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 23, 0, 0x12 - 0x0A), - /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 6, 0, 0x12 - 0x10), - /* 0x10 */ SCHEDULE_CMD_RET_VAL_S(7), - /* 0x12 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Door/scheduleScripts.schl.inc" -u8 D_808675E4[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(9, 0, 0x4B - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(12, 0, 0x1D - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x1F - 0x0C), - /* 0x0C */ SCHEDULE_CMD_BRANCH_S(0x0), - /* 0x0E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x1C - 0x12), - /* 0x12 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(15, 0, 0x1D - 0x16), - /* 0x16 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(0, 0, 0x1C - 0x1A), - /* 0x1A */ SCHEDULE_CMD_RET_VAL_S(9), - /* 0x1C */ SCHEDULE_CMD_RET_NONE(), - /* 0x1D */ SCHEDULE_CMD_RET_VAL_S(8), - /* 0x1F */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x3C - 0x23), - /* 0x23 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x2E - 0x27), - /* 0x27 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x2D - 0x2B), - /* 0x2B */ SCHEDULE_CMD_RET_VAL_S(9), - /* 0x2D */ SCHEDULE_CMD_RET_NONE(), - /* 0x2E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x1C - 0x32), - /* 0x32 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(17, 0, 0x1D - 0x36), - /* 0x36 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(0, 0, 0x1C - 0x3A), - /* 0x3A */ SCHEDULE_CMD_RET_VAL_S(9), - /* 0x3C */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x1C - 0x40), - /* 0x40 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x1D - 0x44), - /* 0x44 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(18, 0, 0x49 - 0x48), - /* 0x48 */ SCHEDULE_CMD_RET_NONE(), - /* 0x49 */ SCHEDULE_CMD_RET_VAL_S(9), - /* 0x4B */ SCHEDULE_CMD_RET_VAL_S(9), -}; - -u8 D_80867634[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 23, 0, 0x8 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_S(28), - /* 0x8 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867640[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 22, 0, 0x7 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), - /* 0x7 */ SCHEDULE_CMD_RET_VAL_S(11), -}; - -u8 D_8086764C[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(22, 0, 5, 0, 0x8 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_S(10), - /* 0x8 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867658[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x13 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x0A - 0x08), - /* 0x08 */ SCHEDULE_CMD_RET_VAL_S(12), - /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 10, 22, 0, 0x12 - 0x10), - /* 0x10 */ SCHEDULE_CMD_RET_VAL_S(12), - /* 0x12 */ SCHEDULE_CMD_RET_NONE(), - /* 0x13 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x28 - 0x17), - /* 0x17 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x28 - 0x1B), - /* 0x1B */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x21 - 0x1F), - /* 0x1F */ SCHEDULE_CMD_RET_VAL_S(12), - /* 0x21 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x27 - 0x25), - /* 0x25 */ SCHEDULE_CMD_RET_VAL_S(12), - /* 0x27 */ SCHEDULE_CMD_RET_NONE(), - /* 0x28 */ SCHEDULE_CMD_RET_VAL_S(12), -}; - -u8 D_80867684[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867688[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(15), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867690[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(16), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867698[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(17), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676A0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 21, 0, 0x15 - 0x06), - /* 0x06 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(22, 0, 5, 0, 0x0E - 0x0C), - /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(18), - /* 0x0E */ SCHEDULE_CMD_CHECK_MISC_S(SCHEDULE_CHECK_MISC_MASK_ROMANI, 0x13 - 0x11), - /* 0x11 */ SCHEDULE_CMD_RET_VAL_S(34), - /* 0x13 */ SCHEDULE_CMD_RET_VAL_S(33), - /* 0x15 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676B8[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_MISC_S(SCHEDULE_CHECK_MISC_ROOM_KEY, 0x17 - 0x03), - /* 0x03 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x0E - 0x07), - /* 0x07 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(8, 0, 0x0C - 0x0B), - /* 0x0B */ SCHEDULE_CMD_RET_NONE(), - /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(19), - /* 0x0E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 20, 30, 0x16 - 0x14), - /* 0x14 */ SCHEDULE_CMD_RET_VAL_S(19), - /* 0x16 */ SCHEDULE_CMD_RET_NONE(), - /* 0x17 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676D0[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676D4[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676D8[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x9 - 0x4), - /* 0x4 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(18, 0, 0x9 - 0x8), - /* 0x8 */ SCHEDULE_CMD_RET_NONE(), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_S(20), -}; - -u8 D_808676E4[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_MISC_S(SCHEDULE_CHECK_MISC_ROOM_KEY, 0x5 - 0x3), - /* 0x3 */ SCHEDULE_CMD_RET_VAL_S(22), - /* 0x5 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676EC[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_808676F0[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x9 - 0x4), - /* 0x4 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(10, 0, 0xF - 0x8), - /* 0x8 */ SCHEDULE_CMD_RET_NONE(), - /* 0x9 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 20, 0, 0x8 - 0xF), - /* 0xF */ SCHEDULE_CMD_RET_VAL_S(21), -}; - -u8 D_80867704[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867708[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_8086770C[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867710[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867714[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(23), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_8086771C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x0B - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(2, 30, 0x0A - 0x08), - /* 0x08 */ SCHEDULE_CMD_RET_VAL_S(24), - /* 0x0A */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x0A - 0x0F), - /* 0x0F */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x0A - 0x13), - /* 0x13 */ SCHEDULE_CMD_RET_VAL_S(12), -}; - -u8 D_80867734[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(25), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_8086773C[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(26), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867744[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x08 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_99_80, 0x0E - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x14 - 0x0C), - /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(27), - /* 0x0E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(18, 0, 0x14 - 0x12), - /* 0x12 */ SCHEDULE_CMD_RET_VAL_S(27), - /* 0x14 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_8086775C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE, 0x1B - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_20, 0x1B - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_14_04, 0x0E - 0x0C), - /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(29), - /* 0x0E */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_59_01, 0x1A - 0x12), - /* 0x12 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_02, 0x18 - 0x16), - /* 0x16 */ SCHEDULE_CMD_RET_VAL_S(30), - /* 0x18 */ SCHEDULE_CMD_RET_VAL_S(31), - /* 0x1A */ SCHEDULE_CMD_RET_NONE(), - /* 0x1B */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867778[] = { - /* 0x0 */ SCHEDULE_CMD_RET_VAL_S(32), -}; - -u8 D_8086777C[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867780[] = { - /* 0x0 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8 D_80867784[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x6 - 0x4), - /* 0x4 */ SCHEDULE_CMD_RET_VAL_S(35), - /* 0x6 */ SCHEDULE_CMD_RET_NONE(), -}; - -u8* D_8086778C[] = { +ScheduleScript* D_8086778C[] = { D_808675D0, D_808675E4, D_80867634, D_80867640, D_8086764C, D_80867658, D_80867684, D_80867688, D_80867690, D_80867698, D_808676A0, D_808676B8, D_808676D0, D_808676D4, D_808676D8, D_808676E4, D_808676EC, D_808676F0, D_80867704, D_80867708, D_8086770C, D_80867710, D_80867714, D_8086771C, diff --git a/src/overlays/actors/ovl_En_Gm/scheduleScripts.schl b/src/overlays/actors/ovl_En_Gm/scheduleScripts.schl new file mode 100644 index 0000000000..75ce268de7 --- /dev/null +++ b/src/overlays/actors/ovl_En_Gm/scheduleScripts.schl @@ -0,0 +1,121 @@ +D_80951820 { + if_day (1) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 9, 0) { + return_time (6, 0, 9, 0, 6) + } else if_time_range (9, 0, 9, 10) { + return_time (9, 0, 9, 10, 24) + } else if_time_range (9, 10, 9, 15) { + return_time (9, 10, 9, 15, 15) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (9, 10, 9, 15) { + return_time (9, 10, 9, 15, 9) + } else if_time_range (9, 15, 10, 0) { + return_time (9, 15, 10, 0, 21) + } else if_time_range (10, 0, 10, 5) { + return_time (10, 0, 10, 5, 10) + } else if_time_range (12, 15, 12, 20) { + return_time (12, 15, 12, 20, 11) + } else if_time_range (12, 20, 12, 50) { + return_time (12, 20, 12, 50, 22) + } else if_time_range (12, 50, 12, 55) { + return_time (12, 50, 12, 55, 12) + } else { + return_none + } + } else if_scene (SCENE_SONCHONOIE) { + if_time_range (10, 0, 10, 5) { + return_time (10, 0, 10, 5, 16) + } else if_time_range (10, 5, 10, 10) { + return_time (10, 5, 10, 10, 25) + } else if_time_range (10, 10, 10, 30) { + return_time (10, 10, 10, 30, 1) + } else if_time_range (10, 30, 10, 40) { + return_time (10, 30, 10, 40, 26) + } else if_time_range (10, 40, 10, 45) { + return_time (10, 40, 10, 45, 18) + } else if_time_range (10, 45, 10, 55) { + return_time (10, 45, 10, 55, 27) + } else if_time_range (10, 55, 11, 45) { + return_time (10, 55, 11, 45, 2) + } else if_time_range (11, 45, 11, 55) { + return_time (11, 45, 11, 55, 28) + } else if_time_range (11, 55, 12, 0) { + return_time (11, 55, 12, 0, 19) + } else if_time_range (12, 0, 12, 15) { + return_time (12, 0, 12, 15, 29) + } else if_time_range (12, 15, 12, 20) { + return_time (12, 15, 12, 20, 17) + } else { + return_none + } + } else if_scene (SCENE_MILK_BAR) { + if_time_range (12, 55, 13, 0) { + return_time (12, 55, 13, 0, 20) + } else if_time_range (13, 0, 13, 25) { + return_time (13, 0, 13, 25, 30) + } else if_time_range (13, 25, 21, 5) { + return_time (13, 25, 21, 5, 3) + } else if_time_range (21, 55, 5, 5) { + return_time (21, 55, 5, 5, 5) + } else { + return_none + } + } else { + return_none + } + } else if_day (2) { + if_week_event_reg (WEEKEVENTREG_50_01) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 18, 0) { + return_time (6, 0, 18, 0, 7) + } else if_time_range (18, 0, 6, 0) { + return_time (0, 0, 0, 0, 8) + } else { + return_none + } + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 18, 0) { + return_time (6, 0, 18, 0, 7) + } else if_time_range (18, 0, 21, 0) { + return_time (18, 0, 21, 0, 6) + } else if_time_range (21, 0, 21, 10) { + return_time (21, 0, 21, 10, 24) + } else if_time_range (21, 10, 21, 15) { + return_time (21, 10, 21, 15, 15) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (21, 10, 21, 15) { + return_time (21, 10, 21, 15, 13) + } else if_time_range (21, 15, 21, 25) { + return_time (21, 15, 21, 25, 23) + } else if_time_range (21, 25, 21, 30) { + return_time (21, 25, 21, 30, 14) + } else { + return_none + } + } else if_scene (SCENE_MILK_BAR) { + if_time_range (21, 30, 21, 45) { + return_time (21, 30, 21, 45, 20) + } else if_time_range (21, 45, 22, 10) { + return_time (21, 45, 22, 10, 30) + } else if_time_range (22, 10, 6, 0) { + return_time (22, 10, 6, 0, 5) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index a65bd4442d..cc4519884c 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -19,103 +19,7 @@ void EnGm_Draw(Actor* thisx, PlayState* play); void func_80950CDC(EnGm* this, PlayState* play); void func_80950DB8(EnGm* this, PlayState* play); -static u8 D_80951820[] = { - /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(1, 0x13B - 0x005), - /* 0x005 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x02E - 0x009), - /* 0x009 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 9, 0, 0x028 - 0x00F), - /* 0x00F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 0, 9, 10, 0x022 - 0x015), - /* 0x015 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 10, 9, 15, 0x01C - 0x01B), - /* 0x01B */ SCHEDULE_CMD_RET_NONE(), - /* 0x01C */ SCHEDULE_CMD_RET_TIME(9, 10, 9, 15, 15), - /* 0x022 */ SCHEDULE_CMD_RET_TIME(9, 0, 9, 10, 24), - /* 0x028 */ SCHEDULE_CMD_RET_TIME(6, 0, 9, 0, 6), - /* 0x02E */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x07B - 0x032), - /* 0x032 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 10, 9, 15, 0x075 - 0x038), - /* 0x038 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 15, 10, 0, 0x06F - 0x03E), - /* 0x03E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 10, 5, 0x069 - 0x044), - /* 0x044 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 12, 20, 0x063 - 0x04A), - /* 0x04A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 20, 12, 50, 0x05D - 0x050), - /* 0x050 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 50, 12, 55, 0x057 - 0x056), - /* 0x056 */ SCHEDULE_CMD_RET_NONE(), - /* 0x057 */ SCHEDULE_CMD_RET_TIME(12, 50, 12, 55, 12), - /* 0x05D */ SCHEDULE_CMD_RET_TIME(12, 20, 12, 50, 22), - /* 0x063 */ SCHEDULE_CMD_RET_TIME(12, 15, 12, 20, 11), - /* 0x069 */ SCHEDULE_CMD_RET_TIME(10, 0, 10, 5, 10), - /* 0x06F */ SCHEDULE_CMD_RET_TIME(9, 15, 10, 0, 21), - /* 0x075 */ SCHEDULE_CMD_RET_TIME(9, 10, 9, 15, 9), - /* 0x07B */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_L(SCENE_SONCHONOIE, 0x105 - 0x080), - /* 0x080 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 10, 5, 0x0FF - 0x086), - /* 0x086 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 5, 10, 10, 0x0F9 - 0x08C), - /* 0x08C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 10, 10, 30, 0x0F3 - 0x092), - /* 0x092 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 30, 10, 40, 0x0ED - 0x098), - /* 0x098 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 40, 10, 45, 0x0E7 - 0x09E), - /* 0x09E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 45, 10, 55, 0x0E1 - 0x0A4), - /* 0x0A4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 55, 11, 45, 0x0DB - 0x0AA), - /* 0x0AA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 45, 11, 55, 0x0D5 - 0x0B0), - /* 0x0B0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 55, 12, 0, 0x0CF - 0x0B6), - /* 0x0B6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 12, 15, 0x0C9 - 0x0BC), - /* 0x0BC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 12, 20, 0x0C3 - 0x0C2), - /* 0x0C2 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0C3 */ SCHEDULE_CMD_RET_TIME(12, 15, 12, 20, 17), - /* 0x0C9 */ SCHEDULE_CMD_RET_TIME(12, 0, 12, 15, 29), - /* 0x0CF */ SCHEDULE_CMD_RET_TIME(11, 55, 12, 0, 19), - /* 0x0D5 */ SCHEDULE_CMD_RET_TIME(11, 45, 11, 55, 28), - /* 0x0DB */ SCHEDULE_CMD_RET_TIME(10, 55, 11, 45, 2), - /* 0x0E1 */ SCHEDULE_CMD_RET_TIME(10, 45, 10, 55, 27), - /* 0x0E7 */ SCHEDULE_CMD_RET_TIME(10, 40, 10, 45, 18), - /* 0x0ED */ SCHEDULE_CMD_RET_TIME(10, 30, 10, 40, 26), - /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(10, 10, 10, 30, 1), - /* 0x0F9 */ SCHEDULE_CMD_RET_TIME(10, 5, 10, 10, 25), - /* 0x0FF */ SCHEDULE_CMD_RET_TIME(10, 0, 10, 5, 16), - /* 0x105 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0x13A - 0x109), - /* 0x109 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 55, 13, 0, 0x134 - 0x10F), - /* 0x10F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 0, 13, 25, 0x12E - 0x115), - /* 0x115 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 25, 21, 5, 0x128 - 0x11B), - /* 0x11B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 55, 5, 5, 0x122 - 0x121), - /* 0x121 */ SCHEDULE_CMD_RET_NONE(), - /* 0x122 */ SCHEDULE_CMD_RET_TIME(21, 55, 5, 5, 5), - /* 0x128 */ SCHEDULE_CMD_RET_TIME(13, 25, 21, 5, 3), - /* 0x12E */ SCHEDULE_CMD_RET_TIME(13, 0, 13, 25, 30), - /* 0x134 */ SCHEDULE_CMD_RET_TIME(12, 55, 13, 0, 20), - /* 0x13A */ SCHEDULE_CMD_RET_NONE(), - /* 0x13B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x1EB - 0x140), - /* 0x140 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_50_01, 0x1CD - 0x145), - /* 0x145 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x17A - 0x149), - /* 0x149 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x174 - 0x14F), - /* 0x14F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 21, 0, 0x16E - 0x155), - /* 0x155 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 21, 10, 0x168 - 0x15B), - /* 0x15B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 10, 21, 15, 0x162 - 0x161), - /* 0x161 */ SCHEDULE_CMD_RET_NONE(), - /* 0x162 */ SCHEDULE_CMD_RET_TIME(21, 10, 21, 15, 15), - /* 0x168 */ SCHEDULE_CMD_RET_TIME(21, 0, 21, 10, 24), - /* 0x16E */ SCHEDULE_CMD_RET_TIME(18, 0, 21, 0, 6), - /* 0x174 */ SCHEDULE_CMD_RET_TIME(6, 0, 18, 0, 7), - /* 0x17A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x1A3 - 0x17E), - /* 0x17E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 10, 21, 15, 0x19D - 0x184), - /* 0x184 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 15, 21, 25, 0x197 - 0x18A), - /* 0x18A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 25, 21, 30, 0x191 - 0x190), - /* 0x190 */ SCHEDULE_CMD_RET_NONE(), - /* 0x191 */ SCHEDULE_CMD_RET_TIME(21, 25, 21, 30, 14), - /* 0x197 */ SCHEDULE_CMD_RET_TIME(21, 15, 21, 25, 23), - /* 0x19D */ SCHEDULE_CMD_RET_TIME(21, 10, 21, 15, 13), - /* 0x1A3 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0x1CC - 0x1A7), - /* 0x1A7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 30, 21, 45, 0x1C6 - 0x1AD), - /* 0x1AD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 45, 22, 10, 0x1C0 - 0x1B3), - /* 0x1B3 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(22, 10, 6, 0, 0x1BA - 0x1B9), - /* 0x1B9 */ SCHEDULE_CMD_RET_NONE(), - /* 0x1BA */ SCHEDULE_CMD_RET_TIME(22, 10, 6, 0, 5), - /* 0x1C0 */ SCHEDULE_CMD_RET_TIME(21, 45, 22, 10, 30), - /* 0x1C6 */ SCHEDULE_CMD_RET_TIME(21, 30, 21, 45, 20), - /* 0x1CC */ SCHEDULE_CMD_RET_NONE(), - /* 0x1CD */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x1EA - 0x1D1), - /* 0x1D1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x1E4 - 0x1D7), - /* 0x1D7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x1DE - 0x1DD), - /* 0x1DD */ SCHEDULE_CMD_RET_NONE(), - /* 0x1DE */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 0, 8), - /* 0x1E4 */ SCHEDULE_CMD_RET_TIME(6, 0, 18, 0, 7), - /* 0x1EA */ SCHEDULE_CMD_RET_NONE(), - /* 0x1EB */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Gm/scheduleScripts.schl.inc" static s32 D_80951A0C[] = { -1, 1, 4, 1, -1, 1, -1, -1, -1, 0, 2, 3, 5, 6, 8, 1, 0, 8, 3, 6, 0, 1, 4, 7, 0, 1, 2, 4, 5, 7, 1, diff --git a/src/overlays/actors/ovl_En_Ig/scheduleScripts.schl b/src/overlays/actors/ovl_En_Ig/scheduleScripts.schl new file mode 100644 index 0000000000..4e37d90292 --- /dev/null +++ b/src/overlays/actors/ovl_En_Ig/scheduleScripts.schl @@ -0,0 +1,51 @@ +D_80BF3260 { + if_day (1) { + if_scene (SCENE_TOWN) { + if_time_range (15, 25, 15, 45) { + return_time (15, 25, 15, 45, 10) + } else if_time_range (15, 45, 15, 50) { + return_time (15, 45, 15, 50, 5) + } else if_week_event_reg (WEEKEVENTREG_RECEIVED_ROOM_KEY) { + if_time_range (16, 50, 16, 55) { + return_time (16, 50, 16, 55, 6) + } else if_time_range (16, 55, 17, 15) { + return_time (16, 55, 17, 15, 11) + } else if_time_range (17, 15, 18, 0) { + return_time (17, 15, 6, 0, 2) + } else if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 4) + } else { + return_none + } + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (15, 45, 15, 50) { + return_time (15, 45, 15, 50, 7) + } else if_time_range (15, 50, 16, 10) { + return_time (15, 50, 16, 10, 12) + } else if_time_range (16, 10, 16, 30) { + return_time (16, 10, 16, 30, 3) + } else if_week_event_reg (WEEKEVENTREG_RECEIVED_ROOM_KEY) { + if_time_range (16, 30, 16, 50) { + return_time (16, 30, 16, 50, 14) + } else if_time_range (16, 50, 16, 55) { + return_time (16, 50, 16, 55, 9) + } else { + return_none + } + } else if_time_range (16, 30, 16, 50) { + return_time (16, 30, 16, 50, 13) + } else if_time_range (16, 50, 16, 55) { + return_time (16, 50, 16, 55, 8) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index e140c46f8b..7e7913aee2 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -19,45 +19,7 @@ void EnIg_Draw(Actor* thisx, PlayState* play); void func_80BF2AF8(EnIg* this, PlayState* play); void func_80BF2BD4(EnIg* this, PlayState* play); -static u8 D_80BF3260[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(1, 0xB6 - 0x05), - /* 0x05 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x57 - 0x09), - /* 0x09 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 45, 0x51 - 0x0F), - /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0x4B - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x1A - 0x19), - /* 0x19 */ SCHEDULE_CMD_RET_NONE(), - /* 0x1A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x45 - 0x20), - /* 0x20 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 55, 17, 15, 0x3F - 0x26), - /* 0x26 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 15, 18, 0, 0x39 - 0x2C), - /* 0x2C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x33 - 0x32), - /* 0x32 */ SCHEDULE_CMD_RET_NONE(), - /* 0x33 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 4), - /* 0x39 */ SCHEDULE_CMD_RET_TIME(17, 15, 6, 0, 2), - /* 0x3F */ SCHEDULE_CMD_RET_TIME(16, 55, 17, 15, 11), - /* 0x45 */ SCHEDULE_CMD_RET_TIME(16, 50, 16, 55, 6), - /* 0x4B */ SCHEDULE_CMD_RET_TIME(15, 45, 15, 50, 5), - /* 0x51 */ SCHEDULE_CMD_RET_TIME(15, 25, 15, 45, 10), - /* 0x57 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0xB5 - 0x5B), - /* 0x5B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0xAF - 0x61), - /* 0x61 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 10, 0xA9 - 0x67), - /* 0x67 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0xA3 - 0x6D), - /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x8A - 0x71), - /* 0x71 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x84 - 0x77), - /* 0x77 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x7E - 0x7D), - /* 0x7D */ SCHEDULE_CMD_RET_NONE(), - /* 0x7E */ SCHEDULE_CMD_RET_TIME(16, 50, 16, 55, 8), - /* 0x84 */ SCHEDULE_CMD_RET_TIME(16, 30, 16, 50, 13), - /* 0x8A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x9D - 0x90), - /* 0x90 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x97 - 0x96), - /* 0x96 */ SCHEDULE_CMD_RET_NONE(), - /* 0x97 */ SCHEDULE_CMD_RET_TIME(16, 50, 16, 55, 9), - /* 0x9D */ SCHEDULE_CMD_RET_TIME(16, 30, 16, 50, 14), - /* 0xA3 */ SCHEDULE_CMD_RET_TIME(16, 10, 16, 30, 3), - /* 0xA9 */ SCHEDULE_CMD_RET_TIME(15, 50, 16, 10, 12), - /* 0xAF */ SCHEDULE_CMD_RET_TIME(15, 45, 15, 50, 7), - /* 0xB5 */ SCHEDULE_CMD_RET_NONE(), - /* 0xB6 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Ig/scheduleScripts.schl.inc" static s32 D_80BF3318[] = { -1, -1, 3, 1, 3, 1, 2, 0, 3, 5, 0, 3, 1, 2, 4 }; diff --git a/src/overlays/actors/ovl_En_Ja/scheduleScripts.schl b/src/overlays/actors/ovl_En_Ja/scheduleScripts.schl new file mode 100644 index 0000000000..9df7611ca8 --- /dev/null +++ b/src/overlays/actors/ovl_En_Ja/scheduleScripts.schl @@ -0,0 +1,17 @@ +D_80BC35F0 { + if_day (3) { + return_none + } else if_time_range (6, 0, 18, 0) { + if_scene (SCENE_TOWN) { + return_l (1) + } else { + return_none + } + } else { + if_scene (SCENE_YADOYA) { + return_l (2) + } else { + return_none + } + } +} diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index c9c21db754..0d713c048a 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -21,17 +21,7 @@ void func_80BC2EA4(EnJa* this); void func_80BC32D8(EnJa* this, PlayState* play); void func_80BC3594(EnJa* this, PlayState* play); -static u8 D_80BC35F0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x05 - 0x04), - /* 0x04 */ SCHEDULE_CMD_RET_NONE(), - /* 0x05 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x13 - 0x0B), - /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12 - 0x0F), - /* 0x0F */ SCHEDULE_CMD_RET_VAL_L(2), - /* 0x12 */ SCHEDULE_CMD_RET_NONE(), - /* 0x13 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x1A - 0x17), - /* 0x17 */ SCHEDULE_CMD_RET_VAL_L(1), - /* 0x1A */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Ja/scheduleScripts.schl.inc" s32 D_80BC360C[] = { 0x0E29370C, 0x170E2938, 0x0C180E29, 0x390C170E, 0x293A0C09, 0x0000180E, 0x293B0C09, 0x00001000, diff --git a/src/overlays/actors/ovl_En_Nb/scheduleScripts.schl b/src/overlays/actors/ovl_En_Nb/scheduleScripts.schl new file mode 100644 index 0000000000..9f54f4e7b5 --- /dev/null +++ b/src/overlays/actors/ovl_En_Nb/scheduleScripts.schl @@ -0,0 +1,51 @@ +sScheduleScript { + if_day (3) { + if_scene (SCENE_YADOYA) { + if_time_range (6, 0, 18, 0) { + return_l (EN_NB_SCH_3) + } else { + return_none + } + } else if_scene (SCENE_OMOYA) { + if_time_range (18, 0, 6, 0) { + return_l (EN_NB_SCH_4) + } else { + return_none + } + } else { + return_none + } + } else { + if_scene (SCENE_YADOYA) { + if_day (1) { + if_time_range (8, 0, 12, 0) { + return_l (EN_NB_SCH_1) + } else if_time_range (12, 0, 12, 15) { + return_l (EN_NB_SCH_2) + } else if_time_range (12, 15, 18, 0) { + return_l (EN_NB_SCH_1) + } else { + return_l (EN_NB_SCH_3) + } + } else { + if_week_event_reg (WEEKEVENTREG_HAD_MIDNIGHT_MEETING) { + if_time_range (8, 0, 12, 0) { + return_s (EN_NB_SCH_1) + } else if_time_range (12, 0, 12, 15) { + return_s (EN_NB_SCH_2) + } else if_time_range (12, 15, 18, 0) { + return_s (EN_NB_SCH_1) + } else { + return_l (EN_NB_SCH_3) + } + } else if_time_range (8, 0, 18, 0) { + return_l (EN_NB_SCH_1) + } else { + return_l (EN_NB_SCH_3) + } + } + } else { + return_none + } + } +} diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 765a89770f..fe1a203429 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -36,39 +36,7 @@ typedef enum EnNbScheduleResult { /* 4 */ EN_NB_SCH_4 } EnNbScheduleResult; -static u8 sScheduleScript[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x21 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12 - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x0F - 0x0E), - /* 0x0E */ SCHEDULE_CMD_RET_NONE(), - /* 0x0F */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), - /* 0x12 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x20 - 0x16), - /* 0x16 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x1D - 0x1C), - /* 0x1C */ SCHEDULE_CMD_RET_NONE(), - /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_4), - /* 0x20 */ SCHEDULE_CMD_RET_NONE(), - /* 0x21 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x72 - 0x25), - /* 0x25 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x47 - 0x29), - /* 0x29 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 12, 0, 0x44 - 0x2F), - /* 0x2F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 12, 15, 0x41 - 0x35), - /* 0x35 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 18, 0, 0x3E - 0x3B), - /* 0x3B */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), - /* 0x3E */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x41 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_2), - /* 0x44 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x57 - 0x4B), - /* 0x4B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 18, 0, 0x54 - 0x51), - /* 0x51 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), - /* 0x54 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x57 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 12, 0, 0x70 - 0x5D), - /* 0x5D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 12, 15, 0x6E - 0x63), - /* 0x63 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 18, 0, 0x6C - 0x69), - /* 0x69 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), - /* 0x6C */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_1), - /* 0x6E */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_2), - /* 0x70 */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_1), - /* 0x72 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Nb/scheduleScripts.schl.inc" u8 D_80BC1464[] = { 0x1B, 0x04, 0x08, 0x00, 0x6A, 0x0A, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x0E, diff --git a/src/overlays/actors/ovl_En_Pm/scheduleScripts.schl b/src/overlays/actors/ovl_En_Pm/scheduleScripts.schl new file mode 100644 index 0000000000..3ecdca8427 --- /dev/null +++ b/src/overlays/actors/ovl_En_Pm/scheduleScripts.schl @@ -0,0 +1,482 @@ +D_80AFAD80 { + if_day (1) { + if_time_range (9, 0, 12, 0) { + label_0x117: + if_scene (SCENE_ICHIBA) { + if_time_range (9, 0, 9, 3) { + return_time (9, 0, 9, 3, 1) + } else if_time_range (9, 3, 9, 17) { + return_time (9, 3, 9, 17, 38) + } else if_time_range (11, 43, 11, 57) { + return_time (11, 43, 11, 57, 52) + } else if_time_range (11, 57, 12, 0) { + return_time (11, 57, 12, 0, 2) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (9, 3, 9, 17) { + return_time (9, 3, 9, 17, 39) + } else if_time_range (9, 17, 9, 31) { + return_time (9, 17, 9, 31, 40) + } else if_time_range (9, 31, 9, 35) { + return_time (9, 31, 9, 35, 3) + } else if_time_range (9, 35, 9, 49) { + return_time (9, 35, 9, 49, 41) + } else if_time_range (10, 57, 11, 11) { + return_time (10, 57, 11, 11, 47) + } else if_time_range (11, 11, 11, 25) { + return_time (11, 11, 11, 25, 48) + } else if_time_range (11, 25, 11, 29) { + return_time (11, 25, 11, 29, 7) + } else if_time_range (11, 29, 11, 43) { + return_time (11, 29, 11, 43, 50) + } else { + return_none + } + } else if_scene (SCENE_BACKTOWN) { + if_time_range (9, 49, 10, 3) { + return_time (9, 49, 10, 3, 42) + } else if_time_range (10, 3, 10, 7) { + return_time (10, 3, 10, 7, 4) + } else if_time_range (10, 7, 10, 21) { + return_time (10, 7, 10, 21, 43) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (10, 21, 10, 35) { + return_time (10, 21, 10, 35, 44) + } else if_time_range (10, 35, 10, 39) { + return_time (10, 35, 10, 39, 5) + } else if_time_range (10, 39, 10, 53) { + return_time (10, 39, 10, 53, 45) + } else if_time_range (10, 53, 10, 57) { + return_time (10, 53, 10, 57, 6) + } else if_time_range (10, 57, 11, 11) { + return_time (10, 57, 11, 11, 46) + } else if_time_range (11, 11, 11, 25) { + return_time (11, 11, 11, 25, 49) + } else if_time_range (11, 25, 11, 29) { + return_time (11, 25, 11, 29, 7) + } else if_time_range (11, 29, 11, 43) { + return_time (11, 29, 11, 43, 51) + } else { + return_none + } + } else { + return_none + } + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_time (12, 0, 13, 1, 9) + } else { + return_none + } + } else if_time_range (13, 1, 15, 0) { + if_scene (SCENE_ICHIBA) { + if_time_range (13, 1, 13, 4) { + return_time (13, 1, 13, 4, 1) + } else if_time_range (13, 4, 13, 21) { + return_time (13, 4, 13, 21, 53) + } else if_time_range (14, 48, 14, 56) { + return_time (14, 48, 14, 56, 62) + } else if_time_range (14, 56, 15, 0) { + return_time (14, 56, 15, 0, 2) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (13, 4, 13, 21) { + return_time (13, 4, 13, 21, 54) + } else if_time_range (13, 21, 13, 39) { + return_time (13, 21, 13, 39, 55) + } else if_time_range (14, 38, 14, 48) { + return_time (14, 38, 14, 48, 60) + } else if_time_range (14, 48, 14, 56) { + return_time (14, 48, 14, 56, 61) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (13, 39, 13, 56) { + return_time (13, 39, 13, 56, 56) + } else if_time_range (13, 56, 14, 0) { + return_time (13, 56, 14, 0, 10) + } else if_time_range (14, 26, 14, 30) { + return_time (14, 26, 14, 30, 11) + } else if_time_range (14, 30, 14, 38) { + return_time (14, 30, 14, 38, 59) + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (13, 56, 14, 0) { + return_time (13, 56, 14, 0, 12) + } else if_time_range (14, 0, 14, 8) { + return_time (14, 0, 14, 8, 57) + } else if_time_range (14, 8, 14, 18) { + return_time (14, 8, 14, 18, 16) + } else if_time_range (14, 18, 14, 26) { + return_time (14, 18, 14, 26, 58) + } else if_time_range (14, 26, 14, 30) { + return_time (14, 26, 14, 30, 13) + } else { + return_none + } + } else { + return_none + } + } else if_time_range (15, 0, 0, 5) { + if_scene (SCENE_POSTHOUSE) { + return_time (15, 0, 0, 5, 8) + } else { + return_none + } + } else { + return_none + } + } else if_day (2) { + if_week_event_reg (WEEKEVENTREG_28_08) { + if_time_range (9, 0, 12, 0) { + branch (label_0x117) + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_time (12, 0, 13, 1, 21) + } else { + return_none + } + } else if_time_range (13, 1, 17, 0) { + label_0x315: + if_scene (SCENE_ICHIBA) { + if_time_range (13, 1, 13, 4) { + return_time (13, 1, 13, 4, 1) + } else if_time_range (13, 4, 13, 15) { + return_time (13, 4, 13, 15, 63) + } else if_time_range (16, 35, 16, 57) { + return_time (16, 35, 16, 57, 73) + } else if_time_range (16, 57, 17, 0) { + return_time (16, 57, 17, 0, 2) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (13, 4, 13, 15) { + return_time (13, 4, 13, 15, 64) + } else if_time_range (13, 15, 13, 30) { + return_time (13, 15, 13, 30, 65) + } else if_time_range (13, 52, 14, 45) { + return_time (13, 52, 14, 45, 67) + } else if_time_range (16, 15, 16, 35) { + return_time (16, 15, 16, 35, 72) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (13, 30, 13, 52) { + return_time (13, 30, 13, 52, 66) + } else if_time_range (13, 52, 14, 50) { + return_time (13, 52, 14, 50, 68) + } else { + return_none + } + } else if_scene (SCENE_ALLEY) { + if_time_range (14, 45, 15, 5) { + return_time (14, 45, 15, 5, 70) + } else if_day (2) { + if_time_range (15, 5, 15, 20) { + return_time (15, 5, 15, 20, 23) + } else if_time_range (15, 20, 15, 25) { + return_time (15, 20, 15, 25, 80) + } else if_time_range (15, 25, 15, 40) { + return_time (15, 25, 15, 40, 17) + } else if_time_range (15, 40, 16, 15) { + return_time (15, 40, 16, 15, 81) + } else { + return_none + } + } else if_time_range (15, 5, 15, 20) { + return_time (15, 5, 15, 20, 23) + } else if_time_range (15, 20, 15, 50) { + return_time (15, 20, 15, 50, 25) + } else if_time_range (15, 50, 16, 15) { + return_time (15, 50, 16, 15, 71) + } else { + return_l (0) + } + } else { + return_none + } + } else if_time_range (17, 0, 0, 5) { + if_scene (SCENE_POSTHOUSE) { + return_time (17, 0, 0, 5, 8) + } else { + return_none + } + } else { + return_none + } + } else if_time_range (9, 0, 12, 0) { + branch (label_0x117) + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_time (12, 0, 13, 1, 20) + } else { + return_none + } + } else if_time_range (13, 1, 15, 0) { + if_scene (SCENE_POSTHOUSE) { + return_l (14) + } else { + return_none + } + } else if_time_range (0, 0, 2, 0) { + if_scene (SCENE_ICHIBA) { + if_time_range (0, 0, 0, 4) { + return_time (0, 0, 0, 4, 1) + } else if_time_range (0, 4, 0, 31) { + return_time (0, 4, 0, 31, 74) + } else if_time_range (1, 29, 1, 56) { + return_time (1, 29, 1, 56, 79) + } else if_time_range (1, 56, 2, 0) { + return_time (1, 56, 2, 0, 2) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (0, 4, 0, 31) { + return_time (0, 4, 0, 31, 75) + } else if_time_range (0, 31, 0, 58) { + return_time (0, 31, 0, 58, 76) + } else if_time_range (0, 58, 1, 2) { + return_time (0, 58, 1, 2, 18) + } else if_time_range (1, 2, 1, 29) { + return_time (1, 2, 1, 29, 77) + } else if_time_range (1, 29, 1, 56) { + return_time (1, 29, 1, 56, 78) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } + } else if_day (3) { + if_week_event_reg (WEEKEVENTREG_28_08) { + if_time_range (9, 0, 12, 0) { + branch (label_0x117) + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_l (20) + } else { + return_none + } + } else if_time_range (13, 1, 15, 0) { + branch (label_0x446) + } else if_time_range (18, 0, 6, 0) { + if_scene (SCENE_POSTHOUSE) { + return_l (24) + } else { + return_none + } + } else { + return_none + } + } else if_week_event_reg (WEEKEVENTREG_28_10) { + if_time_range (9, 0, 12, 0) { + branch (label_0x117) + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_time (12, 0, 13, 1, 21) + } else { + return_none + } + } else if_time_range (13, 1, 17, 0) { + branch (label_0x315) + } else if_time_range (18, 0, 6, 0) { + if_scene (SCENE_POSTHOUSE) { + return_l (24) + } else { + return_none + } + } else { + return_none + } + } else if_time_range (9, 0, 12, 0) { + branch (label_0x117) + } else if_time_range (12, 0, 13, 1) { + if_scene (SCENE_POSTHOUSE) { + return_l (22) + } else { + return_none + } + } else if_time_range (13, 1, 15, 0) { + label_0x446: + if_scene (SCENE_ICHIBA) { + if_time_range (13, 0, 13, 1) { + return_time (13, 0, 13, 1, 1) + } else if_time_range (13, 5, 13, 15) { + return_time (13, 5, 13, 15, 38) + } else if_time_range (14, 45, 14, 55) { + return_time (14, 45, 14, 55, 52) + } else if_time_range (14, 55, 15, 0) { + return_time (14, 55, 15, 0, 2) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (13, 5, 13, 15) { + return_time (13, 5, 13, 15, 39) + } else if_time_range (13, 15, 13, 25) { + return_time (13, 15, 13, 25, 40) + } else if_time_range (13, 25, 13, 35) { + return_time (13, 25, 13, 35, 41) + } else if_time_range (14, 15, 14, 25) { + return_time (14, 15, 14, 25, 47) + } else if_time_range (14, 25, 14, 35) { + return_time (14, 25, 14, 35, 48) + } else if_time_range (14, 35, 14, 45) { + return_time (14, 35, 14, 45, 50) + } else { + return_none + } + } else if_scene (SCENE_BACKTOWN) { + if_time_range (13, 35, 13, 45) { + return_time (13, 35, 13, 45, 42) + } else if_time_range (13, 45, 13, 55) { + return_time (13, 45, 13, 55, 43) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (13, 55, 14, 5) { + return_time (13, 55, 14, 5, 44) + } else if_time_range (14, 5, 14, 15) { + return_time (14, 5, 14, 15, 45) + } else if_time_range (14, 15, 14, 25) { + return_time (14, 15, 14, 25, 46) + } else if_time_range (14, 25, 14, 35) { + return_time (14, 25, 14, 35, 49) + } else if_time_range (14, 35, 14, 45) { + return_time (14, 35, 14, 45, 51) + } else { + return_none + } + } else { + return_none + } + } else if_time_range (18, 0, 6, 0) { + if_scene (SCENE_POSTHOUSE) { + return_l (24) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} + +D_80AFB30C { + if_scene (SCENE_POSTHOUSE) { + if_time_range (0, 0, 0, 10) { + return_time (0, 0, 0, 10, 82) + } else if_time_range (0, 10, 0, 13) { + return_l (27) + } else if_time_range (0, 13, 0, 23) { + return_time (0, 13, 0, 23, 83) + } else if_time_range (0, 23, 0, 26) { + return_time (0, 23, 0, 26, 32) + } else { + return_none + } + } else if_scene (SCENE_ICHIBA) { + if_time_range (0, 23, 0, 26) { + return_time (0, 23, 0, 26, 33) + } else if_time_range (0, 26, 0, 36) { + return_time (0, 26, 0, 36, 84) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (0, 26, 0, 36) { + return_time (0, 26, 0, 36, 85) + } else if_time_range (0, 36, 0, 46) { + return_time (0, 36, 0, 46, 86) + } else { + return_none + } + } else if_scene (SCENE_TOWN) { + if_time_range (0, 46, 0, 56) { + return_time (0, 46, 0, 56, 87) + } else if_time_range (0, 56, 0, 59) { + return_time (0, 56, 0, 59, 34) + } else { + return_none + } + } else if_scene (SCENE_MILK_BAR) { + if_time_range (0, 56, 0, 59) { + return_time (0, 56, 0, 59, 36) + } else if_time_range (0, 59, 1, 9) { + return_time (0, 59, 1, 9, 88) + } else if_time_range (1, 9, 1, 40) { + return_time (1, 9, 1, 40, 28) + } else { + return_none + } + } else { + return_none + } +} + +D_80AFB3C0 { + if_scene (SCENE_TOWN) { + if_time_range (0, 10, 0, 13) { + return_time (0, 10, 0, 13, 35) + } else if_time_range (0, 13, 0, 23) { + return_time (0, 13, 0, 23, 90) + } else { + return_none + } + } else if_scene (SCENE_MILK_BAR) { + if_time_range (0, 0, 0, 10) { + return_time (0, 0, 0, 10, 89) + } else if_time_range (0, 10, 0, 13) { + return_time (0, 10, 0, 13, 37) + } else { + return_none + } + } else { + return_none + } +} + +D_80AFB3FC { + if_scene (SCENE_TOWN) { + if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 29) + } else if_time_range (5, 0, 5, 10) { + return_time (5, 0, 5, 10, 91) + } else { + return_none + } + } else { + return_none + } +} + +D_80AFB41C { + if_scene (SCENE_TOWN) { + if_time_range (0, 0, 0, 10) { + return_time (0, 0, 0, 10, 91) + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 0dce760a8b..a53352736a 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -20,366 +20,7 @@ void EnPm_Draw(Actor* thisx, PlayState* play); void func_80AFA4D0(EnPm* this, PlayState* play); void func_80AFA5FC(EnPm* this, PlayState* play); -static u8 D_80AFAD80[] = { - /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(1, 0x240 - 0x005), - /* 0x005 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x00C), - /* 0x00C */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x10C - 0x013), - /* 0x013 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x02B - 0x019), - /* 0x019 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 0, 0, 5, 0x020 - 0x01F), - /* 0x01F */ SCHEDULE_CMD_RET_NONE(), - /* 0x020 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x02A - 0x024), - /* 0x024 */ SCHEDULE_CMD_RET_TIME(15, 0, 0, 5, 8), - /* 0x02A */ SCHEDULE_CMD_RET_NONE(), - /* 0x02B */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x060 - 0x02F), - /* 0x02F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 13, 4, 0x05A - 0x035), - /* 0x035 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 4, 13, 21, 0x054 - 0x03B), - /* 0x03B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 48, 14, 56, 0x04E - 0x041), - /* 0x041 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 56, 15, 0, 0x048 - 0x047), - /* 0x047 */ SCHEDULE_CMD_RET_NONE(), - /* 0x048 */ SCHEDULE_CMD_RET_TIME(14, 56, 15, 0, 2), - /* 0x04E */ SCHEDULE_CMD_RET_TIME(14, 48, 14, 56, 62), - /* 0x054 */ SCHEDULE_CMD_RET_TIME(13, 4, 13, 21, 53), - /* 0x05A */ SCHEDULE_CMD_RET_TIME(13, 1, 13, 4, 1), - /* 0x060 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x095 - 0x064), - /* 0x064 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 4, 13, 21, 0x08F - 0x06A), - /* 0x06A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 21, 13, 39, 0x089 - 0x070), - /* 0x070 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 38, 14, 48, 0x083 - 0x076), - /* 0x076 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 48, 14, 56, 0x07D - 0x07C), - /* 0x07C */ SCHEDULE_CMD_RET_NONE(), - /* 0x07D */ SCHEDULE_CMD_RET_TIME(14, 48, 14, 56, 61), - /* 0x083 */ SCHEDULE_CMD_RET_TIME(14, 38, 14, 48, 60), - /* 0x089 */ SCHEDULE_CMD_RET_TIME(13, 21, 13, 39, 55), - /* 0x08F */ SCHEDULE_CMD_RET_TIME(13, 4, 13, 21, 54), - /* 0x095 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x0CA - 0x099), - /* 0x099 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 39, 13, 56, 0x0C4 - 0x09F), - /* 0x09F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 56, 14, 0, 0x0BE - 0x0A5), - /* 0x0A5 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 26, 14, 30, 0x0B8 - 0x0AB), - /* 0x0AB */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 30, 14, 38, 0x0B2 - 0x0B1), - /* 0x0B1 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B2 */ SCHEDULE_CMD_RET_TIME(14, 30, 14, 38, 59), - /* 0x0B8 */ SCHEDULE_CMD_RET_TIME(14, 26, 14, 30, 11), - /* 0x0BE */ SCHEDULE_CMD_RET_TIME(13, 56, 14, 0, 10), - /* 0x0C4 */ SCHEDULE_CMD_RET_TIME(13, 39, 13, 56, 56), - /* 0x0CA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x10B - 0x0CE), - /* 0x0CE */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 56, 14, 0, 0x105 - 0x0D4), - /* 0x0D4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 0, 14, 8, 0x0FF - 0x0DA), - /* 0x0DA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 8, 14, 18, 0x0F9 - 0x0E0), - /* 0x0E0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 18, 14, 26, 0x0F3 - 0x0E6), - /* 0x0E6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 26, 14, 30, 0x0ED - 0x0EC), - /* 0x0EC */ SCHEDULE_CMD_RET_NONE(), - /* 0x0ED */ SCHEDULE_CMD_RET_TIME(14, 26, 14, 30, 13), - /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(14, 18, 14, 26, 58), - /* 0x0F9 */ SCHEDULE_CMD_RET_TIME(14, 8, 14, 18, 16), - /* 0x0FF */ SCHEDULE_CMD_RET_TIME(14, 0, 14, 8, 57), - /* 0x105 */ SCHEDULE_CMD_RET_TIME(13, 56, 14, 0, 12), - /* 0x10B */ SCHEDULE_CMD_RET_NONE(), - /* 0x10C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x116 - 0x110), - /* 0x110 */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 9), - /* 0x116 */ SCHEDULE_CMD_RET_NONE(), - /* 0x117 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x14C - 0x11B), - /* 0x11B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 0, 9, 3, 0x146 - 0x121), - /* 0x121 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 3, 9, 17, 0x140 - 0x127), - /* 0x127 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 43, 11, 57, 0x13A - 0x12D), - /* 0x12D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 57, 12, 0, 0x134 - 0x133), - /* 0x133 */ SCHEDULE_CMD_RET_NONE(), - /* 0x134 */ SCHEDULE_CMD_RET_TIME(11, 57, 12, 0, 2), - /* 0x13A */ SCHEDULE_CMD_RET_TIME(11, 43, 11, 57, 52), - /* 0x140 */ SCHEDULE_CMD_RET_TIME(9, 3, 9, 17, 38), - /* 0x146 */ SCHEDULE_CMD_RET_TIME(9, 0, 9, 3, 1), - /* 0x14C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x1B1 - 0x150), - /* 0x150 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 3, 9, 17, 0x1AB - 0x156), - /* 0x156 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 17, 9, 31, 0x1A5 - 0x15C), - /* 0x15C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 31, 9, 35, 0x19F - 0x162), - /* 0x162 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 35, 9, 49, 0x199 - 0x168), - /* 0x168 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 57, 11, 11, 0x193 - 0x16E), - /* 0x16E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 11, 11, 25, 0x18D - 0x174), - /* 0x174 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 25, 11, 29, 0x187 - 0x17A), - /* 0x17A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 29, 11, 43, 0x181 - 0x180), - /* 0x180 */ SCHEDULE_CMD_RET_NONE(), - /* 0x181 */ SCHEDULE_CMD_RET_TIME(11, 29, 11, 43, 50), - /* 0x187 */ SCHEDULE_CMD_RET_TIME(11, 25, 11, 29, 7), - /* 0x18D */ SCHEDULE_CMD_RET_TIME(11, 11, 11, 25, 48), - /* 0x193 */ SCHEDULE_CMD_RET_TIME(10, 57, 11, 11, 47), - /* 0x199 */ SCHEDULE_CMD_RET_TIME(9, 35, 9, 49, 41), - /* 0x19F */ SCHEDULE_CMD_RET_TIME(9, 31, 9, 35, 3), - /* 0x1A5 */ SCHEDULE_CMD_RET_TIME(9, 17, 9, 31, 40), - /* 0x1AB */ SCHEDULE_CMD_RET_TIME(9, 3, 9, 17, 39), - /* 0x1B1 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_BACKTOWN, 0x1DA - 0x1B5), - /* 0x1B5 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 49, 10, 3, 0x1D4 - 0x1BB), - /* 0x1BB */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 3, 10, 7, 0x1CE - 0x1C1), - /* 0x1C1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 7, 10, 21, 0x1C8 - 0x1C7), - /* 0x1C7 */ SCHEDULE_CMD_RET_NONE(), - /* 0x1C8 */ SCHEDULE_CMD_RET_TIME(10, 7, 10, 21, 43), - /* 0x1CE */ SCHEDULE_CMD_RET_TIME(10, 3, 10, 7, 4), - /* 0x1D4 */ SCHEDULE_CMD_RET_TIME(9, 49, 10, 3, 42), - /* 0x1DA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x23F - 0x1DE), - /* 0x1DE */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 21, 10, 35, 0x239 - 0x1E4), - /* 0x1E4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 35, 10, 39, 0x233 - 0x1EA), - /* 0x1EA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 39, 10, 53, 0x22D - 0x1F0), - /* 0x1F0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 53, 10, 57, 0x227 - 0x1F6), - /* 0x1F6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 57, 11, 11, 0x221 - 0x1FC), - /* 0x1FC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 11, 11, 25, 0x21B - 0x202), - /* 0x202 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 25, 11, 29, 0x215 - 0x208), - /* 0x208 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 29, 11, 43, 0x20F - 0x20E), - /* 0x20E */ SCHEDULE_CMD_RET_NONE(), - /* 0x20F */ SCHEDULE_CMD_RET_TIME(11, 29, 11, 43, 51), - /* 0x215 */ SCHEDULE_CMD_RET_TIME(11, 25, 11, 29, 7), - /* 0x21B */ SCHEDULE_CMD_RET_TIME(11, 11, 11, 25, 49), - /* 0x221 */ SCHEDULE_CMD_RET_TIME(10, 57, 11, 11, 46), - /* 0x227 */ SCHEDULE_CMD_RET_TIME(10, 53, 10, 57, 6), - /* 0x22D */ SCHEDULE_CMD_RET_TIME(10, 39, 10, 53, 45), - /* 0x233 */ SCHEDULE_CMD_RET_TIME(10, 35, 10, 39, 5), - /* 0x239 */ SCHEDULE_CMD_RET_TIME(10, 21, 10, 35, 44), - /* 0x23F */ SCHEDULE_CMD_RET_NONE(), - /* 0x240 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x414 - 0x245), - /* 0x245 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x2EF - 0x24A), - /* 0x24A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x251), - /* 0x251 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x2E4 - 0x258), - /* 0x258 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x2DC - 0x25E), - /* 0x25E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 2, 0, 0x265 - 0x264), - /* 0x264 */ SCHEDULE_CMD_RET_NONE(), - /* 0x265 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x29A - 0x269), - /* 0x269 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 4, 0x294 - 0x26F), - /* 0x26F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 4, 0, 31, 0x28E - 0x275), - /* 0x275 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 29, 1, 56, 0x288 - 0x27B), - /* 0x27B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 56, 2, 0, 0x282 - 0x281), - /* 0x281 */ SCHEDULE_CMD_RET_NONE(), - /* 0x282 */ SCHEDULE_CMD_RET_TIME(1, 56, 2, 0, 2), - /* 0x288 */ SCHEDULE_CMD_RET_TIME(1, 29, 1, 56, 79), - /* 0x28E */ SCHEDULE_CMD_RET_TIME(0, 4, 0, 31, 74), - /* 0x294 */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 4, 1), - /* 0x29A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x2DB - 0x29E), - /* 0x29E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 4, 0, 31, 0x2D5 - 0x2A4), - /* 0x2A4 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 31, 0, 58, 0x2CF - 0x2AA), - /* 0x2AA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 58, 1, 2, 0x2C9 - 0x2B0), - /* 0x2B0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 2, 1, 29, 0x2C3 - 0x2B6), - /* 0x2B6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 29, 1, 56, 0x2BD - 0x2BC), - /* 0x2BC */ SCHEDULE_CMD_RET_NONE(), - /* 0x2BD */ SCHEDULE_CMD_RET_TIME(1, 29, 1, 56, 78), - /* 0x2C3 */ SCHEDULE_CMD_RET_TIME(1, 2, 1, 29, 77), - /* 0x2C9 */ SCHEDULE_CMD_RET_TIME(0, 58, 1, 2, 18), - /* 0x2CF */ SCHEDULE_CMD_RET_TIME(0, 31, 0, 58, 76), - /* 0x2D5 */ SCHEDULE_CMD_RET_TIME(0, 4, 0, 31, 75), - /* 0x2DB */ SCHEDULE_CMD_RET_NONE(), - /* 0x2DC */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x2E3 - 0x2E0), - /* 0x2E0 */ SCHEDULE_CMD_RET_VAL_L(14), - /* 0x2E3 */ SCHEDULE_CMD_RET_NONE(), - /* 0x2E4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x2EE - 0x2E8), - /* 0x2E8 */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 20), - /* 0x2EE */ SCHEDULE_CMD_RET_NONE(), - /* 0x2EF */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x2F6), - /* 0x2F6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x409 - 0x2FD), - /* 0x2FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 17, 0, 0x315 - 0x303), - /* 0x303 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(17, 0, 0, 5, 0x30A - 0x309), - /* 0x309 */ SCHEDULE_CMD_RET_NONE(), - /* 0x30A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x314 - 0x30E), - /* 0x30E */ SCHEDULE_CMD_RET_TIME(17, 0, 0, 5, 8), - /* 0x314 */ SCHEDULE_CMD_RET_NONE(), - /* 0x315 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x34A - 0x319), - /* 0x319 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 13, 4, 0x344 - 0x31F), - /* 0x31F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 4, 13, 15, 0x33E - 0x325), - /* 0x325 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 35, 16, 57, 0x338 - 0x32B), - /* 0x32B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 57, 17, 0, 0x332 - 0x331), - /* 0x331 */ SCHEDULE_CMD_RET_NONE(), - /* 0x332 */ SCHEDULE_CMD_RET_TIME(16, 57, 17, 0, 2), - /* 0x338 */ SCHEDULE_CMD_RET_TIME(16, 35, 16, 57, 73), - /* 0x33E */ SCHEDULE_CMD_RET_TIME(13, 4, 13, 15, 63), - /* 0x344 */ SCHEDULE_CMD_RET_TIME(13, 1, 13, 4, 1), - /* 0x34A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x37F - 0x34E), - /* 0x34E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 4, 13, 15, 0x379 - 0x354), - /* 0x354 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 15, 13, 30, 0x373 - 0x35A), - /* 0x35A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 52, 14, 45, 0x36D - 0x360), - /* 0x360 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 15, 16, 35, 0x367 - 0x366), - /* 0x366 */ SCHEDULE_CMD_RET_NONE(), - /* 0x367 */ SCHEDULE_CMD_RET_TIME(16, 15, 16, 35, 72), - /* 0x36D */ SCHEDULE_CMD_RET_TIME(13, 52, 14, 45, 67), - /* 0x373 */ SCHEDULE_CMD_RET_TIME(13, 15, 13, 30, 65), - /* 0x379 */ SCHEDULE_CMD_RET_TIME(13, 4, 13, 15, 64), - /* 0x37F */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x39C - 0x383), - /* 0x383 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 30, 13, 52, 0x396 - 0x389), - /* 0x389 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 52, 14, 50, 0x390 - 0x38F), - /* 0x38F */ SCHEDULE_CMD_RET_NONE(), - /* 0x390 */ SCHEDULE_CMD_RET_TIME(13, 52, 14, 50, 68), - /* 0x396 */ SCHEDULE_CMD_RET_TIME(13, 30, 13, 52, 66), - /* 0x39C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x408 - 0x3A0), - /* 0x3A0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 45, 15, 5, 0x402 - 0x3A6), - /* 0x3A6 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x3DB - 0x3AA), - /* 0x3AA */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 5, 15, 20, 0x3D5 - 0x3B0), - /* 0x3B0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 20, 15, 25, 0x3CF - 0x3B6), - /* 0x3B6 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 40, 0x3C9 - 0x3BC), - /* 0x3BC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 40, 16, 15, 0x3C3 - 0x3C2), - /* 0x3C2 */ SCHEDULE_CMD_RET_NONE(), - /* 0x3C3 */ SCHEDULE_CMD_RET_TIME(15, 40, 16, 15, 81), - /* 0x3C9 */ SCHEDULE_CMD_RET_TIME(15, 25, 15, 40, 17), - /* 0x3CF */ SCHEDULE_CMD_RET_TIME(15, 20, 15, 25, 80), - /* 0x3D5 */ SCHEDULE_CMD_RET_TIME(15, 5, 15, 20, 23), - /* 0x3DB */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 5, 15, 20, 0x3FC - 0x3E1), - /* 0x3E1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 20, 15, 50, 0x3F6 - 0x3E7), - /* 0x3E7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 15, 0x3F0 - 0x3ED), - /* 0x3ED */ SCHEDULE_CMD_RET_VAL_L(0), - /* 0x3F0 */ SCHEDULE_CMD_RET_TIME(15, 50, 16, 15, 71), - /* 0x3F6 */ SCHEDULE_CMD_RET_TIME(15, 20, 15, 50, 25), - /* 0x3FC */ SCHEDULE_CMD_RET_TIME(15, 5, 15, 20, 23), - /* 0x402 */ SCHEDULE_CMD_RET_TIME(14, 45, 15, 5, 70), - /* 0x408 */ SCHEDULE_CMD_RET_NONE(), - /* 0x409 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x413 - 0x40D), - /* 0x40D */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 21), - /* 0x413 */ SCHEDULE_CMD_RET_NONE(), - /* 0x414 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x588 - 0x419), - /* 0x419 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x55D - 0x41E), - /* 0x41E */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_10, 0x52F - 0x423), - /* 0x423 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x42A), - /* 0x42A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x527 - 0x431), - /* 0x431 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x446 - 0x437), - /* 0x437 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x43E - 0x43D), - /* 0x43D */ SCHEDULE_CMD_RET_NONE(), - /* 0x43E */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x445 - 0x442), - /* 0x442 */ SCHEDULE_CMD_RET_VAL_L(24), - /* 0x445 */ SCHEDULE_CMD_RET_NONE(), - /* 0x446 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x47B - 0x44A), - /* 0x44A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 0, 13, 1, 0x475 - 0x450), - /* 0x450 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 5, 13, 15, 0x46F - 0x456), - /* 0x456 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 45, 14, 55, 0x469 - 0x45C), - /* 0x45C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 55, 15, 0, 0x463 - 0x462), - /* 0x462 */ SCHEDULE_CMD_RET_NONE(), - /* 0x463 */ SCHEDULE_CMD_RET_TIME(14, 55, 15, 0, 2), - /* 0x469 */ SCHEDULE_CMD_RET_TIME(14, 45, 14, 55, 52), - /* 0x46F */ SCHEDULE_CMD_RET_TIME(13, 5, 13, 15, 38), - /* 0x475 */ SCHEDULE_CMD_RET_TIME(13, 0, 13, 1, 1), - /* 0x47B */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x4C8 - 0x47F), - /* 0x47F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 5, 13, 15, 0x4C2 - 0x485), - /* 0x485 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 15, 13, 25, 0x4BC - 0x48B), - /* 0x48B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 25, 13, 35, 0x4B6 - 0x491), - /* 0x491 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 15, 14, 25, 0x4B0 - 0x497), - /* 0x497 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 25, 14, 35, 0x4AA - 0x49D), - /* 0x49D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 35, 14, 45, 0x4A4 - 0x4A3), - /* 0x4A3 */ SCHEDULE_CMD_RET_NONE(), - /* 0x4A4 */ SCHEDULE_CMD_RET_TIME(14, 35, 14, 45, 50), - /* 0x4AA */ SCHEDULE_CMD_RET_TIME(14, 25, 14, 35, 48), - /* 0x4B0 */ SCHEDULE_CMD_RET_TIME(14, 15, 14, 25, 47), - /* 0x4B6 */ SCHEDULE_CMD_RET_TIME(13, 25, 13, 35, 41), - /* 0x4BC */ SCHEDULE_CMD_RET_TIME(13, 15, 13, 25, 40), - /* 0x4C2 */ SCHEDULE_CMD_RET_TIME(13, 5, 13, 15, 39), - /* 0x4C8 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_BACKTOWN, 0x4E5 - 0x4CC), - /* 0x4CC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 35, 13, 45, 0x4DF - 0x4D2), - /* 0x4D2 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 45, 13, 55, 0x4D9 - 0x4D8), - /* 0x4D8 */ SCHEDULE_CMD_RET_NONE(), - /* 0x4D9 */ SCHEDULE_CMD_RET_TIME(13, 45, 13, 55, 43), - /* 0x4DF */ SCHEDULE_CMD_RET_TIME(13, 35, 13, 45, 42), - /* 0x4E5 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x526 - 0x4E9), - /* 0x4E9 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 55, 14, 5, 0x520 - 0x4EF), - /* 0x4EF */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 5, 14, 15, 0x51A - 0x4F5), - /* 0x4F5 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 15, 14, 25, 0x514 - 0x4FB), - /* 0x4FB */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 25, 14, 35, 0x50E - 0x501), - /* 0x501 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(14, 35, 14, 45, 0x508 - 0x507), - /* 0x507 */ SCHEDULE_CMD_RET_NONE(), - /* 0x508 */ SCHEDULE_CMD_RET_TIME(14, 35, 14, 45, 51), - /* 0x50E */ SCHEDULE_CMD_RET_TIME(14, 25, 14, 35, 49), - /* 0x514 */ SCHEDULE_CMD_RET_TIME(14, 15, 14, 25, 46), - /* 0x51A */ SCHEDULE_CMD_RET_TIME(14, 5, 14, 15, 45), - /* 0x520 */ SCHEDULE_CMD_RET_TIME(13, 55, 14, 5, 44), - /* 0x526 */ SCHEDULE_CMD_RET_NONE(), - /* 0x527 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x52E - 0x52B), - /* 0x52B */ SCHEDULE_CMD_RET_VAL_L(22), - /* 0x52E */ SCHEDULE_CMD_RET_NONE(), - /* 0x52F */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x536), - /* 0x536 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 13, 1, 0x552 - 0x53C), - /* 0x53C */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(13, 1, 17, 0, 0x315 - 0x543), - /* 0x543 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x54A - 0x549), - /* 0x549 */ SCHEDULE_CMD_RET_NONE(), - /* 0x54A */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x551 - 0x54E), - /* 0x54E */ SCHEDULE_CMD_RET_VAL_L(24), - /* 0x551 */ SCHEDULE_CMD_RET_NONE(), - /* 0x552 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x55C - 0x556), - /* 0x556 */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 21), - /* 0x55C */ SCHEDULE_CMD_RET_NONE(), - /* 0x55D */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x564), - /* 0x564 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 13, 1, 0x580 - 0x56A), - /* 0x56A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(13, 1, 15, 0, 0x446 - 0x571), - /* 0x571 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x578 - 0x577), - /* 0x577 */ SCHEDULE_CMD_RET_NONE(), - /* 0x578 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x57F - 0x57C), - /* 0x57C */ SCHEDULE_CMD_RET_VAL_L(24), - /* 0x57F */ SCHEDULE_CMD_RET_NONE(), - /* 0x580 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x587 - 0x584), - /* 0x584 */ SCHEDULE_CMD_RET_VAL_L(20), - /* 0x587 */ SCHEDULE_CMD_RET_NONE(), - /* 0x588 */ SCHEDULE_CMD_RET_NONE(), -}; - -static u8 D_80AFB30C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_POSTHOUSE, 0x32 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 10, 0x2C - 0x0A), - /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 10, 0, 13, 0x29 - 0x10), - /* 0x10 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 13, 0, 23, 0x23 - 0x16), - /* 0x16 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 23, 0, 26, 0x1D - 0x1C), - /* 0x1C */ SCHEDULE_CMD_RET_NONE(), - /* 0x1D */ SCHEDULE_CMD_RET_TIME(0, 23, 0, 26, 32), - /* 0x23 */ SCHEDULE_CMD_RET_TIME(0, 13, 0, 23, 83), - /* 0x29 */ SCHEDULE_CMD_RET_VAL_L(27), - /* 0x2C */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 10, 82), - /* 0x32 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x4F - 0x36), - /* 0x36 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 23, 0, 26, 0x49 - 0x3C), - /* 0x3C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 26, 0, 36, 0x43 - 0x42), - /* 0x42 */ SCHEDULE_CMD_RET_NONE(), - /* 0x43 */ SCHEDULE_CMD_RET_TIME(0, 26, 0, 36, 84), - /* 0x49 */ SCHEDULE_CMD_RET_TIME(0, 23, 0, 26, 33), - /* 0x4F */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x6C - 0x53), - /* 0x53 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 26, 0, 36, 0x66 - 0x59), - /* 0x59 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 36, 0, 46, 0x60 - 0x5F), - /* 0x5F */ SCHEDULE_CMD_RET_NONE(), - /* 0x60 */ SCHEDULE_CMD_RET_TIME(0, 36, 0, 46, 86), - /* 0x66 */ SCHEDULE_CMD_RET_TIME(0, 26, 0, 36, 85), - /* 0x6C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x89 - 0x70), - /* 0x70 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 46, 0, 56, 0x83 - 0x76), - /* 0x76 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 56, 0, 59, 0x7D - 0x7C), - /* 0x7C */ SCHEDULE_CMD_RET_NONE(), - /* 0x7D */ SCHEDULE_CMD_RET_TIME(0, 56, 0, 59, 34), - /* 0x83 */ SCHEDULE_CMD_RET_TIME(0, 46, 0, 56, 87), - /* 0x89 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0xB2 - 0x8D), - /* 0x8D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 56, 0, 59, 0xAC - 0x93), - /* 0x93 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 59, 1, 9, 0xA6 - 0x99), - /* 0x99 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 9, 1, 40, 0xA0 - 0x9F), - /* 0x9F */ SCHEDULE_CMD_RET_NONE(), - /* 0xA0 */ SCHEDULE_CMD_RET_TIME(1, 9, 1, 40, 28), - /* 0xA6 */ SCHEDULE_CMD_RET_TIME(0, 59, 1, 9, 88), - /* 0xAC */ SCHEDULE_CMD_RET_TIME(0, 56, 0, 59, 36), - /* 0xB2 */ SCHEDULE_CMD_RET_NONE(), -}; - -static u8 D_80AFB3C0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x1D - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 10, 0, 13, 0x17 - 0x0A), - /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 13, 0, 23, 0x11 - 0x10), - /* 0x10 */ SCHEDULE_CMD_RET_NONE(), - /* 0x11 */ SCHEDULE_CMD_RET_TIME(0, 13, 0, 23, 90), - /* 0x17 */ SCHEDULE_CMD_RET_TIME(0, 10, 0, 13, 35), - /* 0x1D */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0x3A - 0x21), - /* 0x21 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 10, 0x34 - 0x27), - /* 0x27 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 10, 0, 13, 0x2E - 0x2D), - /* 0x2D */ SCHEDULE_CMD_RET_NONE(), - /* 0x2E */ SCHEDULE_CMD_RET_TIME(0, 10, 0, 13, 37), - /* 0x34 */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 10, 89), - /* 0x3A */ SCHEDULE_CMD_RET_NONE(), -}; - -static u8 D_80AFB3FC[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x1D - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x17 - 0x0A), - /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(5, 0, 5, 10, 0x11 - 0x10), - /* 0x10 */ SCHEDULE_CMD_RET_NONE(), - /* 0x11 */ SCHEDULE_CMD_RET_TIME(5, 0, 5, 10, 91), - /* 0x17 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 29), - /* 0x1D */ SCHEDULE_CMD_RET_NONE(), -}; - -static u8 D_80AFB41C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x11 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 10, 0x0B - 0x0A), - /* 0x0A */ SCHEDULE_CMD_RET_NONE(), - /* 0x0B */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 10, 91), - /* 0x11 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Pm/scheduleScripts.schl.inc" static s32 D_80AFB430[] = { -1, 0, 4, 1, 0, 0, 1, 4, -1, -1, 15, 5, 0, 3, -1, -1, 1, 2, 11, 3, -1, -1, -1, 0, 0, 0, 0, 0, 1, 12, -1, @@ -1987,7 +1628,7 @@ void func_80AFA438(EnPm* this, PlayState* play) { } void func_80AFA4D0(EnPm* this, PlayState* play) { - static u8* D_80AFB900[] = { + static ScheduleScript* D_80AFB900[] = { D_80AFAD80, D_80AFB30C, D_80AFB3C0, D_80AFB3FC, D_80AFB41C, }; u16 time = CURRENT_TIME; diff --git a/src/overlays/actors/ovl_En_Pst/scheduleScripts.schl b/src/overlays/actors/ovl_En_Pst/scheduleScripts.schl new file mode 100644 index 0000000000..317e979648 --- /dev/null +++ b/src/overlays/actors/ovl_En_Pst/scheduleScripts.schl @@ -0,0 +1,39 @@ +D_80B2C200 { + if_time_range (9, 31, 9, 35) { + return_l (POSTBOX_SCH_CHECKED_BY_POSTMAN) + } else { + return_l (POSTBOX_SCH_AVAILABLE) + } +} + +D_80B2C20C { + if_time_range (10, 3, 10, 7) { + return_l (POSTBOX_SCH_CHECKED_BY_POSTMAN) + } else { + return_l (POSTBOX_SCH_AVAILABLE) + } +} + +D_80B2C218 { + if_time_range (10, 35, 10, 39) { + return_l (POSTBOX_SCH_CHECKED_BY_POSTMAN) + } else { + return_l (POSTBOX_SCH_AVAILABLE) + } +} + +D_80B2C224 { + if_time_range (10, 53, 10, 57) { + return_l (POSTBOX_SCH_CHECKED_BY_POSTMAN) + } else { + return_l (POSTBOX_SCH_AVAILABLE) + } +} + +D_80B2C230 { + if_time_range (11, 25, 11, 29) { + return_l (POSTBOX_SCH_CHECKED_BY_POSTMAN) + } else { + return_l (POSTBOX_SCH_AVAILABLE) + } +} diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index 67f2e99797..56b4af9253 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -28,35 +28,7 @@ typedef enum { /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM } PostboxBehaviour; -static u8 D_80B2C200[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 31, 9, 35, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_AVAILABLE), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_CHECKED_BY_POSTMAN), -}; - -static u8 D_80B2C20C[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 3, 10, 7, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_AVAILABLE), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_CHECKED_BY_POSTMAN), -}; - -static u8 D_80B2C218[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 35, 10, 39, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_AVAILABLE), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_CHECKED_BY_POSTMAN), -}; - -static u8 D_80B2C224[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 53, 10, 57, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_AVAILABLE), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_CHECKED_BY_POSTMAN), -}; - -static u8 D_80B2C230[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(11, 25, 11, 29, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_AVAILABLE), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(POSTBOX_SCH_CHECKED_BY_POSTMAN), -}; +#include "build/src/overlays/actors/ovl_En_Pst/scheduleScripts.schl.inc" s32 D_80B2C23C[] = { 0x0E27840C, 0x0E00FF2B, 0x00000031, 0x00392800, 0x0A122C27, 0xA40C2F00, 0x000C1012, @@ -371,7 +343,7 @@ void EnPst_HandleSchedule(EnPst* this, PlayState* play) { } void EnPst_FollowSchedule(EnPst* this, PlayState* play) { - static u8* sScheduleScripts[] = { + static ScheduleScript* sScheduleScripts[] = { D_80B2C200, D_80B2C20C, D_80B2C218, D_80B2C224, D_80B2C230, }; s16 params = this->actor.params; diff --git a/src/overlays/actors/ovl_En_Suttari/scheduleScripts.schl b/src/overlays/actors/ovl_En_Suttari/scheduleScripts.schl new file mode 100644 index 0000000000..8d3b4f0d3b --- /dev/null +++ b/src/overlays/actors/ovl_En_Suttari/scheduleScripts.schl @@ -0,0 +1,65 @@ +D_80BAE820 { + if_day (2) { + if_week_event_reg (WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) { + return_none + } else if_scene (SCENE_ICHIBA) { + if_time_range (0, 0, 0, 25) { + return_time (0, 0, 0, 25, 13) + } else if_time_range (0, 25, 0, 30) { + return_time (0, 25, 0, 30, 6) + } else if_time_range (1, 15, 1, 20) { + return_time (1, 15, 1, 20, 7) + } else if_time_range (1, 20, 1, 45) { + return_time (1, 20, 1, 45, 14) + } else { + return_none + } + } else if_scene (SCENE_AYASHIISHOP) { + if_time_range (0, 25, 0, 30) { + return_time (0, 25, 0, 30, 8) + } else if_time_range (0, 30, 0, 45) { + return_time (0, 30, 0, 45, 10) + } else if_time_range (0, 45, 1, 0) { + return_time (0, 45, 1, 0, 2) + } else if_time_range (1, 0, 1, 15) { + return_time (1, 0, 1, 15, 11) + } else if_time_range (1, 15, 1, 20) { + return_time (1, 15, 1, 20, 9) + } else { + return_none + } + } else { + return_none + } + } else if_day (1) { + if_scene (SCENE_BACKTOWN) { + if_time_range (18, 0, 0, 20) { + return_time (18, 0, 0, 20, 3) + } else if_time_range (0, 20, 0, 30) { + return_time (0, 20, 0, 30, 15) + } else if_since_time (0, 30) { + return_l (4) + } else { + return_none + } + } else { + return_none + } + } else if_day (3) { + if_scene (SCENE_IKANA) { + if_time_range (18, 0, 19, 0) { + return_time (18, 0, 19, 0, 12) + } else if_time_range (19, 0, 19, 25) { + return_l (5) + } else if_time_range (19, 25, 0, 0) { + return_time (19, 25, 0, 0, 1) + } else { + return_none + } + } else { + return_none + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index 6f639eccef..c7ce46ff2e 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -142,55 +142,7 @@ static TrackOptionsSet sTrackOptions = { { 0x1770, 4, 1, 6 }, }; -static u8 D_80BAE820[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x80 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG, 0x7F - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x3D - 0x0C), - /* 0x0C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 25, 0x37 - 0x12), - /* 0x12 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 25, 0, 30, 0x31 - 0x18), - /* 0x18 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 15, 1, 20, 0x2B - 0x1E), - /* 0x1E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 20, 1, 45, 0x25 - 0x24), - /* 0x24 */ SCHEDULE_CMD_RET_NONE(), - /* 0x25 */ SCHEDULE_CMD_RET_TIME(1, 20, 1, 45, 14), - /* 0x2B */ SCHEDULE_CMD_RET_TIME(1, 15, 1, 20, 7), - /* 0x31 */ SCHEDULE_CMD_RET_TIME(0, 25, 0, 30, 6), - /* 0x37 */ SCHEDULE_CMD_RET_TIME(0, 0, 0, 25, 13), - /* 0x3D */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x7E - 0x41), - /* 0x41 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 25, 0, 30, 0x78 - 0x47), - /* 0x47 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 30, 0, 45, 0x72 - 0x4D), - /* 0x4D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 45, 1, 0, 0x6C - 0x53), - /* 0x53 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 0, 1, 15, 0x66 - 0x59), - /* 0x59 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(1, 15, 1, 20, 0x60 - 0x5F), - /* 0x5F */ SCHEDULE_CMD_RET_NONE(), - /* 0x60 */ SCHEDULE_CMD_RET_TIME(1, 15, 1, 20, 9), - /* 0x66 */ SCHEDULE_CMD_RET_TIME(1, 0, 1, 15, 11), - /* 0x6C */ SCHEDULE_CMD_RET_TIME(0, 45, 1, 0, 2), - /* 0x72 */ SCHEDULE_CMD_RET_TIME(0, 30, 0, 45, 10), - /* 0x78 */ SCHEDULE_CMD_RET_TIME(0, 25, 0, 30, 8), - /* 0x7E */ SCHEDULE_CMD_RET_NONE(), - /* 0x7F */ SCHEDULE_CMD_RET_NONE(), - /* 0x80 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0xA9 - 0x84), - /* 0x84 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_BACKTOWN, 0xA8 - 0x88), - /* 0x88 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 0, 20, 0xA2 - 0x8E), - /* 0x8E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 20, 0, 30, 0x9C - 0x94), - /* 0x94 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(0, 30, 0x9B - 0x98), - /* 0x98 */ SCHEDULE_CMD_RET_VAL_L(4), - /* 0x9B */ SCHEDULE_CMD_RET_NONE(), - /* 0x9C */ SCHEDULE_CMD_RET_TIME(0, 20, 0, 30, 15), - /* 0xA2 */ SCHEDULE_CMD_RET_TIME(18, 0, 0, 20, 3), - /* 0xA8 */ SCHEDULE_CMD_RET_NONE(), - /* 0xA9 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0xD4 - 0xAD), - /* 0xAD */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0xD3 - 0xB1), - /* 0xB1 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 19, 0, 0xCD - 0xB7), - /* 0xB7 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 0, 19, 25, 0xCA - 0xBD), - /* 0xBD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 25, 0, 0, 0xC4 - 0xC3), - /* 0xC3 */ SCHEDULE_CMD_RET_NONE(), - /* 0xC4 */ SCHEDULE_CMD_RET_TIME(19, 25, 0, 0, 1), - /* 0xCA */ SCHEDULE_CMD_RET_VAL_L(5), - /* 0xCD */ SCHEDULE_CMD_RET_TIME(18, 0, 19, 0, 12), - /* 0xD3 */ SCHEDULE_CMD_RET_NONE(), - /* 0xD4 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Suttari/scheduleScripts.schl.inc" static s32 D_80BAE8F8[] = { -1, -1, -1, -1, -1, -1, 1, 2, 0, 3, 1, 2, 0, 0, 3, 0, diff --git a/src/overlays/actors/ovl_En_Tab/scheduleScripts.schl b/src/overlays/actors/ovl_En_Tab/scheduleScripts.schl new file mode 100644 index 0000000000..f1afd4bdb0 --- /dev/null +++ b/src/overlays/actors/ovl_En_Tab/scheduleScripts.schl @@ -0,0 +1,27 @@ +D_80BE18D0 { + if_day (3) { + if_scene (SCENE_MILK_BAR) { + if_time_range (9, 50, 18, 1) { + return_time (9, 50, 18, 1, 1) + } else if_time_range (18, 0, 6, 0) { + return_time (18, 0, 6, 0, 2) + } else { + return_l (0) + } + } else { + return_none + } + } else { + if_scene (SCENE_MILK_BAR) { + if_time_range (9, 50, 21, 5) { + return_time (9, 50, 21, 5, 1) + } else if_time_range (21, 55, 5, 5) { + return_time (21, 55, 5, 5, 2) + } else { + return_none + } + } else { + return_none + } + } +} diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index 4b6974942c..6534bc5d96 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -20,23 +20,7 @@ void EnTab_Draw(Actor* thisx, PlayState* play); void func_80BE127C(EnTab* this, PlayState* play); void func_80BE1348(EnTab* this, PlayState* play); -static u8 D_80BE18D0[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x24 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0x23 - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 50, 18, 1, 0x1D - 0x0E), - /* 0x0E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x17 - 0x14), - /* 0x14 */ SCHEDULE_CMD_RET_VAL_L(0), - /* 0x17 */ SCHEDULE_CMD_RET_TIME(18, 0, 6, 0, 2), - /* 0x1D */ SCHEDULE_CMD_RET_TIME(9, 50, 18, 1, 1), - /* 0x23 */ SCHEDULE_CMD_RET_NONE(), - /* 0x24 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_MILK_BAR, 0x41 - 0x28), - /* 0x28 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(9, 50, 21, 5, 0x3B - 0x2E), - /* 0x2E */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 55, 5, 5, 0x35 - 0x34), - /* 0x34 */ SCHEDULE_CMD_RET_NONE(), - /* 0x35 */ SCHEDULE_CMD_RET_TIME(21, 55, 5, 5, 2), - /* 0x3B */ SCHEDULE_CMD_RET_TIME(9, 50, 21, 5, 1), - /* 0x41 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Tab/scheduleScripts.schl.inc" s32 D_80BE1914[] = { 0x003A0200, 0x080E2AF9, 0x0C113A02, 0x100E2AFA, 0x0C150900, 0x000E2AFB, diff --git a/src/overlays/actors/ovl_En_Test3/scheduleScripts.schl b/src/overlays/actors/ovl_En_Test3/scheduleScripts.schl new file mode 100644 index 0000000000..3ff49d9649 --- /dev/null +++ b/src/overlays/actors/ovl_En_Test3/scheduleScripts.schl @@ -0,0 +1,133 @@ +sScheduleScript { + if_day (1) { + if_scene (SCENE_ALLEY) { + if_time_range (6, 50, 7, 20) { + return_time (6, 50, 7, 20, 15) + } else if_before_time (7, 30) { + return_none + } else if_week_event_reg (WEEKEVENTREG_51_04) { + return_s (10) + } else { + return_none + } + } else if_scene (SCENE_CLOCKTOWER) { + if_time_range (6, 0, 6, 30) { + return_time (6, 0, 6, 30, 13) + } else if_time_range (6, 30, 6, 35) { + return_s (1) + } else if_time_range (6, 35, 6, 50) { + return_time (6, 35, 6, 50, 14) + } else { + return_none + } + } else { + return_none + } + } else if_day (2) { + if_week_event_reg (WEEKEVENTREG_51_02) { + if_scene (SCENE_ALLEY) { + if_before_time (13, 0) { + branch (label_0x050) + } else if_time_range (15, 5, 15, 25) { + return_time (15, 5, 15, 25, 16) + } else if_time_range (15, 25, 15, 40) { + return_s (1) + } else if_time_range (15, 40, 16, 0) { + return_time (15, 40, 16, 0, 17) + } else { + return_none + } + } else if_scene (SCENE_AYASHIISHOP) { + if_time_range (15, 55, 16, 10) { + return_time (15, 55, 16, 10, 12) + } else if_time_range (16, 10, 22, 10) { + return_s (3) + } else { + return_none + } + } else { + return_none + } + } else { + branch (label_0x050) + + label_0x050: + if_week_event_reg (WEEKEVENTREG_51_04) { + return_l (10) + } else { + return_none + } + } + } else if_day (3) { + if_week_event_reg (WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG) { + label_0x12C: + if_scene (SCENE_AYASHIISHOP) { + if_week_event_reg (WEEKEVENTREG_51_08) { + return_s (4) + } else { + return_none + } + } else { + return_none + } + } else { + if_week_event_reg (WEEKEVENTREG_SAKON_DEAD) { + branch (label_0x12C) + } else if_scene (SCENE_SECOM) { + return_s (7) + } else if_week_event_reg (WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT) { + if_scene (SCENE_IKANA) { + if_week_event_reg (WEEKEVENTREG_90_02) { + return_none + } else { + return_s (9) + } + } else if_scene (SCENE_TOWN) { + if_time_range (4, 0, 4, 10) { + return_time (4, 0, 4, 10, 11) + } else { + return_none + } + } else if_scene (SCENE_YADOYA) { + if_time_range (4, 10, 4, 30) { + return_time (4, 10, 4, 30, 18) + } else if_week_event_reg (WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES) { + if_time_range (4, 30, 6, 0) { + return_s (8) + } else { + return_none + } + } else if_time_range (4, 30, 4, 45) { + return_time (4, 30, 4, 45, 19) + } else if_time_range (4, 45, 6, 0) { + return_s (6) + } else { + return_none + } + } else { + return_none + } + } else if_scene (SCENE_IKANA) { + not if_week_event_reg (WEEKEVENTREG_51_08) { + return_s (5) + } else if_week_event_reg (WEEKEVENTREG_61_08) { + return_s (5) + } else if_week_event_reg (WEEKEVENTREG_51_10) { + if_time_range (19, 0, 19, 10) { + return_time (19, 0, 19, 10, 20) + } else { + return_none + } + } else if_before_time (19, 0) { + return_s (5) + } else { + return_none + } + } else { + return_none + } + } + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index ec3c91987a..76fb8c392f 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -82,94 +82,7 @@ void func_80A4084C(EnTest3* this, PlayState* play); void func_80A40908(EnTest3* this, PlayState* play); void func_80A40A6C(EnTest3* this, PlayState* play); -static u8 sScheduleScript[] = { - /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x046 - 0x004), - /* 0x004 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x020 - 0x008), - /* 0x008 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 50, 7, 20, 0x01A - 0x00E), - /* 0x00E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(7, 30, 0x019 - 0x012), - /* 0x012 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x017 - 0x016), - /* 0x016 */ SCHEDULE_CMD_RET_NONE(), - /* 0x017 */ SCHEDULE_CMD_RET_VAL_S(10), - /* 0x019 */ SCHEDULE_CMD_RET_NONE(), - /* 0x01A */ SCHEDULE_CMD_RET_TIME(6, 50, 7, 20, 15), - /* 0x020 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x045 - 0x024), - /* 0x024 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 6, 30, 0x03F - 0x02A), - /* 0x02A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 30, 6, 35, 0x03D - 0x030), - /* 0x030 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 35, 6, 50, 0x037 - 0x036), - /* 0x036 */ SCHEDULE_CMD_RET_NONE(), - /* 0x037 */ SCHEDULE_CMD_RET_TIME(6, 35, 6, 50, 14), - /* 0x03D */ SCHEDULE_CMD_RET_VAL_S(1), - /* 0x03F */ SCHEDULE_CMD_RET_TIME(6, 0, 6, 30, 13), - /* 0x045 */ SCHEDULE_CMD_RET_NONE(), - /* 0x046 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x09B - 0x04A), - /* 0x04A */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_02, 0x058 - 0x04E), - /* 0x04E */ SCHEDULE_CMD_BRANCH_S(0x0), - /* 0x050 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x055 - 0x054), - /* 0x054 */ SCHEDULE_CMD_RET_NONE(), - /* 0x055 */ SCHEDULE_CMD_RET_VAL_L(10), - /* 0x058 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x081 - 0x05C), - /* 0x05C */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x050 - 0x060), - /* 0x060 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 5, 15, 25, 0x07B - 0x066), - /* 0x066 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 40, 0x079 - 0x06C), - /* 0x06C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 40, 16, 0, 0x073 - 0x072), - /* 0x072 */ SCHEDULE_CMD_RET_NONE(), - /* 0x073 */ SCHEDULE_CMD_RET_TIME(15, 40, 16, 0, 17), - /* 0x079 */ SCHEDULE_CMD_RET_VAL_S(1), - /* 0x07B */ SCHEDULE_CMD_RET_TIME(15, 5, 15, 25, 16), - /* 0x081 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x09A - 0x085), - /* 0x085 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 55, 16, 10, 0x094 - 0x08B), - /* 0x08B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 22, 10, 0x092 - 0x091), - /* 0x091 */ SCHEDULE_CMD_RET_NONE(), - /* 0x092 */ SCHEDULE_CMD_RET_VAL_S(3), - /* 0x094 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 10, 12), - /* 0x09A */ SCHEDULE_CMD_RET_NONE(), - /* 0x09B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x138 - 0x0A0), - /* 0x0A0 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG, 0x12C - 0x0A5), - /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_SAKON_DEAD, 0x12C - 0x0AA), - /* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE), - /* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7), - /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x0DD - 0x0B4), - /* 0x0B4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0DC - 0x0B8), - /* 0x0B8 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x0BE - 0x0BC), - /* 0x0BC */ SCHEDULE_CMD_RET_VAL_S(5), - /* 0x0BE */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_08, 0x0DA - 0x0C2), - /* 0x0C2 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_10, 0x0CD - 0x0C6), - /* 0x0C6 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(19, 0, 0x0CB - 0x0CA), - /* 0x0CA */ SCHEDULE_CMD_RET_NONE(), - /* 0x0CB */ SCHEDULE_CMD_RET_VAL_S(5), - /* 0x0CD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 0, 19, 10, 0x0D4 - 0x0D3), - /* 0x0D3 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0D4 */ SCHEDULE_CMD_RET_TIME(19, 0, 19, 10, 20), - /* 0x0DA */ SCHEDULE_CMD_RET_VAL_S(5), - /* 0x0DC */ SCHEDULE_CMD_RET_NONE(), - /* 0x0DD */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0E8 - 0x0E1), - /* 0x0E1 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_90_02, 0x0E7 - 0x0E5), - /* 0x0E5 */ SCHEDULE_CMD_RET_VAL_S(9), - /* 0x0E7 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0E8 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x0F9 - 0x0EC), - /* 0x0EC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 0, 4, 10, 0x0F3 - 0x0F2), - /* 0x0F2 */ SCHEDULE_CMD_RET_NONE(), - /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(4, 0, 4, 10, 11), - /* 0x0F9 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12B - 0x0FD), - /* 0x0FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 10, 4, 30, 0x125 - 0x103), - /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x11C - 0x107), - /* 0x107 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 4, 45, 0x116 - 0x10D), - /* 0x10D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 45, 6, 0, 0x114 - 0x113), - /* 0x113 */ SCHEDULE_CMD_RET_NONE(), - /* 0x114 */ SCHEDULE_CMD_RET_VAL_S(6), - /* 0x116 */ SCHEDULE_CMD_RET_TIME(4, 30, 4, 45, 19), - /* 0x11C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 6, 0, 0x123 - 0x122), - /* 0x122 */ SCHEDULE_CMD_RET_NONE(), - /* 0x123 */ SCHEDULE_CMD_RET_VAL_S(8), - /* 0x125 */ SCHEDULE_CMD_RET_TIME(4, 10, 4, 30, 18), - /* 0x12B */ SCHEDULE_CMD_RET_NONE(), - /* 0x12C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x137 - 0x130), - /* 0x130 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x135 - 0x134), - /* 0x134 */ SCHEDULE_CMD_RET_NONE(), - /* 0x135 */ SCHEDULE_CMD_RET_VAL_S(4), - /* 0x137 */ SCHEDULE_CMD_RET_NONE(), - /* 0x138 */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Test3/scheduleScripts.schl.inc" ActorInit En_Test3_InitVars = { /**/ ACTOR_EN_TEST3, diff --git a/src/overlays/actors/ovl_En_Tk/scheduleScripts.schl b/src/overlays/actors/ovl_En_Tk/scheduleScripts.schl new file mode 100644 index 0000000000..3c7dc8b43a --- /dev/null +++ b/src/overlays/actors/ovl_En_Tk/scheduleScripts.schl @@ -0,0 +1,10 @@ +D_80AEF800 { + //! Uses long command, even when it isn't required + if_time_range_l (6, 0, 18, 0) { + return_time (6, 0, 18, 0, 1) + //! trailing return + return_none + } else { + return_none + } +} diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 9859ecb982..adc5e91854 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -62,12 +62,7 @@ void func_80AEF5F4(Actor* thisx, PlayState* play); static s32 D_80AF0050; -static u8 D_80AEF800[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(6, 0, 18, 0, 0x8 - 0x7), - /* 0x7 */ SCHEDULE_CMD_RET_NONE(), - /* 0x8 */ SCHEDULE_CMD_RET_TIME(6, 0, 18, 0, 1), - /* 0xE */ SCHEDULE_CMD_RET_NONE(), -}; +#include "build/src/overlays/actors/ovl_En_Tk/scheduleScripts.schl.inc" ActorInit En_Tk_InitVars = { /**/ ACTOR_EN_TK, diff --git a/src/overlays/actors/ovl_Obj_Shutter/scheduleScripts.schl b/src/overlays/actors/ovl_Obj_Shutter/scheduleScripts.schl new file mode 100644 index 0000000000..92fe4865f8 --- /dev/null +++ b/src/overlays/actors/ovl_Obj_Shutter/scheduleScripts.schl @@ -0,0 +1,7 @@ +sScheduleScript { + if_time_range (10, 0, 20, 0) { + return_l (1) + } else { + return_l (2) + } +} diff --git a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c index ca5df0a446..49fd1a289c 100644 --- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c +++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c @@ -34,11 +34,7 @@ void ObjShutter_Init(Actor* thisx, PlayState* play) { void ObjShutter_Destroy(Actor* thisx, PlayState* play) { } -static u8 sScheduleScript[] = { - /* 0x0 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(10, 0, 20, 0, 0x9 - 0x6), - /* 0x6 */ SCHEDULE_CMD_RET_VAL_L(2), - /* 0x9 */ SCHEDULE_CMD_RET_VAL_L(1), -}; +#include "build/src/overlays/actors/ovl_Obj_Shutter/scheduleScripts.schl.inc" void ObjShutter_Update(Actor* thisx, PlayState* play2) { ObjShutter* this = THIS; diff --git a/tools/buildtools/schc.py b/tools/buildtools/schc.py new file mode 100755 index 0000000000..87ea17e4a1 --- /dev/null +++ b/tools/buildtools/schc.py @@ -0,0 +1,1035 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2023-2024 ZeldaRET +# SPDX-License-Identifier: MIT + +# +# Schedule scripting language compiler +# +# For a reference about the language see https://github.com/zeldaret/mm/blob/main/docs/schedule_scripting_language.md +# +# +# Version history: +# +# 1.0.0: +# +# * Initial release +# + +# TODO: Check for repeated labels +# TODO: think on a catchy name for the schedule language and the compiler +# TODO: Warning/Error for control flows that do not led to a return. Maybe consider inserting return_none on those cases +# TODO: consider adding optimization passes/options +# TODO: consider adding and/or operators + +from __future__ import annotations + +# Short for "schedule compiler" +__prog_name__ = "schc" +__version__ = "1.0.0" + +import colorama +colorama.init() + +import argparse +import dataclasses +import enum +from pathlib import Path +import re +from typing import NoReturn +import sys + +class SchcError(Exception): + pass + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + +DEBUG = False + +def debugPrint(*args, **kwargs): + if not DEBUG: + return + eprint(*args, **kwargs) + +def fatalError(message: str, filename: str, lineNumber: int, columnNumber: int, **kwargs) -> NoReturn: + # Print the filename/linenumber in a format that some IDEs can follow by ctrl-click on them + eprint(f"{colorama.Style.BRIGHT}{filename}:{lineNumber}:{columnNumber}{colorama.Style.RESET_ALL}: {colorama.Style.BRIGHT}{colorama.Fore.RED}Error{colorama.Style.RESET_ALL}: {message}") + + if DEBUG: + # Get the info from the caller + frame = sys._getframe().f_back + if frame is not None: + funcName = frame.f_code.co_name + debugPrint(f" Halted from: {funcName} at {frame.f_code.co_filename}:{frame.f_lineno}") + + for key, value in kwargs.items(): + debugPrint(f" {key}: {value}") + + # TODO: Add fun error messages + + exit(1) + +def warning(message: str, filename: str, lineNumber: int, columnNumber: int, **kwargs) -> None: + # Print the filename/linenumber in a format that some IDEs can follow by ctrl-click on them + eprint(f"{colorama.Style.BRIGHT}{filename}:{lineNumber}:{columnNumber}{colorama.Style.RESET_ALL}: {colorama.Style.BRIGHT}{colorama.Fore.MAGENTA}Warning{colorama.Style.RESET_ALL}: {message}") + + if DEBUG: + # Get the info from the caller + frame = sys._getframe().f_back + if frame is not None: + funcName = frame.f_code.co_name + debugPrint(f" Warning triggered in: {funcName} at {frame.f_code.co_filename}:{frame.f_lineno}") + + for key, value in kwargs.items(): + debugPrint(f" {key}: {value}") + +class TokenType(enum.Enum): + # Schedule commands + IF_WEEKEVENTREG_S = "if_week_event_reg_s" + IF_WEEKEVENTREG_L = "if_week_event_reg_l" + IF_TIMERANGE_S = "if_time_range_s" + IF_TIMERANGE_L = "if_time_range_l" + RETURN_S = "return_s" + RETURN_L = "return_l" + RETURN_NONE = "return_none" + RETURN_EMPTY = "return_empty" + IF_MISC_S = "if_misc_s" + IF_SCENE_S = "if_scene_s" + IF_SCENE_L = "if_scene_l" + IF_DAY_S = "if_day_s" + IF_DAY_L = "if_day_l" + NOP = "nop" + RETURN_TIME = "return_time" + IF_BEFORETIME_S = "if_before_time_s" + IF_BEFORETIME_L = "if_before_time_l" + IF_SINCETIME_S = "if_since_time_s" + IF_SINCETIME_L = "if_since_time_l" + BRANCH_S = "branch_s" + BRANCH_L = "branch_l" + + # Generics + IF_WEEKEVENTREG = "if_week_event_reg" + IF_TIMERANGE = "if_time_range" + IF_MISC = "if_misc" + IF_SCENE = "if_scene" + IF_DAY = "if_day" + IF_BEFORETIME = "if_before_time" + IF_SINCETIME = "if_since_time" + BRANCH = "branch" + + # Extra tokens + ELSE = "else" + BRACE_OPEN = "{" + BRACE_CLOSE = "}" + ARGS = "(args)" + NOT = "not" + LABEL = "label" + IDENTIFIER = "" + +@dataclasses.dataclass +class TokenProperties: + macro: str|None = None + cmdLength: int|None = None + isExtraToken: bool = False + isConditionalBranch: bool = False + isUnconditionalBranch: bool = False + hasArguments: bool = False + isGeneric: bool = False + needsToInvert: bool = False + isShort: bool = False + shortVersion: TokenType|None=None + longVersion: TokenType|None=None + + @property + def isAnyBranch(self) -> bool: + return self.isConditionalBranch or self.isUnconditionalBranch + +tokenPropertiesDict: dict[TokenType, TokenProperties] = { + # Schedule commands + TokenType.IF_WEEKEVENTREG_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_FLAG_S", cmdLength=0x04, isConditionalBranch=True, hasArguments=True, needsToInvert=True, isShort=True, shortVersion=TokenType.IF_WEEKEVENTREG_S, longVersion=TokenType.IF_WEEKEVENTREG_L), + TokenType.IF_WEEKEVENTREG_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_FLAG_L", cmdLength=0x05, isConditionalBranch=True, hasArguments=True, needsToInvert=True, shortVersion=TokenType.IF_WEEKEVENTREG_S, longVersion=TokenType.IF_WEEKEVENTREG_L), + TokenType.IF_TIMERANGE_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_TIME_RANGE_S", cmdLength=0x06, isConditionalBranch=True, hasArguments=True, needsToInvert=True, isShort=True, shortVersion=TokenType.IF_TIMERANGE_S, longVersion=TokenType.IF_TIMERANGE_L), + TokenType.IF_TIMERANGE_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_TIME_RANGE_L", cmdLength=0x07, isConditionalBranch=True, hasArguments=True, needsToInvert=True, shortVersion=TokenType.IF_TIMERANGE_S, longVersion=TokenType.IF_TIMERANGE_L), + TokenType.RETURN_S: TokenProperties(macro="SCHEDULE_CMD_RET_VAL_S", cmdLength=0x02, hasArguments=True, isShort=True), + TokenType.RETURN_L: TokenProperties(macro="SCHEDULE_CMD_RET_VAL_L", cmdLength=0x03, hasArguments=True), + TokenType.RETURN_NONE: TokenProperties(macro="SCHEDULE_CMD_RET_NONE", cmdLength=0x01), + TokenType.RETURN_EMPTY: TokenProperties(macro="SCHEDULE_CMD_RET_EMPTY", cmdLength=0x01), + TokenType.IF_MISC_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_MISC_S", cmdLength=0x03, isConditionalBranch=True, hasArguments=True, needsToInvert=True, isShort=True, shortVersion=TokenType.IF_MISC_S), + TokenType.IF_SCENE_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S", cmdLength=0x04, isConditionalBranch=True, hasArguments=True, isShort=True, shortVersion=TokenType.IF_SCENE_S, longVersion=TokenType.IF_SCENE_L), + TokenType.IF_SCENE_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_NOT_IN_SCENE_L", cmdLength=0x05, isConditionalBranch=True, hasArguments=True, shortVersion=TokenType.IF_SCENE_S, longVersion=TokenType.IF_SCENE_L), + TokenType.IF_DAY_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_NOT_IN_DAY_S", cmdLength=0x04, isConditionalBranch=True, hasArguments=True, isShort=True, shortVersion=TokenType.IF_DAY_S, longVersion=TokenType.IF_DAY_L), + TokenType.IF_DAY_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_NOT_IN_DAY_L", cmdLength=0x05, isConditionalBranch=True, hasArguments=True, shortVersion=TokenType.IF_DAY_S, longVersion=TokenType.IF_DAY_L), + TokenType.NOP: TokenProperties(macro="SCHEDULE_CMD_NOP", cmdLength=0x04, hasArguments=True), + TokenType.RETURN_TIME: TokenProperties(macro="SCHEDULE_CMD_RET_TIME", cmdLength=0x06, hasArguments=True), + TokenType.IF_BEFORETIME_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_BEFORE_TIME_S", cmdLength=0x04, isConditionalBranch=True, hasArguments=True, needsToInvert=True, isShort=True, shortVersion=TokenType.IF_BEFORETIME_S, longVersion=TokenType.IF_BEFORETIME_L), + TokenType.IF_BEFORETIME_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_BEFORE_TIME_L", cmdLength=0x05, isConditionalBranch=True, hasArguments=True, needsToInvert=True, shortVersion=TokenType.IF_BEFORETIME_S, longVersion=TokenType.IF_BEFORETIME_L), + TokenType.IF_SINCETIME_S: TokenProperties(macro="SCHEDULE_CMD_CHECK_BEFORE_TIME_S", cmdLength=0x04, isConditionalBranch=True, hasArguments=True, isShort=True, shortVersion=TokenType.IF_SINCETIME_S, longVersion=TokenType.IF_SINCETIME_L), + TokenType.IF_SINCETIME_L: TokenProperties(macro="SCHEDULE_CMD_CHECK_BEFORE_TIME_L", cmdLength=0x05, isConditionalBranch=True, hasArguments=True, shortVersion=TokenType.IF_SINCETIME_S, longVersion=TokenType.IF_SINCETIME_L), + TokenType.BRANCH_S: TokenProperties(macro="SCHEDULE_CMD_BRANCH_S", cmdLength=0x02, isUnconditionalBranch=True, hasArguments=True, isShort=True, shortVersion=TokenType.BRANCH_S, longVersion=TokenType.BRANCH_L), + TokenType.BRANCH_L: TokenProperties(macro="SCHEDULE_CMD_BRANCH_L", cmdLength=0x03, isUnconditionalBranch=True, hasArguments=True, shortVersion=TokenType.BRANCH_S, longVersion=TokenType.BRANCH_L), + + # Generics + TokenType.IF_WEEKEVENTREG: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, needsToInvert=True, shortVersion=TokenType.IF_WEEKEVENTREG_S, longVersion=TokenType.IF_WEEKEVENTREG_L), + TokenType.IF_TIMERANGE: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, needsToInvert=True, shortVersion=TokenType.IF_TIMERANGE_S, longVersion=TokenType.IF_TIMERANGE_L), + TokenType.IF_MISC: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, needsToInvert=True, shortVersion=TokenType.IF_MISC_S), + TokenType.IF_SCENE: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, shortVersion=TokenType.IF_SCENE_S, longVersion=TokenType.IF_SCENE_L), + TokenType.IF_DAY: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, shortVersion=TokenType.IF_DAY_S, longVersion=TokenType.IF_DAY_L), + TokenType.IF_BEFORETIME: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, needsToInvert=True, shortVersion=TokenType.IF_BEFORETIME_S, longVersion=TokenType.IF_BEFORETIME_L), + TokenType.IF_SINCETIME: TokenProperties(isConditionalBranch=True, hasArguments=True, isGeneric=True, shortVersion=TokenType.IF_SINCETIME_S, longVersion=TokenType.IF_SINCETIME_L), + TokenType.BRANCH: TokenProperties(isUnconditionalBranch=True, hasArguments=True, isGeneric=True, shortVersion=TokenType.BRANCH_S, longVersion=TokenType.BRANCH_L), + + # Extra tokens + TokenType.ELSE: TokenProperties(isExtraToken=True), + TokenType.BRACE_OPEN: TokenProperties(isExtraToken=True), + TokenType.BRACE_CLOSE: TokenProperties(isExtraToken=True), + TokenType.ARGS: TokenProperties(isExtraToken=True), + TokenType.NOT: TokenProperties(isExtraToken=True), + TokenType.LABEL: TokenProperties(isExtraToken=True), + TokenType.IDENTIFIER: TokenProperties(isExtraToken=True), +} + +tokenLiterals: dict[str, TokenType] = {x.value: x for x in TokenType} + + +regex_label = re.compile(r"(?P