diff --git a/Dockerfile b/Dockerfile
index 70deb0ea4d..131ed20f1b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,7 @@
-FROM ubuntu:22.04 as build
+FROM ubuntu:24.04 AS build
+
ENV TZ=UTC
+ENV LANG=C.UTF-8
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
apt-get update && \
@@ -19,15 +21,8 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &
apt-get clean && \
rm -rf /var/lib/apt/lists/*
-RUN python3 -m pip install --user colorama ansiwrap attrs watchdog python-Levenshtein "mapfile-parser>=1.2.1,<2.0.0" "rabbitizer>=1.0.0,<2.0.0"
-RUN python3 -m pip install --upgrade attrs pycparser
-
-ENV LANG C.UTF-8
-RUN mkdir /oot
WORKDIR /oot
-
RUN git config --global --add safe.directory /oot
-CMD ["/bin/sh", "-c", \
- "echo 'usage:\n docker run --rm --mount type=bind,source=\"$(pwd)\",destination=/oot oot make -j$(nproc) setup\n docker run --rm --mount type=bind,source=\"$(pwd)\",destination=/oot oot make -j$(nproc)'"]
+CMD make -j $(nproc) setup && make -j $(nproc) && tail -f /dev/null
diff --git a/INSTALLATION.md b/INSTALLATION.md
index 2ed24c9d49..566d24ef06 100644
--- a/INSTALLATION.md
+++ b/INSTALLATION.md
@@ -32,18 +32,21 @@ The build process has the following package requirements:
* git
* build-essential
* binutils-mips-linux-gnu
+* curl
* python3
* python3-pip
* python3-venv
* libpng-dev
-* gcc-mips-linux-gnu
* libxml2-dev
+* gcc-mips-linux-gnu
+
+Note: you can use another GCC as long as it target MIPS.
Under Debian / Ubuntu (which we recommend using), you can install them with the following commands:
```bash
sudo apt-get update
-sudo apt-get install git build-essential binutils-mips-linux-gnu python3 python3-pip python3-venv libpng-dev gcc-mips-linux-gnu libxml2-dev
+sudo apt-get install git build-essential binutils-mips-linux-gnu curl python3 python3-pip python3-venv libpng-dev libxml2-dev gcc-mips-linux-gnu
```
#### 2. Clone the repository
diff --git a/Makefile b/Makefile
index 006b59f684..6a4dac1e9f 100644
--- a/Makefile
+++ b/Makefile
@@ -44,6 +44,8 @@ VERSION ?= hackeroot-mq
N_THREADS ?= $(shell nproc)
# Check code syntax with host compiler.
RUN_CC_CHECK ?= 1
+# If DEBUG_OBJECTS is 1, produce additional debugging files such as objdump output or raw binaries for assets
+DEBUG_OBJECTS ?= 0
# Set prefix to mips binutils binaries (mips-linux-gnu-ld => 'mips-linux-gnu-') - Change at your own risk!
# In nearly all cases, not having 'mips-linux-gnu-*' binaries on the PATH indicates missing dependencies.
MIPS_BINUTILS_PREFIX ?= mips-linux-gnu-
@@ -70,62 +72,133 @@ ifeq ($(VERSION),ntsc-1.0)
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
+ BUILD_DATE := 98-10-21
+ BUILD_TIME := 04:56:31
+ REVISION := 0
else ifeq ($(VERSION),ntsc-1.1)
REGIONAL_CHECKSUM := 1
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
+ BUILD_DATE := 98-10-26
+ BUILD_TIME := 10:58:45
+ REVISION := 1
else ifeq ($(VERSION),pal-1.0)
REGION ?= EU
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
+ BUILD_DATE := 98-11-10
+ BUILD_TIME := 14:34:22
+ REVISION := 0
else ifeq ($(VERSION),ntsc-1.2)
REGIONAL_CHECKSUM := 1
REGION ?= JP
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
+ BUILD_DATE := 98-11-12
+ BUILD_TIME := 18:17:03
+ REVISION := 2
else ifeq ($(VERSION),pal-1.1)
REGION ?= EU
PLATFORM := N64
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd44
+ BUILD_DATE := 98-11-18
+ BUILD_TIME := 17:36:49
+ REVISION := 1
else ifeq ($(VERSION),gc-jp)
REGION ?= JP
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 02-10-29
+ BUILD_TIME := 23:49:53
+ REVISION := 15
else ifeq ($(VERSION),gc-jp-mq)
REGION ?= JP
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 02-10-30
+ BUILD_TIME := 00:15:15
+ REVISION := 15
else ifeq ($(VERSION),gc-us)
REGION ?= US
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 02-12-19
+ BUILD_TIME := 13:28:09
+ REVISION := 15
else ifeq ($(VERSION),gc-us-mq)
REGION ?= US
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 02-12-19
+ BUILD_TIME := 14:05:42
+ REVISION := 15
else ifeq ($(VERSION),gc-eu-mq-dbg)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 1
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 03-02-21
+ BUILD_TIME := 00:16:31
+ REVISION := 15
else ifeq ($(VERSION),gc-eu)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 03-02-21
+ BUILD_TIME := 20:12:23
+ REVISION := 15
else ifeq ($(VERSION),gc-eu-mq)
REGION ?= EU
PLATFORM := GC
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 03-02-21
+ BUILD_TIME := 20:37:19
+ REVISION := 15
else ifeq ($(VERSION),gc-jp-ce)
REGION ?= JP
PLATFORM := GC
DEBUG := 0
DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := zelda@srd022j
+ BUILD_DATE := 03-10-08
+ BUILD_TIME := 21:53:00
+ REVISION := 15
+else ifeq ($(VERSION),ique-cn)
+ COMPARE := 0
+ REGION ?= US
+ PLATFORM := IQUE
+ DEBUG_FEATURES ?= 0
+ BUILD_CREATOR := build@toad.routefree.com
+ BUILD_DATE := 03-10-22
+ BUILD_TIME := 16:23:19
+ REVISION := 0
else ifeq ($(VERSION),hackeroot-mq)
REGION := NULL
PLATFORM := GC
DEBUG := 1
DEBUG_FEATURES ?= 1
+ BUILD_CREATOR := none
+ BUILD_DATE := none
+ BUILD_TIME := none
+ifeq ($(TARGET),iso)
+ REVISION := 0
+else ifeq ($(TARGET),wad)
+ REVISION := 0
+else
+ REVISION := 15
+endif
else
$(error Unsupported version $(VERSION))
endif
@@ -150,7 +223,22 @@ EXTRACTED_DIR := extracted/$(VERSION)
VENV := .venv
MAKE = make
-CPPFLAGS += -P -xc -fno-dollars-in-identifiers
+
+ifeq ($(PLATFORM),N64)
+ CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0 -DPLATFORM_IQUE=0
+ LIBULTRA_VERSION := I
+ LIBULTRA_PATCH := 1
+else ifeq ($(PLATFORM),GC)
+ CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1 -DPLATFORM_IQUE=0
+ LIBULTRA_VERSION := L
+ LIBULTRA_PATCH := 0
+else ifeq ($(PLATFORM),IQUE)
+ CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=0 -DPLATFORM_IQUE=1 -DBBPLAYER
+ LIBULTRA_VERSION := L
+ LIBULTRA_PATCH := 0
+else
+$(error Unsupported platform $(PLATFORM))
+endif
# Set PACKAGE_NAME define for printing commit name
ifeq ($(origin PACKAGE_NAME), undefined)
@@ -186,19 +274,17 @@ endif
# Converts e.g. ntsc-1.0 to NTSC_1_0
ifeq ($(VERSION),hackeroot-mq)
-CPP_DEFINES += -DOOT_VERSION=GC_EU_MQ_DBG
+CPP_DEFINES += -DOOT_VERSION=GC_EU_MQ_DBG -DOOT_REVISION=$(REVISION)
else
VERSION_MACRO := $(shell echo $(VERSION) | tr a-z-. A-Z__)
-CPP_DEFINES += -DOOT_VERSION=$(VERSION_MACRO)
+CPP_DEFINES += -DOOT_VERSION=$(VERSION_MACRO) -DOOT_REVISION=$(REVISION)
endif
CPP_DEFINES += -DOOT_REGION=REGION_$(REGION)
-
-ifeq ($(PLATFORM),N64)
- CPP_DEFINES += -DPLATFORM_N64=1 -DPLATFORM_GC=0
-else ifeq ($(PLATFORM),GC)
- CPP_DEFINES += -DPLATFORM_N64=0 -DPLATFORM_GC=1
-else
- $(error Unsupported platform $(PLATFORM))
+CPP_DEFINES += -DBUILD_CREATOR="\"$(BUILD_CREATOR)\"" -DBUILD_DATE="\"$(BUILD_DATE)\"" -DBUILD_TIME="\"$(BUILD_TIME)\""
+CPP_DEFINES += -DLIBULTRA_VERSION=LIBULTRA_VERSION_$(LIBULTRA_VERSION)
+CPP_DEFINES += -DLIBULTRA_PATCH=$(LIBULTRA_PATCH)
+ifeq ($(PLATFORM),IQUE)
+ CPP_DEFINES += -DBBPLAYER
endif
ifeq ($(VERSION),hackeroot-mq)
@@ -222,6 +308,7 @@ else
CPP_DEFINES += -DENABLE_HACKEROOT=0
endif
+ASOPTFLAGS := -O1
# Override optimization flags if using GDB
@@ -255,15 +342,32 @@ endif
# Detect compiler and set variables appropriately.
ifeq ($(COMPILER),gcc)
CC := $(MIPS_BINUTILS_PREFIX)gcc
+ CCAS := $(CC) -x assembler-with-cpp
else
$(error Unsupported compiler. Please use gcc as the COMPILER variable.)
endif
+# EGCS Compiler
+EGCS_PREFIX := tools/egcs/$(DETECTED_OS)/
+EGCS_CC := $(EGCS_PREFIX)gcc -B $(EGCS_PREFIX)
+EGCS_CCAS := $(EGCS_CC) -x assembler-with-cpp
+
AS := $(MIPS_BINUTILS_PREFIX)as
LD := $(MIPS_BINUTILS_PREFIX)ld
OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy
OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump
NM := $(MIPS_BINUTILS_PREFIX)nm
+STRIP := $(MIPS_BINUTILS_PREFIX)strip
+
+# Command to patch certain object files after they are built
+POSTPROCESS_OBJ := @:
+
+# The default iconv on macOS has some differences from GNU iconv, so we use the Homebrew version instead
+ifeq ($(UNAME_S),Darwin)
+ ICONV := $(shell brew --prefix)/opt/libiconv/bin/iconv
+else
+ ICONV := iconv
+endif
INC := -Iinclude -Iinclude/libc -Isrc -I$(BUILD_DIR) -I. -I$(EXTRACTED_DIR)
@@ -282,19 +386,19 @@ FADO := tools/fado/fado.elf
PYTHON ?= $(VENV)/bin/python3
FLIPS := tools/Flips/flips
GZINJECT := tools/gzinject/gzinject
-CC_IDO := tools/ido_recomp/linux/5.3/cc
+CC_IDO := tools/ido_recomp/$(DETECTED_OS)/5.3/cc
# Command to replace $(BUILD_DIR) in some files with the build path.
# We can't use the C preprocessor for this because it won't substitute inside string literals.
BUILD_DIR_REPLACE := sed -e 's|$$(BUILD_DIR)|$(BUILD_DIR)|g'
# Audio tools
-AUDIO_EXTRACT := $(PYTHON) tools/audio_extraction.py
SAMPLECONV := tools/audio/sampleconv/sampleconv
SBC := tools/audio/sbc
SFC := tools/audio/sfc
SFPATCH := tools/audio/sfpatch
ATBLGEN := tools/audio/atblgen
+AFILE_SIZES := tools/audio/afile_sizes
# We want linemarkers in sequence assembly files for better assembler error messages
SEQ_CPP := $(CPP) -x assembler-with-cpp -fno-dollars-in-identifiers
SEQ_CPPFLAGS := -D_LANGUAGE_ASEQ -DMML_VERSION=MML_VERSION_OOT $(CPP_DEFINES) -I include -I include/audio -I include/tables/sfx -I $(BUILD_DIR)/assets/audio/soundfonts
@@ -306,20 +410,29 @@ CFLAGS += $(CPP_DEFINES)
CPPFLAGS += $(CPP_DEFINES)
CFLAGS_IDO += $(CPP_DEFINES)
+# Extra debugging steps
+ifeq ($(DEBUG_OBJECTS),1)
+ OBJDUMP_CMD = @$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
+ OBJCOPY_CMD = @$(OBJCOPY) -O binary $@ $(@:.o=.bin)
+else
+ OBJDUMP_CMD = @:
+ OBJCOPY_CMD = @:
+endif
+
GBI_DEFINES := -DF3DEX_GBI_2
-ifeq ($(PLATFORM),GC)
+ifneq ($(PLATFORM),N64)
GBI_DEFINES += -DF3DEX_GBI_PL -DGBI_DOWHILE
endif
ifeq ($(DEBUG_FEATURES),1)
GBI_DEFINES += -DGBI_DEBUG
endif
-CFLAGS += $(GBI_DEFINES)
-
-ASFLAGS := -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
+CPPFLAGS += -P -xc -fno-dollars-in-identifiers $(CPP_DEFINES)
+ASFLAGS += -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
ifeq ($(COMPILER),gcc)
- CFLAGS += -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS) -funsigned-char
+ CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -funsigned-char -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS)
+ CCASFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -fno-PIC -fno-common -Wa,-no-pad-sections
MIPS_VERSION := -mips3
RUN_CC_CHECK := 0
endif
@@ -443,7 +556,8 @@ O_FILES := $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \
$(foreach f,$(ASSET_C_FILES_EXTRACTED:.c=.o),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) \
$(foreach f,$(ASSET_C_FILES_COMMITTED:.c=.o),$(BUILD_DIR)/$f) \
$(foreach f,$(BASEROM_BIN_FILES),$(BUILD_DIR)/baserom/$(notdir $f).o) \
- $(BUILD_DIR)/src/code/z_message_z_game_over.o
+ $(BUILD_DIR)/src/code/z_message_z_game_over.o \
+ $(BUILD_DIR)/src/makerom/ipl3.o
UCODE_PATCHES := $(wildcard F3DEX3/*.bps)
UCODE_FILES := $(foreach f,$(UCODE_PATCHES:.bps=),$f)
@@ -467,7 +581,8 @@ TEXTURE_FILES_OUT := $(foreach f,$(TEXTURE_FILES_PNG_EXTRACTED:.png=.inc.c),$(f:
# create build directories
$(shell mkdir -p $(BUILD_DIR)/baserom \
- $(BUILD_DIR)/assets/text)
+ $(BUILD_DIR)/assets/text \
+ $(BUILD_DIR)/linker_scripts)
$(shell mkdir -p $(foreach dir, \
$(SRC_DIRS) \
$(UNDECOMPILED_DATA_DIRS) \
@@ -594,10 +709,6 @@ venv:
$(V)$(PYTHON) -m pip install -U -r requirements.txt
$(call print,Success!)
-# TODO this is a temporary rule for testing audio, to be removed
-setup-audio:
- $(AUDIO_EXTRACT) -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml
-
setup: venv
$(call print,Setup in progress...)
$(V)$(MAKE) -C tools
@@ -606,9 +717,9 @@ setup: venv
$(call print,Decompressing baserom: Done!)
$(V)$(PYTHON) tools/extract_baserom.py $(BASEROM_DIR)/baserom-decompressed.z64 $(EXTRACTED_DIR)/baserom -v $(VERSION)
$(V)$(PYTHON) tools/extract_incbins.py $(EXTRACTED_DIR)/baserom $(EXTRACTED_DIR)/incbin -v $(VERSION)
- $(V)$(PYTHON) tools/msgdis.py $(EXTRACTED_DIR)/baserom $(EXTRACTED_DIR)/text -v $(VERSION)
- $(V)$(PYTHON) extract_assets.py $(EXTRACTED_DIR)/baserom $(EXTRACTED_DIR)/assets -v $(VERSION) -j$(N_THREADS)
- $(V)$(AUDIO_EXTRACT) -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml
+ $(V)$(PYTHON) tools/extract_text.py $(EXTRACTED_DIR)/baserom $(EXTRACTED_DIR)/text -v $(VERSION)
+ $(V)$(PYTHON) tools/extract_assets.py $(EXTRACTED_DIR)/baserom $(EXTRACTED_DIR)/assets -v $(VERSION) -j$(N_THREADS)
+ $(V)$(PYTHON) tools/extract_audio.py -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml
$(call print,Extracting files: Done!)
run: rom
@@ -660,19 +771,30 @@ $(ROM): $(ELF)
@$(PRINT) "${GREEN}OoT Version: $(BLUE)$(VERSION)$(NO_COL)\n"
@$(PRINT) "${GREEN}Code Version: $(BLUE)$(PACKAGE_VERSION)$(NO_COL)\n"
+ifeq ($(PLATFORM),IQUE)
+ COMPRESS_ARGS := --format gzip --pad-to 0x4000
+ CIC = 6102
+else
+ COMPRESS_ARGS := --format yaz0 --pad-to 0x800000 --fill-padding-bytes
+ CIC = 6105
+endif
+
$(ROMC): $(ROM) $(ELF) $(BUILD_DIR)/compress_ranges.txt
ifeq ($(COMPRESSION),yaz)
- $(V)$(PYTHON) tools/compress.py --in $(ROM) --out $@ --dmadata-start `./tools/dmadata_start.sh $(NM) $(ELF)` --compress `cat $(BUILD_DIR)/compress_ranges.txt` --threads $(N_THREADS)
+ $(V)$(PYTHON) tools/compress.py --in $(ROM) --out $@ --dmadata-start `./tools/dmadata_start.sh $(NM) $(ELF)` --compress `cat $(BUILD_DIR)/compress_ranges.txt` --threads $(N_THREADS) $(COMPRESS_ARGS)
else
$(V)$(PYTHON) tools/z64compress_wrapper.py --codec $(COMPRESSION) --cache $(BUILD_DIR)/cache --threads $(N_THREADS) $< $@ $(ELF) $(BUILD_DIR)/$(SPEC)
endif
- $(V)$(PYTHON) -m ipl3checksum sum --cic 6105 --update $@
+ $(V)$(PYTHON) -m ipl3checksum sum --cic $(CIC) --update $@
-$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) $(UCODE_O_FILES) $(LDSCRIPT) $(BUILD_DIR)/undefined_syms.txt \
+$(ELF): $(TEXTURE_FILES_OUT) $(ASSET_FILES_OUT) $(O_FILES) $(OVL_RELOC_FILES) $(UCODE_O_FILES) $(LDSCRIPT) $(BUILD_DIR)/linker_scripts/makerom.ld $(BUILD_DIR)/undefined_syms.txt \
$(SAMPLEBANK_O_FILES) $(SOUNDFONT_O_FILES) $(SEQUENCE_O_FILES) \
$(BUILD_DIR)/assets/audio/sequence_font_table.o $(BUILD_DIR)/assets/audio/audiobank_padding.o
$(call print,Linking:,,$@)
- $(V)$(LD) -T $(LDSCRIPT) -T $(BUILD_DIR)/undefined_syms.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map $(MAP) -o $@
+ $(V)$(LD) -T $(LDSCRIPT) -T $(BUILD_DIR)/linker_scripts/makerom.ld -T $(BUILD_DIR)/undefined_syms.txt --no-check-sections --accept-unknown-input-arch --emit-relocs -Map $(MAP) -o $@
+
+$(BUILD_DIR)/linker_scripts/makerom.ld: linker_scripts/makerom.ld
+ $(V)$(CPP) -I include $(CPPFLAGS) $< > $@
## Order-only prerequisites
# These ensure e.g. the O_FILES are built before the OVL_RELOC_FILES.
@@ -711,13 +833,19 @@ $(BUILD_DIR)/data/%.o: data/%.s
$(call print,Assembling:,$<,$@)
$(V)$(CPP) $(CPPFLAGS) -Iinclude $< | $(AS) $(ASFLAGS) -o $@
-$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt
+ifeq ($(PLATFORM),IQUE)
+ NES_CHARMAP := assets/text/charmap.chn.txt
+else
+ NES_CHARMAP := assets/text/charmap.nes.txt
+endif
+
+$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h $(NES_CHARMAP)
$(call print,Encoding:,$<,$@)
- $(V)$(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding jpn --charmap assets/text/charmap.txt - $@
+ $(V)$(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding utf-8 --charmap $(NES_CHARMAP) - $@
-$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.txt
+$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.jpn.txt
$(call print,Encoding:,$<,$@)
- $(V)$(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding nes --charmap assets/text/charmap.txt - $@
+ $(V)$(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) $< | $(PYTHON) tools/msgenc.py --encoding SHIFT-JIS --wchar --charmap assets/text/charmap.jpn.txt - $@
# Dependencies for files including message data headers
# TODO remove when full header dependencies are used.
@@ -734,21 +862,34 @@ $(BUILD_DIR)/assets/text/%.o: assets/text/%.c
$(V)$(OBJCOPY) -O binary --only-section .rodata $@ $@.bin
$(BUILD_DIR)/assets/%.o: assets/%.c
- $(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(OBJCOPY) -O binary $@ $@.bin
+ $(call print,Compiling:,$<,$@)
+ $(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
+ $(V)$(OBJCOPY_CMD)
$(BUILD_DIR)/assets/%.o: $(EXTRACTED_DIR)/assets/%.c
$(call print,Compiling:,$<,$@)
$(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(V)$(OBJCOPY) -O binary $@ $@.bin
+ $(V)$(OBJCOPY_CMD)
+
+# Assemble the ROM header with GNU AS always
+$(BUILD_DIR)/src/makerom/rom_header.o: src/makerom/rom_header.s
+ $(call print,Compiling:,$<,$@)
+ $(V)$(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $@ $<
+ $(V)$(OBJDUMP_CMD)
+
+$(BUILD_DIR)/src/makerom/ipl3.o: $(EXTRACTED_DIR)/incbin/ipl3
+ $(call print,Compiling:,$<,$@)
+ $(V)$(OBJCOPY) -I binary -O elf32-big --rename-section .data=.text $< $@
$(BUILD_DIR)/src/%.o: src/%.s
$(call print,Compiling:,$<,$@)
- $(V)$(CPP) $(CPPFLAGS) -Iinclude $< | $(AS) $(ASFLAGS) -o $@
+ $(V)$(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $@ $<
+ $(V)$(POSTPROCESS_OBJ) $@
+ $(V)$(OBJDUMP_CMD)
# Incremental link to move z_message and z_game_over data into rodata
$(BUILD_DIR)/src/code/z_message_z_game_over.o: $(BUILD_DIR)/src/code/z_message.o $(BUILD_DIR)/src/code/z_game_over.o
- $(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $^
+ $(V)$(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $^
$(BUILD_DIR)/dmadata_table_spec.h $(BUILD_DIR)/compress_ranges.txt: $(BUILD_DIR)/$(SPEC)
$(V)$(MKDMADATA) $< $(BUILD_DIR)/dmadata_table_spec.h $(BUILD_DIR)/compress_ranges.txt
@@ -775,25 +916,17 @@ ifneq ($(RUN_CC_CHECK),0)
endif
$(call print,Compiling:,$<,$@)
$(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(V)@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
-
-$(BUILD_DIR)/src/libultra/libc/ll.o: src/libultra/libc/ll.c
-ifneq ($(RUN_CC_CHECK),0)
- $(V)$(CC_CHECK) $<
-endif
- $(call print,Compiling:,$<,$@)
- $(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(V)$(PYTHON) tools/set_o32abi_bit.py $@
- $(V)@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
+ $(V)$(POSTPROCESS_OBJ) $@
+ $(V)$(OBJDUMP_CMD)
-$(BUILD_DIR)/src/libultra/libc/llcvt.o: src/libultra/libc/llcvt.c
+$(BUILD_DIR)/src/audio/session_init.o: src/audio/session_init.c $(BUILD_DIR)/assets/audio/soundfont_sizes.h $(BUILD_DIR)/assets/audio/sequence_sizes.h
ifneq ($(RUN_CC_CHECK),0)
$(V)$(CC_CHECK) $<
endif
$(call print,Compiling:,$<,$@)
- $(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
- $(V)$(PYTHON) tools/set_o32abi_bit.py $@
- $(V)@$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
+ $(V)$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $(@:.o=.tmp) $<
+ $(V)$(LD) -r -T linker_scripts/data_with_rodata.ld -o $@ $(@:.o=.tmp)
+ $(V)$(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.s)
$(BUILD_DIR)/src/overlays/%_reloc.o: $(BUILD_DIR)/$(SPEC)
$(call print,Generating Relocation:,$<,$@)
@@ -801,19 +934,19 @@ $(BUILD_DIR)/src/overlays/%_reloc.o: $(BUILD_DIR)/$(SPEC)
$(V)$(AS) $(ASFLAGS) $(@:.o=.s) -o $@
$(BUILD_DIR)/assets/%.inc.c: assets/%.png
- $(ZAPD) btex -eh -tt $(subst .,,$(suffix $*)) -i $< -o $@
+ $(V)$(ZAPD) btex -eh -tt $(subst .,,$(suffix $*)) -i $< -o $@
$(BUILD_DIR)/assets/%.inc.c: $(EXTRACTED_DIR)/assets/%.png
$(V)$(ZAPD) btex -eh -tt $(subst .,,$(suffix $*)) -i $< -o $@
$(BUILD_DIR)/assets/%.bin.inc.c: assets/%.bin
- $(ZAPD) bblb -eh -i $< -o $@
+ $(V)$(ZAPD) bblb -eh -i $< -o $@
$(BUILD_DIR)/assets/%.bin.inc.c: $(EXTRACTED_DIR)/assets/%.bin
$(V)$(ZAPD) bblb -eh -i $< -o $@
$(BUILD_DIR)/assets/%.jpg.inc.c: assets/%.jpg
- $(ZAPD) bren -eh -i $< -o $@
+ $(V)$(ZAPD) bren -eh -i $< -o $@
$(BUILD_DIR)/assets/%.jpg.inc.c: $(EXTRACTED_DIR)/assets/%.jpg
$(V)$(ZAPD) bren -eh -i $< -o $@
@@ -915,7 +1048,8 @@ $(BUILD_DIR)/assets/audio/soundfonts/%.o: $(BUILD_DIR)/assets/audio/soundfonts/%
# patch defined symbols to be ABS symbols so that they remain file-relative offsets forever
$(SFPATCH) $(@:.o=.tmp2) $(@:.o=.tmp2)
# write start and size symbols afterwards, filename != symbolic name so source symbolic name from the .name file written by sfc
- $(OBJCOPY) --add-symbol $$(cat $(<:.c=.name))_Start=.rodata:0,global --redefine-sym __LEN__=$$(cat $(<:.c=.name))_Size $(@:.o=.tmp2) $@
+# also write a .note.name section containing the symbolic name of the soundfont
+ $(OBJCOPY) --add-symbol $$(cat $(<:.c=.name) | tr -d '\0')_Start=.rodata:0,global --redefine-sym __LEN__=$$(cat $(<:.c=.name) | tr -d '\0')_Size --add-section .note.name=$(<:.c=.name) $(@:.o=.tmp2) $@
# cleanup temp files
@$(RM) $(@:.o=.tmp) $(@:.o=.tmp2)
ifeq ($(AUDIO_BUILD_DEBUG),1)
@@ -975,6 +1109,14 @@ endif
$(BUILD_DIR)/assets/audio/sequence_font_table.o: $(BUILD_DIR)/assets/audio/sequence_font_table.s
$(AS) $(ASFLAGS) $< -o $@
+# make headers with file sizes and amounts
+
+$(BUILD_DIR)/assets/audio/soundfont_sizes.h: $(SOUNDFONT_O_FILES)
+ $(AFILE_SIZES) $@ NUM_SOUNDFONTS SOUNDFONT_SIZES .rodata $^
+
+$(BUILD_DIR)/assets/audio/sequence_sizes.h: $(SEQUENCE_O_FILES)
+ $(AFILE_SIZES) $@ NUM_SEQUENCES SEQUENCE_SIZES .data $^
+
# Extra audiobank padding that doesn't belong to any soundfont file
$(BUILD_DIR)/assets/audio/audiobank_padding.o:
echo ".section .rodata; .fill 0x20" | $(AS) $(ASFLAGS) -o $@
diff --git a/assets/audio/sequences/seq_109.prg.seq b/assets/audio/sequences/seq_109.prg.seq
index 49b0dfb606..ee3e8e0aa4 100644
--- a/assets/audio/sequences/seq_109.prg.seq
+++ b/assets/audio/sequences/seq_109.prg.seq
@@ -1149,7 +1149,7 @@ ENVELOPE_08BA:
point 20, 20000
hang
-#if OOT_VERSION == NTSC_1_2 || PLATFORM_GC
+#if OOT_VERSION == NTSC_1_2 || !PLATFORM_N64
.filter FILTER_0932
filter 0, 0, 0, 0, 0, 0, 0, 0
diff --git a/assets/text/charmap.chn.txt b/assets/text/charmap.chn.txt
new file mode 100644
index 0000000000..08d4d451df
--- /dev/null
+++ b/assets/text/charmap.chn.txt
@@ -0,0 +1,1823 @@
+# Determines how certain text sequences should be encoded for the CHN text encoding.
+{
+ '\n' : 0x01,
+
+ '[A]' : 0xAA9F,
+ '[B]' : 0xAAA0,
+ '[C]' : 0xAAA1,
+ '[L]' : 0xAAA2,
+ '[R]' : 0xAAA3,
+ '[Z]' : 0xAAA4,
+ '[C-Up]' : 0xAAA5,
+ '[C-Down]' : 0xAAA6,
+ '[C-Left]' : 0xAAA7,
+ '[C-Right]' : 0xAAA8,
+ '▼' : 0xAAA9,
+ '[Control-Pad]' : 0xAAAA,
+
+ 'À' : 0x80,
+ 'î' : 0x81,
+ 'Â' : 0x82,
+ 'Ä' : 0x83,
+ 'Ç' : 0x84,
+ 'È' : 0x85,
+ 'É' : 0x86,
+ 'Ê' : 0x87,
+ 'Ë' : 0x88,
+ 'Ï' : 0x89,
+ 'Ô' : 0x8A,
+ 'Ö' : 0x8B,
+ 'Ù' : 0x8C,
+ 'Û' : 0x8D,
+ 'Ü' : 0x8E,
+ 'ß' : 0x8F,
+ 'à' : 0x90,
+ 'á' : 0x91,
+ 'â' : 0x92,
+ 'ä' : 0x93,
+ 'ç' : 0x94,
+ 'è' : 0x95,
+ 'é' : 0x96,
+ 'ê' : 0x97,
+ 'ë' : 0x98,
+ 'ï' : 0x99,
+ 'ô' : 0x9A,
+ 'ö' : 0x9B,
+ 'ù' : 0x9C,
+ 'û' : 0x9D,
+ 'ü' : 0x9E,
+
+ # Unfortunately the CN codepoint map does not correspond to any standard encoding,
+ # characters were added in the order they were needed in the text. The order is
+ # reproduced here.
+ '你' : 0xA08C,
+ '借' : 0xA08D,
+ '到' : 0xA08E,
+ '了' : 0xA08F,
+ '一' : 0xA090,
+ '颗' : 0xA091,
+ '口' : 0xA092,
+ '袋' : 0xA093,
+ '鸡' : 0xA094,
+ '蛋' : 0xA095,
+ '过' : 0xA096,
+ '夜' : 0xA097,
+ '后' : 0xA098,
+ '就' : 0xA099,
+ '会' : 0xA09A,
+ '孵' : 0xA09B,
+ '出' : 0xA09C,
+ '只' : 0xA09D,
+ ',' : 0xA09E,
+ '用' : 0xA09F,
+ '完' : 0xA0A0,
+ '别' : 0xA0A1,
+ '忘' : 0xA0A2,
+ '记' : 0xA0A3,
+ '把' : 0xA0A4,
+ '它' : 0xA0A5,
+ '还' : 0xA0A6,
+ '回' : 0xA0A7,
+ '去' : 0xA0A8,
+ '。' : 0xA0A9,
+ '归' : 0xA0AA,
+ '得' : 0xA0AB,
+ '克' : 0xA0AC,
+ '洛' : 0xA0AD,
+ '!' : 0xA0AE,
+ '与' : 0xA0AF,
+ '不' : 0xA0B0,
+ '同' : 0xA0B1,
+ '很' : 0xA0B2,
+ '少' : 0xA0B3,
+ '啼' : 0xA0B4,
+ '叫' : 0xA0B5,
+ '个' : 0xA0B6,
+ '奇' : 0xA0B7,
+ '异' : 0xA0B8,
+ '蘑' : 0xA0B9,
+ '菇' : 0xA0BA,
+ '新' : 0xA0BB,
+ '鲜' : 0xA0BC,
+ '的' : 0xA0BD,
+ '都' : 0xA0BE,
+ '容' : 0xA0BF,
+ '易' : 0xA0C0,
+ '变' : 0xA0C1,
+ '质' : 0xA0C2,
+ '快' : 0xA0C3,
+ '拿' : 0xA0C4,
+ '卡' : 0xA0C5,
+ '利' : 0xA0C6,
+ '科' : 0xA0C7,
+ '药' : 0xA0C8,
+ '店' : 0xA0C9,
+ '吧' : 0xA0CA,
+ '之' : 0xA0CB,
+ '知' : 0xA0CC,
+ '道' : 0xA0CD,
+ '这' : 0xA0CE,
+ '两' : 0xA0CF,
+ '人' : 0xA0D0,
+ '间' : 0xA0D1,
+ '发' : 0xA0D2,
+ '生' : 0xA0D3,
+ '什' : 0xA0D4,
+ '么' : 0xA0D5,
+ '事' : 0xA0D6,
+ '但' : 0xA0D7,
+ '带' : 0xA0D8,
+ '迷' : 0xA0D9,
+ '失' : 0xA0DA,
+ '森' : 0xA0DB,
+ '林' : 0xA0DC,
+ '物' : 0xA0DD,
+ '原' : 0xA0DE,
+ '主' : 0xA0DF,
+ '偷' : 0xA0E0,
+ '猎' : 0xA0E1,
+ '者' : 0xA0E2,
+ '锯' : 0xA0E3,
+ '定' : 0xA0E4,
+ '是' : 0xA0E5,
+ '那' : 0xA0E6,
+ '年' : 0xA0E7,
+ '轻' : 0xA0E8,
+ '留' : 0xA0E9,
+ '下' : 0xA0EA,
+ '炸' : 0xA0EB,
+ '弹' : 0xA0EC,
+ '枚' : 0xA0ED,
+ '卢' : 0xA0EE,
+ '比' : 0xA0EF,
+ '买' : 0xA0F0,
+ '德' : 0xA0F1,
+ '库' : 0xA0F2,
+ '子' : 0xA0F3,
+ '可' : 0xA0F4,
+ '以' : 0xA0F5,
+ '装' : 0xA0F6,
+ '弓' : 0xA0F7,
+ '换' : 0xA0F8,
+ '破' : 0xA0F9,
+ '损' : 0xA0FA,
+ '格' : 0xA0FB,
+ '雷' : 0xA0FC,
+ '剑' : 0xA0FD,
+ '大' : 0xA0FE,
+ '城' : 0xA0FF,
+ '修' : 0xA100,
+ '好' : 0xA101,
+ '交' : 0xA102,
+ '处' : 0xA103,
+ '方' : 0xA104,
+ '见' : 0xA105,
+ '卓' : 0xA106,
+ '拉' : 0xA107,
+ '王' : 0xA108,
+ '⋯' : 0xA109, # TODO this isn't quite the same width as everything else..
+ '兑' : 0xA10A,
+ '券' : 0xA10B,
+ '急' : 0xA10C,
+ '切' : 0xA10D,
+ '地' : 0xA10E,
+ '希' : 0xA10F,
+ '望' : 0xA110,
+ '点' : 0xA111,
+ '铸' : 0xA112,
+ '卖' : 0xA113,
+ '掉' : 0xA114,
+ '巨' : 0xA115,
+ '刀' : 0xA116,
+ '铁' : 0xA117,
+ '匠' : 0xA118,
+ '师' : 0xA119,
+ '所' : 0xA11A,
+ '造' : 0xA11B,
+ '坚' : 0xA11C,
+ '摧' : 0xA11D,
+ '卷' : 0xA11E,
+ '眼' : 0xA11F,
+ '青' : 0xA120,
+ '蛙' : 0xA121,
+ '趁' : 0xA122,
+ '凉' : 0xA123,
+ '海' : 0xA124,
+ '鲁' : 0xA125,
+ '湖' : 0xA126,
+ '世' : 0xA127,
+ '上' : 0xA128,
+ '最' : 0xA129,
+ '水' : 0xA12A,
+ '在' : 0xA12B,
+ '前' : 0xA12C,
+ '送' : 0xA12D,
+ '蠃' : 0xA12E,
+ '啦' : 0xA12F,
+ '骷' : 0xA130,
+ '髅' : 0xA131,
+ '面' : 0xA132,
+ '具' : 0xA133,
+ '按' : 0xA134,
+ '戴' : 0xA135,
+ '试' : 0xA136,
+ '看' : 0xA137,
+ '着' : 0xA138,
+ '真' : 0xA139,
+ '像' : 0xA13A,
+ '怪' : 0xA13B,
+ '恐' : 0xA13C,
+ '怖' : 0xA13D,
+ '吓' : 0xA13E,
+ '基' : 0xA13F,
+ '顿' : 0xA140,
+ '受' : 0xA141,
+ '欢' : 0xA142,
+ '迎' : 0xA143,
+ '哦' : 0xA144,
+ '兔' : 0xA145,
+ '兜' : 0xA146,
+ '帽' : 0xA147,
+ '长' : 0xA148,
+ '耳' : 0xA149,
+ '朵' : 0xA14A,
+ '太' : 0xA14B,
+ '爱' : 0xA14C,
+ '让' : 0xA14D,
+ '头' : 0xA14E,
+ '起' : 0xA14F,
+ '来' : 0xA150,
+ '有' : 0xA151,
+ '女' : 0xA152,
+ '孩' : 0xA153,
+ '?' : 0xA154,
+ '理' : 0xA155,
+ '更' : 0xA156,
+ '多' : 0xA157,
+ '我' : 0xA158,
+ '们' : 0xA159,
+ '娱' : 0xA15A,
+ '乐' : 0xA15B,
+ '中' : 0xA15C,
+ '心' : 0xA15D,
+ ':' : 0xA15E,
+ '保' : 0xA15F,
+ '龄' : 0xA160,
+ '球' : 0xA161,
+ '场' : 0xA162,
+ '想' : 0xA163,
+ '奖' : 0xA164,
+ '品' : 0xA165,
+ '吗' : 0xA166,
+ '秘' : 0xA167,
+ '密' : 0xA168,
+ '付' : 0xA169,
+ '钱' : 0xA16A,
+ '才' : 0xA16B,
+ '告' : 0xA16C,
+ '诉' : 0xA16D,
+ '玩' : 0xA16E,
+ '次' : 0xA16F,
+ '要' : 0xA170,
+ '瞄' : 0xA171,
+ '准' : 0xA172,
+ '洞' : 0xA173,
+ '放' : 0xA174,
+ '鼠' : 0xA175,
+ '十' : 0xA176,
+ '机' : 0xA177,
+ '预' : 0xA178,
+ '备' : 0xA179,
+ '开' : 0xA17A,
+ '始' : 0xA17B,
+ '再' : 0xA17C,
+ '差' : 0xA17D,
+ '(' : 0xA17E,
+ ')' : 0xA17F,
+ '捡' : 0xA180,
+ '扔' : 0xA181,
+ '没' : 0xA182,
+ '能' : 0xA183,
+ '恢' : 0xA184,
+ '复' : 0xA185,
+ '正' : 0xA186,
+ '常' : 0xA187,
+ '请' : 0xA188,
+ '救' : 0xA189,
+ '其' : 0xA18A,
+ '他' : 0xA18B,
+ '兄' : 0xA18C,
+ '弟' : 0xA18D,
+ '给' : 0xA18E,
+ '励' : 0xA18F,
+ '诅' : 0xA190,
+ '咒' : 0xA191,
+ '解' : 0xA192,
+ '除' : 0xA193,
+ '谢' : 0xA194,
+ '报' : 0xA195,
+ '呀' : 0xA196,
+ '啊' : 0xA197,
+ '被' : 0xA198,
+ '小' : 0xA199,
+ '消' : 0xA19A,
+ '灭' : 0xA19B,
+ '蜘' : 0xA19C,
+ '蛛' : 0xA19D,
+ '已' : 0xA19E,
+ '经' : 0xA19F,
+ '减' : 0xA1A0,
+ '弱' : 0xA1A1,
+ '富' : 0xA1A2,
+ '办' : 0xA1A3,
+ '法' : 0xA1A4,
+ '越' : 0xA1A5,
+ '些' : 0xA1A6,
+ '验' : 0xA1A7,
+ '帮' : 0xA1A8,
+ '助' : 0xA1A9,
+ '寻' : 0xA1AA,
+ '找' : 0xA1AB,
+ '首' : 0xA1AC,
+ '先' : 0xA1AD,
+ '晚' : 0xA1AE,
+ '行' : 0xA1AF,
+ '动' : 0xA1B0,
+ '第' : 0xA1B1,
+ '二' : 0xA1B2,
+ '住' : 0xA1B3,
+ '喜' : 0xA1B4,
+ '松' : 0xA1B5,
+ '柔' : 0xA1B6,
+ '土' : 0xA1B7,
+ '壤' : 0xA1B8,
+ '仔' : 0xA1B9,
+ '细' : 0xA1BA,
+ '观' : 0xA1BB,
+ '察' : 0xA1BC,
+ '周' : 0xA1BD,
+ '围' : 0xA1BE,
+ '全' : 0xA1BF,
+ '靠' : 0xA1C0,
+ '成' : 0xA1C1,
+ '样' : 0xA1C2,
+ '因' : 0xA1C3,
+ '为' : 0xA1C4,
+ '种' : 0xA1C5,
+ '界' : 0xA1C6,
+ '每' : 0xA1C7,
+ '现' : 0xA1C8,
+ '徽' : 0xA1C9,
+ '章' : 0xA1CA,
+ '收' : 0xA1CB,
+ '集' : 0xA1CC,
+ '作' : 0xA1CD,
+ '战' : 0xA1CE,
+ '绩' : 0xA1CF,
+ '证' : 0xA1D0,
+ '明' : 0xA1D1,
+ '征' : 0xA1D2,
+ '途' : 0xA1D3,
+ '状' : 0xA1D4,
+ '态' : 0xA1D5,
+ '窗' : 0xA1D6,
+ '此' : 0xA1D7,
+ '图' : 0xA1D8,
+ '标' : 0xA1D9,
+ '旁' : 0xA1DA,
+ '边' : 0xA1DB,
+ '数' : 0xA1DC,
+ '字' : 0xA1DD,
+ '显' : 0xA1DE,
+ '示' : 0xA1DF,
+ '目' : 0xA1E0,
+ '量' : 0xA1E1,
+ '如' : 0xA1E2,
+ '果' : 0xA1E3,
+ '区' : 0xA1E4,
+ '名' : 0xA1E5,
+ '说' : 0xA1E6,
+ '里' : 0xA1E7,
+ '家' : 0xA1E8,
+ '族' : 0xA1E9,
+ '身' : 0xA1EA,
+ '感' : 0xA1EB,
+ '止' : 0xA1EC,
+ '错' : 0xA1ED,
+ '担' : 0xA1EE,
+ '需' : 0xA1EF,
+ '箭' : 0xA1F0,
+ '关' : 0xA1F1,
+ '系' : 0xA1F2,
+ '强' : 0xA1F3,
+ '迫' : 0xA1F4,
+ '游' : 0xA1F5,
+ '戏' : 0xA1F6,
+ '著' : 0xA1F7,
+ '射' : 0xA1F8,
+ '击' : 0xA1F9,
+ '从' : 0xA1FA,
+ '台' : 0xA1FB,
+ '够' : 0xA1FC,
+ '五' : 0xA1FD,
+ '支' : 0xA1FE,
+ '武' : 0xA1FF,
+ '器' : 0xA200,
+ '争' : 0xA201,
+ '取' : 0xA202,
+ '祝' : 0xA203,
+ '运' : 0xA204,
+ '堆' : 0xA205,
+ '软' : 0xA206,
+ '泥' : 0xA207,
+ '精' : 0xA208,
+ '灵' : 0xA209,
+ '选' : 0xA20A,
+ '择' : 0xA20B,
+ '或' : 0xA20C,
+ '键' : 0xA20D,
+ '并' : 0xA20E,
+ '立' : 0xA20F,
+ '即' : 0xA210,
+ '时' : 0xA211,
+ '举' : 0xA212,
+ '置' : 0xA213,
+ '跑' : 0xA214,
+ '投' : 0xA215,
+ '掷' : 0xA216,
+ '疑' : 0xA217,
+ '型' : 0xA218,
+ '甚' : 0xA219,
+ '至' : 0xA21A,
+ '飞' : 0xA21B,
+ '檐' : 0xA21C,
+ '走' : 0xA21D,
+ '壁' : 0xA21E,
+ '闪' : 0xA21F,
+ '光' : 0xA220,
+ '使' : 0xA221,
+ '敌' : 0xA222,
+ '眩' : 0xA223,
+ '晕' : 0xA224,
+ '旋' : 0xA225,
+ '镖' : 0xA226,
+ '攻' : 0xA227,
+ '远' : 0xA228,
+ '短' : 0xA229,
+ '钩' : 0xA22A,
+ '条' : 0xA22B,
+ '力' : 0xA22C,
+ '链' : 0xA22D,
+ '勾' : 0xA22E,
+ '体' : 0xA22F,
+ '获' : 0xA230,
+ '自' : 0xA231,
+ '己' : 0xA232,
+ '根' : 0xA233,
+ '木' : 0xA234,
+ '棒' : 0xA235,
+ '挥' : 0xA236,
+ '舞' : 0xA237,
+ '站' : 0xA238,
+ '携' : 0xA239,
+ '浪' : 0xA23A,
+ '费' : 0xA23B,
+ '锤' : 0xA23C,
+ '砸' : 0xA23D,
+ '碎' : 0xA23E,
+ '废' : 0xA23F,
+ '沉' : 0xA240,
+ '双' : 0xA241,
+ '手' : 0xA242,
+ '镜' : 0xA243,
+ '神' : 0xA244,
+ '井' : 0xA245,
+ '外' : 0xA246,
+ '也' : 0xA247,
+ '耗' : 0xA248,
+ '魔' : 0xA249,
+ '停' : 0xA24A,
+ '笛' : 0xA24B,
+ '塞' : 0xA24C,
+ '尔' : 0xA24D,
+ '达' : 0xA24E,
+ '宝' : 0xA24F,
+ '散' : 0xA250,
+ '芒' : 0xA251,
+ '施' : 0xA252,
+ '展' : 0xA253,
+ '花' : 0xA254,
+ '风' : 0xA255,
+ '返' : 0xA256,
+ '避' : 0xA257,
+ '退' : 0xA258,
+ '火' : 0xA259,
+ '勋' : 0xA25A,
+ '圣' : 0xA25B,
+ '尼' : 0xA25C,
+ '亚' : 0xA25D,
+ '觉' : 0xA25E,
+ '醒' : 0xA25F,
+ '将' : 0xA260,
+ '赐' : 0xA261,
+ '予' : 0xA262,
+ '茹' : 0xA263,
+ '特' : 0xA264,
+ '她' : 0xA265,
+ '萨' : 0xA266,
+ '莉' : 0xA267,
+ '娅' : 0xA268,
+ '魂' : 0xA269,
+ '纳' : 0xA26A,
+ '波' : 0xA26B,
+ '若' : 0xA26C,
+ '暗' : 0xA26D,
+ '英' : 0xA26E,
+ '帕' : 0xA26F,
+ '空' : 0xA270,
+ '瓶' : 0xA271,
+ '红' : 0xA272,
+ '色' : 0xA273,
+ '命' : 0xA274,
+ '份' : 0xA275,
+ '绿' : 0xA276,
+ '蓝' : 0xA277,
+ '和' : 0xA278,
+ '抓' : 0xA279,
+ '伙' : 0xA27A,
+ '伴' : 0xA27B,
+ '活' : 0xA27C,
+ '随' : 0xA27D,
+ '呼' : 0xA27E,
+ '唤' : 0xA27F,
+ '鱼' : 0xA280,
+ '非' : 0xA281,
+ '美' : 0xA282,
+ '豆' : 0xA283,
+ '园' : 0xA284,
+ '合' : 0xA285,
+ '适' : 0xA286,
+ '趣' : 0xA287,
+ '对' : 0xA288,
+ '纪' : 0xA289,
+ '念' : 0xA28A,
+ '演' : 0xA28B,
+ '奏' : 0xA28C,
+ '各' : 0xA28D,
+ '律' : 0xA28E,
+ '重' : 0xA28F,
+ '握' : 0xA290,
+ '盾' : 0xA291,
+ '蹲' : 0xA292,
+ '防' : 0xA293,
+ '御' : 0xA294,
+ '移' : 0xA295,
+ '表' : 0xA296,
+ '滑' : 0xA297,
+ '反' : 0xA298,
+ '升' : 0xA299,
+ '级' : 0xA29A,
+ '延' : 0xA29B,
+ '伸' : 0xA29C,
+ '距' : 0xA29D,
+ '离' : 0xA29E,
+ '倍' : 0xA29F,
+ '套' : 0xA2A0,
+ '件' : 0xA2A1,
+ '隔' : 0xA2A2,
+ '热' : 0xA2A3,
+ '穿' : 0xA2A4,
+ '潜' : 0xA2A5,
+ '服' : 0xA2A6,
+ '淹' : 0xA2A7,
+ '死' : 0xA2A8,
+ '坛' : 0xA2A9,
+ '充' : 0xA2AA,
+ '满' : 0xA2AB,
+ '靴' : 0xA2AC,
+ '浮' : 0xA2AD,
+ '悬' : 0xA2AE,
+ '缺' : 0xA2AF,
+ '摩' : 0xA2B0,
+ '擦' : 0xA2B1,
+ '段' : 0xA2B2,
+ '勇' : 0xA2B3,
+ '敢' : 0xA2B4,
+ '相' : 0xA2B5,
+ '信' : 0xA2B6,
+ '超' : 0xA2B7,
+ '东' : 0xA2B8,
+ '哥' : 0xA2B9,
+ '猛' : 0xA2BA,
+ '龙' : 0xA2BB,
+ '胃' : 0xA2BC,
+ '做' : 0xA2BD,
+ '幸' : 0xA2BE,
+ '银' : 0xA2BF,
+ '臂' : 0xA2C0,
+ '答' : 0xA2C1,
+ '应' : 0xA2C2,
+ '遵' : 0xA2C3,
+ '守' : 0xA2C4,
+ '诺' : 0xA2C5,
+ '言' : 0xA2C6,
+ '金' : 0xA2C7,
+ '焰' : 0xA2C8,
+ '入' : 0xA2C9,
+ '冷' : 0xA2CA,
+ '艳' : 0xA2CB,
+ '包' : 0xA2CC,
+ '钥' : 0xA2CD,
+ '匙' : 0xA2CE,
+ '打' : 0xA2CF,
+ '锁' : 0xA2D0,
+ '门' : 0xA2D1,
+ '限' : 0xA2D2,
+ '于' : 0xA2D3,
+ '宫' : 0xA2D4,
+ '内' : 0xA2D5,
+ '老' : 0xA2D6,
+ '却' : 0xA2D7,
+ '驱' : 0xA2D8,
+ '喝' : 0xA2D9,
+ '进' : 0xA2DA,
+ '然' : 0xA2DB,
+ '域' : 0xA2DC,
+ '烁' : 0xA2DD,
+ '当' : 0xA2DE,
+ '位' : 0xA2DF,
+ '拨' : 0xA2E0,
+ '查' : 0xA2E1,
+ '某' : 0xA2E2,
+ '层' : 0xA2E3,
+ '罗' : 0xA2E4,
+ '盘' : 0xA2E5,
+ '隐' : 0xA2E6,
+ '藏' : 0xA2E7,
+ '振' : 0xA2E8,
+ '石' : 0xA2E9,
+ '继' : 0xA2EA,
+ '续' : 0xA2EB,
+ '努' : 0xA2EC,
+ '哇' : 0xA2ED,
+ '公' : 0xA2EE,
+ '签' : 0xA2EF,
+ '临' : 0xA2F0,
+ '西' : 0xA2F1,
+ '便' : 0xA2F2,
+ '箱' : 0xA2F3,
+ '意' : 0xA2F4,
+ '惊' : 0xA2F5,
+ '话' : 0xA2F6,
+ '左' : 0xA2F7,
+ '右' : 0xA2F8,
+ '赌' : 0xA2F9,
+ '徒' : 0xA2FA,
+ '值' : 0xA2FB,
+ '威' : 0xA2FC,
+ '增' : 0xA2FD,
+ '冰' : 0xA2FE,
+ '结' : 0xA2FF,
+ '授' : 0xA300,
+ '艰' : 0xA301,
+ '苦' : 0xA302,
+ '训' : 0xA303,
+ '练' : 0xA304,
+ '该' : 0xA305,
+ '拥' : 0xA306,
+ '而' : 0xA307,
+ '荣' : 0xA308,
+ '义' : 0xA309,
+ '邪' : 0xA30A,
+ '恶' : 0xA30B,
+ '学' : 0xA30C,
+ '步' : 0xA30D,
+ '曲' : 0xA30E,
+ '烈' : 0xA30F,
+ '安' : 0xA310,
+ '影' : 0xA311,
+ '梦' : 0xA312,
+ '幻' : 0xA313,
+ '镯' : 0xA314,
+ '拔' : 0xA315,
+ '虫' : 0xA316,
+ '员' : 0xA317,
+ '张' : 0xA318,
+ '据' : 0xA319,
+ '翡' : 0xA31A,
+ '翠' : 0xA31B,
+ '伟' : 0xA31C,
+ '树' : 0xA31D,
+ '托' : 0xA31E,
+ '代' : 0xA31F,
+ '传' : 0xA320,
+ '碧' : 0xA321,
+ '商' : 0xA322,
+ '讲' : 0xA323,
+ '妖' : 0xA324,
+ '婆' : 0xA325,
+ '堡' : 0xA326,
+ '男' : 0xA327,
+ '情' : 0xA328,
+ '隆' : 0xA329,
+ '牛' : 0xA32A,
+ '奶' : 0xA32B,
+ '营' : 0xA32C,
+ '养' : 0xA32D,
+ '排' : 0xA32E,
+ '销' : 0xA32F,
+ '售' : 0xA330,
+ '榜' : 0xA331,
+ '朋' : 0xA332,
+ '友' : 0xA333,
+ '搬' : 0xA334,
+ '日' : 0xA335,
+ '客' : 0xA336,
+ '碰' : 0xA337,
+ '烧' : 0xA338,
+ '毁' : 0xA339,
+ '折' : 0xA33A,
+ '断' : 0xA33B,
+ '斗' : 0xA33C,
+ '习' : 0xA33D,
+ '骑' : 0xA33E,
+ '士' : 0xA33F,
+ '又' : 0xA340,
+ '承' : 0xA341,
+ '制' : 0xA342,
+ '尺' : 0xA343,
+ '码' : 0xA344,
+ '护' : 0xA345,
+ '炙' : 0xA346,
+ '侵' : 0xA347,
+ '害' : 0xA348,
+ '底' : 0xA349,
+ '溺' : 0xA34A,
+ '掌' : 0xA34B,
+ '丁' : 0xA34C,
+ '妮' : 0xA34D,
+ '席' : 0xA34E,
+ '性' : 0xA34F,
+ '危' : 0xA350,
+ '往' : 0xA351,
+ '创' : 0xA352,
+ '建' : 0xA353,
+ '娜' : 0xA354,
+ '产' : 0xA355,
+ '罩' : 0xA356,
+ '刚' : 0xA357,
+ '清' : 0xA358,
+ '舒' : 0xA359,
+ '爽' : 0xA35A,
+ '般' : 0xA35B,
+ '暂' : 0xA35C,
+ '脱' : 0xA35D,
+ '参' : 0xA35E,
+ '加' : 0xA35F,
+ '嗯' : 0xA360,
+ '顾' : 0xA361,
+ '片' : 0xA362,
+ '四' : 0xA363,
+ '整' : 0xA364,
+ '三' : 0xA365,
+ '房' : 0xA366,
+ '干' : 0xA367,
+ '稍' : 0xA368,
+ '候' : 0xA369,
+ '赛' : 0xA36A,
+ '鳞' : 0xA36B,
+ '跳' : 0xA36C,
+ '深' : 0xA36D,
+ '歌' : 0xA36E,
+ '伊' : 0xA36F,
+ '阳' : 0xA370,
+ '摇' : 0xA371,
+ '篮' : 0xA372,
+ '雪' : 0xA373,
+ '壮' : 0xA374,
+ '管' : 0xA375,
+ '术' : 0xA376,
+ '接' : 0xA377,
+ '智' : 0xA378,
+ '慧' : 0xA379,
+ '气' : 0xA37A,
+ '疲' : 0xA37B,
+ '惫' : 0xA37C,
+ '治' : 0xA37D,
+ '疗' : 0xA37E,
+ '伤' : 0xA37F,
+ '且' : 0xA380,
+ '硬' : 0xA381,
+ '技' : 0xA382,
+ '斩' : 0xA383,
+ '积' : 0xA384,
+ '蓄' : 0xA385,
+ '直' : 0xA386,
+ '释' : 0xA387,
+ '转' : 0xA388,
+ '效' : 0xA389,
+ '谈' : 0xA38A,
+ '听' : 0xA38B,
+ '束' : 0xA38C,
+ '刻' : 0xA38D,
+ '注' : 0xA38E,
+ '嗨' : 0xA38F,
+ '皇' : 0xA390,
+ '探' : 0xA391,
+ '儿' : 0xA392,
+ '附' : 0xA393,
+ '近' : 0xA394,
+ '半' : 0xA395,
+ '思' : 0xA396,
+ '仅' : 0xA397,
+ '燃' : 0xA398,
+ '紫' : 0xA399,
+ '价' : 0xA39A,
+ '高' : 0xA39B,
+ '百' : 0xA39C,
+ '索' : 0xA39D,
+ '何' : 0xA39E,
+ '输' : 0xA39F,
+ '虽' : 0xA3A0,
+ '惜' : 0xA3A1,
+ '幽' : 0xA3A2,
+ '妙' : 0xA3A3,
+ '愿' : 0xA3A4,
+ '勉' : 0xA3A5,
+ '网' : 0xA3A6,
+ '墙' : 0xA3A7,
+ '布' : 0xA3A8,
+ '藤' : 0xA3A9,
+ '蔓' : 0xA3AA,
+ '平' : 0xA3AB,
+ '爬' : 0xA3AC,
+ '屏' : 0xA3AD,
+ '幕' : 0xA3AE,
+ '顶' : 0xA3AF,
+ '端' : 0xA3B0,
+ '挂' : 0xA3B1,
+ '旧' : 0xA3B2,
+ '梯' : 0xA3B3,
+ '嘿' : 0xA3B4,
+ '饰' : 0xA3B5,
+ '熄' : 0xA3B6,
+ '久' : 0xA3B7,
+ '通' : 0xA3B8,
+ '狭' : 0xA3B9,
+ '路' : 0xA3BA,
+ '慢' : 0xA3BB,
+ '躲' : 0xA3BC,
+ '调' : 0xA3BD,
+ '视' : 0xA3BE,
+ '角' : 0xA3BF,
+ '弯' : 0xA3C0,
+ '旦' : 0xA3C1,
+ '侧' : 0xA3C2,
+ '落' : 0xA3C3,
+ '块' : 0xA3C4,
+ '推' : 0xA3C5,
+ '向' : 0xA3C6,
+ '兴' : 0xA3C7,
+ '引' : 0xA3C8,
+ '爆' : 0xA3C9,
+ '呢' : 0xA3CA,
+ '山' : 0xA3CB,
+ '坑' : 0xA3CC,
+ '楼' : 0xA3CD,
+ '绝' : 0xA3CE,
+ '总' : 0xA3CF,
+ '巧' : 0xA3D0,
+ '脸' : 0xA3D1,
+ '私' : 0xA3D2,
+ '语' : 0xA3D3,
+ '足' : 0xA3D4,
+ '导' : 0xA3D5,
+ '写' : 0xA3D6,
+ '险' : 0xA3D7,
+ '雕' : 0xA3D8,
+ '流' : 0xA3D9,
+ '粘' : 0xA3DA,
+ '浑' : 0xA3DB,
+ '电' : 0xA3DC,
+ '尾' : 0xA3DD,
+ '巴' : 0xA3DE,
+ '几' : 0xA3DF,
+ '瞧' : 0xA3E0,
+ '旗' : 0xA3E1,
+ '哪' : 0xA3E2,
+ '召' : 0xA3E3,
+ '跟' : 0xA3E4,
+ '拜' : 0xA3E5,
+ '访' : 0xA3E6,
+ '牧' : 0xA3E7,
+ '爸' : 0xA3E8,
+ '拯' : 0xA3E9,
+ '窟' : 0xA3EA,
+ '卜' : 0xA3EB,
+ '肚' : 0xA3EC,
+ '白' : 0xA3ED,
+ '马' : 0xA3EE,
+ '丢' : 0xA3EF,
+ '河' : 0xA3F0,
+ '殿' : 0xA3F1,
+ '村' : 0xA3F2,
+ '云' : 0xA3F3,
+ '吹' : 0xA3F4,
+ '寒' : 0xA3F5,
+ '庄' : 0xA3F6,
+ '谁' : 0xA3F7,
+ '教' : 0xA3F8,
+ '沙' : 0xA3F9,
+ '漠' : 0xA3FA,
+ '盖' : 0xA3FB,
+ '侬' : 0xA3FC,
+ '夫' : 0xA3FD,
+ '等' : 0xA3FE,
+ '介' : 0xA3FF,
+ '联' : 0xA400,
+ '声' : 0xA401,
+ '嘻' : 0xA402,
+ '曾' : 0xA403,
+ '领' : 0xA404,
+ '统' : 0xA405,
+ '疆' : 0xA406,
+ '怕' : 0xA407,
+ '鸟' : 0xA408,
+ '黑' : 0xA409,
+ '睛' : 0xA40A,
+ '暴' : 0xA40B,
+ '雨' : 0xA40C,
+ '息' : 0xA40D,
+ '初' : 0xA40E,
+ '六' : 0xA40F,
+ '聚' : 0xA410,
+ '封' : 0xA411,
+ '印' : 0xA412,
+ '七' : 0xA413,
+ '认' : 0xA414,
+ '识' : 0xA415,
+ '必' : 0xA416,
+ '须' : 0xA417,
+ '未' : 0xA418,
+ '梭' : 0xA419,
+ '另' : 0xA41A,
+ '渡' : 0xA41B,
+ '船' : 0xA41C,
+ '乘' : 0xA41D,
+ '艘' : 0xA41E,
+ '咯' : 0xA41F,
+ '扇' : 0xA420,
+ '许' : 0xA421,
+ '鬼' : 0xA422,
+ '板' : 0xA423,
+ '画' : 0xA424,
+ '廊' : 0xA425,
+ '扭' : 0xA426,
+ '天' : 0xA427,
+ '味' : 0xA428,
+ '冻' : 0xA429,
+ '音' : 0xA42A,
+ '座' : 0xA42B,
+ '锈' : 0xA42C,
+ '漩' : 0xA42D,
+ '涡' : 0xA42E,
+ '吞' : 0xA42F,
+ '嘛' : 0xA430,
+ '牢' : 0xA431,
+ '固' : 0xA432,
+ '殊' : 0xA433,
+ '静' : 0xA434,
+ '墓' : 0xA435,
+ '培' : 0xA436,
+ '睡' : 0xA437,
+ '掘' : 0xA438,
+ '阅' : 0xA439,
+ '读' : 0xA43A,
+ '式' : 0xA43B,
+ '租' : 0xA43C,
+ '货' : 0xA43D,
+ '款' : 0xA43E,
+ '仍' : 0xA43F,
+ ';' : 0xA440,
+ '载' : 0xA441,
+ '贪' : 0xA442,
+ '婪' : 0xA443,
+ '仇' : 0xA444,
+ '恨' : 0xA445,
+ '血' : 0xA446,
+ '腥' : 0xA447,
+ '历' : 0xA448,
+ '史' : 0xA449,
+ '诡' : 0xA44A,
+ '计' : 0xA44B,
+ '谜' : 0xA44C,
+ '题' : 0xA44D,
+ '亡' : 0xA44E,
+ '闭' : 0xA44F,
+ '今' : 0xA450,
+ '业' : 0xA451,
+ '早' : 0xA452,
+ '招' : 0xA453,
+ '聘' : 0xA454,
+ '兼' : 0xA455,
+ '职' : 0xA456,
+ '杂' : 0xA457,
+ '指' : 0xA458,
+ '启' : 0xA459,
+ '遗' : 0xA45A,
+ '极' : 0xA45B,
+ '亮' : 0xA45C,
+ '照' : 0xA45D,
+ '闯' : 0xA45E,
+ '穴' : 0xA45F,
+ '伏' : 0xA460,
+ '阻' : 0xA461,
+ '拦' : 0xA462,
+ '朝' : 0xA463,
+ '囚' : 0xA464,
+ '室' : 0xA465,
+ '贝' : 0xA466,
+ '泊' : 0xA467,
+ '泉' : 0xA468,
+ '黎' : 0xA469,
+ '童' : 0xA46A,
+ '纯' : 0xA46B,
+ '洁' : 0xA46C,
+ '翻' : 0xA46D,
+ '嘴' : 0xA46E,
+ '陷' : 0xA46F,
+ '野' : 0xA470,
+ '研' : 0xA471,
+ '究' : 0xA472,
+ '考' : 0xA473,
+ '坏' : 0xA474,
+ '竟' : 0xA475,
+ '坐' : 0xA476,
+ '玛' : 0xA477,
+ '录' : 0xA478,
+ '钓' : 0xA479,
+ '磅' : 0xA47A,
+ '分' : 0xA47B,
+ '纹' : 0xA47C,
+ '誓' : 0xA47D,
+ '忠' : 0xA47E,
+ '哈' : 0xA47F,
+ '眠' : 0xA480,
+ '瀑' : 0xA481,
+ '国' : 0xA482,
+ '务' : 0xA483,
+ '盯' : 0xA484,
+ '毯' : 0xA485,
+ '踩' : 0xA486,
+ '资' : 0xA487,
+ '瞎' : 0xA488,
+ '难' : 0xA489,
+ '倒' : 0xA48A,
+ '阱' : 0xA48B,
+ '塘' : 0xA48C,
+ '屈' : 0xA48D,
+ '镇' : 0xA48E,
+ '径' : 0xA48F,
+ '窄' : 0xA490,
+ '慌' : 0xA491,
+ '允' : 0xA492,
+ '禁' : 0xA493,
+ '激' : 0xA494,
+ '颁' : 0xA495,
+ '喷' : 0xA496,
+ '扰' : 0xA497,
+ '砍' : 0xA498,
+ '持' : 0xA499,
+ '草' : 0xA49A,
+ '泰' : 0xA49B,
+ '沿' : 0xA49C,
+ '实' : 0xA49D,
+ '峡' : 0xA49E,
+ '谷' : 0xA49F,
+ '册' : 0xA4A0,
+ '追' : 0xA4A1,
+ '赶' : 0xA4A2,
+ '市' : 0xA4A3,
+ '蜃' : 0xA4A4,
+ '崖' : 0xA4A5,
+ '灼' : 0xA4A6,
+ '宣' : 0xA4A7,
+ '疯' : 0xA4A8,
+ '狂' : 0xA4A9,
+ '滚' : 0xA4AA,
+ '伞' : 0xA4AB,
+ '脚' : 0xA4AC,
+ '共' : 0xA4AD,
+ '部' : 0xA4AE,
+ '免' : 0xA4AF,
+ '规' : 0xA4B0,
+ '递' : 0xA4B1,
+ '登' : 0xA4B2,
+ '补' : 0xA4B3,
+ '肉' : 0xA4B4,
+ '歉' : 0xA4B5,
+ '刺' : 0xA4B6,
+ '杀' : 0xA4B7,
+ '节' : 0xA4B8,
+ '横' : 0xA4B9,
+ '纵' : 0xA4BA,
+ '礼' : 0xA4BB,
+ '貌' : 0xA4BC,
+ '米' : 0xA4BD,
+ '无' : 0xA4BE,
+ '孪' : 0xA4BF,
+ '姐' : 0xA4C0,
+ '妹' : 0xA4C1,
+ '改' : 0xA4C2,
+ '池' : 0xA4C3,
+ '胆' : 0xA4C4,
+ '跃' : 0xA4C5,
+ '任' : 0xA4C6,
+ '句' : 0xA4C7,
+ '线' : 0xA4C8,
+ '范' : 0xA4C9,
+ '逃' : 0xA4CA,
+ '期' : 0xA4CB,
+ '待' : 0xA4CC,
+ '丽' : 0xA4CD,
+ '问' : 0xA4CE,
+ '闲' : 0xA4CF,
+ '泳' : 0xA4D0,
+ '连' : 0xA4D1,
+ '北' : 0xA4D2,
+ '棵' : 0xA4D3,
+ '锐' : 0xA4D4,
+ '虑' : 0xA4D5,
+ '挤' : 0xA4D6,
+ '障' : 0xA4D7,
+ '碍' : 0xA4D8,
+ '盔' : 0xA4D9,
+ '甲' : 0xA4DA,
+ '假' : 0xA4DB,
+ '设' : 0xA4DC,
+ '温' : 0xA4DD,
+ '际' : 0xA4DE,
+ '顽' : 0xA4DF,
+ '皮' : 0xA4E0,
+ '姆' : 0xA4E1,
+ '违' : 0xA4E2,
+ '盗' : 0xA4E3,
+ '贼' : 0xA4E4,
+ '蝴' : 0xA4E5,
+ '蝶' : 0xA4E6,
+ '崇' : 0xA4E7,
+ '象' : 0xA4E8,
+ '猫' : 0xA4E9,
+ '鹰' : 0xA4EA,
+ '凯' : 0xA4EB,
+ '普' : 0xA4EC,
+ '・' : 0xA4ED,
+ '博' : 0xA4EE,
+ '古' : 0xA4EF,
+ '化' : 0xA4F0,
+ '笨' : 0xA4F1,
+ '朗' : 0xA4F2,
+ '匹' : 0xA4F3,
+ '雄' : 0xA4F4,
+ '赚' : 0xA4F5,
+ '寄' : 0xA4F6,
+ '卵' : 0xA4F7,
+ '幼' : 0xA4F8,
+ '突' : 0xA4F9,
+ '袭' : 0xA4FA,
+ '腹' : 0xA4FB,
+ '绦' : 0xA4FC,
+ '食' : 0xA4FD,
+ '笔' : 0xA4FE,
+ '竖' : 0xA4FF,
+ '枯' : 0xA500,
+ '矮' : 0xA501,
+ '丛' : 0xA502,
+ '吃' : 0xA503,
+ '震' : 0xA504,
+ '撼' : 0xA505,
+ '吸' : 0xA506,
+ '败' : 0xA507,
+ '蜥' : 0xA508,
+ '蜴' : 0xA509,
+ '蝙' : 0xA50A,
+ '蝠' : 0xA50B,
+ '否' : 0xA50C,
+ '则' : 0xA50D,
+ '阿' : 0xA50E,
+ '莫' : 0xA50F,
+ '斯' : 0xA510,
+ '母' : 0xA511,
+ '绕' : 0xA512,
+ '触' : 0xA513,
+ '傻' : 0xA514,
+ '遭' : 0xA515,
+ '汀' : 0xA516,
+ '幅' : 0xA517,
+ '敬' : 0xA518,
+ '诱' : 0xA519,
+ '泡' : 0xA51A,
+ '挡' : 0xA51B,
+ '沃' : 0xA51C,
+ '衣' : 0xA51D,
+ '炬' : 0xA51E,
+ '黏' : 0xA51F,
+ '背' : 0xA520,
+ '抵' : 0xA521,
+ '权' : 0xA522,
+ '核' : 0xA523,
+ '挑' : 0xA524,
+ '壳' : 0xA525,
+ '肌' : 0xA526,
+ '缩' : 0xA527,
+ '邦' : 0xA528,
+ '苏' : 0xA529,
+ '透' : 0xA52A,
+ '僵' : 0xA52B,
+ '尸' : 0xA52C,
+ '麻' : 0xA52D,
+ '痹' : 0xA52E,
+ '咬' : 0xA52F,
+ '吉' : 0xA530,
+ '乃' : 0xA531,
+ '穷' : 0xA532,
+ '尽' : 0xA533,
+ '裂' : 0xA534,
+ '拢' : 0xA535,
+ '娃' : 0xA536,
+ '傀' : 0xA537,
+ '儡' : 0xA538,
+ '亲' : 0xA539,
+ '巫' : 0xA53A,
+ '低' : 0xA53B,
+ '骨' : 0xA53C,
+ '斧' : 0xA53D,
+ '漏' : 0xA53E,
+ '莱' : 0xA53F,
+ '彼' : 0xA540,
+ '塔' : 0xA541,
+ '扫' : 0xA542,
+ '描' : 0xA543,
+ '烟' : 0xA544,
+ '蛇' : 0xA545,
+ '弗' : 0xA546,
+ '扎' : 0xA547,
+ '挺' : 0xA548,
+ '八' : 0xA549,
+ '爪' : 0xA54A,
+ '迪' : 0xA54B,
+ '困' : 0xA54C,
+ '陆' : 0xA54D,
+ '嗜' : 0xA54E,
+ '仙' : 0xA54F,
+ '狼' : 0xA550,
+ '懈' : 0xA551,
+ '贩' : 0xA552,
+ '麦' : 0xA553,
+ '判' : 0xA554,
+ '乔' : 0xA555,
+ '绽' : 0xA556,
+ '速' : 0xA557,
+ '嗄' : 0xA558,
+ '羞' : 0xA559,
+ '永' : 0xA55A,
+ '稻' : 0xA55B,
+ '终' : 0xA55C,
+ '薇' : 0xA55D,
+ '呵' : 0xA55E,
+ '父' : 0xA55F,
+ '程' : 0xA560,
+ '工' : 0xA561,
+ '存' : 0xA562,
+ '氛' : 0xA563,
+ '笼' : 0xA564,
+ '令' : 0xA565,
+ '敏' : 0xA566,
+ '项' : 0xA567,
+ '欧' : 0xA568,
+ '谅' : 0xA569,
+ '众' : 0xA56A,
+ '悍' : 0xA56B,
+ '怎' : 0xA56C,
+ '亏' : 0xA56D,
+ '掏' : 0xA56E,
+ '毕' : 0xA56F,
+ '缓' : 0xA570,
+ '冲' : 0xA571,
+ '酷' : 0xA572,
+ '俯' : 0xA573,
+ '瞰' : 0xA574,
+ '哼' : 0xA575,
+ '蚀' : 0xA576,
+ '功' : 0xA577,
+ '糟' : 0xA578,
+ '呸' : 0xA579,
+ '黄' : 0xA57A,
+ '类' : 0xA57B,
+ '篇' : 0xA57C,
+ '论' : 0xA57D,
+ '控' : 0xA57E,
+ '括' : 0xA57F,
+ '冒' : 0xA580,
+ '度' : 0xA581,
+ '检' : 0xA582,
+ '单' : 0xA583,
+ '懂' : 0xA584,
+ '屋' : 0xA585,
+ '户' : 0xA586,
+ '致' : 0xA587,
+ '腾' : 0xA588,
+ '模' : 0xA589,
+ '嗒' : 0xA58A,
+ '咔' : 0xA58B,
+ '咋' : 0xA58C,
+ '萎' : 0xA58D,
+ '紧' : 0xA58E,
+ '决' : 0xA58F,
+ '呆' : 0xA590,
+ '闷' : 0xA591,
+ '畏' : 0xA592,
+ '骗' : 0xA593,
+ '苗' : 0xA594,
+ '茁' : 0xA595,
+ '算' : 0xA596,
+ '猜' : 0xA597,
+ '残' : 0xA598,
+ '妇' : 0xA599,
+ '婴' : 0xA59A,
+ '蔽' : 0xA59B,
+ '唯' : 0xA59C,
+ '响' : 0xA59D,
+ '抚' : 0xA59E,
+ '吵' : 0xA59F,
+ '境' : 0xA5A0,
+ '隙' : 0xA5A1,
+ '逝' : 0xA5A2,
+ '忆' : 0xA5A3,
+ '喂' : 0xA5A4,
+ '辈' : 0xA5A5,
+ '肩' : 0xA5A6,
+ '洋' : 0xA5A7,
+ '溢' : 0xA5A8,
+ '确' : 0xA5A9,
+ '迹' : 0xA5AA,
+ '凝' : 0xA5AB,
+ '髓' : 0xA5AC,
+ '混' : 0xA5AD,
+ '沌' : 0xA5AE,
+ '降' : 0xA5AF,
+ '健' : 0xA5B0,
+ '耕' : 0xA5B1,
+ '耘' : 0xA5B2,
+ '星' : 0xA5B3,
+ '倾' : 0xA5B4,
+ '沛' : 0xA5B5,
+ '础' : 0xA5B6,
+ '堂' : 0xA5B7,
+ '万' : 0xA5B8,
+ '宗' : 0xA5B9,
+ '源' : 0xA5BA,
+ '本' : 0xA5BB,
+ '替' : 0xA5BC,
+ '缝' : 0xA5BD,
+ '惩' : 0xA5BE,
+ '罚' : 0xA5BF,
+ '遇' : 0xA5C0,
+ '懒' : 0xA5C1,
+ '惰' : 0xA5C2,
+ '衷' : 0xA5C3,
+ '势' : 0xA5C4,
+ '维' : 0xA5C5,
+ '秩' : 0xA5C6,
+ '序' : 0xA5C7,
+ '抗' : 0xA5C8,
+ '衡' : 0xA5C9,
+ '旅' : 0xA5CA,
+ '顺' : 0xA5CB,
+ '叛' : 0xA5CC,
+ '愤' : 0xA5CD,
+ '辽' : 0xA5CE,
+ '阔' : 0xA5CF,
+ '茂' : 0xA5D0,
+ '称' : 0xA5D1,
+ '讨' : 0xA5D2,
+ '厌' : 0xA5D3,
+ '靶' : 0xA5D4,
+ '饲' : 0xA5D5,
+ '求' : 0xA5D6,
+ '材' : 0xA5D7,
+ '耶' : 0xA5D8,
+ '谊' : 0xA5D9,
+ '噓' : 0xA5DA,
+ '遍' : 0xA5DB,
+ '谱' : 0xA5DC,
+ '议' : 0xA5DD,
+ '吼' : 0xA5DE,
+ '薄' : 0xA5DF,
+ '饶' : 0xA5E0,
+ '稽' : 0xA5E1,
+ '齐' : 0xA5E2,
+ '懦' : 0xA5E3,
+ '抱' : 0xA5E4,
+ '千' : 0xA5E5,
+ '辛' : 0xA5E6,
+ '漂' : 0xA5E7,
+ '环' : 0xA5E8,
+ '配' : 0xA5E9,
+ '帝' : 0xA5EA,
+ '焦' : 0xA5EB,
+ '乎' : 0xA5EC,
+ '欠' : 0xA5ED,
+ '驯' : 0xA5EE,
+ '圈' : 0xA5EF,
+ '局' : 0xA5F0,
+ '咩' : 0xA5F1,
+ '既' : 0xA5F2,
+ '劳' : 0xA5F3,
+ '祭' : 0xA5F4,
+ '伪' : 0xA5F5,
+ '弃' : 0xA5F6,
+ '耐' : 0xA5F7,
+ '岗' : 0xA5F8,
+ '唔' : 0xA5F9,
+ '佳' : 0xA5FA,
+ '搭' : 0xA5FB,
+ '档' : 0xA5FC,
+ '负' : 0xA5FD,
+ '责' : 0xA5FE,
+ '攀' : 0xA5FF,
+ '绍' : 0xA600,
+ '忙' : 0xA601,
+ '提' : 0xA602,
+ '缠' : 0xA603,
+ '唉' : 0xA604,
+ '亳' : 0xA605,
+ '毛' : 0xA606,
+ '笑' : 0xA607,
+ '欣' : 0xA608,
+ '赏' : 0xA609,
+ '怜' : 0xA60A,
+ '瓜' : 0xA60B,
+ '奔' : 0xA60C,
+ '啧' : 0xA60D,
+ '踢' : 0xA60E,
+ '志' : 0xA60F,
+ '宜' : 0xA610,
+ '仿' : 0xA611,
+ '楚' : 0xA612,
+ '挖' : 0xA613,
+ '由' : 0xA614,
+ '捕' : 0xA615,
+ '播' : 0xA616,
+ '谣' : 0xA617,
+ '勤' : 0xA618,
+ '陌' : 0xA619,
+ '杰' : 0xA61A,
+ '骏' : 0xA61B,
+ '鞭' : 0xA61C,
+ '抽' : 0xA61D,
+ '享' : 0xA61E,
+ '栏' : 0xA61F,
+ '逛' : 0xA620,
+ '汊' : 0xA621,
+ '烦' : 0xA622,
+ '匆' : 0xA623,
+ '妈' : 0xA624,
+ '唱' : 0xA625,
+ '墟' : 0xA626,
+ '粗' : 0xA627,
+ '虐' : 0xA628,
+ '乡' : 0xA629,
+ '彻' : 0xA62A,
+ '咕' : 0xA62B,
+ '哝' : 0xA62C,
+ '简' : 0xA62D,
+ '优' : 0xA62E,
+ '惠' : 0xA62F,
+ '民' : 0xA630,
+ '灰' : 0xA631,
+ '聪' : 0xA632,
+ '南' : 0xA633,
+ '澈' : 0xA634,
+ '卫' : 0xA635,
+ '熟' : 0xA636,
+ '悉' : 0xA637,
+ '故' : 0xA638,
+ '乌' : 0xA639,
+ '兆' : 0xA63A,
+ '企' : 0xA63B,
+ '抢' : 0xA63C,
+ '夺' : 0xA63D,
+ '拼' : 0xA63E,
+ '粉' : 0xA63F,
+ '番' : 0xA640,
+ '群' : 0xA641,
+ '秒' : 0xA642,
+ '料' : 0xA643,
+ '肯' : 0xA644,
+ '赋' : 0xA645,
+ '婚' : 0xA646,
+ '诚' : 0xA647,
+ '邀' : 0xA648,
+ '斜' : 0xA649,
+ '诞' : 0xA64A,
+ '及' : 0xA64B,
+ '盛' : 0xA64C,
+ '典' : 0xA64D,
+ '拍' : 0xA64E,
+ '轰' : 0xA64F,
+ '植' : 0xA650,
+ '矿' : 0xA651,
+ '采' : 0xA652,
+ '阴' : 0xA653,
+ '罕' : 0xA654,
+ '昏' : 0xA655,
+ '压' : 0xA656,
+ '悦' : 0xA657,
+ '饿' : 0xA658,
+ '忍' : 0xA659,
+ '咳' : 0xA65A,
+ '弄' : 0xA65B,
+ '舔' : 0xA65C,
+ '醉' : 0xA65D,
+ '怀' : 0xA65E,
+ '尊' : 0xA65F,
+ '严' : 0xA660,
+ '滋' : 0xA661,
+ '农' : 0xA662,
+ '饥' : 0xA663,
+ '沮' : 0xA664,
+ '丧' : 0xA665,
+ '奋' : 0xA666,
+ '省' : 0xA667,
+ '撑' : 0xA668,
+ '脑' : 0xA669,
+ '灯' : 0xA66A,
+ '隧' : 0xA66B,
+ '派' : 0xA66C,
+ '狗' : 0xA66D,
+ '呜' : 0xA66E,
+ '咣' : 0xA66F,
+ '警' : 0xA670,
+ '挪' : 0xA671,
+ '窜' : 0xA672,
+ '峙' : 0xA673,
+ '含' : 0xA674,
+ '痛' : 0xA675,
+ '夸' : 0xA676,
+ '艺' : 0xA677,
+ '撒' : 0xA678,
+ '谎' : 0xA679,
+ '昨' : 0xA67A,
+ '炎' : 0xA67B,
+ '痒' : 0xA67C,
+ '泪' : 0xA67D,
+ '稳' : 0xA67E,
+ '况' : 0xA67F,
+ '磨' : 0xA680,
+ '休' : 0xA681,
+ '柱' : 0xA682,
+ '敲' : 0xA683,
+ '油' : 0xA684,
+ '菜' : 0xA685,
+ '盟' : 0xA686,
+ '骄' : 0xA687,
+ '傲' : 0xA688,
+ '献' : 0xA689,
+ '噢' : 0xA68A,
+ '窒' : 0xA68B,
+ '医' : 0xA68C,
+ '甜' : 0xA68D,
+ '鰓' : 0xA68E,
+ '恼' : 0xA68F,
+ '耽' : 0xA690,
+ '搁' : 0xA691,
+ '孤' : 0xA692,
+ '丈' : 0xA693,
+ '订' : 0xA694,
+ '戒' : 0xA695,
+ '贵' : 0xA696,
+ '财' : 0xA697,
+ '惹' : 0xA698,
+ '腐' : 0xA699,
+ '剂' : 0xA69A,
+ '融' : 0xA69B,
+ '厚' : 0xA69C,
+ '映' : 0xA69D,
+ '妻' : 0xA69E,
+ '狠' : 0xA69F,
+ '泄' : 0xA6A0,
+ '咿' : 0xA6A1,
+ '瞒' : 0xA6A2,
+ '咽' : 0xA6A3,
+ '恭' : 0xA6A4,
+ '涨' : 0xA6A5,
+ '嘎' : 0xA6A6,
+ '悔' : 0xA6A7,
+ '犹' : 0xA6A8,
+ '豫' : 0xA6A9,
+ '呃' : 0xA6AA,
+ '糕' : 0xA6AB,
+ '埃' : 0xA6AC,
+ '荡' : 0xA6AD,
+ '漾' : 0xA6AE,
+ '饵' : 0xA6AF,
+ '晃' : 0xA6B0,
+ '约' : 0xA6B1,
+ '专' : 0xA6B2,
+ '剔' : 0xA6B3,
+ '窍' : 0xA6B4,
+ '.' : 0xA6B5,
+ '乱' : 0xA6B6,
+ '甩' : 0xA6B7,
+ '鳅' : 0xA6B8,
+ '剧' : 0xA6B9,
+ '竿' : 0xA6BA,
+ '杆' : 0xA6BB,
+ '符' : 0xA6BC,
+ '呱' : 0xA6BD,
+ '团' : 0xA6BE,
+ '饱' : 0xA6BF,
+ '犯' : 0xA6C0,
+ '肃' : 0xA6C1,
+ '啵' : 0xA6C2,
+ '吟' : 0xA6C3,
+ '月' : 0xA6C4,
+ '诗' : 0xA6C5,
+ '碑' : 0xA6C6,
+ '奥' : 0xA6C7,
+ '扬' : 0xA6C8,
+ '舍' : 0xA6C9,
+ '副' : 0xA6CA,
+ '袖' : 0xA6CB,
+ '夏' : 0xA6CC,
+ '赖' : 0xA6CD,
+ '仆' : 0xA6CE,
+ '摆' : 0xA6CF,
+ '雇' : 0xA6D0,
+ '疙' : 0xA6D1,
+ '瘩' : 0xA6D2,
+ '居' : 0xA6D3,
+ '簧' : 0xA6D4,
+ '车' : 0xA6D5,
+ '剩' : 0xA6D6,
+ '玻' : 0xA6D7,
+ '璃' : 0xA6D8,
+ '赔' : 0xA6D9,
+ '欺' : 0xA6DA,
+ '育' : 0xA6DB,
+ '珍' : 0xA6DC,
+ '床' : 0xA6DD,
+ '蛮' : 0xA6DE,
+ '啄' : 0xA6DF,
+ '、' : 0xA6E0,
+ '稀' : 0xA6E1,
+ '栋' : 0xA6E2,
+ '柜' : 0xA6E3,
+ '鼻' : 0xA6E4,
+ '厉' : 0xA6E5,
+ '乏' : 0xA6E6,
+ '饭' : 0xA6E7,
+ '胡' : 0xA6E8,
+ '叮' : 0xA6E9,
+ '咚' : 0xA6EA,
+ '兵' : 0xA6EB,
+ '勃' : 0xA6EC,
+ '苛' : 0xA6ED,
+ '薪' : 0xA6EE,
+ '痴' : 0xA6EF,
+ '挣' : 0xA6F0,
+ '馊' : 0xA6F1,
+ '扑' : 0xA6F2,
+ '良' : 0xA6F3,
+ '竭' : 0xA6F4,
+ '慷' : 0xA6F5,
+ '慨' : 0xA6F6,
+ '欲' : 0xA6F7,
+ '愚' : 0xA6F8,
+ '蠢' : 0xA6F9,
+ '嘉' : 0xA6FA,
+ '监' : 0xA6FB,
+ '狱' : 0xA6FC,
+ '喔' : 0xA6FD,
+ '港' : 0xA6FE,
+ '逆' : 0xA6FF,
+ '误' : 0xA700,
+ '独' : 0xA701,
+ '划' : 0xA702,
+ '措' : 0xA703,
+ '颜' : 0xA704,
+ '奴' : 0xA705,
+ '罢' : 0xA706,
+ '洗' : 0xA707,
+ '俊' : 0xA708,
+ '罪' : 0xA709,
+ '偿' : 0xA70A,
+ '牺' : 0xA70B,
+ '牲' : 0xA70C,
+ '劲' : 0xA70D,
+ '岁' : 0xA70E,
+ '恩' : 0xA70F,
+ '账' : 0xA710,
+ '珂' : 0xA711,
+ '艾' : 0xA712,
+ '组' : 0xA713,
+ '织' : 0xA714,
+ '伯' : 0xA715,
+ '社' : 0xA716,
+ '架' : 0xA717,
+ '桥' : 0xA718,
+ '碟' : 0xA719,
+ '卑' : 0xA71A,
+ '鄙' : 0xA71B,
+ '臭' : 0xA71C,
+ '占' : 0xA71D,
+ '讶' : 0xA71E,
+ '兽' : 0xA71F,
+ '刷' : 0xA720,
+ '竞' : 0xA721,
+ '帐' : 0xA722,
+ '篷' : 0xA723,
+ '迟' : 0xA724,
+ '繁' : 0xA725,
+ '倦' : 0xA726,
+ '罐' : 0xA727,
+ '牌' : 0xA728,
+ '晨' : 0xA729,
+ '景' : 0xA72A,
+ '田' : 0xA72B,
+ '孔' : 0xA72C,
+ '钻' : 0xA72D,
+ '浓' : 0xA72E,
+ '盒' : 0xA72F,
+ '溜' : 0xA730,
+ '街' : 0xA731,
+ '概' : 0xA732,
+ '盹' : 0xA733,
+ '敞' : 0xA734,
+ '扉' : 0xA735,
+ '文' : 0xA736,
+ '撞' : 0xA737,
+ '姑' : 0xA738,
+ '娘' : 0xA739,
+ '糊' : 0xA73A,
+ '涂' : 0xA73B,
+ '依' : 0xA73C,
+ '辐' : 0xA73D,
+ '微' : 0xA73E,
+ '汇' : 0xA73F,
+ '缚' : 0xA740,
+ '宰' : 0xA741,
+ '摸' : 0xA742,
+ '侍' : 0xA743,
+ '垒' : 0xA744,
+ '扮' : 0xA745,
+ '惕' : 0xA746,
+ '估' : 0xA747,
+ '执' : 0xA748,
+ '悲' : 0xA749,
+ '拖' : 0xA74A,
+ '累' : 0xA74B,
+ '弥' : 0xA74C,
+ '渴' : 0xA74D,
+ '班' : 0xA74E,
+ '搞' : 0xA74F,
+ '谛' : 0xA750,
+ '哀' : 0xA751,
+ '圆' : 0xA752,
+ '鸣' : 0xA753,
+ '俩' : 0xA754,
+ '善' : 0xA755,
+ '塌' : 0xA756,
+ '埋' : 0xA757,
+ '孙' : 0xA758,
+ '凶' : 0xA759,
+ '聊' : 0xA75A,
+ '寃' : 0xA75B,
+ '怨' : 0xA75C,
+ '购' : 0xA75D,
+ '涌' : 0xA75E,
+ '劈' : 0xA75F,
+ '狐' : 0xA760,
+ '狸' : 0xA761,
+ '票' : 0xA762,
+ '闻' : 0xA763,
+ '哟' : 0xA764,
+ '唬' : 0xA765,
+ '摘' : 0xA766,
+ '愉' : 0xA767,
+ '呦' : 0xA768,
+ '棺' : 0xA769,
+ '溶' : 0xA76A,
+ '褐' : 0xA76B,
+ '肤' : 0xA76C,
+ '颤' : 0xA76D,
+ '逗' : 0xA76E,
+ '娶' : 0xA76F,
+ '逼' : 0xA770,
+ '悠' : 0xA771,
+ '蒙' : 0xA772,
+ '漆' : 0xA773,
+ '彩' : 0xA774,
+ '丰' : 0xA775,
+}
diff --git a/assets/text/charmap.jpn.txt b/assets/text/charmap.jpn.txt
new file mode 100644
index 0000000000..f615e8807f
--- /dev/null
+++ b/assets/text/charmap.jpn.txt
@@ -0,0 +1,20 @@
+# Determines how certain text sequences should be encoded for the JPN text encoding.
+{
+ '\n' : 0x000A,
+
+ '[A]' : 0x839F,
+ '[B]' : 0x83A0,
+ '[C]' : 0x83A1,
+ '[L]' : 0x83A2,
+ '[R]' : 0x83A3,
+ '[Z]' : 0x83A4,
+ '[C-Up]' : 0x83A5,
+ '[C-Down]' : 0x83A6,
+ '[C-Left]' : 0x83A7,
+ '[C-Right]' : 0x83A8,
+ '▼' : 0x83A9,
+ '[Control-Pad]' : 0x83AA,
+
+ # Possibly from a SHIFT-JIS extension, python doesn't have builtin support
+ '┯' : 0x86D3,
+}
diff --git a/assets/text/charmap.nes.txt b/assets/text/charmap.nes.txt
new file mode 100644
index 0000000000..1dd6445712
--- /dev/null
+++ b/assets/text/charmap.nes.txt
@@ -0,0 +1,50 @@
+# Determines how certain text sequences should be encoded for the NES text encoding.
+{
+ '\n' : 0x01,
+
+ '[A]' : 0x9F,
+ '[B]' : 0xA0,
+ '[C]' : 0xA1,
+ '[L]' : 0xA2,
+ '[R]' : 0xA3,
+ '[Z]' : 0xA4,
+ '[C-Up]' : 0xA5,
+ '[C-Down]' : 0xA6,
+ '[C-Left]' : 0xA7,
+ '[C-Right]' : 0xA8,
+ '▼' : 0xA9,
+ '[Control-Pad]' : 0xAA,
+ '[D-Pad]' : 0xAB,
+
+ 'À' : 0x80,
+ 'î' : 0x81,
+ 'Â' : 0x82,
+ 'Ä' : 0x83,
+ 'Ç' : 0x84,
+ 'È' : 0x85,
+ 'É' : 0x86,
+ 'Ê' : 0x87,
+ 'Ë' : 0x88,
+ 'Ï' : 0x89,
+ 'Ô' : 0x8A,
+ 'Ö' : 0x8B,
+ 'Ù' : 0x8C,
+ 'Û' : 0x8D,
+ 'Ü' : 0x8E,
+ 'ß' : 0x8F,
+ 'à' : 0x90,
+ 'á' : 0x91,
+ 'â' : 0x92,
+ 'ä' : 0x93,
+ 'ç' : 0x94,
+ 'è' : 0x95,
+ 'é' : 0x96,
+ 'ê' : 0x97,
+ 'ë' : 0x98,
+ 'ï' : 0x99,
+ 'ô' : 0x9A,
+ 'ö' : 0x9B,
+ 'ù' : 0x9C,
+ 'û' : 0x9D,
+ 'ü' : 0x9E,
+}
diff --git a/assets/text/charmap.txt b/assets/text/charmap.txt
deleted file mode 100644
index a6c94bee28..0000000000
--- a/assets/text/charmap.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Determines how certain text sequences should be encoded. The text sequence is
-# converted to either the first or second tuple element based on whether the
-# target encoding is the "wide" encoding. The first element is for the non-wide
-# encoding, used for all languages besides JP, while the second element is for
-# the wide encoding, used for JP.
-{
- '\n' : (0x01, 0x000A),
-
- '[A]' : (0x9F, 0x839F),
- '[B]' : (0xA0, 0x83A0),
- '[C]' : (0xA1, 0x83A1),
- '[L]' : (0xA2, 0x83A2),
- '[R]' : (0xA3, 0x83A3),
- '[Z]' : (0xA4, 0x83A4),
- '[C-Up]' : (0xA5, 0x83A5),
- '[C-Down]' : (0xA6, 0x83A6),
- '[C-Left]' : (0xA7, 0x83A7),
- '[C-Right]' : (0xA8, 0x83A8),
- '▼' : (0xA9, 0x83A9),
- '[Control-Pad]' : (0xAA, 0x83AA),
- '[D-Pad]' : (0xAB, None),
-
- # Possibly from a SHIFT-JIS extension, python doesn't have builtin support
- '┯' : (None, 0x86D3),
-
- '‾' : (0x7F, None),
- 'À' : (0x80, None),
- 'î' : (0x81, None),
- 'Â' : (0x82, None),
- 'Ä' : (0x83, None),
- 'Ç' : (0x84, None),
- 'È' : (0x85, None),
- 'É' : (0x86, None),
- 'Ê' : (0x87, None),
- 'Ë' : (0x88, None),
- 'Ï' : (0x89, None),
- 'Ô' : (0x8A, None),
- 'Ö' : (0x8B, None),
- 'Ù' : (0x8C, None),
- 'Û' : (0x8D, None),
- 'Ü' : (0x8E, None),
- 'ß' : (0x8F, None),
- 'à' : (0x90, None),
- 'á' : (0x91, None),
- 'â' : (0x92, None),
- 'ä' : (0x93, None),
- 'ç' : (0x94, None),
- 'è' : (0x95, None),
- 'é' : (0x96, None),
- 'ê' : (0x97, None),
- 'ë' : (0x98, None),
- 'ï' : (0x99, None),
- 'ô' : (0x9A, None),
- 'ö' : (0x9B, None),
- 'ù' : (0x9C, None),
- 'û' : (0x9D, None),
- 'ü' : (0x9E, None),
-}
diff --git a/assets/xml/objects/object_mag_ique.xml b/assets/xml/objects/object_mag_ique.xml
new file mode 100644
index 0000000000..03b1a8b193
--- /dev/null
+++ b/assets/xml/objects/object_mag_ique.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_md.xml b/assets/xml/objects/object_md.xml
index 717443537a..45527ca1b9 100644
--- a/assets/xml/objects/object_md.xml
+++ b/assets/xml/objects/object_md.xml
@@ -71,17 +71,17 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/assets/xml/overlays/ovl_End_Title_ique.xml b/assets/xml/overlays/ovl_End_Title_ique.xml
new file mode 100644
index 0000000000..300448cabf
--- /dev/null
+++ b/assets/xml/overlays/ovl_End_Title_ique.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/dungeons/bdan.xml b/assets/xml/scenes/dungeons/bdan.xml
index c4edc9bea4..ceee898fb5 100644
--- a/assets/xml/scenes/dungeons/bdan.xml
+++ b/assets/xml/scenes/dungeons/bdan.xml
@@ -1,6 +1,7 @@
-
+
+
diff --git a/assets/xml/scenes/dungeons/bdan_mq.xml b/assets/xml/scenes/dungeons/bdan_mq.xml
index 0aee687a80..8f73efde9b 100644
--- a/assets/xml/scenes/dungeons/bdan_mq.xml
+++ b/assets/xml/scenes/dungeons/bdan_mq.xml
@@ -1,6 +1,7 @@
-
+
+
diff --git a/assets/xml/scenes/dungeons/ganon_demo.xml b/assets/xml/scenes/dungeons/ganon_demo.xml
index 779cb9335a..d1a41b6c43 100644
--- a/assets/xml/scenes/dungeons/ganon_demo.xml
+++ b/assets/xml/scenes/dungeons/ganon_demo.xml
@@ -1,6 +1,7 @@
+
diff --git a/assets/xml/scenes/dungeons/jyasinboss.xml b/assets/xml/scenes/dungeons/jyasinboss.xml
index 0f81c26fbc..28abd03612 100644
--- a/assets/xml/scenes/dungeons/jyasinboss.xml
+++ b/assets/xml/scenes/dungeons/jyasinboss.xml
@@ -2,6 +2,7 @@
+
diff --git a/assets/xml/scenes/dungeons/jyasinzou.xml b/assets/xml/scenes/dungeons/jyasinzou.xml
index 07f7944f9b..1a44e14d72 100644
--- a/assets/xml/scenes/dungeons/jyasinzou.xml
+++ b/assets/xml/scenes/dungeons/jyasinzou.xml
@@ -6,6 +6,10 @@
+
+
+
+
diff --git a/assets/xml/scenes/dungeons/jyasinzou_mq.xml b/assets/xml/scenes/dungeons/jyasinzou_mq.xml
index 5614bc8936..6a99888abb 100644
--- a/assets/xml/scenes/dungeons/jyasinzou_mq.xml
+++ b/assets/xml/scenes/dungeons/jyasinzou_mq.xml
@@ -6,6 +6,10 @@
+
+
+
+
diff --git a/assets/xml/scenes/indoors/kenjyanoma.xml b/assets/xml/scenes/indoors/kenjyanoma.xml
index e6bcef90a0..7252a5a2c3 100644
--- a/assets/xml/scenes/indoors/kenjyanoma.xml
+++ b/assets/xml/scenes/indoors/kenjyanoma.xml
@@ -1,6 +1,9 @@
+
+
+
diff --git a/assets/xml/scenes/indoors/link_home.xml b/assets/xml/scenes/indoors/link_home.xml
index 2fb88ae347..7eabae43f3 100644
--- a/assets/xml/scenes/indoors/link_home.xml
+++ b/assets/xml/scenes/indoors/link_home.xml
@@ -1,6 +1,8 @@
+
+
diff --git a/assets/xml/scenes/indoors/nakaniwa.xml b/assets/xml/scenes/indoors/nakaniwa.xml
index 49ff4a29cb..d606bdc335 100644
--- a/assets/xml/scenes/indoors/nakaniwa.xml
+++ b/assets/xml/scenes/indoors/nakaniwa.xml
@@ -4,6 +4,8 @@
+
+
diff --git a/assets/xml/scenes/indoors/syatekijyou.xml b/assets/xml/scenes/indoors/syatekijyou.xml
index 5490e84f13..78ce084bb7 100644
--- a/assets/xml/scenes/indoors/syatekijyou.xml
+++ b/assets/xml/scenes/indoors/syatekijyou.xml
@@ -1,6 +1,9 @@
+
+
+
diff --git a/assets/xml/scenes/indoors/tokinoma.xml b/assets/xml/scenes/indoors/tokinoma.xml
index e43f0a9339..4d83fe3908 100644
--- a/assets/xml/scenes/indoors/tokinoma.xml
+++ b/assets/xml/scenes/indoors/tokinoma.xml
@@ -1,8 +1,18 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/indoors/tokinoma_pal_n64.xml b/assets/xml/scenes/indoors/tokinoma_pal_n64.xml
index f3d250415c..eb98a321af 100644
--- a/assets/xml/scenes/indoors/tokinoma_pal_n64.xml
+++ b/assets/xml/scenes/indoors/tokinoma_pal_n64.xml
@@ -1,8 +1,17 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/misc/hiral_demo.xml b/assets/xml/scenes/misc/hiral_demo.xml
index 32c55fac4b..47cf353d4c 100644
--- a/assets/xml/scenes/misc/hiral_demo.xml
+++ b/assets/xml/scenes/misc/hiral_demo.xml
@@ -4,6 +4,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/misc/hiral_demo_pal_n64.xml b/assets/xml/scenes/misc/hiral_demo_pal_n64.xml
index 88d347899a..26c0287300 100644
--- a/assets/xml/scenes/misc/hiral_demo_pal_n64.xml
+++ b/assets/xml/scenes/misc/hiral_demo_pal_n64.xml
@@ -4,6 +4,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot00.xml b/assets/xml/scenes/overworld/spot00.xml
index 0ffdc18871..dd78fc86ab 100644
--- a/assets/xml/scenes/overworld/spot00.xml
+++ b/assets/xml/scenes/overworld/spot00.xml
@@ -7,6 +7,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot00_pal_n64.xml b/assets/xml/scenes/overworld/spot00_pal_n64.xml
index 6eb609adac..d1641fe360 100644
--- a/assets/xml/scenes/overworld/spot00_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot00_pal_n64.xml
@@ -7,6 +7,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot01.xml b/assets/xml/scenes/overworld/spot01.xml
index 205da509c3..0074733cc4 100644
--- a/assets/xml/scenes/overworld/spot01.xml
+++ b/assets/xml/scenes/overworld/spot01.xml
@@ -2,6 +2,11 @@
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot01_pal_n64.xml b/assets/xml/scenes/overworld/spot01_pal_n64.xml
index a0e653dd43..8b2651c1ff 100644
--- a/assets/xml/scenes/overworld/spot01_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot01_pal_n64.xml
@@ -2,6 +2,11 @@
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot02.xml b/assets/xml/scenes/overworld/spot02.xml
index 45708dd3ac..23037c742b 100644
--- a/assets/xml/scenes/overworld/spot02.xml
+++ b/assets/xml/scenes/overworld/spot02.xml
@@ -2,9 +2,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/scenes/overworld/spot04.xml b/assets/xml/scenes/overworld/spot04.xml
index c861d45278..5a3e3079fc 100644
--- a/assets/xml/scenes/overworld/spot04.xml
+++ b/assets/xml/scenes/overworld/spot04.xml
@@ -2,8 +2,20 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot04_pal_n64.xml b/assets/xml/scenes/overworld/spot04_pal_n64.xml
index c8e8776a7a..c9054cca4e 100644
--- a/assets/xml/scenes/overworld/spot04_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot04_pal_n64.xml
@@ -2,8 +2,20 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot05.xml b/assets/xml/scenes/overworld/spot05.xml
index b799f21d1e..53ee4a5125 100644
--- a/assets/xml/scenes/overworld/spot05.xml
+++ b/assets/xml/scenes/overworld/spot05.xml
@@ -1,8 +1,7 @@
-
-
-
+
+
diff --git a/assets/xml/scenes/overworld/spot05_pal_n64.xml b/assets/xml/scenes/overworld/spot05_pal_n64.xml
index 6458ad63f5..eba27fbc44 100644
--- a/assets/xml/scenes/overworld/spot05_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot05_pal_n64.xml
@@ -1,8 +1,7 @@
-
-
-
+
+
diff --git a/assets/xml/scenes/overworld/spot06.xml b/assets/xml/scenes/overworld/spot06.xml
index 0c5ccea251..77226b2ce5 100644
--- a/assets/xml/scenes/overworld/spot06.xml
+++ b/assets/xml/scenes/overworld/spot06.xml
@@ -2,8 +2,11 @@
-
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot06_pal_n64.xml b/assets/xml/scenes/overworld/spot06_pal_n64.xml
index 308858ff74..df16711d4e 100644
--- a/assets/xml/scenes/overworld/spot06_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot06_pal_n64.xml
@@ -2,8 +2,11 @@
-
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot07.xml b/assets/xml/scenes/overworld/spot07.xml
index 9b9b5ac667..857cab9f01 100644
--- a/assets/xml/scenes/overworld/spot07.xml
+++ b/assets/xml/scenes/overworld/spot07.xml
@@ -1,6 +1,7 @@
+
diff --git a/assets/xml/scenes/overworld/spot07_pal_n64.xml b/assets/xml/scenes/overworld/spot07_pal_n64.xml
index 38070fd780..f856e54438 100644
--- a/assets/xml/scenes/overworld/spot07_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot07_pal_n64.xml
@@ -1,6 +1,7 @@
+
diff --git a/assets/xml/scenes/overworld/spot08.xml b/assets/xml/scenes/overworld/spot08.xml
index 136727c6d3..1ec02bc693 100644
--- a/assets/xml/scenes/overworld/spot08.xml
+++ b/assets/xml/scenes/overworld/spot08.xml
@@ -1,6 +1,9 @@
+
+
+
diff --git a/assets/xml/scenes/overworld/spot09.xml b/assets/xml/scenes/overworld/spot09.xml
index 7b7ec2ce5e..641ab8b7aa 100644
--- a/assets/xml/scenes/overworld/spot09.xml
+++ b/assets/xml/scenes/overworld/spot09.xml
@@ -3,6 +3,10 @@
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot09_pal_n64.xml b/assets/xml/scenes/overworld/spot09_pal_n64.xml
index a75774bf68..7bb06c8a8f 100644
--- a/assets/xml/scenes/overworld/spot09_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot09_pal_n64.xml
@@ -3,6 +3,10 @@
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot10.xml b/assets/xml/scenes/overworld/spot10.xml
index 58080b9c0c..b8c77cc2af 100644
--- a/assets/xml/scenes/overworld/spot10.xml
+++ b/assets/xml/scenes/overworld/spot10.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/scenes/overworld/spot11.xml b/assets/xml/scenes/overworld/spot11.xml
index 99bf24c829..96677d60fd 100644
--- a/assets/xml/scenes/overworld/spot11.xml
+++ b/assets/xml/scenes/overworld/spot11.xml
@@ -1,6 +1,8 @@
+
+
diff --git a/assets/xml/scenes/overworld/spot11_pal_n64.xml b/assets/xml/scenes/overworld/spot11_pal_n64.xml
index b66cd8f294..67b662bfb5 100644
--- a/assets/xml/scenes/overworld/spot11_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot11_pal_n64.xml
@@ -1,6 +1,8 @@
+
+
diff --git a/assets/xml/scenes/overworld/spot12.xml b/assets/xml/scenes/overworld/spot12.xml
index 9f4efd31e8..e4b38cbe88 100644
--- a/assets/xml/scenes/overworld/spot12.xml
+++ b/assets/xml/scenes/overworld/spot12.xml
@@ -2,6 +2,8 @@
+
+
diff --git a/assets/xml/scenes/overworld/spot12_pal_n64.xml b/assets/xml/scenes/overworld/spot12_pal_n64.xml
index c771c2e825..d1f94eb6b4 100644
--- a/assets/xml/scenes/overworld/spot12_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot12_pal_n64.xml
@@ -2,6 +2,8 @@
+
+
diff --git a/assets/xml/scenes/overworld/spot16.xml b/assets/xml/scenes/overworld/spot16.xml
index f3d92c8fe7..6f48610c8b 100644
--- a/assets/xml/scenes/overworld/spot16.xml
+++ b/assets/xml/scenes/overworld/spot16.xml
@@ -2,6 +2,11 @@
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot16_pal_n64.xml b/assets/xml/scenes/overworld/spot16_pal_n64.xml
index aff784ab9f..070a8a2d7e 100644
--- a/assets/xml/scenes/overworld/spot16_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot16_pal_n64.xml
@@ -2,6 +2,11 @@
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot16_v2.xml b/assets/xml/scenes/overworld/spot16_v2.xml
index 57a64323b2..b254e7f983 100644
--- a/assets/xml/scenes/overworld/spot16_v2.xml
+++ b/assets/xml/scenes/overworld/spot16_v2.xml
@@ -2,6 +2,11 @@
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot17.xml b/assets/xml/scenes/overworld/spot17.xml
index 3aecc15a60..926eeb3e10 100644
--- a/assets/xml/scenes/overworld/spot17.xml
+++ b/assets/xml/scenes/overworld/spot17.xml
@@ -2,6 +2,7 @@
+
diff --git a/assets/xml/scenes/overworld/spot17_pal_n64.xml b/assets/xml/scenes/overworld/spot17_pal_n64.xml
index 6aca94ff73..046da9144c 100644
--- a/assets/xml/scenes/overworld/spot17_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot17_pal_n64.xml
@@ -2,6 +2,7 @@
+
diff --git a/assets/xml/scenes/overworld/spot18.xml b/assets/xml/scenes/overworld/spot18.xml
index 513e67cbc9..affece84b7 100644
--- a/assets/xml/scenes/overworld/spot18.xml
+++ b/assets/xml/scenes/overworld/spot18.xml
@@ -1,9 +1,14 @@
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot18_pal_n64.xml b/assets/xml/scenes/overworld/spot18_pal_n64.xml
index adbbc51121..809e099cfc 100644
--- a/assets/xml/scenes/overworld/spot18_pal_n64.xml
+++ b/assets/xml/scenes/overworld/spot18_pal_n64.xml
@@ -1,9 +1,14 @@
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot20.xml b/assets/xml/scenes/overworld/spot20.xml
index 6e09a5de82..3d305508ad 100644
--- a/assets/xml/scenes/overworld/spot20.xml
+++ b/assets/xml/scenes/overworld/spot20.xml
@@ -1,6 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/scenes/overworld/spot20_pal.xml b/assets/xml/scenes/overworld/spot20_pal.xml
index cc94f8443c..0ba9380e13 100644
--- a/assets/xml/scenes/overworld/spot20_pal.xml
+++ b/assets/xml/scenes/overworld/spot20_pal.xml
@@ -1,6 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/textures/nes_font_static_ique_cn.xml b/assets/xml/textures/nes_font_static_ique_cn.xml
new file mode 100644
index 0000000000..484707b05d
--- /dev/null
+++ b/assets/xml/textures/nes_font_static_ique_cn.xml
@@ -0,0 +1,1919 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml
index 84a6d3b6c7..09abaaf67a 100644
--- a/baseroms/gc-eu-mq-dbg/config.yml
+++ b/baseroms/gc-eu-mq-dbg/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x12F70
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml
index f29e904e85..62925ab3b4 100644
--- a/baseroms/gc-eu-mq/config.yml
+++ b/baseroms/gc-eu-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml
index de1d26194c..278badfb80 100644
--- a/baseroms/gc-eu/config.yml
+++ b/baseroms/gc-eu/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp-ce/config.yml b/baseroms/gc-jp-ce/config.yml
index 3a3de8c818..f73344d892 100644
--- a/baseroms/gc-jp-ce/config.yml
+++ b/baseroms/gc-jp-ce/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp-mq/config.yml b/baseroms/gc-jp-mq/config.yml
index 6e1ab6b0ef..81927277bd 100644
--- a/baseroms/gc-jp-mq/config.yml
+++ b/baseroms/gc-jp-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-jp/config.yml b/baseroms/gc-jp/config.yml
index 08df45e6ae..26e407d8c4 100644
--- a/baseroms/gc-jp/config.yml
+++ b/baseroms/gc-jp/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-us-mq/config.yml b/baseroms/gc-us-mq/config.yml
index df026951f4..77f12ba8bd 100644
--- a/baseroms/gc-us-mq/config.yml
+++ b/baseroms/gc-us-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/gc-us/config.yml b/baseroms/gc-us/config.yml
index 60050cb7ec..c53cd1841a 100644
--- a/baseroms/gc-us/config.yml
+++ b/baseroms/gc-us/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7170
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/hackeroot-mq/config.yml b/baseroms/hackeroot-mq/config.yml
index 84a6d3b6c7..09abaaf67a 100644
--- a/baseroms/hackeroot-mq/config.yml
+++ b/baseroms/hackeroot-mq/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x12F70
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ique-cn/checksum-compressed.md5 b/baseroms/ique-cn/checksum-compressed.md5
new file mode 100644
index 0000000000..ba4e5e57bf
--- /dev/null
+++ b/baseroms/ique-cn/checksum-compressed.md5
@@ -0,0 +1 @@
+0ab48b2d44a74b3bb2d384f6170c2742 build/ique-cn/oot-ique-cn-compressed.z64
diff --git a/baseroms/ique-cn/checksum.md5 b/baseroms/ique-cn/checksum.md5
new file mode 100644
index 0000000000..82dfff85bf
--- /dev/null
+++ b/baseroms/ique-cn/checksum.md5
@@ -0,0 +1 @@
+17a9f30d722c29e6912bd4b66713d2b0 build/ique-cn/oot-ique-cn.z64
diff --git a/baseroms/ique-cn/config.yml b/baseroms/ique-cn/config.yml
new file mode 100644
index 0000000000..02fcba20a4
--- /dev/null
+++ b/baseroms/ique-cn/config.yml
@@ -0,0 +1,1212 @@
+dmadata_start: 0xB7A0
+text_lang: CN
+incbins: # TODO: fix these
+ - name: ipl3
+ segment: makerom
+ vram: 0x80000040
+ size: 0xFC0
+ - name: rspbootText
+ segment: boot
+ vram: 0x800065C0
+ size: 0x160
+ - name: aspMainText
+ segment: code
+ vram: 0x800E3600
+ size: 0xFB0
+ - name: gspF3DZEX2_NoN_PosLight_fifoText
+ segment: code
+ vram: 0x800E45B0
+ size: 0x1390
+ - name: gspS2DEX2d_fifoText
+ segment: code
+ vram: 0x800E5940
+ size: 0x18C0
+ - name: njpgdspMainText
+ segment: code
+ vram: 0x800E7200
+ size: 0xAF0
+ - name: aspMainData
+ segment: code
+ vram: 0x80114990
+ size: 0x2E0
+ - name: gspF3DZEX2_NoN_PosLight_fifoData
+ segment: code
+ vram: 0x80114C70
+ size: 0x420
+ - name: gspS2DEX2d_fifoData
+ segment: code
+ vram: 0x80115090
+ size: 0x390
+ - name: njpgdspMainData
+ segment: code
+ vram: 0x80115420
+ size: 0x60
+variables:
+ gMtxClear: 0x80106980
+ sJpnMessageEntryTable: 0x80115838
+ sNesMessageEntryTable: 0x80119978
+ sStaffMessageEntryTable: 0x8011DB98
+ gSoundFontTable: 0x8011F280
+ gSequenceFontTable: 0x8011F4F0
+ gSequenceTable: 0x8011F6B0
+ gSampleBankTable: 0x8011FDA0
+ sShadowTex: 0x80AE0B10
+assets:
+- name: code/fbdemo_circle
+ xml_path: assets/xml/code/fbdemo_circle.xml
+ start_offset: 0xEBD88
+ end_offset: 0xECFA8
+- name: code/fbdemo_triforce
+ xml_path: assets/xml/code/fbdemo_triforce.xml
+ start_offset: 0xEB210
+ end_offset: 0xEB2E0
+- name: code/fbdemo_wipe1
+ xml_path: assets/xml/code/fbdemo_wipe1.xml
+ start_offset: 0xEB2E0
+ end_offset: 0xEBC70
+- name: misc/link_animetion
+ xml_path: assets/xml/misc/link_animetion.xml
+- name: misc/z_select_static
+ xml_path: assets/xml/misc/z_select_static.xml
+- name: objects/gameplay_dangeon_keep
+ xml_path: assets/xml/objects/gameplay_dangeon_keep.xml
+- name: objects/gameplay_field_keep
+ xml_path: assets/xml/objects/gameplay_field_keep.xml
+- name: objects/gameplay_keep
+ xml_path: assets/xml/objects/gameplay_keep.xml
+- name: objects/object_ahg
+ xml_path: assets/xml/objects/object_ahg.xml
+- name: objects/object_am
+ xml_path: assets/xml/objects/object_am.xml
+- name: objects/object_ane
+ xml_path: assets/xml/objects/object_ane.xml
+- name: objects/object_ani
+ xml_path: assets/xml/objects/object_ani.xml
+- name: objects/object_anubice
+ xml_path: assets/xml/objects/object_anubice.xml
+- name: objects/object_aob
+ xml_path: assets/xml/objects/object_aob.xml
+- name: objects/object_b_heart
+ xml_path: assets/xml/objects/object_b_heart.xml
+- name: objects/object_Bb
+ xml_path: assets/xml/objects/object_Bb.xml
+- name: objects/object_bba
+ xml_path: assets/xml/objects/object_bba.xml
+- name: objects/object_bdan_objects
+ xml_path: assets/xml/objects/object_bdan_objects.xml
+- name: objects/object_bdoor
+ xml_path: assets/xml/objects/object_bdoor.xml
+- name: objects/object_bg
+ xml_path: assets/xml/objects/object_bg.xml
+- name: objects/object_bigokuta
+ xml_path: assets/xml/objects/object_bigokuta.xml
+- name: objects/object_bird
+ xml_path: assets/xml/objects/object_bird.xml
+- name: objects/object_bji
+ xml_path: assets/xml/objects/object_bji.xml
+- name: objects/object_bl
+ xml_path: assets/xml/objects/object_bl.xml
+- name: objects/object_blkobj
+ xml_path: assets/xml/objects/object_blkobj.xml
+- name: objects/object_bob
+ xml_path: assets/xml/objects/object_bob.xml
+- name: objects/object_boj
+ xml_path: assets/xml/objects/object_boj.xml
+- name: objects/object_bombf
+ xml_path: assets/xml/objects/object_bombf.xml
+- name: objects/object_bombiwa
+ xml_path: assets/xml/objects/object_bombiwa.xml
+- name: objects/object_bowl
+ xml_path: assets/xml/objects/object_bowl.xml
+- name: objects/object_box
+ xml_path: assets/xml/objects/object_box.xml
+- name: objects/object_brob
+ xml_path: assets/xml/objects/object_brob.xml
+- name: objects/object_bubble
+ xml_path: assets/xml/objects/object_bubble.xml
+- name: objects/object_bv
+ xml_path: assets/xml/objects/object_bv.xml
+- name: objects/object_bw
+ xml_path: assets/xml/objects/object_bw.xml
+- name: objects/object_bwall
+ xml_path: assets/xml/objects/object_bwall.xml
+- name: objects/object_bxa
+ xml_path: assets/xml/objects/object_bxa.xml
+- name: objects/object_cne
+ xml_path: assets/xml/objects/object_cne.xml
+- name: objects/object_cob
+ xml_path: assets/xml/objects/object_cob.xml
+- name: objects/object_cow
+ xml_path: assets/xml/objects/object_cow.xml
+- name: objects/object_crow
+ xml_path: assets/xml/objects/object_crow.xml
+- name: objects/object_cs
+ xml_path: assets/xml/objects/object_cs.xml
+- name: objects/object_d_elevator
+ xml_path: assets/xml/objects/object_d_elevator.xml
+- name: objects/object_d_hsblock
+ xml_path: assets/xml/objects/object_d_hsblock.xml
+- name: objects/object_d_lift
+ xml_path: assets/xml/objects/object_d_lift.xml
+- name: objects/object_daiku
+ xml_path: assets/xml/objects/object_daiku.xml
+- name: objects/object_ddan_objects
+ xml_path: assets/xml/objects/object_ddan_objects.xml
+- name: objects/object_dekubaba
+ xml_path: assets/xml/objects/object_dekubaba.xml
+- name: objects/object_dekujr
+ xml_path: assets/xml/objects/object_dekujr.xml
+- name: objects/object_dekunuts
+ xml_path: assets/xml/objects/object_dekunuts.xml
+- name: objects/object_demo_6k
+ xml_path: assets/xml/objects/object_demo_6k.xml
+- name: objects/object_demo_kekkai
+ xml_path: assets/xml/objects/object_demo_kekkai.xml
+- name: objects/object_demo_tre_lgt
+ xml_path: assets/xml/objects/object_demo_tre_lgt.xml
+- name: objects/object_dh
+ xml_path: assets/xml/objects/object_dh.xml
+- name: objects/object_dnk
+ xml_path: assets/xml/objects/object_dnk.xml
+- name: objects/object_dns
+ xml_path: assets/xml/objects/object_dns.xml
+- name: objects/object_dodojr
+ xml_path: assets/xml/objects/object_dodojr.xml
+- name: objects/object_dodongo
+ xml_path: assets/xml/objects/object_dodongo.xml
+- name: objects/object_dog
+ xml_path: assets/xml/objects/object_dog.xml
+- name: objects/object_door_gerudo
+ xml_path: assets/xml/objects/object_door_gerudo.xml
+- name: objects/object_door_killer
+ xml_path: assets/xml/objects/object_door_killer.xml
+- name: objects/object_ds
+ xml_path: assets/xml/objects/object_ds.xml
+- name: objects/object_ds2
+ xml_path: assets/xml/objects/object_ds2.xml
+- name: objects/object_du
+ xml_path: assets/xml/objects/object_du.xml
+- name: objects/object_dy_obj
+ xml_path: assets/xml/objects/object_dy_obj.xml
+- name: objects/object_ec
+ xml_path: assets/xml/objects/object_ec.xml
+- name: objects/object_efc_crystal_light
+ xml_path: assets/xml/objects/object_efc_crystal_light.xml
+- name: objects/object_efc_doughnut
+ xml_path: assets/xml/objects/object_efc_doughnut.xml
+- name: objects/object_efc_erupc
+ xml_path: assets/xml/objects/object_efc_erupc.xml
+- name: objects/object_efc_fire_ball
+ xml_path: assets/xml/objects/object_efc_fire_ball.xml
+- name: objects/object_efc_flash
+ xml_path: assets/xml/objects/object_efc_flash.xml
+- name: objects/object_efc_lgt_shower
+ xml_path: assets/xml/objects/object_efc_lgt_shower.xml
+- name: objects/object_efc_star_field
+ xml_path: assets/xml/objects/object_efc_star_field.xml
+- name: objects/object_efc_tw
+ xml_path: assets/xml/objects/object_efc_tw.xml
+- name: objects/object_ei
+ xml_path: assets/xml/objects/object_ei.xml
+- name: objects/object_fa
+ xml_path: assets/xml/objects/object_fa.xml
+- name: objects/object_fd
+ xml_path: assets/xml/objects/object_fd.xml
+- name: objects/object_fd2
+ xml_path: assets/xml/objects/object_fd2.xml
+- name: objects/object_fhg
+ xml_path: assets/xml/objects/object_fhg.xml
+- name: objects/object_fire
+ xml_path: assets/xml/objects/object_fire.xml
+- name: objects/object_firefly
+ xml_path: assets/xml/objects/object_firefly.xml
+- name: objects/object_fish
+ xml_path: assets/xml/objects/object_fish.xml
+- name: objects/object_fr
+ xml_path: assets/xml/objects/object_fr.xml
+- name: objects/object_fu
+ xml_path: assets/xml/objects/object_fu.xml
+- name: objects/object_fw
+ xml_path: assets/xml/objects/object_fw.xml
+- name: objects/object_fz
+ xml_path: assets/xml/objects/object_fz.xml
+- name: objects/object_ganon
+ xml_path: assets/xml/objects/object_ganon.xml
+- name: objects/object_ganon2
+ xml_path: assets/xml/objects/object_ganon2.xml
+- name: objects/object_ganon_anime1
+ xml_path: assets/xml/objects/object_ganon_anime1.xml
+- name: objects/object_ganon_anime2
+ xml_path: assets/xml/objects/object_ganon_anime2.xml
+- name: objects/object_ganon_anime3
+ xml_path: assets/xml/objects/object_ganon_anime3.xml
+- name: objects/object_ganon_objects
+ xml_path: assets/xml/objects/object_ganon_objects.xml
+- name: objects/object_ge1
+ xml_path: assets/xml/objects/object_ge1.xml
+- name: objects/object_geff
+ xml_path: assets/xml/objects/object_geff.xml
+- name: objects/object_geldb
+ xml_path: assets/xml/objects/object_geldb.xml
+- name: objects/object_gi_arrow
+ xml_path: assets/xml/objects/object_gi_arrow.xml
+- name: objects/object_gi_arrowcase
+ xml_path: assets/xml/objects/object_gi_arrowcase.xml
+- name: objects/object_gi_bean
+ xml_path: assets/xml/objects/object_gi_bean.xml
+- name: objects/object_gi_bomb_1
+ xml_path: assets/xml/objects/object_gi_bomb_1.xml
+- name: objects/object_gi_bomb_2
+ xml_path: assets/xml/objects/object_gi_bomb_2.xml
+- name: objects/object_gi_bombpouch
+ xml_path: assets/xml/objects/object_gi_bombpouch.xml
+- name: objects/object_gi_boomerang
+ xml_path: assets/xml/objects/object_gi_boomerang.xml
+- name: objects/object_gi_boots_2
+ xml_path: assets/xml/objects/object_gi_boots_2.xml
+- name: objects/object_gi_bosskey
+ xml_path: assets/xml/objects/object_gi_bosskey.xml
+- name: objects/object_gi_bottle
+ xml_path: assets/xml/objects/object_gi_bottle.xml
+- name: objects/object_gi_bottle_letter
+ xml_path: assets/xml/objects/object_gi_bottle_letter.xml
+- name: objects/object_gi_bow
+ xml_path: assets/xml/objects/object_gi_bow.xml
+- name: objects/object_gi_bracelet
+ xml_path: assets/xml/objects/object_gi_bracelet.xml
+- name: objects/object_gi_brokensword
+ xml_path: assets/xml/objects/object_gi_brokensword.xml
+- name: objects/object_gi_butterfly
+ xml_path: assets/xml/objects/object_gi_butterfly.xml
+- name: objects/object_gi_clothes
+ xml_path: assets/xml/objects/object_gi_clothes.xml
+- name: objects/object_gi_coin
+ xml_path: assets/xml/objects/object_gi_coin.xml
+- name: objects/object_gi_compass
+ xml_path: assets/xml/objects/object_gi_compass.xml
+- name: objects/object_gi_dekupouch
+ xml_path: assets/xml/objects/object_gi_dekupouch.xml
+- name: objects/object_gi_egg
+ xml_path: assets/xml/objects/object_gi_egg.xml
+- name: objects/object_gi_eye_lotion
+ xml_path: assets/xml/objects/object_gi_eye_lotion.xml
+- name: objects/object_gi_fire
+ xml_path: assets/xml/objects/object_gi_fire.xml
+- name: objects/object_gi_fish
+ xml_path: assets/xml/objects/object_gi_fish.xml
+- name: objects/object_gi_frog
+ xml_path: assets/xml/objects/object_gi_frog.xml
+- name: objects/object_gi_gerudo
+ xml_path: assets/xml/objects/object_gi_gerudo.xml
+- name: objects/object_gi_gerudomask
+ xml_path: assets/xml/objects/object_gi_gerudomask.xml
+- name: objects/object_gi_ghost
+ xml_path: assets/xml/objects/object_gi_ghost.xml
+- name: objects/object_gi_glasses
+ xml_path: assets/xml/objects/object_gi_glasses.xml
+- name: objects/object_gi_gloves
+ xml_path: assets/xml/objects/object_gi_gloves.xml
+- name: objects/object_gi_goddess
+ xml_path: assets/xml/objects/object_gi_goddess.xml
+- name: objects/object_gi_golonmask
+ xml_path: assets/xml/objects/object_gi_golonmask.xml
+- name: objects/object_gi_grass
+ xml_path: assets/xml/objects/object_gi_grass.xml
+- name: objects/object_gi_hammer
+ xml_path: assets/xml/objects/object_gi_hammer.xml
+- name: objects/object_gi_heart
+ xml_path: assets/xml/objects/object_gi_heart.xml
+- name: objects/object_gi_hearts
+ xml_path: assets/xml/objects/object_gi_hearts.xml
+- name: objects/object_gi_hookshot
+ xml_path: assets/xml/objects/object_gi_hookshot.xml
+- name: objects/object_gi_hoverboots
+ xml_path: assets/xml/objects/object_gi_hoverboots.xml
+- name: objects/object_gi_insect
+ xml_path: assets/xml/objects/object_gi_insect.xml
+- name: objects/object_gi_jewel
+ xml_path: assets/xml/objects/object_gi_jewel.xml
+- name: objects/object_gi_key
+ xml_path: assets/xml/objects/object_gi_key.xml
+- name: objects/object_gi_ki_tan_mask
+ xml_path: assets/xml/objects/object_gi_ki_tan_mask.xml
+- name: objects/object_gi_letter
+ xml_path: assets/xml/objects/object_gi_letter.xml
+- name: objects/object_gi_liquid
+ xml_path: assets/xml/objects/object_gi_liquid.xml
+- name: objects/object_gi_longsword
+ xml_path: assets/xml/objects/object_gi_longsword.xml
+- name: objects/object_gi_m_arrow
+ xml_path: assets/xml/objects/object_gi_m_arrow.xml
+- name: objects/object_gi_magicpot
+ xml_path: assets/xml/objects/object_gi_magicpot.xml
+- name: objects/object_gi_map
+ xml_path: assets/xml/objects/object_gi_map.xml
+- name: objects/object_gi_medal
+ xml_path: assets/xml/objects/object_gi_medal.xml
+- name: objects/object_gi_melody
+ xml_path: assets/xml/objects/object_gi_melody.xml
+- name: objects/object_gi_milk
+ xml_path: assets/xml/objects/object_gi_milk.xml
+- name: objects/object_gi_mushroom
+ xml_path: assets/xml/objects/object_gi_mushroom.xml
+- name: objects/object_gi_niwatori
+ xml_path: assets/xml/objects/object_gi_niwatori.xml
+- name: objects/object_gi_nuts
+ xml_path: assets/xml/objects/object_gi_nuts.xml
+- name: objects/object_gi_ocarina
+ xml_path: assets/xml/objects/object_gi_ocarina.xml
+- name: objects/object_gi_ocarina_0
+ xml_path: assets/xml/objects/object_gi_ocarina_0.xml
+- name: objects/object_gi_pachinko
+ xml_path: assets/xml/objects/object_gi_pachinko.xml
+- name: objects/object_gi_powder
+ xml_path: assets/xml/objects/object_gi_powder.xml
+- name: objects/object_gi_prescription
+ xml_path: assets/xml/objects/object_gi_prescription.xml
+- name: objects/object_gi_purse
+ xml_path: assets/xml/objects/object_gi_purse.xml
+- name: objects/object_gi_rabit_mask
+ xml_path: assets/xml/objects/object_gi_rabit_mask.xml
+- name: objects/object_gi_redead_mask
+ xml_path: assets/xml/objects/object_gi_redead_mask.xml
+- name: objects/object_gi_rupy
+ xml_path: assets/xml/objects/object_gi_rupy.xml
+- name: objects/object_gi_saw
+ xml_path: assets/xml/objects/object_gi_saw.xml
+- name: objects/object_gi_scale
+ xml_path: assets/xml/objects/object_gi_scale.xml
+- name: objects/object_gi_seed
+ xml_path: assets/xml/objects/object_gi_seed.xml
+- name: objects/object_gi_shield_1
+ xml_path: assets/xml/objects/object_gi_shield_1.xml
+- name: objects/object_gi_shield_2
+ xml_path: assets/xml/objects/object_gi_shield_2.xml
+- name: objects/object_gi_shield_3
+ xml_path: assets/xml/objects/object_gi_shield_3.xml
+- name: objects/object_gi_skj_mask
+ xml_path: assets/xml/objects/object_gi_skj_mask.xml
+- name: objects/object_gi_soldout
+ xml_path: assets/xml/objects/object_gi_soldout.xml
+- name: objects/object_gi_soul
+ xml_path: assets/xml/objects/object_gi_soul.xml
+- name: objects/object_gi_stick
+ xml_path: assets/xml/objects/object_gi_stick.xml
+- name: objects/object_gi_sutaru
+ xml_path: assets/xml/objects/object_gi_sutaru.xml
+- name: objects/object_gi_sword_1
+ xml_path: assets/xml/objects/object_gi_sword_1.xml
+- name: objects/object_gi_ticketstone
+ xml_path: assets/xml/objects/object_gi_ticketstone.xml
+- name: objects/object_gi_truth_mask
+ xml_path: assets/xml/objects/object_gi_truth_mask.xml
+- name: objects/object_gi_zoramask
+ xml_path: assets/xml/objects/object_gi_zoramask.xml
+- name: objects/object_gj
+ xml_path: assets/xml/objects/object_gj.xml
+- name: objects/object_gjyo_objects
+ xml_path: assets/xml/objects/object_gjyo_objects.xml
+- name: objects/object_gla
+ xml_path: assets/xml/objects/object_gla.xml
+- name: objects/object_gm
+ xml_path: assets/xml/objects/object_gm.xml
+- name: objects/object_gnd
+ xml_path: assets/xml/objects/object_gnd.xml
+- name: objects/object_gnd_magic
+ xml_path: assets/xml/objects/object_gnd_magic.xml
+- name: objects/object_gndd
+ xml_path: assets/xml/objects/object_gndd.xml
+- name: objects/object_god_lgt
+ xml_path: assets/xml/objects/object_god_lgt.xml
+- name: objects/object_gol
+ xml_path: assets/xml/objects/object_gol.xml
+- name: objects/object_goma
+ xml_path: assets/xml/objects/object_goma.xml
+- name: objects/object_goroiwa
+ xml_path: assets/xml/objects/object_goroiwa.xml
+- name: objects/object_gr
+ xml_path: assets/xml/objects/object_gr.xml
+- name: objects/object_gs
+ xml_path: assets/xml/objects/object_gs.xml
+- name: objects/object_gt
+ xml_path: assets/xml/objects/object_gt.xml
+- name: objects/object_haka
+ xml_path: assets/xml/objects/object_haka.xml
+- name: objects/object_haka_door
+ xml_path: assets/xml/objects/object_haka_door.xml
+- name: objects/object_haka_objects
+ xml_path: assets/xml/objects/object_haka_objects.xml
+- name: objects/object_hakach_objects
+ xml_path: assets/xml/objects/object_hakach_objects.xml
+- name: objects/object_hata
+ xml_path: assets/xml/objects/object_hata.xml
+- name: objects/object_heavy_object
+ xml_path: assets/xml/objects/object_heavy_object.xml
+- name: objects/object_hidan_objects
+ xml_path: assets/xml/objects/object_hidan_objects.xml
+- name: objects/object_hintnuts
+ xml_path: assets/xml/objects/object_hintnuts.xml
+- name: objects/object_hni
+ xml_path: assets/xml/objects/object_hni.xml
+- name: objects/object_horse
+ xml_path: assets/xml/objects/object_horse.xml
+- name: objects/object_horse_ganon
+ xml_path: assets/xml/objects/object_horse_ganon.xml
+- name: objects/object_horse_link_child
+ xml_path: assets/xml/objects/object_horse_link_child.xml
+- name: objects/object_horse_normal
+ xml_path: assets/xml/objects/object_horse_normal.xml
+- name: objects/object_horse_zelda
+ xml_path: assets/xml/objects/object_horse_zelda.xml
+- name: objects/object_hs
+ xml_path: assets/xml/objects/object_hs.xml
+- name: objects/object_human
+ xml_path: assets/xml/objects/object_human.xml
+- name: objects/object_ice_objects
+ xml_path: assets/xml/objects/object_ice_objects.xml
+- name: objects/object_ik
+ xml_path: assets/xml/objects/object_ik.xml
+- name: objects/object_im
+ xml_path: assets/xml/objects/object_im.xml
+- name: objects/object_in
+ xml_path: assets/xml/objects/object_in.xml
+- name: objects/object_ingate
+ xml_path: assets/xml/objects/object_ingate.xml
+- name: objects/object_jj
+ xml_path: assets/xml/objects/object_jj.xml
+- name: objects/object_js
+ xml_path: assets/xml/objects/object_js.xml
+- name: objects/object_jya_door
+ xml_path: assets/xml/objects/object_jya_door.xml
+- name: objects/object_jya_iron
+ xml_path: assets/xml/objects/object_jya_iron.xml
+- name: objects/object_jya_obj
+ xml_path: assets/xml/objects/object_jya_obj.xml
+- name: objects/object_ka
+ xml_path: assets/xml/objects/object_ka.xml
+- name: objects/object_kanban
+ xml_path: assets/xml/objects/object_kanban.xml
+- name: objects/object_kibako2
+ xml_path: assets/xml/objects/object_kibako2.xml
+- name: objects/object_kingdodongo
+ xml_path: assets/xml/objects/object_kingdodongo.xml
+- name: objects/object_km1
+ xml_path: assets/xml/objects/object_km1.xml
+- name: objects/object_kusa
+ xml_path: assets/xml/objects/object_kusa.xml
+- name: objects/object_kw1
+ xml_path: assets/xml/objects/object_kw1.xml
+- name: objects/object_kz
+ xml_path: assets/xml/objects/object_kz.xml
+- name: objects/object_light_ring
+ xml_path: assets/xml/objects/object_light_ring.xml
+- name: objects/object_lightbox
+ xml_path: assets/xml/objects/object_lightbox.xml
+- name: objects/object_lightswitch
+ xml_path: assets/xml/objects/object_lightswitch.xml
+- name: objects/object_link_boy
+ xml_path: assets/xml/objects/object_link_boy.xml
+- name: objects/object_link_child
+ xml_path: assets/xml/objects/object_link_child.xml
+- name: objects/object_ma1
+ xml_path: assets/xml/objects/object_ma1.xml
+- name: objects/object_ma2
+ xml_path: assets/xml/objects/object_ma2.xml
+- name: objects/object_mag
+ xml_path: assets/xml/objects/object_mag_ique.xml
+- name: objects/object_mamenoki
+ xml_path: assets/xml/objects/object_mamenoki.xml
+- name: objects/object_mastergolon
+ xml_path: assets/xml/objects/object_mastergolon.xml
+- name: objects/object_masterkokiri
+ xml_path: assets/xml/objects/object_masterkokiri.xml
+- name: objects/object_masterkokirihead
+ xml_path: assets/xml/objects/object_masterkokirihead.xml
+- name: objects/object_masterzoora
+ xml_path: assets/xml/objects/object_masterzoora.xml
+- name: objects/object_mb
+ xml_path: assets/xml/objects/object_mb.xml
+- name: objects/object_md
+ xml_path: assets/xml/objects/object_md.xml
+- name: objects/object_medal
+ xml_path: assets/xml/objects/object_medal.xml
+- name: objects/object_menkuri_objects
+ xml_path: assets/xml/objects/object_menkuri_objects.xml
+- name: objects/object_mir_ray
+ xml_path: assets/xml/objects/object_mir_ray.xml
+- name: objects/object_mizu_objects
+ xml_path: assets/xml/objects/object_mizu_objects.xml
+- name: objects/object_mjin
+ xml_path: assets/xml/objects/object_mjin.xml
+- name: objects/object_mjin_dark
+ xml_path: assets/xml/objects/object_mjin_dark.xml
+- name: objects/object_mjin_flame
+ xml_path: assets/xml/objects/object_mjin_flame.xml
+- name: objects/object_mjin_flash
+ xml_path: assets/xml/objects/object_mjin_flash.xml
+- name: objects/object_mjin_ice
+ xml_path: assets/xml/objects/object_mjin_ice.xml
+- name: objects/object_mjin_oka
+ xml_path: assets/xml/objects/object_mjin_oka.xml
+- name: objects/object_mjin_soul
+ xml_path: assets/xml/objects/object_mjin_soul.xml
+- name: objects/object_mjin_wind
+ xml_path: assets/xml/objects/object_mjin_wind.xml
+- name: objects/object_mk
+ xml_path: assets/xml/objects/object_mk.xml
+- name: objects/object_mm
+ xml_path: assets/xml/objects/object_mm.xml
+- name: objects/object_mo
+ xml_path: assets/xml/objects/object_mo.xml
+- name: objects/object_mori_hineri1
+ xml_path: assets/xml/objects/object_mori_hineri1.xml
+- name: objects/object_mori_hineri1a
+ xml_path: assets/xml/objects/object_mori_hineri1a.xml
+- name: objects/object_mori_hineri2
+ xml_path: assets/xml/objects/object_mori_hineri2.xml
+- name: objects/object_mori_hineri2a
+ xml_path: assets/xml/objects/object_mori_hineri2a.xml
+- name: objects/object_mori_objects
+ xml_path: assets/xml/objects/object_mori_objects.xml
+- name: objects/object_mori_tex
+ xml_path: assets/xml/objects/object_mori_tex.xml
+- name: objects/object_ms
+ xml_path: assets/xml/objects/object_ms.xml
+- name: objects/object_mu
+ xml_path: assets/xml/objects/object_mu.xml
+- name: objects/object_nb
+ xml_path: assets/xml/objects/object_nb.xml
+- name: objects/object_niw
+ xml_path: assets/xml/objects/object_niw.xml
+- name: objects/object_nwc
+ xml_path: assets/xml/objects/object_nwc.xml
+- name: objects/object_ny
+ xml_path: assets/xml/objects/object_ny.xml
+- name: objects/object_o_anime
+ xml_path: assets/xml/objects/object_o_anime.xml
+- name: objects/object_oA1
+ xml_path: assets/xml/objects/object_oA1.xml
+- name: objects/object_oA2
+ xml_path: assets/xml/objects/object_oA2.xml
+- name: objects/object_oA3
+ xml_path: assets/xml/objects/object_oA3.xml
+- name: objects/object_oA4
+ xml_path: assets/xml/objects/object_oA4.xml
+- name: objects/object_oA5
+ xml_path: assets/xml/objects/object_oA5.xml
+- name: objects/object_oA6
+ xml_path: assets/xml/objects/object_oA6.xml
+- name: objects/object_oA7
+ xml_path: assets/xml/objects/object_oA7.xml
+- name: objects/object_oA8
+ xml_path: assets/xml/objects/object_oA8.xml
+- name: objects/object_oA9
+ xml_path: assets/xml/objects/object_oA9.xml
+- name: objects/object_oA10
+ xml_path: assets/xml/objects/object_oA10.xml
+- name: objects/object_oA11
+ xml_path: assets/xml/objects/object_oA11.xml
+- name: objects/object_oB1
+ xml_path: assets/xml/objects/object_oB1.xml
+- name: objects/object_oB2
+ xml_path: assets/xml/objects/object_oB2.xml
+- name: objects/object_oB3
+ xml_path: assets/xml/objects/object_oB3.xml
+- name: objects/object_oB4
+ xml_path: assets/xml/objects/object_oB4.xml
+- name: objects/object_oE1
+ xml_path: assets/xml/objects/object_oE1.xml
+- name: objects/object_oE1s
+ xml_path: assets/xml/objects/object_oE1s.xml
+- name: objects/object_oE2
+ xml_path: assets/xml/objects/object_oE2.xml
+- name: objects/object_oE3
+ xml_path: assets/xml/objects/object_oE3.xml
+- name: objects/object_oE4
+ xml_path: assets/xml/objects/object_oE4.xml
+- name: objects/object_oE4s
+ xml_path: assets/xml/objects/object_oE4s.xml
+- name: objects/object_oE5
+ xml_path: assets/xml/objects/object_oE5.xml
+- name: objects/object_oE6
+ xml_path: assets/xml/objects/object_oE6.xml
+- name: objects/object_oE7
+ xml_path: assets/xml/objects/object_oE7.xml
+- name: objects/object_oE8
+ xml_path: assets/xml/objects/object_oE8.xml
+- name: objects/object_oE9
+ xml_path: assets/xml/objects/object_oE9.xml
+- name: objects/object_oE10
+ xml_path: assets/xml/objects/object_oE10.xml
+- name: objects/object_oE11
+ xml_path: assets/xml/objects/object_oE11.xml
+- name: objects/object_oE12
+ xml_path: assets/xml/objects/object_oE12.xml
+- name: objects/object_oE_anime
+ xml_path: assets/xml/objects/object_oE_anime.xml
+- name: objects/object_oF1d_map
+ xml_path: assets/xml/objects/object_oF1d_map.xml
+- name: objects/object_oF1s
+ xml_path: assets/xml/objects/object_oF1s.xml
+- name: objects/object_okuta
+ xml_path: assets/xml/objects/object_okuta.xml
+- name: objects/object_opening_demo1
+ xml_path: assets/xml/objects/object_opening_demo1.xml
+- name: objects/object_os
+ xml_path: assets/xml/objects/object_os.xml
+- name: objects/object_os_anime
+ xml_path: assets/xml/objects/object_os_anime.xml
+- name: objects/object_ossan
+ xml_path: assets/xml/objects/object_ossan.xml
+- name: objects/object_ouke_haka
+ xml_path: assets/xml/objects/object_ouke_haka.xml
+- name: objects/object_owl
+ xml_path: assets/xml/objects/object_owl.xml
+- name: objects/object_peehat
+ xml_path: assets/xml/objects/object_peehat.xml
+- name: objects/object_po_composer
+ xml_path: assets/xml/objects/object_po_composer.xml
+- name: objects/object_po_field
+ xml_path: assets/xml/objects/object_po_field.xml
+- name: objects/object_po_sisters
+ xml_path: assets/xml/objects/object_po_sisters.xml
+- name: objects/object_poh
+ xml_path: assets/xml/objects/object_poh.xml
+- name: objects/object_ps
+ xml_path: assets/xml/objects/object_ps.xml
+- name: objects/object_pu_box
+ xml_path: assets/xml/objects/object_pu_box.xml
+- name: objects/object_rd
+ xml_path: assets/xml/objects/object_rd.xml
+- name: objects/object_reeba
+ xml_path: assets/xml/objects/object_reeba.xml
+- name: objects/object_relay_objects
+ xml_path: assets/xml/objects/object_relay_objects.xml
+- name: objects/object_rl
+ xml_path: assets/xml/objects/object_rl.xml
+- name: objects/object_rr
+ xml_path: assets/xml/objects/object_rr.xml
+- name: objects/object_rs
+ xml_path: assets/xml/objects/object_rs.xml
+- name: objects/object_ru1
+ xml_path: assets/xml/objects/object_ru1.xml
+- name: objects/object_ru2
+ xml_path: assets/xml/objects/object_ru2.xml
+- name: objects/object_sa
+ xml_path: assets/xml/objects/object_sa.xml
+- name: objects/object_sb
+ xml_path: assets/xml/objects/object_sb.xml
+- name: objects/object_sd
+ xml_path: assets/xml/objects/object_sd.xml
+- name: objects/object_shop_dungen
+ xml_path: assets/xml/objects/object_shop_dungen.xml
+- name: objects/object_shopnuts
+ xml_path: assets/xml/objects/object_shopnuts.xml
+- name: objects/object_siofuki
+ xml_path: assets/xml/objects/object_siofuki.xml
+- name: objects/object_sk2
+ xml_path: assets/xml/objects/object_sk2.xml
+- name: objects/object_skb
+ xml_path: assets/xml/objects/object_skb.xml
+- name: objects/object_skj
+ xml_path: assets/xml/objects/object_skj.xml
+- name: objects/object_spot00_break
+ xml_path: assets/xml/objects/object_spot00_break.xml
+- name: objects/object_spot00_objects
+ xml_path: assets/xml/objects/object_spot00_objects.xml
+- name: objects/object_spot01_matoya
+ xml_path: assets/xml/objects/object_spot01_matoya.xml
+- name: objects/object_spot01_matoyab
+ xml_path: assets/xml/objects/object_spot01_matoyab.xml
+- name: objects/object_spot01_objects
+ xml_path: assets/xml/objects/object_spot01_objects.xml
+- name: objects/object_spot01_objects2
+ xml_path: assets/xml/objects/object_spot01_objects2.xml
+- name: objects/object_spot02_objects
+ xml_path: assets/xml/objects/object_spot02_objects.xml
+- name: objects/object_spot03_object
+ xml_path: assets/xml/objects/object_spot03_object.xml
+- name: objects/object_spot04_objects
+ xml_path: assets/xml/objects/object_spot04_objects.xml
+- name: objects/object_spot05_objects
+ xml_path: assets/xml/objects/object_spot05_objects.xml
+- name: objects/object_spot06_objects
+ xml_path: assets/xml/objects/object_spot06_objects.xml
+- name: objects/object_spot07_object
+ xml_path: assets/xml/objects/object_spot07_object.xml
+- name: objects/object_spot08_obj
+ xml_path: assets/xml/objects/object_spot08_obj.xml
+- name: objects/object_spot09_obj
+ xml_path: assets/xml/objects/object_spot09_obj.xml
+- name: objects/object_spot11_obj
+ xml_path: assets/xml/objects/object_spot11_obj.xml
+- name: objects/object_spot12_obj
+ xml_path: assets/xml/objects/object_spot12_obj.xml
+- name: objects/object_spot15_obj
+ xml_path: assets/xml/objects/object_spot15_obj.xml
+- name: objects/object_spot16_obj
+ xml_path: assets/xml/objects/object_spot16_obj.xml
+- name: objects/object_spot17_obj
+ xml_path: assets/xml/objects/object_spot17_obj.xml
+- name: objects/object_spot18_obj
+ xml_path: assets/xml/objects/object_spot18_obj.xml
+- name: objects/object_ssh
+ xml_path: assets/xml/objects/object_ssh.xml
+- name: objects/object_sst
+ xml_path: assets/xml/objects/object_sst.xml
+- name: objects/object_st
+ xml_path: assets/xml/objects/object_st.xml
+- name: objects/object_stream
+ xml_path: assets/xml/objects/object_stream.xml
+- name: objects/object_syokudai
+ xml_path: assets/xml/objects/object_syokudai.xml
+- name: objects/object_ta
+ xml_path: assets/xml/objects/object_ta.xml
+- name: objects/object_timeblock
+ xml_path: assets/xml/objects/object_timeblock.xml
+- name: objects/object_tite
+ xml_path: assets/xml/objects/object_tite.xml
+- name: objects/object_tk
+ xml_path: assets/xml/objects/object_tk.xml
+- name: objects/object_toki_objects
+ xml_path: assets/xml/objects/object_toki_objects.xml
+- name: objects/object_torch2
+ xml_path: assets/xml/objects/object_torch2.xml
+- name: objects/object_toryo
+ xml_path: assets/xml/objects/object_toryo.xml
+- name: objects/object_tp
+ xml_path: assets/xml/objects/object_tp.xml
+- name: objects/object_tr
+ xml_path: assets/xml/objects/object_tr.xml
+- name: objects/object_trap
+ xml_path: assets/xml/objects/object_trap.xml
+- name: objects/object_triforce_spot
+ xml_path: assets/xml/objects/object_triforce_spot.xml
+- name: objects/object_ts
+ xml_path: assets/xml/objects/object_ts.xml
+- name: objects/object_tsubo
+ xml_path: assets/xml/objects/object_tsubo.xml
+- name: objects/object_tw
+ xml_path: assets/xml/objects/object_tw.xml
+- name: objects/object_umajump
+ xml_path: assets/xml/objects/object_umajump.xml
+- name: objects/object_vali
+ xml_path: assets/xml/objects/object_vali.xml
+- name: objects/object_vase
+ xml_path: assets/xml/objects/object_vase.xml
+- name: objects/object_vm
+ xml_path: assets/xml/objects/object_vm.xml
+- name: objects/object_wallmaster
+ xml_path: assets/xml/objects/object_wallmaster.xml
+- name: objects/object_warp1
+ xml_path: assets/xml/objects/object_warp1.xml
+- name: objects/object_warp2
+ xml_path: assets/xml/objects/object_warp2.xml
+- name: objects/object_wf
+ xml_path: assets/xml/objects/object_wf.xml
+- name: objects/object_wood02
+ xml_path: assets/xml/objects/object_wood02.xml
+- name: objects/object_xc
+ xml_path: assets/xml/objects/object_xc.xml
+- name: objects/object_yabusame_point
+ xml_path: assets/xml/objects/object_yabusame_point.xml
+- name: objects/object_ydan_objects
+ xml_path: assets/xml/objects/object_ydan_objects.xml
+- name: objects/object_yukabyun
+ xml_path: assets/xml/objects/object_yukabyun.xml
+- name: objects/object_zf
+ xml_path: assets/xml/objects/object_zf.xml
+- name: objects/object_zg
+ xml_path: assets/xml/objects/object_zg.xml
+- name: objects/object_zl1
+ xml_path: assets/xml/objects/object_zl1.xml
+- name: objects/object_zl2
+ xml_path: assets/xml/objects/object_zl2.xml
+- name: objects/object_zl2_anime1
+ xml_path: assets/xml/objects/object_zl2_anime1.xml
+- name: objects/object_zl2_anime2
+ xml_path: assets/xml/objects/object_zl2_anime2.xml
+- name: objects/object_zl4
+ xml_path: assets/xml/objects/object_zl4.xml
+- name: objects/object_zo
+ xml_path: assets/xml/objects/object_zo.xml
+- name: overlays/ovl_Arrow_Fire
+ xml_path: assets/xml/overlays/ovl_Arrow_Fire.xml
+ start_offset: 0x980
+ end_offset: 0x1DA0
+- name: overlays/ovl_Arrow_Ice
+ xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml
+ start_offset: 0x9A0
+ end_offset: 0x1DC0
+- name: overlays/ovl_Arrow_Light
+ xml_path: assets/xml/overlays/ovl_Arrow_Light.xml
+ start_offset: 0x9B0
+ end_offset: 0x1DD0
+- name: overlays/ovl_Bg_Ganon_Otyuka
+ xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml
+ start_offset: 0x1100
+ end_offset: 0x24DC
+- name: overlays/ovl_Bg_Jya_Cobra
+ xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml
+ start_offset: 0x1850
+ end_offset: 0x18C8
+- name: overlays/ovl_Boss_Dodongo
+ xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml
+ start_offset: 0x61E8
+ end_offset: 0x91E8
+- name: overlays/ovl_Boss_Ganon
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml
+ start_offset: 0xE3C8
+ end_offset: 0x20EE8
+- name: overlays/ovl_Boss_Ganon2
+ xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml
+ start_offset: 0x9F88
+ end_offset: 0x10438
+- name: overlays/ovl_Boss_Sst
+ xml_path: assets/xml/overlays/ovl_Boss_Sst.xml
+ start_offset: 0xA380
+ end_offset: 0xAD30
+- name: overlays/ovl_Demo_Shd
+ xml_path: assets/xml/overlays/ovl_Demo_Shd.xml
+ start_offset: 0x410
+ end_offset: 0x2390
+- name: overlays/ovl_Effect_Ss_Fhg_Flash
+ xml_path: assets/xml/overlays/ovl_Effect_Ss_Fhg_Flash.xml
+ start_offset: 0x9F0
+ end_offset: 0xEA8
+- name: overlays/ovl_En_Bili
+ xml_path: assets/xml/overlays/ovl_En_Bili.xml
+ start_offset: 0x1E40
+ end_offset: 0x1E60
+- name: overlays/ovl_En_Clear_Tag
+ xml_path: assets/xml/overlays/ovl_En_Clear_Tag.xml
+ start_offset: 0x2600
+ end_offset: 0x8900
+- name: overlays/ovl_En_Ganon_Mant
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Mant.xml
+ start_offset: 0x11F8
+ end_offset: 0x40F8
+- name: overlays/ovl_En_Ganon_Organ
+ xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml
+ start_offset: 0x368
+ end_offset: 0x6EF0
+- name: overlays/ovl_En_Holl
+ xml_path: assets/xml/overlays/ovl_En_Holl.xml
+ start_offset: 0xE68
+ end_offset: 0xED0
+- name: overlays/ovl_En_Jsjutan
+ xml_path: assets/xml/overlays/ovl_En_Jsjutan.xml
+ start_offset: 0x12C8
+ end_offset: 0x4C60
+- name: overlays/ovl_En_Kanban
+ xml_path: assets/xml/overlays/ovl_En_Kanban.xml
+ start_offset: 0x2E70
+ end_offset: 0x2F30
+- name: overlays/ovl_En_Sda
+ xml_path: assets/xml/overlays/ovl_En_Sda.xml
+ start_offset: 0x1498
+ end_offset: 0x1528
+- name: overlays/ovl_En_Ssh
+ xml_path: assets/xml/overlays/ovl_En_Ssh.xml
+ start_offset: 0x2150
+ end_offset: 0x21E0
+- name: overlays/ovl_En_St
+ xml_path: assets/xml/overlays/ovl_En_St.xml
+ start_offset: 0x26A0
+ end_offset: 0x2730
+- name: overlays/ovl_En_Sth
+ xml_path: assets/xml/overlays/ovl_En_Sth.xml
+ start_offset: 0xE70
+ end_offset: 0x3E44
+- name: overlays/ovl_End_Title
+ xml_path: assets/xml/overlays/ovl_End_Title_ique.xml
+ start_offset: 0x750
+ end_offset: 0x59D0
+- name: overlays/ovl_file_choose
+ xml_path: assets/xml/overlays/ovl_file_choose.xml
+ start_offset: 0xEC40
+ end_offset: 0xF320
+- name: overlays/ovl_Magic_Dark
+ xml_path: assets/xml/overlays/ovl_Magic_Dark.xml
+ start_offset: 0xC90
+ end_offset: 0x16C0
+- name: overlays/ovl_Magic_Fire
+ xml_path: assets/xml/overlays/ovl_Magic_Fire.xml
+ start_offset: 0xB50
+ end_offset: 0x21A0
+- name: overlays/ovl_Magic_Wind
+ xml_path: assets/xml/overlays/ovl_Magic_Wind.xml
+ start_offset: 0x6A0
+ end_offset: 0x1BB8
+- name: overlays/ovl_Oceff_Spot
+ xml_path: assets/xml/overlays/ovl_Oceff_Spot.xml
+ start_offset: 0x780
+ end_offset: 0xE58
+- name: overlays/ovl_Oceff_Storm
+ xml_path: assets/xml/overlays/ovl_Oceff_Storm.xml
+ start_offset: 0x750
+ end_offset: 0x1AE0
+- name: overlays/ovl_Oceff_Wipe
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml
+ start_offset: 0x520
+ end_offset: 0xCE0
+- name: overlays/ovl_Oceff_Wipe2
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe2.xml
+ start_offset: 0x430
+ end_offset: 0x1698
+- name: overlays/ovl_Oceff_Wipe3
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe3.xml
+ start_offset: 0x430
+ end_offset: 0x1678
+- name: overlays/ovl_Oceff_Wipe4
+ xml_path: assets/xml/overlays/ovl_Oceff_Wipe4.xml
+ start_offset: 0x410
+ end_offset: 0xEF8
+- name: scenes/dungeons/bdan
+ xml_path: assets/xml/scenes/dungeons/bdan.xml
+- name: scenes/dungeons/bdan_boss
+ xml_path: assets/xml/scenes/dungeons/bdan_boss.xml
+- name: scenes/dungeons/Bmori1
+ xml_path: assets/xml/scenes/dungeons/Bmori1.xml
+- name: scenes/dungeons/ddan
+ xml_path: assets/xml/scenes/dungeons/ddan.xml
+- name: scenes/dungeons/ddan_boss
+ xml_path: assets/xml/scenes/dungeons/ddan_boss_v2.xml
+- name: scenes/dungeons/FIRE_bs
+ xml_path: assets/xml/scenes/dungeons/FIRE_bs.xml
+- name: scenes/dungeons/ganon
+ xml_path: assets/xml/scenes/dungeons/ganon.xml
+- name: scenes/dungeons/ganon_boss
+ xml_path: assets/xml/scenes/dungeons/ganon_boss.xml
+- name: scenes/dungeons/ganon_demo
+ xml_path: assets/xml/scenes/dungeons/ganon_demo.xml
+- name: scenes/dungeons/ganon_final
+ xml_path: assets/xml/scenes/dungeons/ganon_final.xml
+- name: scenes/dungeons/ganon_sonogo
+ xml_path: assets/xml/scenes/dungeons/ganon_sonogo.xml
+- name: scenes/dungeons/ganontika
+ xml_path: assets/xml/scenes/dungeons/ganontika.xml
+- name: scenes/dungeons/ganontikasonogo
+ xml_path: assets/xml/scenes/dungeons/ganontikasonogo.xml
+- name: scenes/dungeons/gerudoway
+ xml_path: assets/xml/scenes/dungeons/gerudoway.xml
+- name: scenes/dungeons/HAKAdan
+ xml_path: assets/xml/scenes/dungeons/HAKAdan.xml
+- name: scenes/dungeons/HAKAdan_bs
+ xml_path: assets/xml/scenes/dungeons/HAKAdan_bs.xml
+- name: scenes/dungeons/HAKAdanCH
+ xml_path: assets/xml/scenes/dungeons/HAKAdanCH.xml
+- name: scenes/dungeons/HIDAN
+ xml_path: assets/xml/scenes/dungeons/HIDAN.xml
+- name: scenes/dungeons/ice_doukutu
+ xml_path: assets/xml/scenes/dungeons/ice_doukutu_v2.xml
+- name: scenes/dungeons/jyasinboss
+ xml_path: assets/xml/scenes/dungeons/jyasinboss.xml
+- name: scenes/dungeons/jyasinzou
+ xml_path: assets/xml/scenes/dungeons/jyasinzou.xml
+- name: scenes/dungeons/men
+ xml_path: assets/xml/scenes/dungeons/men.xml
+- name: scenes/dungeons/MIZUsin
+ xml_path: assets/xml/scenes/dungeons/MIZUsin.xml
+- name: scenes/dungeons/MIZUsin_bs
+ xml_path: assets/xml/scenes/dungeons/MIZUsin_bs.xml
+- name: scenes/dungeons/moribossroom
+ xml_path: assets/xml/scenes/dungeons/moribossroom.xml
+- name: scenes/dungeons/ydan
+ xml_path: assets/xml/scenes/dungeons/ydan.xml
+- name: scenes/dungeons/ydan_boss
+ xml_path: assets/xml/scenes/dungeons/ydan_boss.xml
+- name: scenes/indoors/bowling
+ xml_path: assets/xml/scenes/indoors/bowling.xml
+- name: scenes/indoors/daiyousei_izumi
+ xml_path: assets/xml/scenes/indoors/daiyousei_izumi.xml
+- name: scenes/indoors/hairal_niwa
+ xml_path: assets/xml/scenes/indoors/hairal_niwa.xml
+- name: scenes/indoors/hairal_niwa_n
+ xml_path: assets/xml/scenes/indoors/hairal_niwa_n.xml
+- name: scenes/indoors/hakasitarelay
+ xml_path: assets/xml/scenes/indoors/hakasitarelay.xml
+- name: scenes/indoors/hut
+ xml_path: assets/xml/scenes/indoors/hut.xml
+- name: scenes/indoors/hylia_labo
+ xml_path: assets/xml/scenes/indoors/hylia_labo.xml
+- name: scenes/indoors/impa
+ xml_path: assets/xml/scenes/indoors/impa.xml
+- name: scenes/indoors/kakariko
+ xml_path: assets/xml/scenes/indoors/kakariko.xml
+- name: scenes/indoors/kenjyanoma
+ xml_path: assets/xml/scenes/indoors/kenjyanoma.xml
+- name: scenes/indoors/kokiri_home
+ xml_path: assets/xml/scenes/indoors/kokiri_home.xml
+- name: scenes/indoors/kokiri_home3
+ xml_path: assets/xml/scenes/indoors/kokiri_home3.xml
+- name: scenes/indoors/kokiri_home4
+ xml_path: assets/xml/scenes/indoors/kokiri_home4.xml
+- name: scenes/indoors/kokiri_home5
+ xml_path: assets/xml/scenes/indoors/kokiri_home5.xml
+- name: scenes/indoors/labo
+ xml_path: assets/xml/scenes/indoors/labo.xml
+- name: scenes/indoors/link_home
+ xml_path: assets/xml/scenes/indoors/link_home.xml
+- name: scenes/indoors/mahouya
+ xml_path: assets/xml/scenes/indoors/mahouya.xml
+- name: scenes/indoors/malon_stable
+ xml_path: assets/xml/scenes/indoors/malon_stable.xml
+- name: scenes/indoors/miharigoya
+ xml_path: assets/xml/scenes/indoors/miharigoya.xml
+- name: scenes/indoors/nakaniwa
+ xml_path: assets/xml/scenes/indoors/nakaniwa.xml
+- name: scenes/indoors/souko
+ xml_path: assets/xml/scenes/indoors/souko.xml
+- name: scenes/indoors/syatekijyou
+ xml_path: assets/xml/scenes/indoors/syatekijyou.xml
+- name: scenes/indoors/takaraya
+ xml_path: assets/xml/scenes/indoors/takaraya.xml
+- name: scenes/indoors/tent
+ xml_path: assets/xml/scenes/indoors/tent.xml
+- name: scenes/indoors/tokinoma
+ xml_path: assets/xml/scenes/indoors/tokinoma.xml
+- name: scenes/indoors/yousei_izumi_tate
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_tate.xml
+- name: scenes/indoors/yousei_izumi_yoko
+ xml_path: assets/xml/scenes/indoors/yousei_izumi_yoko.xml
+- name: scenes/misc/enrui
+ xml_path: assets/xml/scenes/misc/enrui.xml
+- name: scenes/misc/entra
+ xml_path: assets/xml/scenes/misc/entra.xml
+- name: scenes/misc/entra_n
+ xml_path: assets/xml/scenes/misc/entra_n.xml
+- name: scenes/misc/hakaana
+ xml_path: assets/xml/scenes/misc/hakaana.xml
+- name: scenes/misc/hakaana2
+ xml_path: assets/xml/scenes/misc/hakaana2.xml
+- name: scenes/misc/hakaana_ouke
+ xml_path: assets/xml/scenes/misc/hakaana_ouke.xml
+- name: scenes/misc/hiral_demo
+ xml_path: assets/xml/scenes/misc/hiral_demo.xml
+- name: scenes/misc/kakariko3
+ xml_path: assets/xml/scenes/misc/kakariko3.xml
+- name: scenes/misc/kakusiana
+ xml_path: assets/xml/scenes/misc/kakusiana.xml
+- name: scenes/misc/kinsuta
+ xml_path: assets/xml/scenes/misc/kinsuta.xml
+- name: scenes/misc/market_alley
+ xml_path: assets/xml/scenes/misc/market_alley.xml
+- name: scenes/misc/market_alley_n
+ xml_path: assets/xml/scenes/misc/market_alley_n.xml
+- name: scenes/misc/market_day
+ xml_path: assets/xml/scenes/misc/market_day.xml
+- name: scenes/misc/market_night
+ xml_path: assets/xml/scenes/misc/market_night.xml
+- name: scenes/misc/market_ruins
+ xml_path: assets/xml/scenes/misc/market_ruins.xml
+- name: scenes/misc/shrine
+ xml_path: assets/xml/scenes/misc/shrine.xml
+- name: scenes/misc/shrine_n
+ xml_path: assets/xml/scenes/misc/shrine_n.xml
+- name: scenes/misc/shrine_r
+ xml_path: assets/xml/scenes/misc/shrine_r.xml
+- name: scenes/misc/turibori
+ xml_path: assets/xml/scenes/misc/turibori.xml
+- name: scenes/overworld/ganon_tou
+ xml_path: assets/xml/scenes/overworld/ganon_tou.xml
+- name: scenes/overworld/spot00
+ xml_path: assets/xml/scenes/overworld/spot00.xml
+- name: scenes/overworld/spot01
+ xml_path: assets/xml/scenes/overworld/spot01.xml
+- name: scenes/overworld/spot02
+ xml_path: assets/xml/scenes/overworld/spot02.xml
+- name: scenes/overworld/spot03
+ xml_path: assets/xml/scenes/overworld/spot03.xml
+- name: scenes/overworld/spot04
+ xml_path: assets/xml/scenes/overworld/spot04.xml
+- name: scenes/overworld/spot05
+ xml_path: assets/xml/scenes/overworld/spot05.xml
+- name: scenes/overworld/spot06
+ xml_path: assets/xml/scenes/overworld/spot06.xml
+- name: scenes/overworld/spot07
+ xml_path: assets/xml/scenes/overworld/spot07.xml
+- name: scenes/overworld/spot08
+ xml_path: assets/xml/scenes/overworld/spot08.xml
+- name: scenes/overworld/spot09
+ xml_path: assets/xml/scenes/overworld/spot09.xml
+- name: scenes/overworld/spot10
+ xml_path: assets/xml/scenes/overworld/spot10.xml
+- name: scenes/overworld/spot11
+ xml_path: assets/xml/scenes/overworld/spot11.xml
+- name: scenes/overworld/spot12
+ xml_path: assets/xml/scenes/overworld/spot12.xml
+- name: scenes/overworld/spot13
+ xml_path: assets/xml/scenes/overworld/spot13.xml
+- name: scenes/overworld/spot15
+ xml_path: assets/xml/scenes/overworld/spot15.xml
+- name: scenes/overworld/spot16
+ xml_path: assets/xml/scenes/overworld/spot16_v2.xml
+- name: scenes/overworld/spot17
+ xml_path: assets/xml/scenes/overworld/spot17.xml
+- name: scenes/overworld/spot18
+ xml_path: assets/xml/scenes/overworld/spot18.xml
+- name: scenes/overworld/spot20
+ xml_path: assets/xml/scenes/overworld/spot20.xml
+- name: scenes/shops/alley_shop
+ xml_path: assets/xml/scenes/shops/alley_shop.xml
+- name: scenes/shops/drag
+ xml_path: assets/xml/scenes/shops/drag.xml
+- name: scenes/shops/face_shop
+ xml_path: assets/xml/scenes/shops/face_shop.xml
+- name: scenes/shops/golon
+ xml_path: assets/xml/scenes/shops/golon.xml
+- name: scenes/shops/kokiri_shop
+ xml_path: assets/xml/scenes/shops/kokiri_shop.xml
+- name: scenes/shops/night_shop
+ xml_path: assets/xml/scenes/shops/night_shop.xml
+- name: scenes/shops/shop1
+ xml_path: assets/xml/scenes/shops/shop1.xml
+- name: scenes/shops/zoora
+ xml_path: assets/xml/scenes/shops/zoora.xml
+- name: textures/backgrounds
+ xml_path: assets/xml/textures/backgrounds.xml
+- name: textures/do_action_static
+ xml_path: assets/xml/textures/do_action_static.xml
+- name: textures/icon_item_24_static
+ xml_path: assets/xml/textures/icon_item_24_static.xml
+- name: textures/icon_item_dungeon_static
+ xml_path: assets/xml/textures/icon_item_dungeon_static.xml
+- name: textures/icon_item_field_static
+ xml_path: assets/xml/textures/icon_item_field_static.xml
+- name: textures/icon_item_gameover_static
+ xml_path: assets/xml/textures/icon_item_gameover_static.xml
+- name: textures/icon_item_jpn_static
+ xml_path: assets/xml/textures/icon_item_jpn_static.xml
+- name: textures/icon_item_nes_static
+ xml_path: assets/xml/textures/icon_item_nes_static.xml
+- name: textures/icon_item_static
+ xml_path: assets/xml/textures/icon_item_static.xml
+- name: textures/item_name_static
+ xml_path: assets/xml/textures/item_name_static.xml
+- name: textures/kanji
+ xml_path: assets/xml/textures/kanji.xml
+- name: textures/map_48x85_static
+ xml_path: assets/xml/textures/map_48x85_static.xml
+- name: textures/map_grand_static
+ xml_path: assets/xml/textures/map_grand_static.xml
+- name: textures/map_i_static
+ xml_path: assets/xml/textures/map_i_static.xml
+- name: textures/map_name_static
+ xml_path: assets/xml/textures/map_name_static.xml
+- name: textures/message_static
+ xml_path: assets/xml/textures/message_static.xml
+- name: textures/message_texture_static
+ xml_path: assets/xml/textures/message_texture_static.xml
+- name: textures/nes_font_static
+ xml_path: assets/xml/textures/nes_font_static_ique_cn.xml
+- name: textures/nintendo_rogo_static
+ xml_path: assets/xml/textures/nintendo_rogo_static_v2.xml
+- name: textures/parameter_static
+ xml_path: assets/xml/textures/parameter_static.xml
+- name: textures/place_title_cards
+ xml_path: assets/xml/textures/place_title_cards.xml
+- name: textures/skyboxes
+ xml_path: assets/xml/textures/skyboxes.xml
+- name: textures/title_static
+ xml_path: assets/xml/textures/title_static.xml
diff --git a/baseroms/ique-cn/segments.csv b/baseroms/ique-cn/segments.csv
new file mode 100644
index 0000000000..e06853b6c2
--- /dev/null
+++ b/baseroms/ique-cn/segments.csv
@@ -0,0 +1,1510 @@
+Name,VRAM start
+makerom,80000000
+boot,80000450
+dmadata,
+Audiobank,
+Audioseq,
+Audiotable,
+kanji,
+link_animetion,
+icon_item_static,
+icon_item_24_static,
+icon_item_field_static,
+icon_item_dungeon_static,
+icon_item_gameover_static,
+icon_item_jpn_static,
+icon_item_nes_static,
+item_name_static,
+map_name_static,
+do_action_static,
+message_static,
+message_texture_static,
+nes_font_static,
+jpn_message_data_static,
+nes_message_data_static,
+staff_message_data_static,
+map_grand_static,
+map_48x85_static,
+map_i_static,
+code,80018FA0
+ovl_title,80800000
+ovl_select,80800930
+ovl_opening,808035B0
+ovl_file_choose,80803700
+ovl_kaleido_scope,808141F0
+ovl_player_actor,80830290
+ovl_map_mark_data,80856A70
+ovl_En_Test,8085D5D0
+ovl_En_GirlA,80862E80
+ovl_En_Part,808657A0
+ovl_En_Light,80866E00
+ovl_En_Door,80867C00
+ovl_En_Box,80868A40
+ovl_En_Poh,8086A5A0
+ovl_En_Okuta,8086E790
+ovl_En_Bom,80870D70
+ovl_En_Wallmas,80871C40
+ovl_En_Dodongo,80873650
+ovl_En_Firefly,808763F0
+ovl_En_Horse,80878560
+ovl_En_Arrow,808847C0
+ovl_En_Elf,80885EC0
+ovl_En_Niw,8088A880
+ovl_En_Tite,8088DBB0
+ovl_En_Reeba,80890950
+ovl_En_Peehat,808923C0
+ovl_En_Holl,80895AC0
+ovl_En_Scene_Change,80896A90
+ovl_En_Zf,80896BC0
+ovl_En_Hata,8089D6B0
+ovl_Boss_Dodongo,8089DC40
+ovl_Boss_Goma,808A7740
+ovl_En_Zl1,808AD6E0
+ovl_En_Viewer,808B14F0
+ovl_En_Goma,808B43B0
+ovl_Bg_Pushbox,808B7060
+ovl_En_Bubble,808B7360
+ovl_Door_Shutter,808B8780
+ovl_En_Dodojr,808BAA40
+ovl_En_Bdfire,808BC8E0
+ovl_En_Boom,808BD480
+ovl_En_Torch2,808BDD50
+ovl_En_Bili,808C04F0
+ovl_En_Tp,808C27C0
+ovl_En_St,808C4630
+ovl_En_Bw,808C72A0
+ovl_En_Eiyer,808CA630
+ovl_En_River_Sound,808CC290
+ovl_En_Horse_Normal,808CCC20
+ovl_En_Ossan,808CF240
+ovl_Bg_Treemouth,808D5820
+ovl_Bg_Dodoago,808D6E80
+ovl_Bg_Hidan_Dalm,808D7C30
+ovl_Bg_Hidan_Hrock,808D8480
+ovl_En_Horse_Ganon,808D8CB0
+ovl_Bg_Hidan_Rock,808D9A30
+ovl_Bg_Hidan_Rsekizou,808DAB30
+ovl_Bg_Hidan_Sekizou,808DB710
+ovl_Bg_Hidan_Sima,808DCB60
+ovl_Bg_Hidan_Syoku,808DDA60
+ovl_En_Xc,808DDEC0
+ovl_Bg_Hidan_Curtain,808E4650
+ovl_Bg_Spot00_Hanebasi,808E50F0
+ovl_En_Mb,808E6200
+ovl_En_Bombf,808EA430
+ovl_Bg_Hidan_Firewall,808EB8C0
+ovl_Bg_Dy_Yoseizo,808EC020
+ovl_En_Zl2,808EEE10
+ovl_Bg_Hidan_Fslift,808F3510
+ovl_En_OE2,808F39E0
+ovl_Bg_Ydan_Hasi,808F3AC0
+ovl_Bg_Ydan_Maruta,808F4270
+ovl_Boss_Ganondrof,808F4950
+ovl_En_Am,808F96E0
+ovl_En_Dekubaba,808FBAE0
+ovl_En_M_Fire1,808FF590
+ovl_En_M_Thunder,808FF730
+ovl_Bg_Ddan_Jd,80900D30
+ovl_Bg_Breakwall,80901380
+ovl_En_Jj,809021F0
+ovl_En_Horse_Zelda,809037C0
+ovl_Bg_Ddan_Kd,809042B0
+ovl_Door_Warp1,80904BA0
+ovl_Obj_Syokudai,80908EB0
+ovl_Item_B_Heart,80909B00
+ovl_En_Dekunuts,80909F10
+ovl_Bg_Menkuri_Kaiten,8090B710
+ovl_Bg_Menkuri_Eye,8090B8A0
+ovl_En_Vali,8090BD40
+ovl_Bg_Mizu_Movebg,8090E400
+ovl_Bg_Mizu_Water,8090F590
+ovl_Arms_Hook,80910260
+ovl_En_fHG,80910FD0
+ovl_Bg_Mori_Hineri,80913900
+ovl_En_Bb,80914650
+ovl_Bg_Toki_Hikari,80918330
+ovl_En_Yukabyun,809190D0
+ovl_Bg_Toki_Swd,809196E0
+ovl_En_Fhg_Fire,8091AD30
+ovl_Bg_Mjin,8091D3D0
+ovl_Bg_Hidan_Kousi,8091D7C0
+ovl_Door_Toki,8091DD50
+ovl_Bg_Hidan_Hamstep,8091DEB0
+ovl_En_Bird,8091ED60
+ovl_En_Wood02,8091F220
+ovl_En_Lightbox,80920400
+ovl_En_Pu_box,80920880
+ovl_En_Trap,80920BC0
+ovl_En_Arow_Trap,80921E60
+ovl_En_Vase,80921FB0
+ovl_En_Ta,809220B0
+ovl_En_Tk,80925A70
+ovl_Bg_Mori_Bigst,809278A0
+ovl_Bg_Mori_Elevator,809281D0
+ovl_Bg_Mori_Kaitenkabe,80928CC0
+ovl_Bg_Mori_Rakkatenjo,80929330
+ovl_En_Vm,80929CB0
+ovl_Demo_Effect,8092B570
+ovl_Demo_Kankyo,80931110
+ovl_Bg_Hidan_Fwbig,80934E00
+ovl_En_Floormas,80935AE0
+ovl_En_Heishi1,80938EC0
+ovl_En_Rd,8093A3D0
+ovl_En_Po_Sisters,8093CC90
+ovl_Bg_Heavy_Block,80941980
+ovl_Bg_Po_Event,80943270
+ovl_Obj_Mure,809450B0
+ovl_En_Sw,809460C0
+ovl_Boss_Fd,809498B0
+ovl_Object_Kankyo,80950C10
+ovl_En_Du,80953E90
+ovl_En_Fd,80955920
+ovl_En_Horse_Link_Child,809585C0
+ovl_Door_Ana,8095A3C0
+ovl_Bg_Spot02_Objects,8095AA30
+ovl_Bg_Haka,8095BD90
+ovl_Magic_Wind,8095C450
+ovl_Magic_Fire,8095E150
+ovl_En_Ru1,80960450
+ovl_Boss_Fd2,80967AF0
+ovl_En_Fd_Fire,8096B820
+ovl_En_Dh,8096C530
+ovl_En_Dha,8096E010
+ovl_En_Rl,8096F010
+ovl_En_Encount1,8096FEF0
+ovl_Demo_Du,80970A50
+ovl_Demo_Im,80974230
+ovl_Demo_Tre_Lgt,809781A0
+ovl_En_Fw,809788B0
+ovl_Bg_Vb_Sima,8097A070
+ovl_En_Vb_Ball,8097A790
+ovl_Bg_Haka_Megane,8097B940
+ovl_Bg_Haka_MeganeBG,8097BD40
+ovl_Bg_Haka_Ship,8097C400
+ovl_Bg_Haka_Sgami,8097CE50
+ovl_En_Heishi2,8097DA70
+ovl_En_Encount2,8097FC70
+ovl_En_Fire_Rock,80980EA0
+ovl_En_Brob,80981FB0
+ovl_Mir_Ray,809830A0
+ovl_Bg_Spot09_Obj,80984950
+ovl_Bg_Spot18_Obj,80984E70
+ovl_Boss_Va,80985740
+ovl_Bg_Haka_Tubo,8099C9D0
+ovl_Bg_Haka_Trap,8099D3F0
+ovl_Bg_Haka_Huta,8099E9C0
+ovl_Bg_Haka_Zou,8099F460
+ovl_Bg_Spot17_Funen,809A0650
+ovl_En_Syateki_Itm,809A08A0
+ovl_En_Syateki_Man,809A1640
+ovl_En_Tana,809A2400
+ovl_En_Nb,809A26B0
+ovl_Boss_Mo,809A6C80
+ovl_En_Sb,809B7260
+ovl_En_Bigokuta,809B86A0
+ovl_En_Karebaba,809BB1A0
+ovl_Bg_Bdan_Objects,809BCA90
+ovl_Demo_Sa,809BDD60
+ovl_Demo_Go,809C0880
+ovl_En_In,809C15D0
+ovl_En_Tr,809C4370
+ovl_Bg_Spot16_Bombstone,809C5C70
+ovl_Bg_Hidan_Kowarerukabe,809C71C0
+ovl_Bg_Bombwall,809C80A0
+ovl_En_Ru2,809C8960
+ovl_Obj_Dekujr,809CB6E0
+ovl_Bg_Mizu_Uzu,809CBD20
+ovl_Bg_Spot06_Objects,809CBEF0
+ovl_Bg_Ice_Objects,809CD2F0
+ovl_Bg_Haka_Water,809CE230
+ovl_En_Ma2,809CEA30
+ovl_En_Bom_Chu,809CFA90
+ovl_En_Horse_Game_Check,809D1130
+ovl_Boss_Tw,809D2200
+ovl_En_Rr,809E7DD0
+ovl_En_Ba,809EA300
+ovl_En_Bx,809EC1D0
+ovl_En_Anubice,809ECCD0
+ovl_En_Anubice_Fire,809EDF80
+ovl_Bg_Mori_Hashigo,809EED40
+ovl_Bg_Mori_Hashira4,809EF600
+ovl_Bg_Mori_Idomizu,809EFB90
+ovl_Bg_Spot16_Doughnut,809F01D0
+ovl_Bg_Bdan_Switch,809F0790
+ovl_En_Ma1,809F1BC0
+ovl_Boss_Ganon,809F2EA0
+ovl_Boss_Sst,80A18CD0
+ovl_En_Ny,80A252A0
+ovl_En_Fr,80A26BE0
+ovl_Item_Shield,80A29670
+ovl_Bg_Ice_Shelter,80A2A080
+ovl_En_Ice_Hono,80A2B2C0
+ovl_Item_Ocarina,80A2C4B0
+ovl_Magic_Dark,80A2CC80
+ovl_Demo_6K,80A2E4D0
+ovl_En_Anubice_Tag,80A31230
+ovl_Bg_Haka_Gate,80A31500
+ovl_Bg_Spot15_Saku,80A325A0
+ovl_Bg_Jya_Goroiwa,80A328E0
+ovl_Bg_Jya_Zurerukabe,80A33060
+ovl_Bg_Jya_Cobra,80A33710
+ovl_Bg_Jya_Kanaami,80A35450
+ovl_Fishing,80A35800
+ovl_Obj_Oshihiki,80A4ED40
+ovl_Bg_Gate_Shutter,80A507F0
+ovl_Eff_Dust,80A50C80
+ovl_Bg_Spot01_Fusya,80A52050
+ovl_Bg_Spot01_Idohashira,80A522F0
+ovl_Bg_Spot01_Idomizu,80A52EF0
+ovl_Bg_Po_Syokudai,80A53210
+ovl_Bg_Ganon_Otyuka,80A53B80
+ovl_Bg_Spot15_Rrbox,80A561C0
+ovl_Bg_Umajump,80A56FA0
+ovl_En_Insect,80A57130
+ovl_En_Butte,80A59650
+ovl_En_Fish,80A5AC20
+ovl_Bg_Spot08_Iceblock,80A5CD30
+ovl_Item_Etcetera,80A5DD70
+ovl_Arrow_Fire,80A5E640
+ovl_Arrow_Ice,80A60520
+ovl_Arrow_Light,80A62420
+ovl_Obj_Kibako,80A64330
+ovl_Obj_Tsubo,80A65030
+ovl_En_Wonder_Item,80A66020
+ovl_En_Ik,80A66D50
+ovl_Demo_Ik,80A6B3B0
+ovl_En_Skj,80A6C8C0
+ovl_En_Skjneedle,80A70210
+ovl_En_G_Switch,80A70520
+ovl_Demo_Ext,80A71D40
+ovl_Demo_Shd,80A72690
+ovl_En_Dns,80A74AA0
+ovl_Elf_Msg,80A75E30
+ovl_En_Honotrap,80A76420
+ovl_En_Tubo_Trap,80A77980
+ovl_Obj_Ice_Poly,80A78620
+ovl_Bg_Spot03_Taki,80A78FD0
+ovl_Bg_Spot07_Taki,80A798F0
+ovl_En_Fz,80A79EE0
+ovl_En_Po_Relay,80A7BEF0
+ovl_Bg_Relay_Objects,80A7D600
+ovl_En_Diving_Game,80A7DDB0
+ovl_En_Kusa,80A7F760
+ovl_Obj_Bean,80A80C40
+ovl_Obj_Bombiwa,80A833D0
+ovl_Obj_Switch,80A83940
+ovl_Obj_Elevator,80A85720
+ovl_Obj_Lift,80A85AE0
+ovl_Obj_Hsblock,80A86500
+ovl_En_Okarina_Tag,80A86AD0
+ovl_En_Yabusame_Mark,80A87FD0
+ovl_En_Goroiwa,80A886A0
+ovl_En_Ex_Ruppy,80A8AA60
+ovl_En_Toryo,80A8BB20
+ovl_En_Daiku,80A8C7B0
+ovl_En_Nwc,80A8DEF0
+ovl_En_Blkobj,80A8E910
+ovl_Item_Inbox,80A8EE70
+ovl_En_Ge1,80A8EFD0
+ovl_Obj_Blockstop,80A91000
+ovl_En_Sda,80A911A0
+ovl_En_Clear_Tag,80A92890
+ovl_En_Niw_Lady,80A9DE30
+ovl_En_Gm,80A9F730
+ovl_En_Ms,80AA0460
+ovl_En_Hs,80AA0B50
+ovl_Bg_Ingate,80AA16F0
+ovl_En_Kanban,80AA1A80
+ovl_En_Heishi3,80AA4BD0
+ovl_En_Syateki_Niw,80AA55A0
+ovl_En_Attack_Niw,80AA7630
+ovl_Bg_Spot01_Idosoko,80AA8890
+ovl_En_Sa,80AA8AA0
+ovl_En_Wonder_Talk,80AAAD10
+ovl_Bg_Gjyo_Bridge,80AAB3A0
+ovl_En_Ds,80AAB890
+ovl_En_Mk,80AAC4B0
+ovl_En_Bom_Bowl_Man,80AAD340
+ovl_En_Bom_Bowl_Pit,80AAE880
+ovl_En_Owl,80AAF1F0
+ovl_En_Ishi,80AB2D90
+ovl_Obj_Hana,80ABBEE0
+ovl_Obj_Lightswitch,80ABC1F0
+ovl_Obj_Mure2,80ABD620
+ovl_En_Go,80ABE040
+ovl_En_Fu,80AC2680
+ovl_En_Changer,80AC33D0
+ovl_Bg_Jya_Megami,80AC3DB0
+ovl_Bg_Jya_Lift,80AC4FA0
+ovl_Bg_Jya_Bigmirror,80AC54F0
+ovl_Bg_Jya_Bombchuiwa,80AC5D40
+ovl_Bg_Jya_Amishutter,80AC6880
+ovl_Bg_Jya_Bombiwa,80AC6C10
+ovl_Bg_Spot18_Basket,80AC71D0
+ovl_En_Ganon_Organ,80AC81C0
+ovl_En_Siofuki,80ACF200
+ovl_En_Stream,80ACFFB0
+ovl_En_Mm,80AD0540
+ovl_En_Ko,80AD1BA0
+ovl_En_Kz,80AD5CE0
+ovl_En_Weather_Tag,80AD7280
+ovl_Bg_Sst_Floor,80AD8170
+ovl_En_Ani,80AD86D0
+ovl_En_Ex_Item,80AD9440
+ovl_Bg_Jya_Ironobj,80ADA5C0
+ovl_En_Js,80ADB370
+ovl_En_Jsjutan,80ADBD40
+ovl_En_Cs,80AE1670
+ovl_En_Md,80AE28A0
+ovl_En_Hy,80AE4F10
+ovl_En_Ganon_Mant,80AE8850
+ovl_En_Okarina_Effect,80AECA80
+ovl_En_Mag,80AECE40
+ovl_Door_Gerudo,80AF1E80
+ovl_Elf_Msg2,80AF2470
+ovl_Demo_Gt,80AF28E0
+ovl_En_Po_Field,80AF7EF0
+ovl_Efc_Erupc,80AFB980
+ovl_Bg_Zg,80AFC470
+ovl_En_Heishi4,80AFC8C0
+ovl_En_Zl3,80AFD7C0
+ovl_Boss_Ganon2,80B05610
+ovl_En_Kakasi,80B18480
+ovl_En_Takara_Man,80B191C0
+ovl_Obj_Makeoshihiki,80B19A80
+ovl_Oceff_Spot,80B19F10
+ovl_End_Title,80B1AE40
+ovl_En_Torch,80B20880
+ovl_Demo_Ec,80B20970
+ovl_Shot_Sun,80B241D0
+ovl_En_Dy_Extra,80B24890
+ovl_En_Wonder_Talk2,80B24E30
+ovl_En_Ge2,80B254D0
+ovl_Obj_Roomtimer,80B26E70
+ovl_En_Ssh,80B270C0
+ovl_En_Sth,80B296B0
+ovl_Oceff_Wipe,80B2D770
+ovl_Effect_Ss_Dust,80B2E4F0
+ovl_Effect_Ss_KiraKira,80B2ED30
+ovl_Effect_Ss_Bomb,80B2F3A0
+ovl_Effect_Ss_Bomb2,80B2F7D0
+ovl_Effect_Ss_Blast,80B300D0
+ovl_Effect_Ss_G_Spk,80B30460
+ovl_Effect_Ss_D_Fire,80B30A10
+ovl_Effect_Ss_Bubble,80B30F00
+ovl_Effect_Ss_G_Ripple,80B31380
+ovl_Effect_Ss_G_Splash,80B318E0
+ovl_Effect_Ss_G_Magma,80B31D90
+ovl_Effect_Ss_G_Fire,80B31FF0
+ovl_Effect_Ss_Lightning,80B32280
+ovl_Effect_Ss_Dt_Bubble,80B32950
+ovl_Effect_Ss_Hahen,80B32EE0
+ovl_Effect_Ss_Stick,80B33520
+ovl_Effect_Ss_Sibuki,80B338C0
+ovl_Effect_Ss_Sibuki2,80B33F90
+ovl_Effect_Ss_G_Magma2,80B342C0
+ovl_Effect_Ss_Stone1,80B347D0
+ovl_Effect_Ss_HitMark,80B34B50
+ovl_Effect_Ss_Fhg_Flash,80B350A0
+ovl_Effect_Ss_K_Fire,80B36020
+ovl_Effect_Ss_Solder_Srch_Ball,80B36460
+ovl_Effect_Ss_Kakera,80B36610
+ovl_Effect_Ss_Ice_Piece,80B376A0
+ovl_Effect_Ss_En_Ice,80B37AE0
+ovl_Effect_Ss_Fire_Tail,80B383A0
+ovl_Effect_Ss_En_Fire,80B38AA0
+ovl_Effect_Ss_Extra,80B391F0
+ovl_Effect_Ss_Fcircle,80B395B0
+ovl_Effect_Ss_Dead_Db,80B39A60
+ovl_Effect_Ss_Dead_Dd,80B39F40
+ovl_Effect_Ss_Dead_Ds,80B3A4D0
+ovl_Effect_Ss_Dead_Sound,80B3A950
+ovl_Oceff_Storm,80B3AA90
+ovl_En_Weiyer,80B3C640
+ovl_Bg_Spot05_Soko,80B3E040
+ovl_Bg_Jya_1flift,80B3E360
+ovl_Bg_Jya_Haheniron,80B3E9F0
+ovl_Bg_Spot12_Gate,80B3F1E0
+ovl_Bg_Spot12_Saku,80B3F5F0
+ovl_En_Hintnuts,80B3FAB0
+ovl_En_Nutsball,80B414E0
+ovl_Bg_Spot00_Break,80B41B00
+ovl_En_Shopnuts,80B41CA0
+ovl_En_It,80B42BB0
+ovl_En_GeldB,80B42D40
+ovl_Oceff_Wipe2,80B480F0
+ovl_Oceff_Wipe3,80B49860
+ovl_En_Niw_Girl,80B4AFB0
+ovl_En_Dog,80B4BA80
+ovl_En_Si,80B4CC30
+ovl_Bg_Spot01_Objects2,80B4D130
+ovl_Obj_Comb,80B4D5F0
+ovl_Bg_Spot11_Bakudankabe,80B4DE50
+ovl_Obj_Kibako2,80B4E490
+ovl_En_Dnt_Demo,80B4EB50
+ovl_En_Dnt_Jiji,80B4F870
+ovl_En_Dnt_Nomal,80B50D90
+ovl_En_Guest,80B53B90
+ovl_Bg_Bom_Guard,80B54530
+ovl_En_Hs2,80B54750
+ovl_Demo_Kekkai,80B54D30
+ovl_Bg_Spot08_Bakudankabe,80B56020
+ovl_Bg_Spot17_Bakudankabe,80B566C0
+ovl_Obj_Mure3,80B56DB0
+ovl_En_Tg,80B57580
+ovl_En_Mu,80B57C60
+ovl_En_Go2,80B58580
+ovl_En_Wf,80B5E5C0
+ovl_En_Skb,80B628D0
+ovl_Demo_Gj,80B641C0
+ovl_Demo_Geff,80B67E70
+ovl_Bg_Gnd_Firemeiro,80B68690
+ovl_Bg_Gnd_Darkmeiro,80B68BE0
+ovl_Bg_Gnd_Soulmeiro,80B693A0
+ovl_Bg_Gnd_Nisekabe,80B69C00
+ovl_Bg_Gnd_Iceblock,80B69D70
+ovl_Bg_Ydan_Sp,80B6AE70
+ovl_En_Gb,80B6C590
+ovl_En_Gs,80B6DCC0
+ovl_Bg_Mizu_Bwall,80B6FB30
+ovl_Bg_Mizu_Shutter,80B71000
+ovl_En_Daiku_Kakariko,80B71800
+ovl_Bg_Bowl_Wall,80B72BC0
+ovl_En_Wall_Tubo,80B73540
+ovl_En_Po_Desert,80B73A30
+ovl_En_Crow,80B747F0
+ovl_Door_Killer,80B75E90
+ovl_Bg_Spot11_Oasis,80B77400
+ovl_Bg_Spot18_Futa,80B77B30
+ovl_Bg_Spot18_Shutter,80B77CD0
+ovl_En_Ma3,80B78220
+ovl_En_Cow,80B791D0
+ovl_Bg_Ice_Turara,80B7A630
+ovl_Bg_Ice_Shutter,80B7AE60
+ovl_En_Kakasi2,80B7B2D0
+ovl_En_Kakasi3,80B7B9F0
+ovl_Oceff_Wipe4,80B7CAD0
+ovl_En_Eg,80B7DAB0
+ovl_Bg_Menkuri_Nisekabe,80B7DC60
+ovl_En_Zo,80B7DDB0
+ovl_Effect_Ss_Ice_Smoke,80B80370
+ovl_Obj_Makekinsuta,80B80850
+ovl_En_Ge3,80B809A0
+ovl_Obj_Timeblock,80B815E0
+ovl_Obj_Hamishi,80B82230
+ovl_En_Zl4,80B82A80
+ovl_En_Mm2,80B874B0
+ovl_Bg_Jya_Block,80B88270
+ovl_Obj_Warp2block,80B884E0
+gameplay_keep,
+gameplay_field_keep,
+gameplay_dangeon_keep,
+gameplay_object_exchange_static,
+object_link_boy,
+object_link_child,
+object_box,
+object_human,
+object_okuta,
+object_poh,
+object_wallmaster,
+object_dy_obj,
+object_firefly,
+object_dodongo,
+object_fire,
+object_niw,
+object_tite,
+object_reeba,
+object_peehat,
+object_kingdodongo,
+object_horse,
+object_zf,
+object_goma,
+object_zl1,
+object_gol,
+object_bubble,
+object_dodojr,
+object_torch2,
+object_bl,
+object_tp,
+object_oA1,
+object_st,
+object_bw,
+object_ei,
+object_horse_normal,
+object_oB1,
+object_o_anime,
+object_spot04_objects,
+object_ddan_objects,
+object_hidan_objects,
+object_horse_ganon,
+object_oA2,
+object_spot00_objects,
+object_mb,
+object_bombf,
+object_sk2,
+object_oE1,
+object_oE_anime,
+object_oE2,
+object_ydan_objects,
+object_gnd,
+object_am,
+object_dekubaba,
+object_oA3,
+object_oA4,
+object_oA5,
+object_oA6,
+object_oA7,
+object_jj,
+object_oA8,
+object_oA9,
+object_oB2,
+object_oB3,
+object_oB4,
+object_horse_zelda,
+object_opening_demo1,
+object_warp1,
+object_b_heart,
+object_dekunuts,
+object_oE3,
+object_oE4,
+object_menkuri_objects,
+object_oE5,
+object_oE6,
+object_oE7,
+object_oE8,
+object_oE9,
+object_oE10,
+object_oE11,
+object_oE12,
+object_vali,
+object_oA10,
+object_oA11,
+object_mizu_objects,
+object_fhg,
+object_ossan,
+object_mori_hineri1,
+object_Bb,
+object_toki_objects,
+object_yukabyun,
+object_zl2,
+object_mjin,
+object_mjin_flash,
+object_mjin_dark,
+object_mjin_flame,
+object_mjin_ice,
+object_mjin_soul,
+object_mjin_wind,
+object_mjin_oka,
+object_haka_objects,
+object_spot06_objects,
+object_ice_objects,
+object_relay_objects,
+object_mori_hineri1a,
+object_mori_hineri2,
+object_mori_hineri2a,
+object_mori_objects,
+object_mori_tex,
+object_spot08_obj,
+object_warp2,
+object_hata,
+object_bird,
+object_wood02,
+object_lightbox,
+object_pu_box,
+object_trap,
+object_vase,
+object_im,
+object_ta,
+object_tk,
+object_xc,
+object_vm,
+object_bv,
+object_hakach_objects,
+object_efc_crystal_light,
+object_efc_fire_ball,
+object_efc_flash,
+object_efc_lgt_shower,
+object_efc_star_field,
+object_god_lgt,
+object_light_ring,
+object_triforce_spot,
+object_medal,
+object_bdan_objects,
+object_sd,
+object_rd,
+object_po_sisters,
+object_heavy_object,
+object_gndd,
+object_fd,
+object_du,
+object_fw,
+object_horse_link_child,
+object_spot02_objects,
+object_haka,
+object_ru1,
+object_syokudai,
+object_fd2,
+object_dh,
+object_rl,
+object_efc_tw,
+object_demo_tre_lgt,
+object_gi_key,
+object_mir_ray,
+object_brob,
+object_gi_jewel,
+object_spot09_obj,
+object_spot18_obj,
+object_bdoor,
+object_spot17_obj,
+object_shop_dungen,
+object_nb,
+object_mo,
+object_sb,
+object_gi_melody,
+object_gi_heart,
+object_gi_compass,
+object_gi_bosskey,
+object_gi_medal,
+object_gi_nuts,
+object_sa,
+object_gi_hearts,
+object_gi_arrowcase,
+object_gi_bombpouch,
+object_in,
+object_tr,
+object_spot16_obj,
+object_oE1s,
+object_oE4s,
+object_os_anime,
+object_gi_bottle,
+object_gi_stick,
+object_gi_map,
+object_oF1d_map,
+object_ru2,
+object_gi_shield_1,
+object_dekujr,
+object_gi_magicpot,
+object_gi_bomb_1,
+object_oF1s,
+object_ma2,
+object_gi_purse,
+object_hni,
+object_tw,
+object_rr,
+object_bxa,
+object_anubice,
+object_gi_gerudo,
+object_gi_arrow,
+object_gi_bomb_2,
+object_gi_egg,
+object_gi_scale,
+object_gi_shield_2,
+object_gi_hookshot,
+object_gi_ocarina,
+object_gi_milk,
+object_ma1,
+object_ganon,
+object_sst,
+object_ny,
+object_fr,
+object_gi_pachinko,
+object_gi_boomerang,
+object_gi_bow,
+object_gi_glasses,
+object_gi_liquid,
+object_ani,
+object_demo_6k,
+object_gi_shield_3,
+object_gi_letter,
+object_spot15_obj,
+object_jya_obj,
+object_gi_clothes,
+object_gi_bean,
+object_gi_fish,
+object_gi_saw,
+object_gi_hammer,
+object_gi_grass,
+object_gi_longsword,
+object_spot01_objects,
+object_md,
+object_km1,
+object_kw1,
+object_zo,
+object_kz,
+object_umajump,
+object_masterkokiri,
+object_masterkokirihead,
+object_mastergolon,
+object_masterzoora,
+object_aob,
+object_ik,
+object_ahg,
+object_cne,
+object_gi_niwatori,
+object_skj,
+object_gi_bottle_letter,
+object_bji,
+object_bba,
+object_gi_ocarina_0,
+object_ds,
+object_ane,
+object_boj,
+object_spot03_object,
+object_spot07_object,
+object_fz,
+object_bob,
+object_ge1,
+object_yabusame_point,
+object_gi_boots_2,
+object_gi_seed,
+object_gnd_magic,
+object_d_elevator,
+object_d_hsblock,
+object_d_lift,
+object_mamenoki,
+object_goroiwa,
+object_toryo,
+object_daiku,
+object_nwc,
+object_blkobj,
+object_gm,
+object_ms,
+object_hs,
+object_ingate,
+object_lightswitch,
+object_kusa,
+object_tsubo,
+object_gi_gloves,
+object_gi_coin,
+object_kanban,
+object_gjyo_objects,
+object_owl,
+object_mk,
+object_fu,
+object_gi_ki_tan_mask,
+object_gi_redead_mask,
+object_gi_skj_mask,
+object_gi_rabit_mask,
+object_gi_truth_mask,
+object_ganon_objects,
+object_siofuki,
+object_stream,
+object_mm,
+object_fa,
+object_os,
+object_gi_eye_lotion,
+object_gi_powder,
+object_gi_mushroom,
+object_gi_ticketstone,
+object_gi_brokensword,
+object_js,
+object_cs,
+object_gi_prescription,
+object_gi_bracelet,
+object_gi_soldout,
+object_gi_frog,
+object_mag,
+object_door_gerudo,
+object_gt,
+object_efc_erupc,
+object_zl2_anime1,
+object_zl2_anime2,
+object_gi_golonmask,
+object_gi_zoramask,
+object_gi_gerudomask,
+object_ganon2,
+object_ka,
+object_ts,
+object_zg,
+object_gi_hoverboots,
+object_gi_m_arrow,
+object_ds2,
+object_ec,
+object_fish,
+object_gi_sutaru,
+object_gi_goddess,
+object_ssh,
+object_bigokuta,
+object_bg,
+object_spot05_objects,
+object_spot12_obj,
+object_bombiwa,
+object_hintnuts,
+object_rs,
+object_spot00_break,
+object_gla,
+object_shopnuts,
+object_geldb,
+object_gr,
+object_dog,
+object_jya_iron,
+object_jya_door,
+object_spot01_objects2,
+object_spot11_obj,
+object_kibako2,
+object_dns,
+object_dnk,
+object_gi_fire,
+object_gi_insect,
+object_gi_butterfly,
+object_gi_ghost,
+object_gi_soul,
+object_bowl,
+object_po_field,
+object_demo_kekkai,
+object_efc_doughnut,
+object_gi_dekupouch,
+object_ganon_anime1,
+object_ganon_anime2,
+object_ganon_anime3,
+object_gi_rupy,
+object_spot01_matoya,
+object_spot01_matoyab,
+object_po_composer,
+object_mu,
+object_wf,
+object_skb,
+object_gj,
+object_geff,
+object_haka_door,
+object_gs,
+object_ps,
+object_bwall,
+object_crow,
+object_cow,
+object_cob,
+object_gi_sword_1,
+object_door_killer,
+object_ouke_haka,
+object_timeblock,
+object_zl4,
+g_pn_01,
+g_pn_02,
+g_pn_03,
+g_pn_04,
+g_pn_05,
+g_pn_06,
+g_pn_07,
+g_pn_08,
+g_pn_09,
+g_pn_10,
+g_pn_11,
+g_pn_12,
+g_pn_13,
+g_pn_14,
+g_pn_15,
+g_pn_16,
+g_pn_17,
+g_pn_18,
+g_pn_19,
+g_pn_20,
+g_pn_21,
+g_pn_22,
+g_pn_23,
+g_pn_24,
+g_pn_25,
+g_pn_26,
+g_pn_27,
+g_pn_28,
+g_pn_29,
+g_pn_30,
+g_pn_31,
+g_pn_32,
+g_pn_33,
+g_pn_34,
+g_pn_35,
+g_pn_36,
+g_pn_37,
+g_pn_38,
+g_pn_39,
+g_pn_40,
+g_pn_41,
+g_pn_42,
+g_pn_43,
+g_pn_44,
+g_pn_45,
+g_pn_46,
+g_pn_47,
+g_pn_48,
+g_pn_49,
+g_pn_50,
+g_pn_51,
+g_pn_52,
+g_pn_53,
+g_pn_54,
+g_pn_55,
+g_pn_56,
+g_pn_57,
+z_select_static,
+nintendo_rogo_static,
+title_static,
+parameter_static,
+vr_fine0_static,
+vr_fine0_pal_static,
+vr_fine1_static,
+vr_fine1_pal_static,
+vr_fine2_static,
+vr_fine2_pal_static,
+vr_fine3_static,
+vr_fine3_pal_static,
+vr_cloud0_static,
+vr_cloud0_pal_static,
+vr_cloud1_static,
+vr_cloud1_pal_static,
+vr_cloud2_static,
+vr_cloud2_pal_static,
+vr_cloud3_static,
+vr_cloud3_pal_static,
+vr_holy0_static,
+vr_holy0_pal_static,
+vr_holy1_static,
+vr_holy1_pal_static,
+vr_MDVR_static,
+vr_MDVR_pal_static,
+vr_MNVR_static,
+vr_MNVR_pal_static,
+vr_RUVR_static,
+vr_RUVR_pal_static,
+vr_LHVR_static,
+vr_LHVR_pal_static,
+vr_KHVR_static,
+vr_KHVR_pal_static,
+vr_K3VR_static,
+vr_K3VR_pal_static,
+vr_K4VR_static,
+vr_K4VR_pal_static,
+vr_K5VR_static,
+vr_K5VR_pal_static,
+vr_SP1a_static,
+vr_SP1a_pal_static,
+vr_MLVR_static,
+vr_MLVR_pal_static,
+vr_KKRVR_static,
+vr_KKRVR_pal_static,
+vr_KR3VR_static,
+vr_KR3VR_pal_static,
+vr_IPVR_static,
+vr_IPVR_pal_static,
+vr_KSVR_static,
+vr_KSVR_pal_static,
+vr_GLVR_static,
+vr_GLVR_pal_static,
+vr_ZRVR_static,
+vr_ZRVR_pal_static,
+vr_DGVR_static,
+vr_DGVR_pal_static,
+vr_ALVR_static,
+vr_ALVR_pal_static,
+vr_NSVR_static,
+vr_NSVR_pal_static,
+vr_LBVR_static,
+vr_LBVR_pal_static,
+vr_TTVR_static,
+vr_TTVR_pal_static,
+vr_FCVR_static,
+vr_FCVR_pal_static,
+elf_message_field,
+elf_message_ydan,
+ydan_scene,
+ydan_room_0,
+ydan_room_1,
+ydan_room_2,
+ydan_room_3,
+ydan_room_4,
+ydan_room_5,
+ydan_room_6,
+ydan_room_7,
+ydan_room_8,
+ydan_room_9,
+ydan_room_10,
+ydan_room_11,
+ddan_scene,
+ddan_room_0,
+ddan_room_1,
+ddan_room_2,
+ddan_room_3,
+ddan_room_4,
+ddan_room_5,
+ddan_room_6,
+ddan_room_7,
+ddan_room_8,
+ddan_room_9,
+ddan_room_10,
+ddan_room_11,
+ddan_room_12,
+ddan_room_13,
+ddan_room_14,
+ddan_room_15,
+ddan_room_16,
+bdan_scene,
+bdan_room_0,
+bdan_room_1,
+bdan_room_2,
+bdan_room_3,
+bdan_room_4,
+bdan_room_5,
+bdan_room_6,
+bdan_room_7,
+bdan_room_8,
+bdan_room_9,
+bdan_room_10,
+bdan_room_11,
+bdan_room_12,
+bdan_room_13,
+bdan_room_14,
+bdan_room_15,
+Bmori1_scene,
+Bmori1_room_0,
+Bmori1_room_1,
+Bmori1_room_2,
+Bmori1_room_3,
+Bmori1_room_4,
+Bmori1_room_5,
+Bmori1_room_6,
+Bmori1_room_7,
+Bmori1_room_8,
+Bmori1_room_9,
+Bmori1_room_10,
+Bmori1_room_11,
+Bmori1_room_12,
+Bmori1_room_13,
+Bmori1_room_14,
+Bmori1_room_15,
+Bmori1_room_16,
+Bmori1_room_17,
+Bmori1_room_18,
+Bmori1_room_19,
+Bmori1_room_20,
+Bmori1_room_21,
+Bmori1_room_22,
+HIDAN_scene,
+HIDAN_room_0,
+HIDAN_room_1,
+HIDAN_room_2,
+HIDAN_room_3,
+HIDAN_room_4,
+HIDAN_room_5,
+HIDAN_room_6,
+HIDAN_room_7,
+HIDAN_room_8,
+HIDAN_room_9,
+HIDAN_room_10,
+HIDAN_room_11,
+HIDAN_room_12,
+HIDAN_room_13,
+HIDAN_room_14,
+HIDAN_room_15,
+HIDAN_room_16,
+HIDAN_room_17,
+HIDAN_room_18,
+HIDAN_room_19,
+HIDAN_room_20,
+HIDAN_room_21,
+HIDAN_room_22,
+HIDAN_room_23,
+HIDAN_room_24,
+HIDAN_room_25,
+HIDAN_room_26,
+MIZUsin_scene,
+MIZUsin_room_0,
+MIZUsin_room_1,
+MIZUsin_room_2,
+MIZUsin_room_3,
+MIZUsin_room_4,
+MIZUsin_room_5,
+MIZUsin_room_6,
+MIZUsin_room_7,
+MIZUsin_room_8,
+MIZUsin_room_9,
+MIZUsin_room_10,
+MIZUsin_room_11,
+MIZUsin_room_12,
+MIZUsin_room_13,
+MIZUsin_room_14,
+MIZUsin_room_15,
+MIZUsin_room_16,
+MIZUsin_room_17,
+MIZUsin_room_18,
+MIZUsin_room_19,
+MIZUsin_room_20,
+MIZUsin_room_21,
+MIZUsin_room_22,
+jyasinzou_scene,
+jyasinzou_room_0,
+jyasinzou_room_1,
+jyasinzou_room_2,
+jyasinzou_room_3,
+jyasinzou_room_4,
+jyasinzou_room_5,
+jyasinzou_room_6,
+jyasinzou_room_7,
+jyasinzou_room_8,
+jyasinzou_room_9,
+jyasinzou_room_10,
+jyasinzou_room_11,
+jyasinzou_room_12,
+jyasinzou_room_13,
+jyasinzou_room_14,
+jyasinzou_room_15,
+jyasinzou_room_16,
+jyasinzou_room_17,
+jyasinzou_room_18,
+jyasinzou_room_19,
+jyasinzou_room_20,
+jyasinzou_room_21,
+jyasinzou_room_22,
+jyasinzou_room_23,
+jyasinzou_room_24,
+jyasinzou_room_25,
+jyasinzou_room_26,
+jyasinzou_room_27,
+jyasinzou_room_28,
+HAKAdan_scene,
+HAKAdan_room_0,
+HAKAdan_room_1,
+HAKAdan_room_2,
+HAKAdan_room_3,
+HAKAdan_room_4,
+HAKAdan_room_5,
+HAKAdan_room_6,
+HAKAdan_room_7,
+HAKAdan_room_8,
+HAKAdan_room_9,
+HAKAdan_room_10,
+HAKAdan_room_11,
+HAKAdan_room_12,
+HAKAdan_room_13,
+HAKAdan_room_14,
+HAKAdan_room_15,
+HAKAdan_room_16,
+HAKAdan_room_17,
+HAKAdan_room_18,
+HAKAdan_room_19,
+HAKAdan_room_20,
+HAKAdan_room_21,
+HAKAdan_room_22,
+HAKAdanCH_scene,
+HAKAdanCH_room_0,
+HAKAdanCH_room_1,
+HAKAdanCH_room_2,
+HAKAdanCH_room_3,
+HAKAdanCH_room_4,
+HAKAdanCH_room_5,
+HAKAdanCH_room_6,
+ice_doukutu_scene,
+ice_doukutu_room_0,
+ice_doukutu_room_1,
+ice_doukutu_room_2,
+ice_doukutu_room_3,
+ice_doukutu_room_4,
+ice_doukutu_room_5,
+ice_doukutu_room_6,
+ice_doukutu_room_7,
+ice_doukutu_room_8,
+ice_doukutu_room_9,
+ice_doukutu_room_10,
+ice_doukutu_room_11,
+men_scene,
+men_room_0,
+men_room_1,
+men_room_2,
+men_room_3,
+men_room_4,
+men_room_5,
+men_room_6,
+men_room_7,
+men_room_8,
+men_room_9,
+men_room_10,
+ganontika_scene,
+ganontika_room_0,
+ganontika_room_1,
+ganontika_room_2,
+ganontika_room_3,
+ganontika_room_4,
+ganontika_room_5,
+ganontika_room_6,
+ganontika_room_7,
+ganontika_room_8,
+ganontika_room_9,
+ganontika_room_10,
+ganontika_room_11,
+ganontika_room_12,
+ganontika_room_13,
+ganontika_room_14,
+ganontika_room_15,
+ganontika_room_16,
+ganontika_room_17,
+ganontika_room_18,
+ganontika_room_19,
+spot00_scene,
+spot00_room_0,
+spot01_scene,
+spot01_room_0,
+spot02_scene,
+spot02_room_0,
+spot02_room_1,
+spot03_scene,
+spot03_room_0,
+spot03_room_1,
+spot04_scene,
+spot04_room_0,
+spot04_room_1,
+spot04_room_2,
+spot05_scene,
+spot05_room_0,
+spot06_scene,
+spot06_room_0,
+spot07_scene,
+spot07_room_0,
+spot07_room_1,
+spot08_scene,
+spot08_room_0,
+spot09_scene,
+spot09_room_0,
+spot10_scene,
+spot10_room_0,
+spot10_room_1,
+spot10_room_2,
+spot10_room_3,
+spot10_room_4,
+spot10_room_5,
+spot10_room_6,
+spot10_room_7,
+spot10_room_8,
+spot10_room_9,
+spot11_scene,
+spot11_room_0,
+spot12_scene,
+spot12_room_0,
+spot12_room_1,
+spot13_scene,
+spot13_room_0,
+spot13_room_1,
+spot15_scene,
+spot15_room_0,
+spot16_scene,
+spot16_room_0,
+spot17_scene,
+spot17_room_0,
+spot17_room_1,
+spot18_scene,
+spot18_room_0,
+spot18_room_1,
+spot18_room_2,
+spot18_room_3,
+market_day_scene,
+market_day_room_0,
+market_night_scene,
+market_night_room_0,
+kenjyanoma_scene,
+kenjyanoma_room_0,
+tokinoma_scene,
+tokinoma_room_0,
+tokinoma_room_1,
+link_home_scene,
+link_home_room_0,
+kokiri_shop_scene,
+kokiri_shop_room_0,
+kokiri_home_scene,
+kokiri_home_room_0,
+kakusiana_scene,
+kakusiana_room_0,
+kakusiana_room_1,
+kakusiana_room_2,
+kakusiana_room_3,
+kakusiana_room_4,
+kakusiana_room_5,
+kakusiana_room_6,
+kakusiana_room_7,
+kakusiana_room_8,
+kakusiana_room_9,
+kakusiana_room_10,
+kakusiana_room_11,
+kakusiana_room_12,
+kakusiana_room_13,
+entra_scene,
+entra_room_0,
+moribossroom_scene,
+moribossroom_room_0,
+moribossroom_room_1,
+syatekijyou_scene,
+syatekijyou_room_0,
+shop1_scene,
+shop1_room_0,
+hairal_niwa_scene,
+hairal_niwa_room_0,
+ganon_tou_scene,
+ganon_tou_room_0,
+market_alley_scene,
+market_alley_room_0,
+spot20_scene,
+spot20_room_0,
+market_ruins_scene,
+market_ruins_room_0,
+entra_n_scene,
+entra_n_room_0,
+enrui_scene,
+enrui_room_0,
+market_alley_n_scene,
+market_alley_n_room_0,
+hiral_demo_scene,
+hiral_demo_room_0,
+kokiri_home3_scene,
+kokiri_home3_room_0,
+malon_stable_scene,
+malon_stable_room_0,
+kakariko_scene,
+kakariko_room_0,
+bdan_boss_scene,
+bdan_boss_room_0,
+bdan_boss_room_1,
+FIRE_bs_scene,
+FIRE_bs_room_0,
+FIRE_bs_room_1,
+hut_scene,
+hut_room_0,
+daiyousei_izumi_scene,
+daiyousei_izumi_room_0,
+hakaana_scene,
+hakaana_room_0,
+yousei_izumi_tate_scene,
+yousei_izumi_tate_room_0,
+yousei_izumi_yoko_scene,
+yousei_izumi_yoko_room_0,
+golon_scene,
+golon_room_0,
+zoora_scene,
+zoora_room_0,
+drag_scene,
+drag_room_0,
+alley_shop_scene,
+alley_shop_room_0,
+night_shop_scene,
+night_shop_room_0,
+impa_scene,
+impa_room_0,
+labo_scene,
+labo_room_0,
+tent_scene,
+tent_room_0,
+nakaniwa_scene,
+nakaniwa_room_0,
+ddan_boss_scene,
+ddan_boss_room_0,
+ddan_boss_room_1,
+ydan_boss_scene,
+ydan_boss_room_0,
+ydan_boss_room_1,
+HAKAdan_bs_scene,
+HAKAdan_bs_room_0,
+HAKAdan_bs_room_1,
+MIZUsin_bs_scene,
+MIZUsin_bs_room_0,
+MIZUsin_bs_room_1,
+ganon_scene,
+ganon_room_0,
+ganon_room_1,
+ganon_room_2,
+ganon_room_3,
+ganon_room_4,
+ganon_room_5,
+ganon_room_6,
+ganon_room_7,
+ganon_room_8,
+ganon_room_9,
+ganon_boss_scene,
+ganon_boss_room_0,
+jyasinboss_scene,
+jyasinboss_room_0,
+jyasinboss_room_1,
+jyasinboss_room_2,
+jyasinboss_room_3,
+kokiri_home4_scene,
+kokiri_home4_room_0,
+kokiri_home5_scene,
+kokiri_home5_room_0,
+ganon_final_scene,
+ganon_final_room_0,
+kakariko3_scene,
+kakariko3_room_0,
+hakasitarelay_scene,
+hakasitarelay_room_0,
+hakasitarelay_room_1,
+hakasitarelay_room_2,
+hakasitarelay_room_3,
+hakasitarelay_room_4,
+hakasitarelay_room_5,
+hakasitarelay_room_6,
+shrine_scene,
+shrine_room_0,
+turibori_scene,
+turibori_room_0,
+shrine_n_scene,
+shrine_n_room_0,
+shrine_r_scene,
+shrine_r_room_0,
+hakaana2_scene,
+hakaana2_room_0,
+gerudoway_scene,
+gerudoway_room_0,
+gerudoway_room_1,
+gerudoway_room_2,
+gerudoway_room_3,
+gerudoway_room_4,
+gerudoway_room_5,
+hairal_niwa_n_scene,
+hairal_niwa_n_room_0,
+bowling_scene,
+bowling_room_0,
+hakaana_ouke_scene,
+hakaana_ouke_room_0,
+hakaana_ouke_room_1,
+hakaana_ouke_room_2,
+hylia_labo_scene,
+hylia_labo_room_0,
+souko_scene,
+souko_room_0,
+souko_room_1,
+souko_room_2,
+miharigoya_scene,
+miharigoya_room_0,
+mahouya_scene,
+mahouya_room_0,
+takaraya_scene,
+takaraya_room_0,
+takaraya_room_1,
+takaraya_room_2,
+takaraya_room_3,
+takaraya_room_4,
+takaraya_room_5,
+takaraya_room_6,
+ganon_sonogo_scene,
+ganon_sonogo_room_0,
+ganon_sonogo_room_1,
+ganon_sonogo_room_2,
+ganon_sonogo_room_3,
+ganon_sonogo_room_4,
+ganon_demo_scene,
+ganon_demo_room_0,
+face_shop_scene,
+face_shop_room_0,
+kinsuta_scene,
+kinsuta_room_0,
+ganontikasonogo_scene,
+ganontikasonogo_room_0,
+ganontikasonogo_room_1,
+bump_texture_static,
+anime_model_1_static,
+anime_model_2_static,
+anime_model_3_static,
+anime_model_4_static,
+anime_model_5_static,
+anime_model_6_static,
+anime_texture_1_static,
+anime_texture_2_static,
+anime_texture_3_static,
+anime_texture_4_static,
+anime_texture_5_static,
+anime_texture_6_static,
+softsprite_matrix_static,
diff --git a/baseroms/ntsc-1.0/config.yml b/baseroms/ntsc-1.0/config.yml
index 072aebec3d..2bdf99411a 100644
--- a/baseroms/ntsc-1.0/config.yml
+++ b/baseroms/ntsc-1.0/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7430
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ntsc-1.1/config.yml b/baseroms/ntsc-1.1/config.yml
index 6726cc59f6..1b110a84c8 100644
--- a/baseroms/ntsc-1.1/config.yml
+++ b/baseroms/ntsc-1.1/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7430
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/ntsc-1.2/config.yml b/baseroms/ntsc-1.2/config.yml
index f9293586f9..a631ca5511 100644
--- a/baseroms/ntsc-1.2/config.yml
+++ b/baseroms/ntsc-1.2/config.yml
@@ -2,7 +2,7 @@ checksums:
- checksum-JP
- checksum-US
dmadata_start: 0x7960
-text_lang_pal: false
+text_lang: NTSC
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/pal-1.0/config.yml b/baseroms/pal-1.0/config.yml
index 1a80071bbb..a8ea60b79d 100644
--- a/baseroms/pal-1.0/config.yml
+++ b/baseroms/pal-1.0/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7950
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/baseroms/pal-1.1/config.yml b/baseroms/pal-1.1/config.yml
index 57f037b350..4811f1cb93 100644
--- a/baseroms/pal-1.1/config.yml
+++ b/baseroms/pal-1.1/config.yml
@@ -1,5 +1,5 @@
dmadata_start: 0x7950
-text_lang_pal: true
+text_lang: PAL
incbins:
- name: ipl3
segment: makerom
diff --git a/docker-compose.yml b/docker-compose.yml
index a6cdbbdf8e..bca75f474c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,11 +1,8 @@
-version: "3"
services:
oot:
+ build:
+ dockerfile: Dockerfile
volumes:
- - oot-sync:/oot:nocopy
- image: "oot:latest"
+ - ./:/oot
tty: true
-
-volumes:
- oot-sync:
- external: true
+ stdin_open: true
diff --git a/docs/BUILDING_DOCKER.md b/docs/BUILDING_DOCKER.md
index afc35b48bc..98aed29c97 100644
--- a/docs/BUILDING_DOCKER.md
+++ b/docs/BUILDING_DOCKER.md
@@ -6,22 +6,20 @@ To use Docker, you'll need either Docker Desktop or Docker Toolbox installed and
You'll also need to prepare a local version of the project with a copied base ROM (see steps [2](../README.md#2-clone-the-repository) and [3](../README.md#3-prepare-a-base-rom) of the Linux instructions).
-## 2. Create the Docker image
+## 2. Create and start the Docker image build
-From inside your local project, run the following command:
+From the root of your local project, run the following command:
```bash
-docker build . -t oot
+docker-compose up --build
```
-## 3. Start the container
+This should immediately begin steps [4](../README.md#4-setup-the-rom-and-build-process) and [5](../README.md#5-build-the-rom) within the Docker container.
-To start the container, you can mount your local filesystem into the Docker container and run an interactive bash session.
+## 3. Shell into the 'oot' container
+
+To exec into the oot Docker image at any time, run the following command either during or after the build:
```bash
-docker run -it --rm --mount type=bind,source="$(pwd)",destination=/oot oot /bin/bash
+docker-compose exec oot bash
```
-
-## 4. Setup and Build the ROM
-
-Once inside the container, you can follow steps [4](../README.md#4-setup-the-rom-and-build-process) and [5](../README.md#5-build-the-rom) of the Linux instructions to setup and build the ROM, or run any other command you need.
diff --git a/docs/BUILDING_MACOS.md b/docs/BUILDING_MACOS.md
index af58ac3fce..d34035fcec 100644
--- a/docs/BUILDING_MACOS.md
+++ b/docs/BUILDING_MACOS.md
@@ -14,12 +14,13 @@ For macOS, use Homebrew to install the following dependencies:
* bash
* clang-format
* libxml2
+* libiconv
You can install them with the following commands:
```bash
brew update
-brew install coreutils make python3 libpng bash clang-format libxml2
+brew install coreutils make python3 libpng bash clang-format libxml2 libiconv
```
(The repository expects Homebrew-installed programs to be either linked correctly in `$PATH` etc. or in their default locations.)
@@ -42,10 +43,9 @@ cd ~/binutils-tmp
Get and extract binutils source
```bash
-wget https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
+curl -O https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.bz2
tar xjf binutils-2.35.tar.bz2
```
-(You may find this command does not work: if so, just access the URL in a browser and save it to `~/binutils-tmp`.)
Create and enter a build directory
```bash
@@ -64,9 +64,9 @@ make -j
sudo make install
```
-Edit your `~/.bash_profile`/`~/.zsh_profile` (or whichever shell you use) to add the new binutils binaries to the system PATH
+Edit your `~/.bash_profile`/`~/.zprofile` (or whichever shell you use) to add the new binutils binaries to the system PATH
```bash
-echo "export PATH=$PATH:/opt/cross/bin" >> ~/.bash_profile
+echo 'export PATH="$PATH:/opt/cross/bin"' >> ~/.bash_profile
```
Reload `~/.bash_profile` (or just launch a new terminal tab)
diff --git a/docs/audio/Samplebank_XML.md b/docs/audio/Samplebank_XML.md
new file mode 100644
index 0000000000..b9c027bcb7
--- /dev/null
+++ b/docs/audio/Samplebank_XML.md
@@ -0,0 +1,77 @@
+# Samplebank XML Format Specification
+
+Samplebank XMLs describe a samplebank file that contains compressed waveform data. It specifies which sample files to include as well as certain global properties such as the index of this samplebank.
+
+---
+
+```xml
+
+```
+Begins a new samplebank.
+
+**Attributes**
+
+- **Name**: The name of the samplebank.
+- **Index**: The index of the samplebank for the samplebank table. Must be a unique index for all samplebanks and pointers.
+- **Medium**: The storage medium, from the `SampleMedium` enum.
+- **CachePolicy**: The cache policy, from the `AudioCacheLoadType` enum.
+- [Optional] **BufferBug**: Whether this samplebank suffers from a buffer clearing bug present in the original audio tools. For matching only.
+
+**Tags**
+
+-
+ ```xml
+
+ ```
+ Create an alternate index that refers to this samplebank.
+
+ **Attributes**
+
+ - **Index**: The alternative index, must be unique among all samplebanks and pointers.
+
+ ---
+
+-
+ ```xml
+
+ ```
+ Adds a **compressed** sample file to the samplebank. The sample should be single-channel and big-endian, in a format that is recognizable by the audio driver such as: pcm16, vadpcm, or half-frame vadpcm.
+
+ **Attributes**
+
+ - **Name**: Name of this sample. Must be a valid C language identifier.
+ - **Path**: Path to aifc file relative to the project root (typically in `$(BUILD_DIR)/assets/audio/samples/`)
+
+ ---
+
+-
+ ```xml
+
+ ```
+ Adds a binary blob to the samplebank. Intended for matching only when data cannot be identified.
+
+ **Attributes**
+
+ - **Name**: Name of this blob. Must be a valid C language identifier.
+ - **Path**: Path to binary file, relative to the project root (typically in `$(BUILD_DIR)/assets/audio/samples/`)
+
+ ---
+
+```xml
+
+```
+---
diff --git a/docs/audio/Soundfont_XML.md b/docs/audio/Soundfont_XML.md
new file mode 100644
index 0000000000..c2d8a572ed
--- /dev/null
+++ b/docs/audio/Soundfont_XML.md
@@ -0,0 +1,319 @@
+# Soundfont XML Format Specification
+
+Soundfont XMLs describe the layout of a single soundfont. These package raw samples together into instruments, of which there are three kinds:
+- **Effects**: These are simple sound effects that just play a single sample without any modulation.
+- **Drums**: These define a MIDI-style percussion key map.
+- **Instruments**: These are instruments that may be played at any key with up to three voices and may be modulated by an envelope.
+
+In the specification, `Note Name`s can be either a MIDI note name e.g. `C4` or it may be a **Zelda64** note number, which are related to MIDI note numbers ($n$) by $(n - 21) \mod 128$.
+
+---
+
+```xml
+
+```
+Begins a new soundfont.
+
+**Attributes**
+- **Name**: Soundfont symbol name. Must be a valid C identifier.
+- **Index**: Soundfont index. Must be an integer.
+- **Medium**: Storage medium. Must be an enum name from `SampleMedium`.
+- **CachePolicy**: Cache policy. Must be an enum name from `AudioCacheLoadType`.
+- **SampleBank**: Path to samplebank xml used by this soundfont.
+- [Optional] **Indirect**: Pointer index if the samplebank is referenced indirectly.
+- [Optional] **SampleBankDD**: Path to samplebank xml used for DD medium.
+- [Optional] **IndirectDD**: Pointer index if the DD samplebank is referenced indirectly.
+- [Optional] **LoopsHaveFrames**: Whether loops in this soundfont store the total frame count of the sample. Must be a boolean.
+- [Optional] **PadToSize**: For matching only. Specifies the total file size the result output should be padded to.
+- [Optional] **NumInstruments**: For matching only. Specifies the total number of instrument pointers. Usually this is automatically assigned based on `max(program_number) + 1` but some vanilla banks don't match this way.
+
+**Tags**
+
+-
+ ```xml
+
+ ```
+ Lists envelopes defined in this soundfont.
+
+ **Attributes**
+
+ N/A
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Starts a new envelope.
+
+ **Attributes**
+
+ - **Name**: Unique name for this envelope. Must be a valid C identifier.
+ - **Release**: Release rate index (into `gAudioCtx.adsrDecayTable`) for this envelope
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Add a point to the envelope at (delay, arg)
+
+ **Attributes**
+
+ - **Delay**: Duration until the next point
+ - **Arg**: Value of the envelope at this point
+
+ ---
+
+ -
+ ```xml
+
+ ```
+ Insert a ADSR_DISABLE command
+
+ ---
+
+ -
+ ```xml
+
+ ```
+ Insert a ADSR_HANG command
+
+ ---
+
+ -
+ ```xml
+
+ ```
+ Insert a ADSR_GOTO command
+
+ **Attributes**
+
+ - **Index**: Index of the envelope point to jump to
+
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+-
+ ```xml
+
+ ```
+ Begins a list of samples used in this Soundfont.
+
+ **Attributes**
+
+ - [Optional] **IsDD**: Whether all the samples in the list are on the Disk Drive. The sample data will come from the samplebank `SampleBankDD`. **Default is `false`.** **NOTE this is not fully implemented, it should always be `false`.**
+ - [Optional] **Cached**: Whether all the samples in the list should be added to the `usedSamples` cache. **Default is `false`.**
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Declares a sample used in this soundfont.
+
+ **Attributes**
+
+ - **Name**: The name of this sample. A sample with this name must be present in the samplebank used by the soundfont.
+ - [Optional] **SampleRate**: An overriding sample rate for this sample. **Default comes from the sample file.**
+ - [Optional] **BaseNote**: An overriding root key for this sample. **Default comes from the sample file.**
+ - [Optional] **IsDD**: Whether this sample is on the Disk Drive. The sample data will come from the samplebank `SampleBankDD`. **Default is `false`.** **NOTE this is not fully implemented, it should always be `false`.**
+ - [Optional] **Cached**: Whether this sample should be added to the `usedSamples` cache. **Default is `false`.**
+
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+-
+ ```xml
+
+ ```
+ Begins a list of sound effects to define for this soundfont. Sound effects correspond to simple sounds that cannot be played at different keys.
+
+ **Attributes**
+
+ N/A
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Defines a single sound effect.
+
+ **Attributes**
+ - **Name**: The name of the sound effect, the name is made available in sequence files in the form `SF{n}_{name}` where `n` is the index of this soundfont and `name` is this name. For example, if `n=0` and `name=ExampleEffect` the name to use in sequence files is `SF0_ExampleEffect`.
+ - **Sample**: The name of the sample associated with this effect.
+ - [Optional] **SampleRate**: An overriding sample rate for this effect. **Default comes from the sample definition.**
+ - [Optional] **BaseNote**: An overriding root key for this effect. **Default comes from the sample definition.**
+
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+-
+ ```xml
+
+ ```
+ Begins the percussion definitions for this soundfont. Percussion corresponds to the MIDI notion of percussion, where single samples are mapped across a range of keys.
+
+ **Attributes**
+
+ N/A
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Defines a single percussion range.
+
+ **Attributes**
+ - **Name**: The name of this sound. Definitions are emitted for sequence files in the form `SF{n}_{name}_{note}` for every note covered by this sound.
+ - [Optional] **Note**: The key to map this sound to. Should not overlap with other definitions. **If this field is left unspecified, `NoteStart` and `NoteEnd` become required.**
+ - [Optional] **NoteStart**: The first key that is mapped to this sound. Should not overlap with other definitions. **If this field is left unspecified, `Note` becomes required. If this field is specified, `NoteEnd` must also be specified.**
+ - [Optional] **NoteEnd**: The last key that is mapped to this sound. Should not overlap with other definitions. **If this field is left unspecified, `Note` becomes required. If this field is specified, `NoteStart` must also be specified.**
+ - **Pan**: The stereo weight for this sound. Center=`64`.
+ - **Envelope**: The envelope to modulate the volume over time with. Must be defined in the `Envelopes` list.
+ - [Optional] **Release**: An override for the envelope release rate. **Default is the release rate specified in the envelope definition**
+ - **Sample**: The name of the sample to use.
+ - [Optional] **SampleRate**: An overriding sample rate for this sound. **Default comes from the sample definition.**
+ - [Optional] **BaseNote**: An overriding root key for this sound. **Default comes from the sample definition.**
+
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+-
+ ```xml
+
+ ```
+ Begins the instrument definitions for this soundfont. Instruments correspond to the MIDI notion of instruments, with up to 3 samples (voices) per instrument that must map to contiguous ranges of notes.
+
+ **Attributes**
+
+ N/A
+
+ **Tags**
+
+ -
+ ```xml
+
+ ```
+ Defines an instrument.
+
+ **Attributes**
+ - **ProgramNumber**: MIDI Program Number for this instrument. Must be in the range `0 <= n <= 125`
+ - **Name**: The name of this instrument.
+ - **Envelope**: Envelope to use, identified by name.
+ - [Optional] **Release**: Release rate index override. **Default release rate comes from the chosen envelope.**
+ - **Sample**: The name of the middle sample to use for this instrument.
+ - [Optional] **SampleRate**: Sample rate override for the middle sample. **Default is sourced from the sample properties.**
+ - [Optional] **BaseNote**: Base note override for the middle sample. **Default is sourced from the sample properties.**
+ - [Optional] **RangeLo**: The largest note for SampleLo. SampleLo will be used instead of Sample for keys in the range [0, RangeLo]. **If left unspecified, SampleLo must not be specified. If specified, SampleLo must be specified.**
+ - [Optional] **SampleLo**: The name of the low sample to use for this instrument.
+ - [Optional] **SampleRateLo**: Sample rate override for the low sample. **Default is sourced from the sample properties.**
+ - [Optional] **BaseNoteLo**: Base note override for the low sample. **Default is sourced from the sample properties.**
+ - [Optional] **RangeHi**: The smallest note for SampleHi. SampleHi will be used instead of Sample for keys in the range [RangeHi, 127]. **If left unspecified, SampleHi must not be specified. If specified, SampleHi must be specified.**
+ - [Optional] **SampleHi**: The name of the high sample to use for this instrument.
+ - [Optional] **SampleRateHi**: Sample rate override for the high sample. **Default is sourced from the sample properties.**
+ - [Optional] **BaseNoteHi**: Base note override for the high sample. **Default is sourced from the sample properties.**
+
+ ---
+
+ ```xml
+
+ ```
+ ---
+
+```xml
+
+```
+---
diff --git a/docs/audio/build_flowchart.png b/docs/audio/build_flowchart.png
new file mode 100644
index 0000000000..9ef26221ee
Binary files /dev/null and b/docs/audio/build_flowchart.png differ
diff --git a/docs/libu64.md b/docs/libu64.md
index 34cc668c8c..67c1223231 100644
--- a/docs/libu64.md
+++ b/docs/libu64.md
@@ -62,7 +62,7 @@ Note `debug.c` has additional debug-only functions in gc-eu-mq-dbg, hinting that
Additionally `debug.c`, `gfxprint.c` and `pad.c` all require compilation flags `-O2` (instead of `-O2 -g3`) to match, as supplementary evidence these were part of a separately compiled library.
-`-O2` is also required for most files between `gfxprint.c` and `pad.c` in the code segment (see spec), hinting that these other files (`loadfragment2_n64.c`, `loadfragment2_gc.c`, `mtxuty-cvt.c`, `relocation_gc.c`, `load_gc.c`, `code_800FC620.c`) are also part of libu64.
+`-O2` is also required for most files between `gfxprint.c` and `pad.c` in the code segment (see spec), hinting that these other files (`loadfragment2_n64.c`, `loadfragment2_gc.c`, `mtxuty-cvt.c`, `relocation_gc.c`, `load_gc.c`, `system_heap.c`) are also part of libu64.
Files `rcp_utils.c` and `logseverity_gc.c` do not strictly require `-O2`, but they do match with `-O2`.
diff --git a/format.py b/format.py
index 9eaf983d31..0350475589 100755
--- a/format.py
+++ b/format.py
@@ -30,8 +30,8 @@
# Compiler options used with Clang-Tidy
# Normal warnings are disabled with -Wno-everything to focus only on tidying
-INCLUDES = "-Iinclude -Isrc -Ibuild/gc-eu-mq-dbg -Ibuild/hackeroot-mq -I."
-DEFINES = "-D_LANGUAGE_C -DNON_MATCHING -DF3DEX_GBI_2"
+INCLUDES = "-Iinclude -Isrc -Ibuild/gc-eu-mq-dbg -I. -Ibuild/hackeroot-mq -I."
+DEFINES = "-D_LANGUAGE_C -DNON_MATCHING -DF3DEX_GBI_2 -DBUILD_CREATOR=\"\" -DBUILD_DATE=__DATE__ -DBUILD_TIME=__TIME__"
COMPILER_OPTS = f"-fno-builtin -std=gnu90 -m32 -Wno-everything {INCLUDES} {DEFINES}"
diff --git a/include/attributes.h b/include/attributes.h
index c3154cac7b..3276c84325 100644
--- a/include/attributes.h
+++ b/include/attributes.h
@@ -8,12 +8,22 @@
#endif
#define UNUSED __attribute__((unused))
-#define FALLTHROUGH __attribute__((fallthrough))
-#define NORETURN __attribute__((noreturn))
#define NO_REORDER __attribute__((no_reorder))
#define SECTION_DATA __attribute__((section(".data")))
-#ifdef __GNUC__
+#if __GNUC__ >= 7
+#define FALLTHROUGH __attribute__((fallthrough))
+#else
+#define FALLTHROUGH
+#endif
+
+#if defined(__GNUC__) && defined(NON_MATCHING)
+#define NORETURN __attribute__((noreturn))
+#else
+#define NORETURN
+#endif
+
+#if defined(__GNUC__) && defined(NON_MATCHING)
#define UNREACHABLE() __builtin_unreachable()
#else
#define UNREACHABLE()
diff --git a/include/audio/aseq.h b/include/audio/aseq.h
index ac600738b0..689c42664f 100644
--- a/include/audio/aseq.h
+++ b/include/audio/aseq.h
@@ -558,10 +558,9 @@ _RESET_SECTION
.macro .startseq name
/* Begin a sequence. */
- /* Write the sequence name into a special .name section */
- .pushsection .name, "", @note
+ /* Write the sequence name into a special .note.name section */
+ .pushsection .note.name, "", @note
.asciz "\name"
- .balign 4
.popsection
/* Reset section and write start symbol. */
diff --git a/include/fault.h b/include/fault.h
index a95ae59064..8f1979520f 100644
--- a/include/fault.h
+++ b/include/fault.h
@@ -5,7 +5,7 @@
#include "attributes.h"
#include "padmgr.h"
-#if PLATFORM_GC
+#if !PLATFORM_N64
// These are the same as the 3-bit ansi color codes
#define FAULT_COLOR_BLACK 0
#define FAULT_COLOR_RED 1
@@ -33,7 +33,7 @@ typedef struct FaultClient {
/* 0x0C */ void* arg1;
} FaultClient; // size = 0x10
-#if PLATFORM_GC
+#if !PLATFORM_N64
typedef struct FaultAddrConvClient {
/* 0x00 */ struct FaultAddrConvClient* next;
/* 0x04 */ void* callback;
@@ -78,7 +78,7 @@ void func_800AE1F8(void);
#define Fault_SetFontColor(color) (void)0
#define Fault_SetCharPad(padW, padH) (void)0
-#elif PLATFORM_GC
+#else
void Fault_InitDrawer(void);
void Fault_SetForeColor(u16 color);
@@ -98,7 +98,7 @@ extern volatile OSThread* gFaultFaultedThread;
#define FAULT_MSG_ID gFaultMsgId
-#elif PLATFORM_GC
+#else
typedef struct FaultMgr {
/* 0x000 */ OSThread thread;
diff --git a/include/functions.h b/include/functions.h
index 542509684f..2861a437f7 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -66,13 +66,6 @@ void CutsceneFlags_UnsetAll(PlayState* play);
void CutsceneFlags_Set(PlayState* play, s16 flag);
void CutsceneFlags_Unset(PlayState* play, s16 flag);
s32 CutsceneFlags_Get(PlayState* play, s16 flag);
-s32 func_8006CFC0(s32 sceneId);
-void func_8006D074(PlayState* play);
-void func_8006D0AC(PlayState* play);
-void func_8006D0EC(PlayState* play, Player* player);
-void func_8006D684(PlayState* play, Player* player);
-void func_8006DC68(PlayState* play, Player* player);
-void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2);
s32 Kanji_OffsetFromShiftJIS(s32 character);
void Font_LoadCharWide(Font* font, u16 character, u16 codePointIndex);
diff --git a/include/libc/assert.h b/include/libc/assert.h
index 3e1c174d50..ec5bb5eee5 100644
--- a/include/libc/assert.h
+++ b/include/libc/assert.h
@@ -31,7 +31,7 @@ __attribute__((noreturn)) void __assert(const char* assertion, const char* file,
// Static/compile-time assertions
-#if defined(__GNUC__) || (__STDC_VERSION__ >= 201112L)
+#if !defined(__sgi) && (__GNUC__ >= 5 || __STDC_VERSION__ >= 201112L)
# define static_assert(cond, msg) _Static_assert(cond, msg)
#else
# ifndef GLUE
diff --git a/include/libc/math.h b/include/libc/math.h
index b46b6cd911..4389b576ef 100644
--- a/include/libc/math.h
+++ b/include/libc/math.h
@@ -61,6 +61,10 @@ f64 sqrt(f64 f);
#endif
#if !PLATFORM_N64
+extern float gPositiveInfinity;
+extern float gNegativeInfinity;
+extern float gPositiveZero;
+extern float gNegativeZero;
extern float qNaN0x3FFFFF;
extern float qNaN0x10000;
extern float sNaN0x3FFFFF;
diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h
index 35ce4f944e..ec57a0c846 100644
--- a/include/libc/stdarg.h
+++ b/include/libc/stdarg.h
@@ -1,16 +1,16 @@
#ifndef STDARG_H
#define STDARG_H
-// When building with GCC, use the official vaarg macros to avoid warnings and possibly bad codegen.
+// When building with modern GCC, use the official vaarg macros to avoid warnings and possibly bad codegen.
-#ifdef __GNUC__
+#if __GNUC__ >= 3
#define va_list __builtin_va_list
#define va_start __builtin_va_start
#define va_arg __builtin_va_arg
#define va_end __builtin_va_end
-#else
+#elif defined(__sgi) /* IDO */
#ifndef _VA_LIST_
# define _VA_LIST_
@@ -52,6 +52,28 @@ typedef char* va_list;
/* No cleanup processing is required for the end of a varargs list: */
#define va_end(__list)
-#endif /* __GNUC__ */
+#else /* EGCS */
+
+typedef char * __gnuc_va_list;
+
+#define __va_rounded_size(__TYPE) \
+ (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+
+#define va_start(__AP, __LASTARG) \
+ (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG))
+
+#define va_end(__AP) ((void)0)
+
+/* We cast to void * and then to TYPE * because this avoids
+ a warning about increasing the alignment requirement. */
+#define va_arg(__AP, __type) \
+ ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \
+ ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \
+ : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \
+ + __va_rounded_size(__type))))[-1]
+
+typedef __gnuc_va_list va_list;
+
+#endif
#endif
diff --git a/include/libc/stddef.h b/include/libc/stddef.h
index 45620895ee..0c0926ba6b 100644
--- a/include/libc/stddef.h
+++ b/include/libc/stddef.h
@@ -15,7 +15,7 @@ typedef unsigned long size_t;
#endif
-#ifdef __GNUC__
+#if __GNUC__ >= 4
#define offsetof(structure, member) __builtin_offsetof (structure, member)
#else
#define offsetof(structure, member) ((size_t)&(((structure*)0)->member))
diff --git a/include/libc64/os_malloc.h b/include/libc64/os_malloc.h
index 91b0d93c47..fcd4da1e14 100644
--- a/include/libc64/os_malloc.h
+++ b/include/libc64/os_malloc.h
@@ -11,7 +11,7 @@ typedef struct Arena {
#if PLATFORM_N64
/* 0x08 */ u32 size;
/* 0x0C */ u8 allocFailures;
-#elif PLATFORM_GC
+#else
/* 0x08 */ OSMesgQueue lockQueue;
/* 0x20 */ u8 allocFailures; // only used in non-debug builds
/* 0x21 */ u8 isInit;
diff --git a/include/line_numbers.h b/include/line_numbers.h
new file mode 100644
index 0000000000..f0d0ae5faa
--- /dev/null
+++ b/include/line_numbers.h
@@ -0,0 +1,67 @@
+#ifndef LINE_NUMBERS_H
+#define LINE_NUMBERS_H
+
+// The macros in this file serve to reduce clutter from version differences that are only due to line numbers being different.
+
+// The "LN" macros defined here are not meant to be used directly. See the wrapper macros below.
+#if OOT_VERSION == NTSC_1_0
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_0)
+#elif OOT_VERSION == NTSC_1_1
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_1)
+#elif OOT_VERSION == PAL_1_0
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_0)
+#elif OOT_VERSION == NTSC_1_2
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ntsc_1_2)
+#elif OOT_VERSION == PAL_1_1
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (pal_1_1)
+#elif OOT_VERSION == GC_JP
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp)
+#elif OOT_VERSION == GC_JP_MQ
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_mq)
+#elif OOT_VERSION == GC_US
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us)
+#elif OOT_VERSION == GC_US_MQ
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_us_mq)
+#elif OOT_VERSION == GC_EU_MQ_DBG
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq_dbg)
+#elif OOT_VERSION == GC_EU
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu)
+#elif OOT_VERSION == GC_EU_MQ
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_eu_mq)
+#elif OOT_VERSION == GC_JP_CE
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (gc_jp_ce)
+#elif OOT_VERSION == IQUE_CN
+#define LN(ntsc_1_0, ntsc_1_1, pal_1_0, ntsc_1_2, pal_1_1, gc_jp, gc_jp_mq, gc_us, gc_us_mq, gc_eu_mq_dbg, gc_eu, gc_eu_mq, gc_jp_ce, ique_cn) (ique_cn)
+#else
+#error "Unsupported OOT version"
+#endif
+
+/**
+ * These wrappers exist to remove duplication of line numbers being passed to LN.
+ * The wrappers have ambiguous names purposefully so they are short and don't add clutter.
+ *
+ * The groupings of different line numbers are difficult to name, as the exact grouping
+ * depends on which versions happen to have changes in a given file.
+ */
+
+// NTSC 1.0 and all the other versions
+#define LN1(ntsc_1_0, other) \
+ LN(ntsc_1_0, other, other, other, other, other, other, other, other, other, other, other, other, other)
+
+// NTSC 1.0, NTSC 1.1, and all the other versions
+#define LN2(ntsc_1_0, ntsc_1_1, other) \
+ LN(ntsc_1_0, ntsc_1_1, other, other, other, other, other, other, other, other, other, other, other, other)
+
+// NTSC 1.0, Gamecube, and all the other versions
+#define LN3(ntsc_1_0, other, gc) \
+ LN(ntsc_1_0, other, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, gc)
+
+// NTSC 1.0, NTSC 1.1, Gamecube, and all the other versions
+#define LN4(ntsc_1_0, ntsc_1_1, other, gc, ique) \
+ LN(ntsc_1_0, ntsc_1_1, other, other, other, gc, gc, gc, gc, gc, gc, gc, gc, ique)
+
+// NTSC 1.0, NTSC 1.1, NTSC 1.2/PAL 1.0, Gamecube US/JP, Gamecube EU, and Gamecube CE
+#define LN5(ntsc_1_0, ntsc_1_1, other, pal_1_1, gc_ntsc, gc_eu, gc_jp_ce) \
+ LN(ntsc_1_0, ntsc_1_1, other, other, pal_1_1, gc_ntsc, gc_ntsc, gc_ntsc, gc_ntsc, gc_eu, gc_eu, gc_eu, gc_jp_ce, gc_jp_ce)
+
+#endif
diff --git a/include/macros.h b/include/macros.h
index da78aa7502..dcbf295a99 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -54,6 +54,8 @@
#define PRINTF osSyncPrintf
#elif IDO_PRINTF_WORKAROUND
#define PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define PRINTF(format, args...) (void)0
#else
#define PRINTF(format, ...) (void)0
#endif
diff --git a/include/regs.h b/include/regs.h
index ce267b9a9f..3f3be0659d 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -120,6 +120,8 @@
#define R_MESSAGE_DEBUGGER_TEXTID YREG(79)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
+#define R_EXITED_SCENE_RIDING_HORSE AREG(6) // Used to spawn the player on top of Epona in the next scene
+#define R_DEBUG_FORCE_EPONA_OBTAINED DREG(1) // If set, overrides EVENTCHKINF_EPONA_OBTAINED state giving Epona
#define R_EPONAS_SONG_PLAYED DREG(53)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + (i))
#define R_PAUSE_PAGE_SWITCH_FRAME_ADVANCE_ON ZREG(13)
diff --git a/include/sfx.h b/include/sfx.h
index 47a449e9c4..16d0b122d3 100644
--- a/include/sfx.h
+++ b/include/sfx.h
@@ -4,6 +4,7 @@
#include "ultra64.h"
#include "versions.h"
#include "z64math.h"
+#include "libc/assert.h"
typedef enum SfxBankType {
/* 0 */ BANK_PLAYER,
@@ -63,23 +64,48 @@ typedef struct SfxBankEntry {
typedef enum SfxId {
NA_SE_NONE, // Requesting a sfx with this id will play no sound
+
NA_SE_PL_BASE = 0x7FF,
#include "tables/sfx/playerbank_table.h"
+ NA_SE_PL_END,
+
NA_SE_IT_BASE = 0x17FF,
#include "tables/sfx/itembank_table.h"
+ NA_SE_IT_END,
+
NA_SE_EV_BASE = 0x27FF,
#include "tables/sfx/environmentbank_table.h"
+ NA_SE_EV_END,
+
NA_SE_EN_BASE = 0x37FF,
#include "tables/sfx/enemybank_table.h"
+ NA_SE_EN_END,
+
NA_SE_SY_BASE = 0x47FF,
#include "tables/sfx/systembank_table.h"
+ NA_SE_SY_END,
+
NA_SE_OC_BASE = 0x57FF,
#include "tables/sfx/ocarinabank_table.h"
+ NA_SE_OC_END,
+
NA_SE_VO_BASE = 0x67FF,
#include "tables/sfx/voicebank_table.h"
+ NA_SE_VO_END,
+
NA_SE_MAX
} SfxId;
+// These limits are due to the way Sequence 0 is programmed. There is also a global limit of 512 entries for every bank
+// enforced in Audio_PlayActiveSfx in sfx.c
+static_assert(NA_SE_PL_END - (NA_SE_PL_BASE + 1) <= 256, "Player Bank SFX Table is limited to 256 entries due to Sequence 0");
+static_assert(NA_SE_IT_END - (NA_SE_IT_BASE + 1) <= 128, "Item Bank SFX Table is limited to 128 entries due to Sequence 0");
+static_assert(NA_SE_EV_END - (NA_SE_EV_BASE + 1) <= 256, "Environment Bank SFX Table is limited to 256 entries due to Sequence 0");
+static_assert(NA_SE_EN_END - (NA_SE_EN_BASE + 1) <= 512, "Enemy Bank SFX Table is limited to 512 entries due to Sequence 0");
+static_assert(NA_SE_SY_END - (NA_SE_SY_BASE + 1) <= 128, "System Bank SFX Table is limited to 128 entries due to Sequence 0");
+static_assert(NA_SE_OC_END - (NA_SE_OC_BASE + 1) <= 128, "Ocarina Bank SFX Table is limited to 128 entries due to Sequence 0");
+static_assert(NA_SE_VO_END - (NA_SE_VO_BASE + 1) <= 256, "Voice Bank SFX Table is limited to 256 entries due to Sequence 0");
+
#undef DEFINE_SFX
#define SFX_BANK_SHIFT(sfxId) (((sfxId) >> 12) & 0xFF)
diff --git a/include/ultra64.h b/include/ultra64.h
index e1f9a7c9b9..e8a4bd0ca7 100644
--- a/include/ultra64.h
+++ b/include/ultra64.h
@@ -31,6 +31,7 @@
#include "ultra64/motor.h"
#include "ultra64/R4300.h"
#include "ultra64/ucode.h"
+#include "ultra64/version.h"
union uObjBg;
@@ -42,7 +43,7 @@ void osStopThread(OSThread* thread);
void osViExtendVStart(u32 value);
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flag);
-#if PLATFORM_N64
+#if LIBULTRA_VERSION < LIBULTRA_VERSION_K
void osInitialize(void);
#else
#define osInitialize() \
diff --git a/include/ultra64/R4300.h b/include/ultra64/R4300.h
index 6398ea17c4..1c2da84f12 100644
--- a/include/ultra64/R4300.h
+++ b/include/ultra64/R4300.h
@@ -4,13 +4,11 @@
#ifdef _LANGUAGE_C
#include "ultratypes.h"
#define U32(x) ((u32)x)
-#define C_REG(x) (x)
#else
#define U32(x) (x)
-#define C_REG(x) $x
#endif
-// Segment base addresses and sizes
+/* Segment base addresses and sizes */
#define KUBASE 0
#define KUSIZE 0x80000000
#define K0BASE 0x80000000
@@ -20,24 +18,24 @@
#define K2BASE 0xC0000000
#define K2SIZE 0x20000000
-// Exception vectors
-#define SIZE_EXCVEC 0x80 // Size of an exc. vec
-#define UT_VEC K0BASE // utlbmiss vector
-#define R_VEC (K1BASE + 0x1FC00000) // reset vector
-#define XUT_VEC (K0BASE + 0x80) // extended address tlbmiss
-#define ECC_VEC (K0BASE + 0x100) // Ecc exception vector
-#define E_VEC (K0BASE + 0x180) // Gen. exception vector
-
-// Address conversion macros
-#define K0_TO_K1(x) (U32(x) | 0xA0000000) // kseg0 to kseg1
-#define K1_TO_K0(x) (U32(x) & 0x9FFFFFFF) // kseg1 to kseg0
-#define K0_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // kseg0 to physical
-#define K1_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // kseg1 to physical
-#define KDM_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) // direct mapped to physical
-#define PHYS_TO_K0(x) (U32(x) | 0x80000000) // physical to kseg0
-#define PHYS_TO_K1(x) (U32(x) | 0xA0000000) // physical to kseg1
-
-// Address predicates
+/* Exception vectors */
+#define SIZE_EXCVEC 0x80 /* Size of an exc. vec */
+#define UT_VEC K0BASE /* utlbmiss vector */
+#define R_VEC (K1BASE + 0x1FC00000) /* reset vector */
+#define XUT_VEC (K0BASE + 0x80) /* extended address tlbmiss */
+#define ECC_VEC (K0BASE + 0x100) /* Ecc exception vector */
+#define E_VEC (K0BASE + 0x180) /* Gen. exception vector */
+
+/* Address conversion macros */
+#define K0_TO_K1(x) (U32(x) | 0xA0000000) /* kseg0 to kseg1 */
+#define K1_TO_K0(x) (U32(x) & 0x9FFFFFFF) /* kseg1 to kseg0 */
+#define K0_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* kseg0 to physical */
+#define K1_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* kseg1 to physical */
+#define KDM_TO_PHYS(x) (U32(x) & 0x1FFFFFFF) /* direct mapped to physical */
+#define PHYS_TO_K0(x) (U32(x) | 0x80000000) /* physical to kseg0 */
+#define PHYS_TO_K1(x) (U32(x) | 0xA0000000) /* physical to kseg1 */
+
+/* Address predicates */
#define IS_KSEG0(x) (U32(x) >= K0BASE && U32(x) < K1BASE)
#define IS_KSEG1(x) (U32(x) >= K1BASE && U32(x) < K2BASE)
#define IS_KSEGDM(x) (U32(x) >= K0BASE && U32(x) < K2BASE)
@@ -45,25 +43,25 @@
#define IS_KPTESEG(x) (U32(x) >= KPTE_SHDUBASE)
#define IS_KUSEG(x) (U32(x) < K0BASE)
-// TLB size constants
+/* TLB size constants */
#define NTLBENTRIES 31 /* entry 31 is reserved by rdb */
#define TLBHI_VPN2MASK 0xFFFFE000
#define TLBHI_VPN2SHIFT 13
#define TLBHI_PIDMASK 0xFF
#define TLBHI_PIDSHIFT 0
-#define TLBHI_NPID 255 // 255 to fit in 8 bits
+#define TLBHI_NPID 255 /* 255 to fit in 8 bits */
#define TLBLO_PFNMASK 0x3FFFFFC0
#define TLBLO_PFNSHIFT 6
-#define TLBLO_CACHMASK 0x38 // cache coherency algorithm
+#define TLBLO_CACHMASK 0x38 /* cache coherency algorithm */
#define TLBLO_CACHSHIFT 3
-#define TLBLO_UNCACHED 0x10 // not cached
-#define TLBLO_NONCOHRNT 0x18 // Cacheable non-coherent
-#define TLBLO_EXLWR 0x28 // Exclusive write
-#define TLBLO_D 0x4 // writeable
-#define TLBLO_V 0x2 // valid bit
-#define TLBLO_G 0x1 // global access bit
+#define TLBLO_UNCACHED 0x10 /* not cached */
+#define TLBLO_NONCOHRNT 0x18 /* Cacheable non-coherent */
+#define TLBLO_EXLWR 0x28 /* Exclusive write */
+#define TLBLO_D 0x4 /* writeable */
+#define TLBLO_V 0x2 /* valid bit */
+#define TLBLO_G 0x1 /* global access bit */
#define TLBINX_PROBE 0x80000000
#define TLBINX_INXMASK 0x3F
@@ -88,104 +86,104 @@
/*
* Status register
*/
-#define SR_CUMASK 0xF0000000 // coproc usable bits
-
-#define SR_CU3 0x80000000 // Coprocessor 3 usable
-#define SR_CU2 0x40000000 // Coprocessor 2 usable
-#define SR_CU1 0x20000000 // Coprocessor 1 usable
-#define SR_CU0 0x10000000 // Coprocessor 0 usable
-#define SR_RP 0x08000000 // Reduced power (quarter speed)
-#define SR_FR 0x04000000 // MIPS III FP register mode
-#define SR_RE 0x02000000 // Reverse endian
-#define SR_ITS 0x01000000 // Instruction trace support
-#define SR_BEV 0x00400000 // Use boot exception vectors
-#define SR_TS 0x00200000 // TLB shutdown
-#define SR_SR 0x00100000 // Soft reset occured
-#define SR_CH 0x00040000 // Cache hit for last 'cache' op
-#define SR_CE 0x00020000 // Create ECC
-#define SR_DE 0x00010000 // ECC of parity does not cause error
-
-// Interrupt enable bits
-// (NOTE: bits set to 1 enable the corresponding level interrupt)
-#define SR_IMASK 0x0000FF00 // Interrupt mask
-#define SR_IMASK8 0x00000000 // mask level 8
-#define SR_IMASK7 0x00008000 // mask level 7
-#define SR_IMASK6 0x0000C000 // mask level 6
-#define SR_IMASK5 0x0000E000 // mask level 5
-#define SR_IMASK4 0x0000F000 // mask level 4
-#define SR_IMASK3 0x0000F800 // mask level 3
-#define SR_IMASK2 0x0000FC00 // mask level 2
-#define SR_IMASK1 0x0000FE00 // mask level 1
-#define SR_IMASK0 0x0000FF00 // mask level 0
-
-#define SR_IBIT8 0x00008000 // bit level 8
-#define SR_IBIT7 0x00004000 // bit level 7
-#define SR_IBIT6 0x00002000 // bit level 6
-#define SR_IBIT5 0x00001000 // bit level 5
-#define SR_IBIT4 0x00000800 // bit level 4
-#define SR_IBIT3 0x00000400 // bit level 3
-#define SR_IBIT2 0x00000200 // bit level 2
-#define SR_IBIT1 0x00000100 // bit level 1
+#define SR_CUMASK 0xF0000000 /* coproc usable bits */
+
+#define SR_CU3 0x80000000 /* Coprocessor 3 usable */
+#define SR_CU2 0x40000000 /* Coprocessor 2 usable */
+#define SR_CU1 0x20000000 /* Coprocessor 1 usable */
+#define SR_CU0 0x10000000 /* Coprocessor 0 usable */
+#define SR_RP 0x08000000 /* Reduced power (quarter speed) */
+#define SR_FR 0x04000000 /* MIPS III FP register mode */
+#define SR_RE 0x02000000 /* Reverse endian */
+#define SR_ITS 0x01000000 /* Instruction trace support */
+#define SR_BEV 0x00400000 /* Use boot exception vectors */
+#define SR_TS 0x00200000 /* TLB shutdown */
+#define SR_SR 0x00100000 /* Soft reset occured */
+#define SR_CH 0x00040000 /* Cache hit for last 'cache' op */
+#define SR_CE 0x00020000 /* Create ECC */
+#define SR_DE 0x00010000 /* ECC of parity does not cause error */
+
+/* Interrupt enable bits */
+/* (NOTE: bits set to 1 enable the corresponding level interrupt) */
+#define SR_IMASK 0x0000FF00 /* Interrupt mask */
+#define SR_IMASK8 0x00000000 /* mask level 8 */
+#define SR_IMASK7 0x00008000 /* mask level 7 */
+#define SR_IMASK6 0x0000C000 /* mask level 6 */
+#define SR_IMASK5 0x0000E000 /* mask level 5 */
+#define SR_IMASK4 0x0000F000 /* mask level 4 */
+#define SR_IMASK3 0x0000F800 /* mask level 3 */
+#define SR_IMASK2 0x0000FC00 /* mask level 2 */
+#define SR_IMASK1 0x0000FE00 /* mask level 1 */
+#define SR_IMASK0 0x0000FF00 /* mask level 0 */
+
+#define SR_IBIT8 0x00008000 /* bit level 8 */
+#define SR_IBIT7 0x00004000 /* bit level 7 */
+#define SR_IBIT6 0x00002000 /* bit level 6 */
+#define SR_IBIT5 0x00001000 /* bit level 5 */
+#define SR_IBIT4 0x00000800 /* bit level 4 */
+#define SR_IBIT3 0x00000400 /* bit level 3 */
+#define SR_IBIT2 0x00000200 /* bit level 2 */
+#define SR_IBIT1 0x00000100 /* bit level 1 */
#define SR_IMASKSHIFT 8
-#define SR_KX 0x00000080 // extended-addr TLB vec in kernel
-#define SR_SX 0x00000040 // xtended-addr TLB vec supervisor
-#define SR_UX 0x00000020 // xtended-addr TLB vec in user mode
-#define SR_KSU_MASK 0x00000018 // mode mask
-#define SR_KSU_USR 0x00000010 // user mode
-#define SR_KSU_SUP 0x00000008 // supervisor mode
-#define SR_KSU_KER 0x00000000 // kernel mode
-#define SR_ERL 0x00000004 // Error level, 1=>cache error
-#define SR_EXL 0x00000002 // Exception level, 1=>exception
-#define SR_IE 0x00000001 // interrupt enable, 1=>enable
-
-// Cause Register
-#define CAUSE_BD 0x80000000 // Branch delay slot
-#define CAUSE_CEMASK 0x30000000 // coprocessor error
+#define SR_KX 0x00000080 /* extended-addr TLB vec in kernel */
+#define SR_SX 0x00000040 /* xtended-addr TLB vec supervisor */
+#define SR_UX 0x00000020 /* xtended-addr TLB vec in user mode */
+#define SR_KSU_MASK 0x00000018 /* mode mask */
+#define SR_KSU_USR 0x00000010 /* user mode */
+#define SR_KSU_SUP 0x00000008 /* supervisor mode */
+#define SR_KSU_KER 0x00000000 /* kernel mode */
+#define SR_ERL 0x00000004 /* Error level, 1=>cache error */
+#define SR_EXL 0x00000002 /* Exception level, 1=>exception */
+#define SR_IE 0x00000001 /* interrupt enable, 1=>enable */
+
+/* Cause Register */
+#define CAUSE_BD 0x80000000 /* Branch delay slot */
+#define CAUSE_CEMASK 0x30000000 /* coprocessor error */
#define CAUSE_CESHIFT 28
-// Interrupt pending bits
-#define CAUSE_IP8 0x00008000 // External level 8 pending - COMPARE
-#define CAUSE_IP7 0x00004000 // External level 7 pending - INT4
-#define CAUSE_IP6 0x00002000 // External level 6 pending - INT3
-#define CAUSE_IP5 0x00001000 // External level 5 pending - INT2
-#define CAUSE_IP4 0x00000800 // External level 4 pending - INT1
-#define CAUSE_IP3 0x00000400 // External level 3 pending - INT0
-#define CAUSE_SW2 0x00000200 // Software level 2 pending
-#define CAUSE_SW1 0x00000100 // Software level 1 pending
-
-#define CAUSE_IPMASK 0x0000FF00 // Pending interrupt mask
+/* Interrupt pending bits */
+#define CAUSE_IP8 0x00008000 /* External level 8 pending - COMPARE */
+#define CAUSE_IP7 0x00004000 /* External level 7 pending - INT4 */
+#define CAUSE_IP6 0x00002000 /* External level 6 pending - INT3 */
+#define CAUSE_IP5 0x00001000 /* External level 5 pending - INT2 */
+#define CAUSE_IP4 0x00000800 /* External level 4 pending - INT1 */
+#define CAUSE_IP3 0x00000400 /* External level 3 pending - INT0 */
+#define CAUSE_SW2 0x00000200 /* Software level 2 pending */
+#define CAUSE_SW1 0x00000100 /* Software level 1 pending */
+
+#define CAUSE_IPMASK 0x0000FF00 /* Pending interrupt mask */
#define CAUSE_IPSHIFT 8
-#define CAUSE_EXCMASK 0x0000007C // Cause code bits
+#define CAUSE_EXCMASK 0x0000007C /* Cause code bits */
#define CAUSE_EXCSHIFT 2
-// Cause register exception codes
+/* Cause register exception codes */
#define EXC_CODE(x) ((x) << 2)
-// Hardware exception codes
-#define EXC_INT EXC_CODE(0) // interrupt
-#define EXC_MOD EXC_CODE(1) // TLB mod
-#define EXC_RMISS EXC_CODE(2) // Read TLB Miss
-#define EXC_WMISS EXC_CODE(3) // Write TLB Miss
-#define EXC_RADE EXC_CODE(4) // Read Address Error
-#define EXC_WADE EXC_CODE(5) // Write Address Error
-#define EXC_IBE EXC_CODE(6) // Instruction Bus Error
-#define EXC_DBE EXC_CODE(7) // Data Bus Error
-#define EXC_SYSCALL EXC_CODE(8) // SYSCALL
-#define EXC_BREAK EXC_CODE(9) // BREAKpoint
-#define EXC_II EXC_CODE(10) // Illegal Instruction
-#define EXC_CPU EXC_CODE(11) // CoProcessor Unusable
-#define EXC_OV EXC_CODE(12) // OVerflow
-#define EXC_TRAP EXC_CODE(13) // Trap exception
-#define EXC_VCEI EXC_CODE(14) // Virt. Coherency on Inst. fetch
-#define EXC_FPE EXC_CODE(15) // Floating Point Exception
-#define EXC_WATCH EXC_CODE(23) // Watchpoint reference
-#define EXC_VCED EXC_CODE(31) // Virt. Coherency on data read
-
-// C0_PRID Defines
+/* Hardware exception codes */
+#define EXC_INT EXC_CODE(0) /* interrupt */
+#define EXC_MOD EXC_CODE(1) /* TLB mod */
+#define EXC_RMISS EXC_CODE(2) /* Read TLB Miss */
+#define EXC_WMISS EXC_CODE(3) /* Write TLB Miss */
+#define EXC_RADE EXC_CODE(4) /* Read Address Error */
+#define EXC_WADE EXC_CODE(5) /* Write Address Error */
+#define EXC_IBE EXC_CODE(6) /* Instruction Bus Error */
+#define EXC_DBE EXC_CODE(7) /* Data Bus Error */
+#define EXC_SYSCALL EXC_CODE(8) /* SYSCALL */
+#define EXC_BREAK EXC_CODE(9) /* BREAKpoint */
+#define EXC_II EXC_CODE(10) /* Illegal Instruction */
+#define EXC_CPU EXC_CODE(11) /* CoProcessor Unusable */
+#define EXC_OV EXC_CODE(12) /* OVerflow */
+#define EXC_TRAP EXC_CODE(13) /* Trap exception */
+#define EXC_VCEI EXC_CODE(14) /* Virt. Coherency on Inst. fetch */
+#define EXC_FPE EXC_CODE(15) /* Floating Point Exception */
+#define EXC_WATCH EXC_CODE(23) /* Watchpoint reference */
+#define EXC_VCED EXC_CODE(31) /* Virt. Coherency on data read */
+
+/* C0_PRID Defines */
#define C0_IMPMASK 0xFF00
#define C0_IMPSHIFT 8
#define C0_REVMASK 0xFF
@@ -193,106 +191,106 @@
#define C0_MAJREVSHIFT 4
#define C0_MINREVMASK 0xF
-// Coprocessor 0 operations
-#define C0_READI 0x1 // read ITLB entry addressed by C0_INDEX
-#define C0_WRITEI 0x2 // write ITLB entry addressed by C0_INDEX
-#define C0_WRITER 0x6 // write ITLB entry addressed by C0_RAND
-#define C0_PROBE 0x8 // probe for ITLB entry addressed by TLBHI
-#define C0_RFE 0x10 // restore for exception
-
-// 'cache' instruction definitions
-
-// Target cache
-#define CACH_PI 0x0 // specifies primary inst. cache
-#define CACH_PD 0x1 // primary data cache
-#define CACH_SI 0x2 // secondary instruction cache
-#define CACH_SD 0x3 // secondary data cache
-
-// Cache operations
-#define C_IINV 0x0 // index invalidate (inst, 2nd inst)
-#define C_IWBINV 0x0 // index writeback inval (d, sd)
-#define C_ILT 0x4 // index load tag (all)
-#define C_IST 0x8 // index store tag (all)
-#define C_CDX 0xC // create dirty exclusive (d, sd)
-#define C_HINV 0x10 // hit invalidate (all)
-#define C_HWBINV 0x14 // hit writeback inv. (d, sd)
-#define C_FILL 0x14 // fill (i)
-#define C_HWB 0x18 // hit writeback (i, d, sd)
-#define C_HSV 0x1C // hit set virt. (si, sd)
-
-// Cache size definitions
-#define ICACHE_SIZE 0x4000 // 16K
-#define ICACHE_LINESIZE 32 // 8 words
+/* Coprocessor 0 operations */
+#define C0_READI 0x1 /* read ITLB entry addressed by C0_INDEX */
+#define C0_WRITEI 0x2 /* write ITLB entry addressed by C0_INDEX */
+#define C0_WRITER 0x6 /* write ITLB entry addressed by C0_RAND */
+#define C0_PROBE 0x8 /* probe for ITLB entry addressed by TLBHI */
+#define C0_RFE 0x10 /* restore for exception */
+
+/* 'cache' instruction definitions */
+
+/* Target cache */
+#define CACH_PI 0x0 /* specifies primary inst. cache */
+#define CACH_PD 0x1 /* primary data cache */
+#define CACH_SI 0x2 /* secondary instruction cache */
+#define CACH_SD 0x3 /* secondary data cache */
+
+/* Cache operations */
+#define C_IINV 0x0 /* index invalidate (inst, 2nd inst) */
+#define C_IWBINV 0x0 /* index writeback inval (d, sd) */
+#define C_ILT 0x4 /* index load tag (all) */
+#define C_IST 0x8 /* index store tag (all) */
+#define C_CDX 0xC /* create dirty exclusive (d, sd) */
+#define C_HINV 0x10 /* hit invalidate (all) */
+#define C_HWBINV 0x14 /* hit writeback inv. (d, sd) */
+#define C_FILL 0x14 /* fill (i) */
+#define C_HWB 0x18 /* hit writeback (i, d, sd) */
+#define C_HSV 0x1C /* hit set virt. (si, sd) */
+
+/* Cache size definitions */
+#define ICACHE_SIZE 0x4000 /* 16K */
+#define ICACHE_LINESIZE 32 /* 8 words */
#define ICACHE_LINEMASK (ICACHE_LINESIZE - 1)
-#define DCACHE_SIZE 0x2000 // 8K
-#define DCACHE_LINESIZE 16 // 4 words
+#define DCACHE_SIZE 0x2000 /* 8K */
+#define DCACHE_LINESIZE 16 /* 4 words */
#define DCACHE_LINEMASK (DCACHE_LINESIZE - 1)
-// C0_CONFIG register definitions
-#define CONFIG_CM 0x80000000 // 1 == Master-Checker enabled
-#define CONFIG_EC 0x70000000 // System Clock ratio
-#define CONFIG_EC_1_1 0x6 // System Clock ratio 1 :1
-#define CONFIG_EC_3_2 0x7 // System Clock ratio 1.5 :1
-#define CONFIG_EC_2_1 0x0 // System Clock ratio 2 :1
-#define CONFIG_EC_3_1 0x1 // System Clock ratio 3 :1
-#define CONFIG_EP 0x0F000000 // Transmit Data Pattern
-#define CONFIG_SB 0x00C00000 // Secondary cache block size
-
-#define CONFIG_SS 0x00200000 // Split scache: 0 == I&D combined
-#define CONFIG_SW 0x00100000 // scache port: 0==128, 1==64
-#define CONFIG_EW 0x000C0000 // System Port width: 0==64, 1==32
-#define CONFIG_SC 0x00020000 // 0 -> 2nd cache present
-#define CONFIG_SM 0x00010000 // 0 -> Dirty Shared Coherency enable
-#define CONFIG_BE 0x00008000 // Endian-ness: 1 --> BE
-#define CONFIG_EM 0x00004000 // 1 -> ECC mode, 0 -> parity
-#define CONFIG_EB 0x00002000 // Block order:1->sequent,0->subblock
-
-#define CONFIG_IC 0x00000E00 // Primary Icache size
-#define CONFIG_DC 0x000001C0 // Primary Dcache size
-#define CONFIG_IB 0x00000020 // Icache block size
-#define CONFIG_DB 0x00000010 // Dcache block size
-#define CONFIG_CU 0x00000008 // Update on Store-conditional
-#define CONFIG_K0 0x00000007 // K0SEG Coherency algorithm
-
-#define CONFIG_UNCACHED 0x00000002 // K0 is uncached
+/* C0_CONFIG register definitions */
+#define CONFIG_CM 0x80000000 /* 1 == Master-Checker enabled */
+#define CONFIG_EC 0x70000000 /* System Clock ratio */
+#define CONFIG_EC_1_1 0x6 /* System Clock ratio 1 :1 */
+#define CONFIG_EC_3_2 0x7 /* System Clock ratio 1.5 :1 */
+#define CONFIG_EC_2_1 0x0 /* System Clock ratio 2 :1 */
+#define CONFIG_EC_3_1 0x1 /* System Clock ratio 3 :1 */
+#define CONFIG_EP 0x0F000000 /* Transmit Data Pattern */
+#define CONFIG_SB 0x00C00000 /* Secondary cache block size */
+
+#define CONFIG_SS 0x00200000 /* Split scache: 0 == I&D combined */
+#define CONFIG_SW 0x00100000 /* scache port: 0==128, 1==64 */
+#define CONFIG_EW 0x000C0000 /* System Port width: 0==64, 1==32 */
+#define CONFIG_SC 0x00020000 /* 0 -> 2nd cache present */
+#define CONFIG_SM 0x00010000 /* 0 -> Dirty Shared Coherency enable */
+#define CONFIG_BE 0x00008000 /* Endian-ness: 1 --> BE */
+#define CONFIG_EM 0x00004000 /* 1 -> ECC mode, 0 -> parity */
+#define CONFIG_EB 0x00002000 /* Block order:1->sequent,0->subblock */
+
+#define CONFIG_IC 0x00000E00 /* Primary Icache size */
+#define CONFIG_DC 0x000001C0 /* Primary Dcache size */
+#define CONFIG_IB 0x00000020 /* Icache block size */
+#define CONFIG_DB 0x00000010 /* Dcache block size */
+#define CONFIG_CU 0x00000008 /* Update on Store-conditional */
+#define CONFIG_K0 0x00000007 /* K0SEG Coherency algorithm */
+
+#define CONFIG_UNCACHED 0x00000002 /* K0 is uncached */
#define CONFIG_NONCOHRNT 0x00000003
#define CONFIG_COHRNT_EXLWR 0x00000005
-#define CONFIG_SB_SHFT 22 // shift SB to bit position 0
-#define CONFIG_IC_SHFT 9 // shift IC to bit position 0
-#define CONFIG_DC_SHFT 6 // shift DC to bit position 0
-#define CONFIG_BE_SHFT 15 // shift BE to bit position 0
-
-// C0_TAGLO definitions for setting/getting cache states and physaddr bits
-#define SADDRMASK 0xFFFFE000 // 31..13 -> scache paddr bits 35..17
-#define SVINDEXMASK 0x00000380 // 9..7: prim virt index bits 14..12
-#define SSTATEMASK 0x00001C00 // bits 12..10 hold scache line state
-#define SINVALID 0x00000000 // invalid --> 000 == state 0
-#define SCLEANEXCL 0x00001000 // clean exclusive --> 100 == state 4
-#define SDIRTYEXCL 0x00001400 // dirty exclusive --> 101 == state 5
-#define SECC_MASK 0x0000007F // low 7 bits are ecc for the tag
-#define SADDR_SHIFT 4 // shift STagLo (31..13) to 35..17
-
-#define PADDRMASK 0xFFFFFF00 // PTagLo31..8->prim paddr bits35..12
-#define PADDR_SHIFT 4 // roll bits 35..12 down to 31..8
-#define PSTATEMASK 0x00C0 // bits 7..6 hold primary line state
-#define PINVALID 0x0000 // invalid --> 000 == state 0
-#define PCLEANEXCL 0x0080 // clean exclusive --> 10 == state 2
-#define PDIRTYEXCL 0x00C0 // dirty exclusive --> 11 == state 3
-#define PPARITY_MASK 0x0001 // low bit is parity bit (even).
-
-// C0_CACHE_ERR definitions.
-#define CACHERR_ER 0x80000000 // 0: inst ref, 1: data ref
-#define CACHERR_EC 0x40000000 // 0: primary, 1: secondary
-#define CACHERR_ED 0x20000000 // 1: data error
-#define CACHERR_ET 0x10000000 // 1: tag error
-#define CACHERR_ES 0x08000000 // 1: external ref, e.g. snoo
-#define CACHERR_EE 0x04000000 // error on SysAD bus
-#define CACHERR_EB 0x02000000 // complicated, see spec.
-#define CACHERR_EI 0x01000000 // complicated, see spec.
-#define CACHERR_SIDX_MASK 0x003FFFF8 // secondary cache index
-#define CACHERR_PIDX_MASK 0x00000007 // primary cache index
-#define CACHERR_PIDX_SHIFT 12 // bits 2..0 are paddr14..12
+#define CONFIG_SB_SHFT 22 /* shift SB to bit position 0 */
+#define CONFIG_IC_SHFT 9 /* shift IC to bit position 0 */
+#define CONFIG_DC_SHFT 6 /* shift DC to bit position 0 */
+#define CONFIG_BE_SHFT 15 /* shift BE to bit position 0 */
+
+/* C0_TAGLO definitions for setting/getting cache states and physaddr bits */
+#define SADDRMASK 0xFFFFE000 /* 31..13 -> scache paddr bits 35..17 */
+#define SVINDEXMASK 0x00000380 /* 9..7: prim virt index bits 14..12 */
+#define SSTATEMASK 0x00001C00 /* bits 12..10 hold scache line state */
+#define SINVALID 0x00000000 /* invalid --> 000 == state 0 */
+#define SCLEANEXCL 0x00001000 /* clean exclusive --> 100 == state 4 */
+#define SDIRTYEXCL 0x00001400 /* dirty exclusive --> 101 == state 5 */
+#define SECC_MASK 0x0000007F /* low 7 bits are ecc for the tag */
+#define SADDR_SHIFT 4 /* shift STagLo (31..13) to 35..17 */
+
+#define PADDRMASK 0xFFFFFF00 /* PTagLo31..8->prim paddr bits35..12 */
+#define PADDR_SHIFT 4 /* roll bits 35..12 down to 31..8 */
+#define PSTATEMASK 0x00C0 /* bits 7..6 hold primary line state */
+#define PINVALID 0x0000 /* invalid --> 000 == state 0 */
+#define PCLEANEXCL 0x0080 /* clean exclusive --> 10 == state 2 */
+#define PDIRTYEXCL 0x00C0 /* dirty exclusive --> 11 == state 3 */
+#define PPARITY_MASK 0x0001 /* low bit is parity bit (even). */
+
+/* C0_CACHE_ERR definitions. */
+#define CACHERR_ER 0x80000000 /* 0: inst ref, 1: data ref */
+#define CACHERR_EC 0x40000000 /* 0: primary, 1: secondary */
+#define CACHERR_ED 0x20000000 /* 1: data error */
+#define CACHERR_ET 0x10000000 /* 1: tag error */
+#define CACHERR_ES 0x08000000 /* 1: external ref, e.g. snoo */
+#define CACHERR_EE 0x04000000 /* error on SysAD bus */
+#define CACHERR_EB 0x02000000 /* complicated, see spec. */
+#define CACHERR_EI 0x01000000 /* complicated, see spec. */
+#define CACHERR_SIDX_MASK 0x003FFFF8 /* secondary cache index */
+#define CACHERR_PIDX_MASK 0x00000007 /* primary cache index */
+#define CACHERR_PIDX_SHIFT 12 /* bits 2..0 are paddr14..12 */
/*
* R4000 family supports hardware watchpoints:
@@ -311,57 +309,88 @@
#define WATCHLO_VALIDMASK 0xFFFFFFFB
#define WATCHHI_VALIDMASK 0x0000000F
-// Coprocessor 0 registers
-#define C0_INX C_REG(0)
-#define C0_RAND C_REG(1)
-#define C0_ENTRYLO0 C_REG(2)
-#define C0_ENTRYLO1 C_REG(3)
-#define C0_CONTEXT C_REG(4)
-#define C0_PAGEMASK C_REG(5) // page mask
-#define C0_WIRED C_REG(6) // # wired entries in tlb
-#define C0_BADVADDR C_REG(8)
-#define C0_COUNT C_REG(9) // free-running counter
-#define C0_ENTRYHI C_REG(10)
-#define C0_COMPARE C_REG(11) // counter comparison reg.
-#define C0_SR C_REG(12)
-#define C0_CAUSE C_REG(13)
-#define C0_EPC C_REG(14)
-#define C0_PRID C_REG(15) // revision identifier
-#define C0_CONFIG C_REG(16) // hardware configuration
-#define C0_LLADDR C_REG(17) // load linked address
-#define C0_WATCHLO C_REG(18) // watchpoint
-#define C0_WATCHHI C_REG(19) // watchpoint
-#define C0_ECC C_REG(26) // S-cache ECC and primary parity
-#define C0_CACHE_ERR C_REG(27) // cache error status
-#define C0_TAGLO C_REG(28) // cache operations
-#define C0_TAGHI C_REG(29) // cache operations
-#define C0_ERROR_EPC C_REG(30) // ECC error prg. counter
-
-// floating-point status register
-#define C1_FPCSR C_REG(31)
-
-#define FPCSR_FS 0x01000000 // flush denorm to zero
-#define FPCSR_C 0x00800000 // condition bit
-#define FPCSR_CE 0x00020000 // cause: unimplemented operation
-#define FPCSR_CV 0x00010000 // cause: invalid operation
-#define FPCSR_CZ 0x00008000 // cause: division by zero
-#define FPCSR_CO 0x00004000 // cause: overflow
-#define FPCSR_CU 0x00002000 // cause: underflow
-#define FPCSR_CI 0x00001000 // cause: inexact operation
-#define FPCSR_EV 0x00000800 // enable: invalid operation
-#define FPCSR_EZ 0x00000400 // enable: division by zero
-#define FPCSR_EO 0x00000200 // enable: overflow
-#define FPCSR_EU 0x00000100 // enable: underflow
-#define FPCSR_EI 0x00000080 // enable: inexact operation
-#define FPCSR_FV 0x00000040 // flag: invalid operation
-#define FPCSR_FZ 0x00000020 // flag: division by zero
-#define FPCSR_FO 0x00000010 // flag: overflow
-#define FPCSR_FU 0x00000008 // flag: underflow
-#define FPCSR_FI 0x00000004 // flag: inexact operation
-#define FPCSR_RM_MASK 0x00000003 // rounding mode mask
-#define FPCSR_RM_RN 0x00000000 // round to nearest
-#define FPCSR_RM_RZ 0x00000001 // round to zero
-#define FPCSR_RM_RP 0x00000002 // round to positive infinity
-#define FPCSR_RM_RM 0x00000003 // round to negative infinity
+/* Coprocessor 0 registers */
+#ifdef _LANGUAGE_C
+#define C0_INX 0
+#define C0_RAND 1
+#define C0_ENTRYLO0 2
+#define C0_ENTRYLO1 3
+#define C0_CONTEXT 4
+#define C0_PAGEMASK 5 /* page mask */
+#define C0_WIRED 6 /* # wired entries in tlb */
+#define C0_BADVADDR 8
+#define C0_COUNT 9 /* free-running counter */
+#define C0_ENTRYHI 10
+#define C0_COMPARE 11 /* counter comparison reg. */
+#define C0_SR 12
+#define C0_CAUSE 13
+#define C0_EPC 14
+#define C0_PRID 15 /* revision identifier */
+#define C0_CONFIG 16 /* hardware configuration */
+#define C0_LLADDR 17 /* load linked address */
+#define C0_WATCHLO 18 /* watchpoint */
+#define C0_WATCHHI 19 /* watchpoint */
+#define C0_ECC 26 /* S-cache ECC and primary parity */
+#define C0_CACHE_ERR 27 /* cache error status */
+#define C0_TAGLO 28 /* cache operations */
+#define C0_TAGHI 29 /* cache operations */
+#define C0_ERROR_EPC 30 /* ECC error prg. counter */
+#else
+#define C0_INX $0
+#define C0_RAND $1
+#define C0_ENTRYLO0 $2
+#define C0_ENTRYLO1 $3
+#define C0_CONTEXT $4
+#define C0_PAGEMASK $5 /* page mask */
+#define C0_WIRED $6 /* # wired entries in tlb */
+#define C0_BADVADDR $8
+#define C0_COUNT $9 /* free-running counter */
+#define C0_ENTRYHI $10
+#define C0_COMPARE $11 /* counter comparison reg. */
+#define C0_SR $12
+#define C0_CAUSE $13
+#define C0_EPC $14
+#define C0_PRID $15 /* revision identifier */
+#define C0_CONFIG $16 /* hardware configuration */
+#define C0_LLADDR $17 /* load linked address */
+#define C0_WATCHLO $18 /* watchpoint */
+#define C0_WATCHHI $19 /* watchpoint */
+#define C0_ECC $26 /* S-cache ECC and primary parity */
+#define C0_CACHE_ERR $27 /* cache error status */
+#define C0_TAGLO $28 /* cache operations */
+#define C0_TAGHI $29 /* cache operations */
+#define C0_ERROR_EPC $30 /* ECC error prg. counter */
+#endif
+
+/* floating-point status register */
+#ifdef _LANGUAGE_C
+#define C1_FPCSR 31
+#else
+#define C1_FPCSR $31
+#endif
+
+#define FPCSR_FS 0x01000000 /* flush denorm to zero */
+#define FPCSR_C 0x00800000 /* condition bit */
+#define FPCSR_CE 0x00020000 /* cause: unimplemented operation */
+#define FPCSR_CV 0x00010000 /* cause: invalid operation */
+#define FPCSR_CZ 0x00008000 /* cause: division by zero */
+#define FPCSR_CO 0x00004000 /* cause: overflow */
+#define FPCSR_CU 0x00002000 /* cause: underflow */
+#define FPCSR_CI 0x00001000 /* cause: inexact operation */
+#define FPCSR_EV 0x00000800 /* enable: invalid operation */
+#define FPCSR_EZ 0x00000400 /* enable: division by zero */
+#define FPCSR_EO 0x00000200 /* enable: overflow */
+#define FPCSR_EU 0x00000100 /* enable: underflow */
+#define FPCSR_EI 0x00000080 /* enable: inexact operation */
+#define FPCSR_FV 0x00000040 /* flag: invalid operation */
+#define FPCSR_FZ 0x00000020 /* flag: division by zero */
+#define FPCSR_FO 0x00000010 /* flag: overflow */
+#define FPCSR_FU 0x00000008 /* flag: underflow */
+#define FPCSR_FI 0x00000004 /* flag: inexact operation */
+#define FPCSR_RM_MASK 0x00000003 /* rounding mode mask */
+#define FPCSR_RM_RN 0x00000000 /* round to nearest */
+#define FPCSR_RM_RZ 0x00000001 /* round to zero */
+#define FPCSR_RM_RP 0x00000002 /* round to positive infinity */
+#define FPCSR_RM_RM 0x00000003 /* round to negative infinity */
#endif
diff --git a/include/ultra64/asm.h b/include/ultra64/asm.h
index 2a2536bdaa..02ef26e985 100644
--- a/include/ultra64/asm.h
+++ b/include/ultra64/asm.h
@@ -6,55 +6,104 @@
#define _MIPS_ISA_MIPS2 2
#define _MIPS_ISA_MIPS3 3
#define _MIPS_ISA_MIPS4 4
+
+#define _MIPS_SIM_ABI32 1 /* MIPS MSIG calling convention */
+#define _MIPS_SIM_NABI32 2 /* MIPS new 32-bit abi */
+ /* NABI32 is 64bit calling convention but 32bit type sizes) */
+#define _MIPS_SIM_ABI64 3 /* MIPS 64 calling convention */
#endif
#ifndef _LANGUAGE_C
+#ifdef __GNUC__
+#define TYPE(x, t) .type x, @t
+#define SIZE(x) .size x, . - x
+#else
+#define TYPE(x, t)
+#define SIZE(x)
+#endif
+
#define LEAF(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @function ;\
+ TYPE(x, function) ;\
+ .ent x, 0 ;\
x: ;\
- .ent x, 0 ;\
- .frame $sp, 0, $ra
+ .frame sp, 0, ra
#define XLEAF(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @function ;\
- x: ;\
- .aent x, 0
+ TYPE(x, function) ;\
+ .aent x, 0 ;\
+ x:
#define NESTED(x, fsize, ra) \
.globl x ;\
+ .ent x, 0 ;\
x: ;\
- .ent x, 0 ;\
- .frame $sp, fsize, ra
+ .frame sp, fsize, ra
#define XNESTED(x) \
.globl x ;\
- x: ;\
- .aent x, 0
+ .aent x, 0 ;\
+ x:
#define END(x) \
- .size x, . - x ;\
+ SIZE(x) ;\
.end x
-#define IMPORT(x, size) \
- .extern x, size
-
#define EXPORT(x) \
.globl x ;\
x:
+#ifdef __sgi
+#define IMPORT(sym, size) \
+ .extern sym, size
+#else
+#define IMPORT(sym, size)
+#endif
+
#define DATA(x) \
- .balign 4 ;\
+ .align 2 ;\
.globl x ;\
- .type x, @object ;\
+ TYPE(x, object) ;\
x:
#define ENDDATA(x) \
- .size x, . - x
+ SIZE(x)
+
+#define MFC0(dst, src) \
+ .set noreorder; mfc0 dst, src; .set reorder
+#define MTC0(dst, src) \
+ .set noreorder; mtc0 dst, src; .set reorder
+
+#define CFC1(dst, src) \
+ .set noreorder; cfc1 dst, src; .set reorder
+#define CTC1(src, dst) \
+ .set noreorder; ctc1 src, dst; .set reorder
+
+#define NOP \
+ .set noreorder; nop; .set reorder
+
+#define TLBWI \
+ .set noreorder; tlbwi; .set reorder
+
+#define TLBR \
+ .set noreorder; tlbr; .set reorder
+
+#define TLBP \
+ .set noreorder; tlbp; .set reorder
+
+#ifndef __GNUC__
+#define ABS(x, y) \
+ .globl x; \
+ x = y
+#else
+#define ABS(x, y) \
+ .globl x; \
+ .set x, y
+#endif
#endif
@@ -62,11 +111,11 @@
* Stack Alignment
*/
#if (_MIPS_SIM == _ABIO32)
-#define NARGSAVE 4 // space for 4 args must be allocated
+#define NARGSAVE 4 /* space for 4 args must be allocated */
#define ALSZ (8-1)
#define ALMASK ~(8-1)
#elif (_MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64)
-#define NARGSAVE 0 // no caller responsibilities
+#define NARGSAVE 0 /* no caller responsibilities */
#define ALSZ (16-1)
#define ALMASK ~(16-1)
#endif
diff --git a/include/ultra64/bbskapi.h b/include/ultra64/bbskapi.h
new file mode 100644
index 0000000000..7918975475
--- /dev/null
+++ b/include/ultra64/bbskapi.h
@@ -0,0 +1,272 @@
+/**
+ * @file bbskapi.h
+ *
+ * This file contains the external API for the iQue Player's Secure Kernel Calls.
+ *
+ * Applications require permission to call particular Secure Kernel Calls, defined in the associated Ticket.
+ * Most are not callable by games.
+ */
+#ifndef BB_SKAPI_H
+#define BB_SKAPI_H
+
+#include "ultratypes.h"
+
+#define SKC_OK 0
+#define SKC_RECRYPT_INVALID 1
+#define SKC_RECRYPT_2 2 // Complete?
+#define SKC_RECRYPT_3 3 // Partial?
+#define SKC_RECRYPT_4 4 // Beginning?
+#define SKC_INVALID_ARGS -1
+#define SKC_INVALID_TSRL -2
+#define SKC_INVALID_CARL -3
+#define SKC_INVALID_CPRL -4
+#define SKC_INVALID_CERT -9
+#define SKC_NO_PERMISSION -11
+
+typedef struct BbAppLaunchCrls BbAppLaunchCrls;
+typedef struct BbCertBase BbCertBase;
+typedef struct BbEccSig BbEccSig;
+typedef struct BbRecryptList BbRecryptList;
+typedef struct BbShaHash BbShaHash;
+typedef struct BbTicketBundle BbTicketBundle;
+
+/**
+ * Retrieves the console's unique BBID.
+ *
+ * @param bbId Location to write the BBID to. Must be a pointer to cached DRAM with 4-byte alignment.
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_INVALID_ARGS If the supplied pointer is not valid.
+ * SKC_OK Otherwise.
+ */
+s32 skGetId(u32* bbId);
+
+/**
+ * Prepares to launch an application.
+ * The provided ticket bundle is verified and made the active ticket bundle.
+ * The AES decryption hardware is prepared.
+ *
+ * @param bundle Ticket Bundle associated with this application.
+ * @param crls Application Certificate Revocation Lists to check when verifying the ticket bundle.
+ * The ticket bundle must be signed by the Root signature without going through any
+ * revoked certificates.
+ * @param recryptList System Recrypt List (encrypted and digitally signed)
+ * @return
+ * SKC_INVALID_ARGS If any inputs are or contain invalid pointers,
+ * or the ticket is not for this console,
+ * or the ticket is for a trial that has expired.
+ * SKC_INVALID_TSRL If the provided TSRL revocation list is invalid.
+ * SKC_INVALID_CARL If the provided CARL revocation list is invalid.
+ * SKC_INVALID_CPRL If the provided CPRL revocation list is invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_RECRYPT_3 If the recrypt state for this app is not in an acceptable state to be launched.
+ * SKC_RECRYPT_4 If the recrypt state for this app is not in an acceptable state to be launched.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skLaunchSetup(BbTicketBundle* bundle, BbAppLaunchCrls* crls, BbRecryptList* recryptList);
+
+/**
+ * Launches a prepared application that is assumed to have been loaded into memory at the entrypoint between calling
+ * skLaunchSetup and calling this. skLaunchSetup must have been called prior to set the active ticket bundle.
+ *
+ * @param entrypoint The entrypoint address of the app to launch.
+ *
+ * @return
+ * SKC_INVALID_ARGS If the entrypoint is an invalid pointer,
+ * or if content failed a hash check for non-recrypted apps,
+ * or if the content is an expired trial.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * @note Does not return if the call is successful.
+ */
+s32 skLaunch(void* entrypoint);
+
+/**
+ * Verifies whether a provided Recrypt List is valid.
+ *
+ * @param recryptList Pointer to the (encrypted and digitally signed) recrypt list to verify.
+ * @return
+ * SKC_OK If the recrypt list is valid
+ * SKC_INVALID_ARGS If the recrypt list is invalid
+ * (e.g. contains invalid pointers or its ECDSA signature fails to verify)
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skRecryptListValid(BbRecryptList* recryptList);
+
+/**
+ * Begins a new recryption task. Content downloaded is initially encrypted with the Common Key but may be re-encrypted
+ * with a new randomly generated AES key if the recrypt flag is set in the content metadata. Like with skLaunchSetup,
+ * the provided ticket bundle is first verified before being made the active ticket bundle.
+ *
+ * @param bundle The ticket bundle associated with the content that will be recrypted.
+ * @param crls Application Certificate Revocation Lists to check when verifying the ticket bundle.
+ * The ticket bundle must be signed by the Root signature without going through any
+ * revoked certificates.
+ * @param recryptList The recrypt list that the AES key will be saved to, after being encrypted with the
+ * console-specific recrypt list key.
+ * @return
+ * SKC_RECRYPT_INVALID If called on a ticket bundle that does not have the recrypt flag set.
+ * SKC_INVALID_ARGS If any inputs are or contain invalid pointers,
+ * or the ticket is not for this console,
+ * or the ticket is for a trial that has expired.
+ * SKC_INVALID_TSRL If the provided TSRL revocation list is invalid.
+ * SKC_INVALID_CARL If the provided CARL revocation list is invalid.
+ * SKC_INVALID_CPRL If the provided CPRL revocation list is invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * Otherwise, one of SKC_RECRYPT_* will be returned communicating the initial state of the recryption process.
+ */
+s32 skRecryptBegin(BbTicketBundle* bundle, BbAppLaunchCrls* crls, BbRecryptList* recryptList);
+
+/**
+ * Recrypts the provided data, using the previously set context.
+ * Must be called following skRecryptBegin.
+ *
+ * @param buf Pointer to app content to encrypt and hash.
+ * @param size Amount of data to process in this buffer.
+ * @return
+ * SKC_INVALID_ARGS If the provided buffer is not fully contained in RAM or is otherwise invalid.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skRecryptData(u8* buf, u32 size);
+
+/**
+ * Resumes a partially-complete recryption. The last chunk of successfully-recrypted data must be provided in order to
+ * set the AES-128-CBC Initialization Vector to continue recryption of the next chunk.
+ * Must be called following skRecryptBegin.
+ *
+ * @param buf Pointer to last chunk of successfully-recrypted content.
+ * @param size Amount of data available.
+ * @return
+ * SKC_INVALID_ARGS If the provided buffer is not fully contained in RAM or is otherwise invalid.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skRecryptComputeState(u8* buf, u32 size);
+
+/**
+ * Concludes the recryption process. The SHA-1 hash of the content, computed during recryption, is checked against the
+ * hash in the active ticket bundle; if it passes, the recrypt list entry for the active content is updated to indicate
+ * that recryption is complete and was successful.
+ *
+ * @param recryptList The (encrypted and digitally signed) recrypt list to update.
+ * @return
+ * SKC_OK If recryption succeeded.
+ * SKC_INVALID_ARGS If recryption failed (e.g. if the hash of the content did not match the hash in the ticket bundle)
+ * or if the provided recrypt list is invalid or cannot find the entry for the content.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skRecryptEnd(BbRecryptList* recryptList);
+
+/**
+ * Generates a digital signature for the provided SHA-1 hash (treated as a message) using the Elliptic Curve Digital
+ * Signature Algorithm (ECDSA) on the curve sect233r1 with the console's ECDSA Private Key. Appends an identity of 1 to
+ * the end of the message prior to signing.
+ *
+ * @param hash The SHA-1 hash to sign.
+ * @param outSignature The resulting ECDSA digital signature.
+ * @return
+ * SKC_INVALID_ARGS If either of the arguments is an invalid pointer.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skSignHash(BbShaHash* hash, BbEccSig* outSignature);
+
+/**
+ * Verifies a SHA-1 hash (treated as a message) against a digital signature using either the Elliptic Curve Digital
+ * Signature Algorithm (ECDSA) or the RSA Digital Signature Algorithm. For RSA, either 2048-bit or 4096-bit signatures
+ * can be recognized.
+ *
+ * For verifying self-signed (e.g. via skSignHash) ECDSA signatures the certificate chain and revocation lists are not
+ * required and may be passed as NULL, the public key is the console's own ECDSA public key. For verifying other types
+ * of signatures, a valid certificate chain and certificate revocation lists must be provided, in which case the
+ * signature must be signed by the Root certificate without going through any revoked certificates.
+ *
+ * This can only verify hashes signed with an identity of 1, such as those signed via skSignHash.
+ *
+ * @param hash The SHA-1 hash to check the signature of.
+ * @param signature The signature to compare against. May be an ECDSA, RSA2048 or RSA4096 signature.
+ * @param certChain Certificate Chain, NULL-terminated list of certificate pointers.
+ * Not required for self-signed ECDSA signatures and must be NULL in that case.
+ * Should not be more than 5 certificates long.
+ * Should end on the Root signature.
+ * @param crls Certificate Revocation Lists to check certificates against. Not required for self-signed ECDSA signatures.
+ * @return
+ * SKC_OK If the hash was successfully verified against the signature.
+ * SKC_INVALID_ARGS If any arguments are invalid pointers,
+ * or the hash could not be verified against the digital signature,
+ * or the certificate chain was invalid,
+ * or if any certificate revocation lists were invalid.
+ * SKC_INVALID_CERT If a digital certificate was revoked by one of the revocation lists.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skVerifyHash(BbShaHash* hash, u32* signature, BbCertBase** certChain, BbAppLaunchCrls* crls);
+
+/**
+ * Retrieves the consumption counters for all currently-tracked applications and the Ticket ID (TID) Window.
+ *
+ * The TID Window determines the TID for the first counter (cc[0]), the other counters (cc[i]) are associated with
+ * tidWindow + i.
+ *
+ * The consumption counters track either the number of minutes that a trial app has been played for, or the number of
+ * times a trial app has been launched.
+ *
+ * @param tidWindow The location to save the TID window to.
+ * @param cc An array of 26 u16s to save the consumption counters into.
+ * @return
+ * SKC_INVALID_ARGS If either pointer is invalid or there is not enough room to save all the consumption counters.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ */
+s32 skGetConsumption(u16* tidWindow, u16 cc[26]);
+
+/**
+ * Increments the Ticket ID Window by 1 and moves all consumption counters down by 1 slot to match the new window. The
+ * counter previously at position 0 is forgotten.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_INVALID_ARGS If the resulting state could not be saved internally.
+ * SKC_OK If success.
+ */
+s32 skAdvanceTicketWindow(void);
+
+/**
+ * Overrides the trial limit and trial type stored in the currently loaded ticket.
+ *
+ * @param limit The new trial limit. Either a length of time or the number of allowed launches, depending on trial type.
+ * @param code The new trial type
+ * 0 = Time-limited in minutes, call skKeepAlive periodically
+ * 1 = Limited by number of launches
+ * 2 = Time-limited in minutes, no need to call skKeepAlive (TOVERIFY)
+ * @return
+ * SKC_OK If success.
+ * SKC_INVALID_ARGS If no ticket is currently loaded.
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ */
+s32 skSetLimit(u16 limit, u16 code);
+
+/**
+ * Returns to the system menu.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * @note Does not return if called with permission.
+ */
+s32 skExit(void);
+
+/**
+ * Keeps trial applications alive.
+ *
+ * The hardware trial timer does not have a very long period so must be refreshed periodically by calling this function.
+ * This function updates the timer and checks for an expiry.
+ *
+ * @return
+ * SKC_NO_PERMISSION If called with insufficient permission.
+ * SKC_OK Otherwise.
+ * @note This function may not return if it detects the trial has expired.
+ */
+s32 skKeepAlive(void);
+
+#endif
diff --git a/include/ultra64/bcp.h b/include/ultra64/bcp.h
new file mode 100644
index 0000000000..027fecf3f6
--- /dev/null
+++ b/include/ultra64/bcp.h
@@ -0,0 +1,193 @@
+#ifndef BCP_H
+#define BCP_H
+
+#include "rcp.h"
+
+/******************************************************************************
+ * Additional MIPS Interface (MI) Registers
+ */
+
+/**
+ * Accesses to this register outside of Secure Mode cause an NMI to transfer control
+ * to the Secure Kernel.
+ *
+ * [25] ?: System software writes to this bit when launching an app or game
+ * [24] SK RAM Access: Set to 1 to enable access to 0x8000 bytes at 0x1FC40000
+ * [7] Secure Trap Cause: Memory card removed
+ * [6] Secure Trap Cause: Power button pressed
+ * [5] Secure Trap Cause: MI Error
+ * [4] Secure Trap Cause: PI Error
+ * [3] Secure Trap Cause: Timer expired
+ * [2] Secure Trap Cause: Syscall via read of this register outside of secure mode
+ * [1] Boot ROM Swap: 0 = SK mapped at 0x1FC00000, Boot ROM mapped at 0x1FC20000
+ * 1 = Boot ROM mapped at 0x1FC00000, SK mapped at 0x1FC20000
+ * [0] Secure Mode: 0 = not in secure mode
+ * 1 = in secure mode
+ */
+#define MI_SECURE_EXCEPTION_REG (MI_BASE_REG + 0x14)
+
+/**
+ * Read:
+ * [25] MD (active, 1 if card is currently disconnected else 0)
+ * [24] Power Button (active, 1 if button is currently pressed else 0)
+ * [13] MD (pending interrupt)
+ * [12] Power Button (pending interrupt)
+ * [11] USB1
+ * [10] USB0
+ * [ 9] PI_ERR
+ * [ 8] IDE
+ * [ 7] AES
+ * [ 6] FLASH
+ * [ 5] DP
+ * [ 4] PI
+ * [ 3] VI
+ * [ 2] AI
+ * [ 1] SI
+ * [ 0] SP
+ *
+ * Write:
+ * [13] Clear MD Interrupt
+ */
+#define MI_EX_INTR_REG (MI_BASE_REG + 0x38)
+
+/*
+ * MI_EX_INTR_REG: read bits
+ */
+#define MI_EX_INTR_SP (1 << 0)
+#define MI_EX_INTR_SI (1 << 1)
+#define MI_EX_INTR_AI (1 << 2)
+#define MI_EX_INTR_VI (1 << 3)
+#define MI_EX_INTR_PI (1 << 4)
+#define MI_EX_INTR_DP (1 << 5)
+#define MI_EX_INTR_FLASH (1 << 6)
+#define MI_EX_INTR_AES (1 << 7)
+#define MI_EX_INTR_IDE (1 << 8)
+#define MI_EX_INTR_PI_ERR (1 << 9)
+#define MI_EX_INTR_USB0 (1 << 10)
+#define MI_EX_INTR_USB1 (1 << 11)
+#define MI_EX_INTR_PWR_BTN (1 << 12)
+#define MI_EX_INTR_MD (1 << 13)
+#define MI_EX_INTR_PWR_BTN_PRESSED (1 << 24) /* updated in real-time, unrelated to interrupt */
+#define MI_EX_INTR_CARD_NOT_PRESENT (1 << 25) /* updated in real-time, unrelated to interrupt */
+
+#define MI_EX_INTR_ALL \
+ (MI_EX_INTR_FLASH | MI_EX_INTR_AES | MI_EX_INTR_IDE | MI_EX_INTR_PI_ERR | \
+ MI_EX_INTR_USB0 | MI_EX_INTR_USB1 | MI_EX_INTR_PWR_BTN | MI_EX_INTR_MD)
+
+/*
+ * MI_EX_INTR_REG: write bits
+ */
+#define MI_EX_INTR_CLR_MD (1 << 13)
+
+/**
+ * Write:
+ * [27:26] Set/Clear MD
+ * [25:24] Set/Clear BUTTON
+ * [23:22] Set/Clear USB1
+ * [21:20] Set/Clear USB0
+ * [19:18] Set/Clear PI_ERR
+ * [17:16] Set/Clear IDE
+ * [15:14] Set/Clear AES
+ * [13:12] Set/Clear FLASH
+ * [11:10] Set/Clear DP
+ * [ 9: 8] Set/Clear PI
+ * [ 7: 6] Set/Clear VI
+ * [ 5: 4] Set/Clear AI
+ * [ 3: 2] Set/Clear SI
+ * [ 1: 0] Set/Clear SP
+ *
+ * Read:
+ * [13] MD
+ * [12] BUTTON
+ * [11] USB1
+ * [10] USB0
+ * [ 9] PI_ERR
+ * [ 8] IDE
+ * [ 7] AES
+ * [ 6] FLASH
+ * [ 5] DP
+ * [ 4] PI
+ * [ 3] VI
+ * [ 2] AI
+ * [ 1] SI
+ * [ 0] SP
+ */
+#define MI_EX_INTR_MASK_REG (MI_BASE_REG + 0x3C)
+
+/*
+ * MI_EX_INTR_MASK_REG: write bits
+ */
+#define MI_EX_INTR_MASK_CLR_SP (1 << 0) /* clear SP mask */
+#define MI_EX_INTR_MASK_SET_SP (1 << 1) /* set SP mask */
+#define MI_EX_INTR_MASK_CLR_SI (1 << 2) /* clear SI mask */
+#define MI_EX_INTR_MASK_SET_SI (1 << 3) /* set SI mask */
+#define MI_EX_INTR_MASK_CLR_AI (1 << 4) /* clear AI mask */
+#define MI_EX_INTR_MASK_SET_AI (1 << 5) /* set AI mask */
+#define MI_EX_INTR_MASK_CLR_VI (1 << 6) /* clear VI mask */
+#define MI_EX_INTR_MASK_SET_VI (1 << 7) /* set VI mask */
+#define MI_EX_INTR_MASK_CLR_PI (1 << 8) /* clear PI mask */
+#define MI_EX_INTR_MASK_SET_PI (1 << 9) /* set PI mask */
+#define MI_EX_INTR_MASK_CLR_DP (1 << 10) /* clear DP mask */
+#define MI_EX_INTR_MASK_SET_DP (1 << 11) /* set DP mask */
+#define MI_EX_INTR_MASK_CLR_FLASH (1 << 12) /* clear FLASH mask */
+#define MI_EX_INTR_MASK_SET_FLASH (1 << 13) /* set FLASH mask */
+#define MI_EX_INTR_MASK_CLR_AES (1 << 14) /* clear AES mask */
+#define MI_EX_INTR_MASK_SET_AES (1 << 15) /* set AES mask */
+#define MI_EX_INTR_MASK_CLR_IDE (1 << 16) /* clear IDE mask */
+#define MI_EX_INTR_MASK_SET_IDE (1 << 17) /* set IDE mask */
+#define MI_EX_INTR_MASK_CLR_PI_ERR (1 << 18) /* clear PI_ERR mask */
+#define MI_EX_INTR_MASK_SET_PI_ERR (1 << 19) /* set PI_ERR mask */
+#define MI_EX_INTR_MASK_CLR_USB0 (1 << 20) /* clear USB0 mask */
+#define MI_EX_INTR_MASK_SET_USB0 (1 << 21) /* set USB0 mask */
+#define MI_EX_INTR_MASK_CLR_USB1 (1 << 22) /* clear USB1 mask */
+#define MI_EX_INTR_MASK_SET_USB1 (1 << 23) /* set USB1 mask */
+#define MI_EX_INTR_MASK_CLR_PWR_BTN (1 << 24) /* clear PWR_BTN mask */
+#define MI_EX_INTR_MASK_SET_PWR_BTN (1 << 25) /* set PWR_BTN mask */
+#define MI_EX_INTR_MASK_CLR_MD (1 << 26) /* clear MD mask */
+#define MI_EX_INTR_MASK_SET_MD (1 << 27) /* set MD mask */
+
+/*
+ * MI_EX_INTR_MASK_REG: read bits
+ */
+#define MI_EX_INTR_MASK_SP (1 << 0) /* SP intr mask */
+#define MI_EX_INTR_MASK_SI (1 << 1) /* SI intr mask */
+#define MI_EX_INTR_MASK_AI (1 << 2) /* AI intr mask */
+#define MI_EX_INTR_MASK_VI (1 << 3) /* VI intr mask */
+#define MI_EX_INTR_MASK_PI (1 << 4) /* PI intr mask */
+#define MI_EX_INTR_MASK_DP (1 << 5) /* DP intr mask */
+#define MI_EX_INTR_MASK_FLASH (1 << 6) /* FLASH intr mask */
+#define MI_EX_INTR_MASK_AES (1 << 7) /* AES intr mask */
+#define MI_EX_INTR_MASK_IDE (1 << 8) /* IDE intr mask */
+#define MI_EX_INTR_MASK_PI_ERR (1 << 9) /* PI_ERR intr mask */
+#define MI_EX_INTR_MASK_USB0 (1 << 10) /* USB0 intr mask */
+#define MI_EX_INTR_MASK_USB1 (1 << 11) /* USB1 intr mask */
+#define MI_EX_INTR_MASK_PWR_BTN (1 << 12) /* PWR_BTN intr mask */
+#define MI_EX_INTR_MASK_MD (1 << 13) /* MD intr mask */
+
+/******************************************************************************
+ * Additional Parallel Interface (PI) Registers
+ */
+
+/**
+ * Write:
+ * [31] Execute command after write
+ * [30] Interrupt when done
+ * [29:24] ?
+ * [23:16] NAND Command
+ * [15] ?
+ * [14] Buffer Select
+ * [13:12] Device Select
+ * [11] Do Error Correction
+ * [10] NAND Command is Multi-Cycle
+ * [ 9: 0] Data Transfer Length in Bytes
+ *
+ * Writing 0 to this register clears the interrupt
+ *
+ * Read:
+ * [31] Busy
+ * [11] Single-Bit Error Corrected
+ * [10] Double-Bit Error Uncorrectable
+ */
+#define PI_NAND_CTRL_REG (PI_BASE_REG + 0x48)
+
+#endif
diff --git a/include/ultra64/exception.h b/include/ultra64/exception.h
index 886a3b9096..d4368da166 100644
--- a/include/ultra64/exception.h
+++ b/include/ultra64/exception.h
@@ -1,7 +1,7 @@
#ifndef ULTRA64_EXCEPTION_H
#define ULTRA64_EXCEPTION_H
-// Interrupt masks
+/* Interrupt masks */
#define OS_IM_NONE 0x00000001
#define OS_IM_RCP 0x00000401
#define OS_IM_SW1 0x00000501
@@ -23,7 +23,7 @@
#define RCP_IMASK 0x003F0000
#define RCP_IMASKSHIFT 16
-// OSHWIntr values
+/* OSHWIntr values */
#define OS_INTR_CART 1
#ifdef _LANGUAGE_C
@@ -51,11 +51,11 @@ extern __osHwInt __osHwIntTable[];
#else
-// __osHwInt struct member offsets
+/* __osHwInt struct member offsets */
#define HWINT_CALLBACK 0x00
#define HWINT_SP 0x04
-// __osHwInt struct size
+/* __osHwInt struct size */
#define HWINT_SIZE 0x8
#endif
diff --git a/include/ultra64/libc.h b/include/ultra64/libc.h
index e71cb879d7..3480f101ad 100644
--- a/include/ultra64/libc.h
+++ b/include/ultra64/libc.h
@@ -5,7 +5,7 @@
void osSyncPrintf(const char* fmt, ...);
-#ifdef __GNUC__
+#if defined(__GNUC__) && defined(NON_MATCHING)
void bzero(void* __s, unsigned int __n);
int bcmp(const void* __sl, const void* __s2, unsigned int __n);
void bcopy(const void* __src, void* __dest, unsigned int __n);
diff --git a/include/ultra64/message.h b/include/ultra64/message.h
index bf93c524c9..dc89dc48ed 100644
--- a/include/ultra64/message.h
+++ b/include/ultra64/message.h
@@ -21,6 +21,16 @@
#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
+#ifdef BBPLAYER
+#define OS_EVENT_FLASH 23 /* NAND flash operation complete */
+#define OS_EVENT_AES 24 /* AES decryption complete */
+#define OS_EVENT_IDE 25 /* IDE transfer complete */
+#define OS_EVENT_PI_ERR 26 /* PI Error? */
+#define OS_EVENT_USB0 27 /* USB Controller 0 */
+#define OS_EVENT_USB1 28 /* USB Controller 1 */
+#define OS_EVENT_UNK_29 29 /* ? */
+#define OS_EVENT_MD 30 /* Memory card removed */
+#endif
#ifdef _LANGUAGE_C
@@ -47,7 +57,7 @@ typedef struct OSMesgQueue {
#else
-// OSMesgQueue struct member offsets
+/* OSMesgQueue struct member offsets */
#define MQ_MTQUEUE 0x00
#define MQ_FULLQUEUE 0x04
diff --git a/include/ultra64/rcp.h b/include/ultra64/rcp.h
index 9c97e8bd9f..8fb8a523e9 100644
--- a/include/ultra64/rcp.h
+++ b/include/ultra64/rcp.h
@@ -114,13 +114,13 @@
/**
* External device info
*/
-#define DEVICE_TYPE_CART 0 // ROM cartridge
-#define DEVICE_TYPE_BULK 1 // ROM bulk
-#define DEVICE_TYPE_64DD 2 // 64 Disk Drive
-#define DEVICE_TYPE_SRAM 3 // SRAM
-// 4-6 are reserved
-#define DEVICE_TYPE_INIT 7 // initial value
-// 8-14 are reserved
+#define DEVICE_TYPE_CART 0 /* ROM cartridge */
+#define DEVICE_TYPE_BULK 1 /* ROM bulk */
+#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */
+#define DEVICE_TYPE_SRAM 3 /* SRAM */
+/* 4-6 are reserved */
+#define DEVICE_TYPE_INIT 7 /* initial value */
+/* 8-14 are reserved */
/**
@@ -138,31 +138,31 @@
#define SP_BASE_REG 0x04040000
-// SP memory address (R/W): [12] 0=DMEM,1=IMEM, [11:0] DMEM/IMEM address
+/* SP memory address (R/W): [12] 0=DMEM,1=IMEM, [11:0] DMEM/IMEM address */
#define SP_MEM_ADDR_REG (SP_BASE_REG + 0x00)
-// SP DRAM DMA address (R/W): [23:0] RDRAM address
+/* SP DRAM DMA address (R/W): [23:0] RDRAM address */
#define SP_DRAM_ADDR_REG (SP_BASE_REG + 0x04)
-// SP read DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; RDRAM -> I/DMEM
+/* SP read DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; RDRAM -> I/DMEM */
#define SP_RD_LEN_REG (SP_BASE_REG + 0x08)
-// SP write DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; I/DMEM -> RDRAM
+/* SP write DMA length (R/W): [31:20] skip, [19:12] count, [11:0] length; I/DMEM -> RDRAM */
#define SP_WR_LEN_REG (SP_BASE_REG + 0x0C)
-// SP status (R/W): [14:0] valid bits; see below for write/read mode
+/* SP status (R/W): [14:0] valid bits; see below for write/read mode */
#define SP_STATUS_REG (SP_BASE_REG + 0x10)
-// SP DMA full (R): [0] dma full
+/* SP DMA full (R): [0] dma full */
#define SP_DMA_FULL_REG (SP_BASE_REG + 0x14)
-// SP DMA busy (R): [0] dma busy
+/* SP DMA busy (R): [0] dma busy */
#define SP_DMA_BUSY_REG (SP_BASE_REG + 0x18)
-// SP semaphore (R/W): Read: [0] acquire semaphore; Write: [] release semaphore
+/* SP semaphore (R/W): Read: [0] acquire semaphore; Write: [] release semaphore */
#define SP_SEMAPHORE_REG (SP_BASE_REG + 0x1C)
-// SP PC (R/W): [11:0] program counter
+/* SP PC (R/W): [11:0] program counter */
#define SP_PC_REG 0x04080000
/*
@@ -174,31 +174,31 @@
/*
* SP_STATUS_REG: write bits
*/
-#define SP_CLR_HALT (1 << 0) // clear halt
-#define SP_SET_HALT (1 << 1) // set halt
-#define SP_CLR_BROKE (1 << 2) // clear broke
-#define SP_CLR_INTR (1 << 3) // clear interrupt
-#define SP_SET_INTR (1 << 4) // set interrupt
-#define SP_CLR_SSTEP (1 << 5) // clear sstep
-#define SP_SET_SSTEP (1 << 6) // set sstep
-#define SP_CLR_INTR_BREAK (1 << 7) // clear interrupt on break
-#define SP_SET_INTR_BREAK (1 << 8) // set interrupt on break
-#define SP_CLR_SIG0 (1 << 9) // clear signal 0
-#define SP_SET_SIG0 (1 << 10) // set signal 0
-#define SP_CLR_SIG1 (1 << 11) // clear signal 1
-#define SP_SET_SIG1 (1 << 12) // set signal 1
-#define SP_CLR_SIG2 (1 << 13) // clear signal 2
-#define SP_SET_SIG2 (1 << 14) // set signal 2
-#define SP_CLR_SIG3 (1 << 15) // clear signal 3
-#define SP_SET_SIG3 (1 << 16) // set signal 3
-#define SP_CLR_SIG4 (1 << 17) // clear signal 4
-#define SP_SET_SIG4 (1 << 18) // set signal 4
-#define SP_CLR_SIG5 (1 << 19) // clear signal 5
-#define SP_SET_SIG5 (1 << 20) // set signal 5
-#define SP_CLR_SIG6 (1 << 21) // clear signal 6
-#define SP_SET_SIG6 (1 << 22) // set signal 6
-#define SP_CLR_SIG7 (1 << 23) // clear signal 7
-#define SP_SET_SIG7 (1 << 24) // set signal 7
+#define SP_CLR_HALT (1 << 0) /* clear halt */
+#define SP_SET_HALT (1 << 1) /* set halt */
+#define SP_CLR_BROKE (1 << 2) /* clear broke */
+#define SP_CLR_INTR (1 << 3) /* clear interrupt */
+#define SP_SET_INTR (1 << 4) /* set interrupt */
+#define SP_CLR_SSTEP (1 << 5) /* clear sstep */
+#define SP_SET_SSTEP (1 << 6) /* set sstep */
+#define SP_CLR_INTR_BREAK (1 << 7) /* clear interrupt on break */
+#define SP_SET_INTR_BREAK (1 << 8) /* set interrupt on break */
+#define SP_CLR_SIG0 (1 << 9) /* clear signal 0 */
+#define SP_SET_SIG0 (1 << 10) /* set signal 0 */
+#define SP_CLR_SIG1 (1 << 11) /* clear signal 1 */
+#define SP_SET_SIG1 (1 << 12) /* set signal 1 */
+#define SP_CLR_SIG2 (1 << 13) /* clear signal 2 */
+#define SP_SET_SIG2 (1 << 14) /* set signal 2 */
+#define SP_CLR_SIG3 (1 << 15) /* clear signal 3 */
+#define SP_SET_SIG3 (1 << 16) /* set signal 3 */
+#define SP_CLR_SIG4 (1 << 17) /* clear signal 4 */
+#define SP_SET_SIG4 (1 << 18) /* set signal 4 */
+#define SP_CLR_SIG5 (1 << 19) /* clear signal 5 */
+#define SP_SET_SIG5 (1 << 20) /* set signal 5 */
+#define SP_CLR_SIG6 (1 << 21) /* clear signal 6 */
+#define SP_SET_SIG6 (1 << 22) /* set signal 6 */
+#define SP_CLR_SIG7 (1 << 23) /* clear signal 7 */
+#define SP_SET_SIG7 (1 << 24) /* set signal 7 */
/*
* SP_STATUS_REG: read bits
@@ -238,22 +238,22 @@
#define SP_SET_CPUSIGNAL SP_SET_SIG4
#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4
-// SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail
+/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */
#define SP_IBIST_REG 0x04080004
/*
* SP_IBIST_REG: write bits
*/
-#define SP_IBIST_CHECK (1 << 0) // BIST check
-#define SP_IBIST_GO (1 << 1) // BIST go
-#define SP_IBIST_CLEAR (1 << 2) // BIST clear
+#define SP_IBIST_CHECK (1 << 0) /* BIST check */
+#define SP_IBIST_GO (1 << 1) /* BIST go */
+#define SP_IBIST_CLEAR (1 << 2) /* BIST clear */
/*
* SP_BIST_REG: read bits
* First 2 bits are same as in write mode
*/
#define SP_IBIST_DONE (1 << 2)
-#define SP_IBIST_FAILED 0x78 // bits [6:3], BIST fail
+#define SP_IBIST_FAILED 0x78 /* bits [6:3], BIST fail */
/**
@@ -261,28 +261,28 @@
*/
#define DPC_BASE_REG 0x04100000
-// DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address
+/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */
#define DPC_START_REG (DPC_BASE_REG + 0x00)
-// DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address
+/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */
#define DPC_END_REG (DPC_BASE_REG + 0x04)
-// DP CMD DMA end (R): [23:0] DMEM/RDRAM current address
+/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */
#define DPC_CURRENT_REG (DPC_BASE_REG + 0x08)
-// DP CMD status (R/W): [9:0] valid bits - see below for definitions
+/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */
#define DPC_STATUS_REG (DPC_BASE_REG + 0x0C)
-// DP clock counter (R): [23:0] clock counter
+/* DP clock counter (R): [23:0] clock counter */
#define DPC_CLOCK_REG (DPC_BASE_REG + 0x10)
-// DP buffer busy counter (R): [23:0] clock counter
+/* DP buffer busy counter (R): [23:0] clock counter */
#define DPC_BUFBUSY_REG (DPC_BASE_REG + 0x14)
-// DP pipe busy counter (R): [23:0] clock counter
+/* DP pipe busy counter (R): [23:0] clock counter */
#define DPC_PIPEBUSY_REG (DPC_BASE_REG + 0x18)
-// DP TMEM load counter (R): [23:0] clock counter
+/* DP TMEM load counter (R): [23:0] clock counter */
#define DPC_TMEM_REG (DPC_BASE_REG + 0x1C)
/*
@@ -320,16 +320,16 @@
*/
#define DPS_BASE_REG 0x04200000
-// DP tmem built-in self-test (R/W): [10:0] BIST status bits
+/* DP tmem built-in self-test (R/W): [10:0] BIST status bits */
#define DPS_TBIST_REG (DPS_BASE_REG + 0x00)
-// DP span test mode (R/W): [0] Span buffer test access enable
+/* DP span test mode (R/W): [0] Span buffer test access enable */
#define DPS_TEST_MODE_REG (DPS_BASE_REG + 0x04)
-// DP span buffer test address (R/W): [6:0] bits
+/* DP span buffer test address (R/W): [6:0] bits */
#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG + 0x08)
-// DP span buffer test data (R/W): [31:0] span buffer data
+/* DP span buffer test data (R/W): [31:0] span buffer data */
#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG + 0x0C)
/*
@@ -344,7 +344,7 @@
* First 2 bits are same as in write mode
*/
#define DPS_TBIST_DONE (1 << 2)
-#define DPS_TBIST_FAILED 0x7F8 // bits [10:3], BIST fail
+#define DPS_TBIST_FAILED 0x7F8 /* bits [10:3], BIST fail */
/**
@@ -352,22 +352,22 @@
*/
#define MI_BASE_REG 0x04300000
-// MI init mode (W): [11] clear DP interrupt, [9/10] clear/set ebus test mode
-// [8] set init mode, [7] clear init mode, [6:0] init length
-// (R): [8] ebus test mode, [7] init mode, [6:0] init length
+/* MI init mode (W): [11] clear DP interrupt, [9/10] clear/set ebus test mode */
+/* [8] set init mode, [7] clear init mode, [6:0] init length */
+/* (R): [8] ebus test mode, [7] init mode, [6:0] init length */
#define MI_INIT_MODE_REG (MI_BASE_REG + 0x00)
#define MI_MODE_REG MI_INIT_MODE_REG
/*
* MI_MODE_REG: write bits
*/
-#define MI_CLR_INIT (1 << 7) // clear init mode
-#define MI_SET_INIT (1 << 8) // set init mode
-#define MI_CLR_EBUS (1 << 9) // clear ebus test
-#define MI_SET_EBUS (1 << 10) // set ebus test mode
-#define MI_CLR_DP_INTR (1 << 11) // clear dp interrupt
-#define MI_CLR_RDRAM (1 << 12) // clear RDRAM reg
-#define MI_SET_RDRAM (1 << 13) // set RDRAM reg mode
+#define MI_CLR_INIT (1 << 7) /* clear init mode */
+#define MI_SET_INIT (1 << 8) /* set init mode */
+#define MI_CLR_EBUS (1 << 9) /* clear ebus test */
+#define MI_SET_EBUS (1 << 10) /* set ebus test mode */
+#define MI_CLR_DP_INTR (1 << 11) /* clear dp interrupt */
+#define MI_CLR_RDRAM (1 << 12) /* clear RDRAM reg */
+#define MI_SET_RDRAM (1 << 13) /* set RDRAM reg mode */
/*
* MI_MODE_REG: read bits
@@ -376,52 +376,52 @@
#define MI_MODE_EBUS (1 << 8) /* ebus test mode */
#define MI_MODE_RDRAM (1 << 9) /* RDRAM reg mode */
-// MI version (R): [31:24] rsp, [23:16] rdp, [15:8] rac, [7:0] io
+/* MI version (R): [31:24] rsp, [23:16] rdp, [15:8] rac, [7:0] io */
#define MI_VERSION_REG (MI_BASE_REG + 0x04)
#define MI_NOOP_REG MI_VERSION_REG
-// MI interrupt (R): [5:0] valid bits - see below for bit patterns
+/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */
#define MI_INTR_REG (MI_BASE_REG + 0x08)
-// MI interrupt mask (R): [5:0] valid bits - see below for bit patterns
-// (W): [11:0] valid bits - see below for bit patterns
+/* MI interrupt mask (R): [5:0] valid bits - see below for bit patterns */
+/* (W): [11:0] valid bits - see below for bit patterns */
#define MI_INTR_MASK_REG (MI_BASE_REG + 0x0C)
/*
* MI_INTR_REG: read bits
*/
-#define MI_INTR_SP (1 << 0) // SP intr
-#define MI_INTR_SI (1 << 1) // SI intr
-#define MI_INTR_AI (1 << 2) // AI intr
-#define MI_INTR_VI (1 << 3) // VI intr
-#define MI_INTR_PI (1 << 4) // PI intr
-#define MI_INTR_DP (1 << 5) // DP intr
+#define MI_INTR_SP (1 << 0) /* SP intr */
+#define MI_INTR_SI (1 << 1) /* SI intr */
+#define MI_INTR_AI (1 << 2) /* AI intr */
+#define MI_INTR_VI (1 << 3) /* VI intr */
+#define MI_INTR_PI (1 << 4) /* PI intr */
+#define MI_INTR_DP (1 << 5) /* DP intr */
/*
* MI_INTR_MASK_REG: write bits
*/
-#define MI_INTR_MASK_CLR_SP (1 << 0) // clear SP mask
-#define MI_INTR_MASK_SET_SP (1 << 1) // set SP mask
-#define MI_INTR_MASK_CLR_SI (1 << 2) // clear SI mask
-#define MI_INTR_MASK_SET_SI (1 << 3) // set SI mask
-#define MI_INTR_MASK_CLR_AI (1 << 4) // clear AI mask
-#define MI_INTR_MASK_SET_AI (1 << 5) // set AI mask
-#define MI_INTR_MASK_CLR_VI (1 << 6) // clear VI mask
-#define MI_INTR_MASK_SET_VI (1 << 7) // set VI mask
-#define MI_INTR_MASK_CLR_PI (1 << 8) // clear PI mask
-#define MI_INTR_MASK_SET_PI (1 << 9) // set PI mask
-#define MI_INTR_MASK_CLR_DP (1 << 10) // clear DP mask
-#define MI_INTR_MASK_SET_DP (1 << 11) // set DP mask
+#define MI_INTR_MASK_CLR_SP (1 << 0) /* clear SP mask */
+#define MI_INTR_MASK_SET_SP (1 << 1) /* set SP mask */
+#define MI_INTR_MASK_CLR_SI (1 << 2) /* clear SI mask */
+#define MI_INTR_MASK_SET_SI (1 << 3) /* set SI mask */
+#define MI_INTR_MASK_CLR_AI (1 << 4) /* clear AI mask */
+#define MI_INTR_MASK_SET_AI (1 << 5) /* set AI mask */
+#define MI_INTR_MASK_CLR_VI (1 << 6) /* clear VI mask */
+#define MI_INTR_MASK_SET_VI (1 << 7) /* set VI mask */
+#define MI_INTR_MASK_CLR_PI (1 << 8) /* clear PI mask */
+#define MI_INTR_MASK_SET_PI (1 << 9) /* set PI mask */
+#define MI_INTR_MASK_CLR_DP (1 << 10) /* clear DP mask */
+#define MI_INTR_MASK_SET_DP (1 << 11) /* set DP mask */
/*
* MI_INTR_MASK_REG: read bits
*/
-#define MI_INTR_MASK_SP (1 << 0) // SP intr mask
-#define MI_INTR_MASK_SI (1 << 1) // SI intr mask
-#define MI_INTR_MASK_AI (1 << 2) // AI intr mask
-#define MI_INTR_MASK_VI (1 << 3) // VI intr mask
-#define MI_INTR_MASK_PI (1 << 4) // PI intr mask
-#define MI_INTR_MASK_DP (1 << 5) // DP intr mask
+#define MI_INTR_MASK_SP (1 << 0) /* SP intr mask */
+#define MI_INTR_MASK_SI (1 << 1) /* SI intr mask */
+#define MI_INTR_MASK_AI (1 << 2) /* AI intr mask */
+#define MI_INTR_MASK_VI (1 << 3) /* VI intr mask */
+#define MI_INTR_MASK_PI (1 << 4) /* PI intr mask */
+#define MI_INTR_MASK_DP (1 << 5) /* DP intr mask */
/**
@@ -454,90 +454,90 @@
#define VI_CONTROL_REG (VI_BASE_REG + 0x00)
#define VI_STATUS_REG VI_CONTROL_REG
-// VI origin (R/W): [23:0] frame buffer origin in bytes
+/* VI origin (R/W): [23:0] frame buffer origin in bytes */
#define VI_ORIGIN_REG (VI_BASE_REG + 0x04)
#define VI_DRAM_ADDR_REG VI_ORIGIN_REG
-// VI width (R/W): [11:0] frame buffer line width in pixels
+/* VI width (R/W): [11:0] frame buffer line width in pixels */
#define VI_WIDTH_REG (VI_BASE_REG + 0x08)
#define VI_H_WIDTH_REG VI_WIDTH_REG
-// VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR
+/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */
#define VI_INTR_REG (VI_BASE_REG + 0x0C)
#define VI_V_INTR_REG VI_INTR_REG
-// VI current vertical line (R/W): [9:0] current half line, sampled once per
-// line (the lsb of V_CURRENT is constant within a field, and in interlaced
-// modes gives the field number - which is constant for non-interlaced modes)
-// - Any write to this register will clear interrupt line
+/* VI current vertical line (R/W): [9:0] current half line, sampled once per */
+/* line (the lsb of V_CURRENT is constant within a field, and in interlaced */
+/* modes gives the field number - which is constant for non-interlaced modes) */
+/* - Any write to this register will clear interrupt line */
#define VI_CURRENT_REG (VI_BASE_REG + 0x10)
#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG
-// VI video timing (R/W): [29:20] start of color burst in pixels from h-sync
-// [19:16] vertical sync width in half lines,
-// [15: 8] color burst width in pixels,
-// [ 7: 0] horizontal sync width in pixels,
+/* VI video timing (R/W): [29:20] start of color burst in pixels from h-sync */
+/* [19:16] vertical sync width in half lines, */
+/* [15: 8] color burst width in pixels, */
+/* [ 7: 0] horizontal sync width in pixels, */
#define VI_BURST_REG (VI_BASE_REG + 0x14)
#define VI_TIMING_REG VI_BURST_REG
-// VI vertical sync (R/W): [9:0] number of half-lines per field
+/* VI vertical sync (R/W): [9:0] number of half-lines per field */
#define VI_V_SYNC_REG (VI_BASE_REG + 0x18)
-// VI horizontal sync (R/W): [20:16] a 5-bit leap pattern used for PAL only (h_sync_period)
-// [11: 0] total duration of a line in 1/4 pixel
+/* VI horizontal sync (R/W): [20:16] a 5-bit leap pattern used for PAL only (h_sync_period) */
+/* [11: 0] total duration of a line in 1/4 pixel */
#define VI_H_SYNC_REG (VI_BASE_REG + 0x1C)
-// VI horizontal sync leap (R/W): [27:16] identical to h_sync_period
-// [11: 0] identical to h_sync_period
+/* VI horizontal sync leap (R/W): [27:16] identical to h_sync_period */
+/* [11: 0] identical to h_sync_period */
#define VI_LEAP_REG (VI_BASE_REG + 0x20)
#define VI_H_SYNC_LEAP_REG VI_LEAP_REG
-// VI horizontal video (R/W): [25:16] start of active video in screen pixels
-// [ 9: 0] end of active video in screen pixels
+/* VI horizontal video (R/W): [25:16] start of active video in screen pixels */
+/* [ 9: 0] end of active video in screen pixels */
#define VI_H_START_REG (VI_BASE_REG + 0x24)
#define VI_H_VIDEO_REG VI_H_START_REG
-// VI vertical video (R/W): [25:16] start of active video in screen half-lines
-// [ 9: 0] end of active video in screen half-lines
+/* VI vertical video (R/W): [25:16] start of active video in screen half-lines */
+/* [ 9: 0] end of active video in screen half-lines */
#define VI_V_START_REG (VI_BASE_REG + 0x28)
#define VI_V_VIDEO_REG VI_V_START_REG
-// VI vertical burst (R/W): [25:16] start of color burst enable in half-lines
-// [ 9: 0] end of color burst enable in half-lines
+/* VI vertical burst (R/W): [25:16] start of color burst enable in half-lines */
+/* [ 9: 0] end of color burst enable in half-lines */
#define VI_V_BURST_REG (VI_BASE_REG + 0x2C)
-// VI x-scale (R/W): [27:16] horizontal subpixel offset (2.10 format)
-// [11: 0] 1/horizontal scale up factor (2.10 format)
+/* VI x-scale (R/W): [27:16] horizontal subpixel offset (2.10 format) */
+/* [11: 0] 1/horizontal scale up factor (2.10 format) */
#define VI_X_SCALE_REG (VI_BASE_REG + 0x30)
-// VI y-scale (R/W): [27:16] vertical subpixel offset (2.10 format)
-// [11: 0] 1/vertical scale up factor (2.10 format)
+/* VI y-scale (R/W): [27:16] vertical subpixel offset (2.10 format) */
+/* [11: 0] 1/vertical scale up factor (2.10 format) */
#define VI_Y_SCALE_REG (VI_BASE_REG + 0x34)
/*
* VI_CONTROL_REG: read bits
*/
-#define VI_CTRL_TYPE_16 0x00002 // [1:0] pixel size: 16 bit
-#define VI_CTRL_TYPE_32 0x00003 // [1:0] pixel size: 32 bit
-#define VI_CTRL_GAMMA_DITHER_ON 0x00004 // 2: default = on
-#define VI_CTRL_GAMMA_ON 0x00008 // 3: default = on
-#define VI_CTRL_DIVOT_ON 0x00010 // 4: default = on
-#define VI_CTRL_SERRATE_ON 0x00040 // 6: on if interlaced
-#define VI_CTRL_ANTIALIAS_MASK 0x00300 // [9:8] anti-alias mode
-#define VI_CTRL_ANTIALIAS_MODE_0 0x00000 // Bit [9:8] anti-alias mode: AA enabled, resampling enabled, always fetch extra lines
-#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 // Bit [9:8] anti-alias mode: AA enabled, resampling enabled, fetch extra lines as-needed
-#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 // Bit [9:8] anti-alias mode: AA disabled, resampling enabled, operate as if everything is covered
-#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 // Bit [9:8] anti-alias mode: AA disabled, resampling disabled, replicate pixels
-#define VI_CTRL_PIXEL_ADV_MASK 0x0F000 // [15:12] pixel advance mode
-#define VI_CTRL_PIXEL_ADV_3 0x03000 // Bit [15:12] pixel advance mode: Always 3 on N64
-#define VI_CTRL_DITHER_FILTER_ON 0x10000 // 16: dither-filter mode
+#define VI_CTRL_TYPE_16 0x00002 /* [1:0] pixel size: 16 bit */
+#define VI_CTRL_TYPE_32 0x00003 /* [1:0] pixel size: 32 bit */
+#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* 2: default = on */
+#define VI_CTRL_GAMMA_ON 0x00008 /* 3: default = on */
+#define VI_CTRL_DIVOT_ON 0x00010 /* 4: default = on */
+#define VI_CTRL_SERRATE_ON 0x00040 /* 6: on if interlaced */
+#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* [9:8] anti-alias mode */
+#define VI_CTRL_ANTIALIAS_MODE_0 0x00000 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, always fetch extra lines */
+#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode: AA enabled, resampling enabled, fetch extra lines as-needed */
+#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode: AA disabled, resampling enabled, operate as if everything is covered */
+#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode: AA disabled, resampling disabled, replicate pixels */
+#define VI_CTRL_PIXEL_ADV_MASK 0x0F000 /* [15:12] pixel advance mode */
+#define VI_CTRL_PIXEL_ADV(n) (((n) << 12) & VI_CTRL_PIXEL_ADV_MASK) /* Bit [15:12] pixel advance mode: Always 3 on N64 */
+#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* 16: dither-filter mode */
/*
* Possible video clocks (NTSC or PAL)
*/
-#define VI_NTSC_CLOCK 48681812 // Hz = 48.681812 MHz
-#define VI_PAL_CLOCK 49656530 // Hz = 49.656530 MHz
-#define VI_MPAL_CLOCK 48628316 // Hz = 48.628316 MHz
+#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */
+#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */
+#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */
/**
@@ -549,25 +549,25 @@
*/
#define AI_BASE_REG 0x04500000
-// AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned)
+/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */
#define AI_DRAM_ADDR_REG (AI_BASE_REG + 0x00)
-// AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored
-// [17:0] transfer length (v2.0) - Bottom 3 bits are ignored
+/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */
+/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */
#define AI_LEN_REG (AI_BASE_REG + 0x04)
-// AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled
+/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */
#define AI_CONTROL_REG (AI_BASE_REG + 0x08)
/*
* AI_CONTROL_REG: write bits
*/
-#define AI_CONTROL_DMA_ON 1 // LSB = 1: DMA enable
-#define AI_CONTROL_DMA_OFF 0 // LSB = 1: DMA enable
+#define AI_CONTROL_DMA_ON 1 /* LSB = 1: DMA enable */
+#define AI_CONTROL_DMA_OFF 0 /* LSB = 1: DMA enable */
-// AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy
-// Note that a 1->0 transition in ai_full will set interrupt
-// (W): clear audio interrupt
+/* AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy */
+/* Note that a 1->0 transition in ai_full will set interrupt */
+/* (W): clear audio interrupt */
#define AI_STATUS_REG (AI_BASE_REG + 0x0C)
/*
@@ -576,23 +576,23 @@
#define AI_STATUS_FIFO_FULL (1 << 31)
#define AI_STATUS_DMA_BUSY (1 << 30)
-// AI DAC sample period register (W): [13:0] dac rate
-// - vid_clock/(dperiod + 1) is the DAC sample rate
-// - (dperiod + 1) >= 66 * (aclockhp + 1) must be true
+/* AI DAC sample period register (W): [13:0] dac rate */
+/* - vid_clock/(dperiod + 1) is the DAC sample rate */
+/* - (dperiod + 1) >= 66 * (aclockhp + 1) must be true */
#define AI_DACRATE_REG (AI_BASE_REG + 0x10)
-// DAC rate = video clock / audio frequency
-// - DAC rate >= (66 * Bit rate) must be true
-#define AI_MAX_DAC_RATE 16384 // 14-bit+1
+/* DAC rate = video clock / audio frequency */
+/* - DAC rate >= (66 * Bit rate) must be true */
+#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */
#define AI_MIN_DAC_RATE 132
-// AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp)
-// - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate
-// - The abus clock stops if aclockhp is zero
+/* AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) */
+/* - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate */
+/* - The abus clock stops if aclockhp is zero */
#define AI_BITRATE_REG (AI_BASE_REG + 0x14)
-// Bit rate <= (DAC rate / 66)
-#define AI_MAX_BIT_RATE 16 // 4-bit+1
+/* Bit rate <= (DAC rate / 66) */
+#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */
#define AI_MIN_BIT_RATE 2
/*
@@ -600,14 +600,14 @@
* max frequency = (video clock / min dac rate)
* min frequency = (video clock / max dac rate)
*/
-#define AI_NTSC_MAX_FREQ 368000 // 368 KHz
-#define AI_NTSC_MIN_FREQ 3000 // 3 KHz ~ 2971 Hz
+#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */
+#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */
-#define AI_PAL_MAX_FREQ 376000 // 376 KHz
-#define AI_PAL_MIN_FREQ 3050 // 3 KHz ~ 3031 Hz
+#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */
+#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */
-#define AI_MPAL_MAX_FREQ 368000 // 368 KHz
-#define AI_MPAL_MIN_FREQ 3000 // 3 KHz ~ 2968 Hz
+#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */
+#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */
/**
@@ -615,44 +615,44 @@
*/
#define PI_BASE_REG 0x04600000
-// PI DRAM address (R/W): [23:0] starting RDRAM address
+/* PI DRAM address (R/W): [23:0] starting RDRAM address */
#define PI_DRAM_ADDR_REG (PI_BASE_REG + 0x00)
-// PI pbus (cartridge) address (R/W): [31:0] starting AD16 address
+/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */
#define PI_CART_ADDR_REG (PI_BASE_REG + 0x04)
-// PI read length (R/W): [23:0] read data length
+/* PI read length (R/W): [23:0] read data length */
#define PI_RD_LEN_REG (PI_BASE_REG + 0x08)
-// PI write length (R/W): [23:0] write data length
+/* PI write length (R/W): [23:0] write data length */
#define PI_WR_LEN_REG (PI_BASE_REG + 0x0C)
-// PI status (R): [3] interrupt flag, [2] error, [1] IO busy, [0] DMA busy
-// (W): [1] clear intr, [0] reset controller (and abort current op)
+/* PI status (R): [3] interrupt flag, [2] error, [1] IO busy, [0] DMA busy */
+/* (W): [1] clear intr, [0] reset controller (and abort current op) */
#define PI_STATUS_REG (PI_BASE_REG + 0x10)
-// PI dom1 latency (R/W): [7:0] domain 1 device latency
+/* PI dom1 latency (R/W): [7:0] domain 1 device latency */
#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG + 0x14)
-// PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width
+/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */
#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG + 0x18)
-// PI dom1 page size (R/W): [3:0] domain 1 device page size
+/* PI dom1 page size (R/W): [3:0] domain 1 device page size */
#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG + 0x1C)
-// PI dom1 release (R/W): [1:0] domain 1 device R/W release duration
+/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */
#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG + 0x20)
-// PI dom2 latency (R/W): [7:0] domain 2 device latency
+/* PI dom2 latency (R/W): [7:0] domain 2 device latency */
#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG + 0x24)
-// PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width
+/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */
#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG + 0x28)
-// PI dom2 page size (R/W): [3:0] domain 2 device page size
+/* PI dom2 page size (R/W): [3:0] domain 2 device page size */
#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG + 0x2C)
-// PI dom2 release (R/W): [1:0] domain 2 device R/W release duration
+/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */
#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG + 0x30)
#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG
@@ -719,30 +719,30 @@
*/
#define RI_BASE_REG 0x04700000
-// RI mode (R/W): [3] stop R active, [2] stop T active, [1:0] operating mode
+/* RI mode (R/W): [3] stop R active, [2] stop T active, [1:0] operating mode */
#define RI_MODE_REG (RI_BASE_REG + 0x00)
-// RI config (R/W): [6] current control enable, [5:0] current control input
+/* RI config (R/W): [6] current control enable, [5:0] current control input */
#define RI_CONFIG_REG (RI_BASE_REG + 0x04)
-// RI current load (W): [] any write updates current control register
+/* RI current load (W): [] any write updates current control register */
#define RI_CURRENT_LOAD_REG (RI_BASE_REG + 0x08)
-// RI select (R/W): [3:2] receive select, [1:0] transmit select
+/* RI select (R/W): [3:2] receive select, [1:0] transmit select */
#define RI_SELECT_REG (RI_BASE_REG + 0x0C)
-// RI refresh (R/W): [16] refresh bank, [17] refresh enable, [18] refresh optimize
-// [7:0] clean refresh delay, [15:8] dirty refresh dela
+/* RI refresh (R/W): [16] refresh bank, [17] refresh enable, [18] refresh optimize */
+/* [7:0] clean refresh delay, [15:8] dirty refresh dela */
#define RI_REFRESH_REG (RI_BASE_REG + 0x10)
#define RI_COUNT_REG RI_REFRESH_REG
-// RI latency (R/W): [3:0] DMA latency/overlap
+/* RI latency (R/W): [3:0] DMA latency/overlap */
#define RI_LATENCY_REG (RI_BASE_REG + 0x14)
-// RI error (R): [1] ack error, [0] nack error
+/* RI error (R): [1] ack error, [0] nack error */
#define RI_RERROR_REG (RI_BASE_REG + 0x18)
-// RI error (W): [] any write clears all error bits
+/* RI error (W): [] any write clears all error bits */
#define RI_WERROR_REG (RI_BASE_REG + 0x1C)
@@ -751,27 +751,27 @@
*/
#define SI_BASE_REG 0x04800000
-// SI DRAM address (R/W): [23:0] starting RDRAM address
+/* SI DRAM address (R/W): [23:0] starting RDRAM address */
#define SI_DRAM_ADDR_REG (SI_BASE_REG + 0x00)
-// SI address read 64B (W): [] write begins a 64B DMA write PIF RAM -> RDRAM
+/* SI address read 64B (W): [] write begins a 64B DMA write PIF RAM -> RDRAM */
#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG + 0x04)
-// Address SI_BASE_REG + (0x08, 0x0C, 0x14) are reserved
+/* Address SI_BASE_REG + (0x08, 0x0C, 0x14) are reserved */
-// SI address write 64B (W): [] write begins a 64B DMA read RDRAM -> PIF RAM */
+/* SI address write 64B (W): [] write begins a 64B DMA read RDRAM -> PIF RAM */
#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG + 0x10)
-// SI status (R/W): [] any write clears interrupt
+/* SI status (R/W): [] any write clears interrupt */
#define SI_STATUS_REG (SI_BASE_REG + 0x18)
/*
* SI_STATUS_REG: read bits
*/
-#define SI_STATUS_DMA_BUSY (1 << 0) // DMA in progress
-#define SI_STATUS_RD_BUSY (1 << 1) // IO access in progress
-#define SI_STATUS_DMA_ERROR (1 << 3) // Overlapping DMA requests
-#define SI_STATUS_INTERRUPT (1 << 12) // Interrupt is set
+#define SI_STATUS_DMA_BUSY (1 << 0) /* DMA in progress */
+#define SI_STATUS_RD_BUSY (1 << 1) /* IO access in progress */
+#define SI_STATUS_DMA_ERROR (1 << 3) /* Overlapping DMA requests */
+#define SI_STATUS_INTERRUPT (1 << 12) /* Interrupt is set */
/**
@@ -780,13 +780,13 @@
#define GIO_BASE_REG 0x18000000
-// Game to Host Interrupt
+/* Game to Host Interrupt */
#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000)
-// Game to Host SYNC
+/* Game to Host SYNC */
#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400)
-// Host to Game Interrupt
+/* Host to Game Interrupt */
#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800)
diff --git a/include/ultra64/regdef.h b/include/ultra64/regdef.h
new file mode 100644
index 0000000000..a3b2832180
--- /dev/null
+++ b/include/ultra64/regdef.h
@@ -0,0 +1,164 @@
+#ifndef REGDEF_H
+#define REGDEF_H
+
+#ifdef __GNUC__
+#define _MIPS_SIM_ABI32 _ABIO32
+#define _MIPS_SIM_NABI32 _ABIN32
+#define _MIPS_SIM_ABI64 _ABI64
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI32)
+#define zero $0
+#define AT $at
+#define v0 $2
+#define v1 $3
+#define a0 $4
+#define a1 $5
+#define a2 $6
+#define a3 $7
+#define t0 $8
+#define t1 $9
+#define t2 $10
+#define t3 $11
+#define t4 $12
+#define ta0 $12
+#define t5 $13
+#define ta1 $13
+#define t6 $14
+#define ta2 $14
+#define t7 $15
+#define ta3 $15
+#define s0 $16
+#define s1 $17
+#define s2 $18
+#define s3 $19
+#define s4 $20
+#define s5 $21
+#define s6 $22
+#define s7 $23
+#define t8 $24
+#define t9 $25
+#define jp $25
+#define k0 $26
+#define k1 $27
+#define gp $28
+#define sp $29
+#define fp $30
+#define s8 $30
+#define ra $31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI64)
+#define zero $0
+#define AT $at
+#define v0 $2
+#define v1 $3
+#define a0 $4
+#define a1 $5
+#define a2 $6
+#define a3 $7
+#define a4 $8
+#define ta0 $8
+#define a5 $9
+#define ta1 $9
+#define a6 $10
+#define ta2 $10
+#define a7 $11
+#define ta3 $11
+#define t0 $12
+#define t1 $13
+#define t2 $14
+#define t3 $15
+#define s0 $16
+#define s1 $17
+#define s2 $18
+#define s3 $19
+#define s4 $20
+#define s5 $21
+#define s6 $22
+#define s7 $23
+#define t8 $24
+#define t9 $25
+#define jp $25
+#define k0 $26
+#define k1 $27
+#define gp $28
+#define sp $29
+#define fp $30
+#define s8 $30
+#define ra $31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI32)
+#define fv0 $f0
+#define fv0f $f1
+#define fv1 $f2
+#define fv1f $f3
+#define fa0 $f12
+#define fa0f $f13
+#define fa1 $f14
+#define fa1f $f15
+#define ft0 $f4
+#define ft0f $f5
+#define ft1 $f6
+#define ft1f $f7
+#define ft2 $f8
+#define ft2f $f9
+#define ft3 $f10
+#define ft3f $f11
+#define ft4 $f16
+#define ft4f $f17
+#define ft5 $f18
+#define ft5f $f19
+#define fs0 $f20
+#define fs0f $f21
+#define fs1 $f22
+#define fs1f $f23
+#define fs2 $f24
+#define fs2f $f25
+#define fs3 $f26
+#define fs3f $f27
+#define fs4 $f28
+#define fs4f $f29
+#define fs5 $f30
+#define fs5f $f31
+#endif
+
+#if (_MIPS_SIM == _MIPS_SIM_ABI64)
+#define fv0 $f0
+#define fv1 $f2
+#define fa0 $f12
+#define fa1 $f13
+#define fa2 $f14
+#define fa3 $f15
+#define fa4 $f16
+#define fa5 $f17
+#define fa6 $f18
+#define fa7 $f19
+#define ft0 $f4
+#define ft1 $f5
+#define ft2 $f6
+#define ft3 $f7
+#define ft4 $f8
+#define ft5 $f9
+#define ft6 $f10
+#define ft7 $f11
+#define ft8 $f20
+#define ft9 $f21
+#define ft10 $f22
+#define ft11 $f23
+#define ft12 $f1
+#define ft13 $f3
+#define fs0 $f24
+#define fs1 $f25
+#define fs2 $f26
+#define fs3 $f27
+#define fs4 $f28
+#define fs5 $f29
+#define fs6 $f30
+#define fs7 $f31
+#endif
+
+#define fcr31 $31
+
+#endif
diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h
index 813fefaa97..3c2733f150 100644
--- a/include/ultra64/thread.h
+++ b/include/ultra64/thread.h
@@ -73,7 +73,7 @@ typedef struct __OSThreadTail {
#else
-// OSThread struct member offsets
+/* OSThread struct member offsets */
#define THREAD_NEXT 0x00
#define THREAD_PRI 0x04
diff --git a/include/ultra64/version.h b/include/ultra64/version.h
new file mode 100644
index 0000000000..00d772845e
--- /dev/null
+++ b/include/ultra64/version.h
@@ -0,0 +1,14 @@
+#ifndef ULTRA64_VERSION_H
+#define ULTRA64_VERSION_H
+
+#define LIBULTRA_VERSION_D 'D'
+#define LIBULTRA_VERSION_E 'E'
+#define LIBULTRA_VERSION_F 'F'
+#define LIBULTRA_VERSION_G 'G'
+#define LIBULTRA_VERSION_H 'H'
+#define LIBULTRA_VERSION_I 'I'
+#define LIBULTRA_VERSION_J 'J'
+#define LIBULTRA_VERSION_K 'K'
+#define LIBULTRA_VERSION_L 'L'
+
+#endif
diff --git a/include/variables.h b/include/variables.h
index 1097443c58..e37738a98f 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -143,8 +143,8 @@ extern s32 gSystemArenaLogSeverity;
extern u8 __osPfsInodeCacheBank;
extern s32 __osPfsLastChannel;
-extern const TempoData gTempoData;
-extern const AudioHeapInitSizes gAudioHeapInitSizes;
+extern TempoData gTempoData;
+extern AudioHeapInitSizes gAudioHeapInitSizes;
extern s16 gOcarinaSongItemMap[];
extern AudioTable gSoundFontTable;
extern u8 gSequenceFontTable[];
diff --git a/include/versions.h b/include/versions.h
index 96ae716f06..620b27999e 100644
--- a/include/versions.h
+++ b/include/versions.h
@@ -15,6 +15,7 @@
#define GC_EU 11
#define GC_EU_MQ 12
#define GC_JP_CE 13
+#define IQUE_CN 14
// NTSC/PAL
#if OOT_VERSION == PAL_1_0 || OOT_VERSION == PAL_1_1 || OOT_VERSION == GC_EU || OOT_VERSION == GC_EU_MQ || OOT_VERSION == GC_EU_MQ_DBG
diff --git a/include/z64actor.h b/include/z64actor.h
index 5f3241e729..f63e828bac 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -130,14 +130,25 @@ typedef struct ActorShape {
// What actually matters is the presence or lack of `ACTOR_FLAG_HOSTILE`.
#define ACTOR_FLAG_FRIENDLY (1 << 3)
-//
-#define ACTOR_FLAG_4 (1 << 4)
-
-//
-#define ACTOR_FLAG_5 (1 << 5)
-
-//
-#define ACTOR_FLAG_6 (1 << 6)
+// Culling of the actor's update process is disabled.
+// In other words, the actor will keep updating even if the actor is outside its own culling volume.
+// See `Actor_CullingCheck` for more information about culling.
+// See `Actor_CullingVolumeTest` for more information on the test used to determine if an actor should be culled.
+#define ACTOR_FLAG_UPDATE_CULLING_DISABLED (1 << 4)
+
+// Culling of the actor's draw process is disabled.
+// In other words, the actor will keep drawing even if the actor is outside its own culling volume.
+// See `Actor_CullingCheck` for more information about culling.
+// See `Actor_CullingVolumeTest` for more information on the test used to determine if an actor should be culled.
+// (The original name for this flag is `NO_CULL_DRAW`, known from the Majora's Mask Debug ROM)
+#define ACTOR_FLAG_DRAW_CULLING_DISABLED (1 << 5)
+
+// Set if the actor is currently within the bounds of its culling volume.
+// In most cases, this flag can be used to determine whether or not an actor is currently culled.
+// However this flag still updates even if `ACTOR_FLAG_UPDATE_CULLING_DISABLED` or `ACTOR_FLAG_DRAW_CULLING_DISABLED`
+// are set. Meaning, the flag can still have a value of "false" even if it is not actually culled.
+// (The original name for this flag is `NO_CULL_FLAG`, known from the Majora's Mask Debug ROM)
+#define ACTOR_FLAG_INSIDE_CULLING_VOLUME (1 << 6)
// hidden or revealed by Lens of Truth (depending on room lensMode)
#define ACTOR_FLAG_REACT_TO_LENS (1 << 7)
@@ -284,9 +295,9 @@ typedef struct Actor {
/* 0x0B4 */ ActorShape shape; // Variables related to the physical shape of the actor
/* 0x0E4 */ Vec3f projectedPos; // Position of the actor in projected space
/* 0x0F0 */ f32 projectedW; // w component of the projected actor position
- /* 0x0F4 */ f32 uncullZoneForward; // Amount to increase the uncull zone forward by (in projected space)
- /* 0x0F8 */ f32 uncullZoneScale; // Amount to increase the uncull zone scale by (in projected space)
- /* 0x0FC */ f32 uncullZoneDownward; // Amount to increase uncull zone downward by (in projected space)
+ /* 0x0F4 */ f32 cullingVolumeDistance; // Forward distance of the culling volume (in projected space). See `Actor_CullingCheck` and `Actor_CullingVolumeTest` for more information.
+ /* 0x0F8 */ f32 cullingVolumeScale; // Scale of the culling volume (in projected space). See `Actor_CullingCheck` and `Actor_CullingVolumeTest` for more information.
+ /* 0x0FC */ f32 cullingVolumeDownward; // Downward height of the culling volume (in projected space). See `Actor_CullingCheck` and `Actor_CullingVolumeTest` for more information.
/* 0x100 */ Vec3f prevPos; // World position from the previous update cycle
/* 0x10C */ u8 isLockedOn; // Set to true if the actor is currently locked-on by Player
/* 0x10D */ u8 attentionPriority; // Lower values have higher priority. Resets to 0 when lock-on is released.
@@ -766,6 +777,10 @@ typedef struct NpcInteractInfo {
#define PARAMS_PACK(p, s, n) \
(((p) & NBITS_TO_MASK(n)) << (s))
+// Moves the value `p` to bit position `s` for building actor parameters by OR-ing these together.
+#define PARAMS_PACK_NOMASK(p, s) \
+ ((p) << (s))
+
// Generates a bitmask for bit position `s` of length `n`
#define PARAMS_MAKE_MASK(s, n) PARAMS_GET_NOSHIFT(~0, s, n)
@@ -830,10 +845,10 @@ int func_8002DD78(struct Player* player);
s32 func_8002DDE4(struct PlayState* play);
s32 func_8002DDF4(struct PlayState* play);
void Actor_SwapHookshotAttachment(struct PlayState* play, Actor* srcActor, Actor* destActor);
-void func_8002DE74(struct PlayState* play, struct Player* player);
+void Actor_RequestHorseCameraSetting(struct PlayState* play, struct Player* player);
void Actor_MountHorse(struct PlayState* play, struct Player* player, Actor* horse);
int func_8002DEEC(struct Player* player);
-void func_8002DF18(struct PlayState* play, struct Player* player);
+void Actor_InitPlayerHorse(struct PlayState* play, struct Player* player);
s32 Player_SetCsAction(struct PlayState* play, Actor* csActor, u8 csAction);
s32 Player_SetCsActionWithHaltedActors(struct PlayState* play, Actor* csActor, u8 csAction);
void func_8002DF90(DynaPolyActor* dynaActor);
@@ -860,7 +875,7 @@ s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, struct PlayState* play, f3
s32 Actor_OfferTalk(Actor* actor, struct PlayState* play, f32 radius);
s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, struct PlayState* play);
u32 Actor_TextboxIsClosing(Actor* actor, struct PlayState* play);
-s8 func_8002F368(struct PlayState* play);
+s8 Actor_GetPlayerExchangeItemId(struct PlayState* play);
void Actor_GetScreenPos(struct PlayState* play, Actor* actor, s16* x, s16* y);
u32 Actor_HasParent(Actor* actor, struct PlayState* play);
s32 Actor_OfferGetItem(Actor* actor, struct PlayState* play, s32 getItemId, f32 xzRange, f32 yRange);
@@ -889,7 +904,7 @@ s32 func_8002F9EC(struct PlayState* play, Actor* actor, struct CollisionPoly* po
void Actor_DisableLens(struct PlayState* play);
void Actor_InitContext(struct PlayState* play, ActorContext* actorCtx, struct ActorEntry* playerEntry);
void Actor_UpdateAll(struct PlayState* play, ActorContext* actorCtx);
-s32 func_800314D4(struct PlayState* play, Actor* actor, Vec3f* arg2, f32 arg3);
+s32 Actor_CullingVolumeTest(struct PlayState* play, Actor* actor, Vec3f* projPos, f32 projW);
void func_800315AC(struct PlayState* play, ActorContext* actorCtx);
void Actor_KillAllWithMissingObject(struct PlayState* play, ActorContext* actorCtx);
void func_80031B14(struct PlayState* play, ActorContext* actorCtx);
@@ -939,7 +954,7 @@ void func_80034BA0(struct PlayState* play, SkelAnime* skelAnime, OverrideLimbDra
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
void func_80034CC4(struct PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw,
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
-s16 func_80034DD4(Actor* actor, struct PlayState* play, s16 arg2, f32 arg3);
+s16 Actor_UpdateAlphaByDistance(Actor* actor, struct PlayState* play, s16 alpha, f32 radius);
void Actor_UpdateFidgetTables(struct PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen);
void Actor_Noop(Actor* actor, struct PlayState* play);
diff --git a/include/z64audio.h b/include/z64audio.h
index 60ae4fb2a2..e02ce7b843 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -201,11 +201,9 @@ typedef struct AdpcmBookHeader {
* The procedure used to design the codeBook is based on an adaptive clustering algorithm.
* The size of the codeBook is (8 * order * numPredictors) and is 8-byte aligned
*/
-typedef s16 AdpcmBookData[];
-
typedef struct AdpcmBook {
/* 0x00 */ AdpcmBookHeader header;
- /* 0x08 */ AdpcmBookData book; // size 8 * order * numPredictors. 8-byte aligned
+ /* 0x08 */ s16 book[1]; // size 8 * order * numPredictors. 8-byte aligned
} AdpcmBook; // size >= 0x8
typedef struct Sample {
diff --git a/include/z64cutscene.h b/include/z64cutscene.h
index 381c5c58dd..270570e113 100644
--- a/include/z64cutscene.h
+++ b/include/z64cutscene.h
@@ -23,6 +23,7 @@ typedef enum CutsceneState {
} CutsceneState;
typedef enum CutsceneCmd {
+ /* 0xFFFF */ CS_CMD_END_OF_SCRIPT = -1,
/* 0x0001 */ CS_CMD_CAM_EYE_SPLINE = 0x01,
/* 0x0002 */ CS_CMD_CAM_AT_SPLINE,
/* 0x0003 */ CS_CMD_MISC,
@@ -152,7 +153,6 @@ typedef enum CutsceneCmd {
/* 0x0090 */ CS_CMD_ACTOR_CUE_0_17,
/* 0x03E8 */ CS_CMD_DESTINATION = 0x03E8,
/* 0x03E9 */ CS_CMD_MOTION_BLUR,
- /* 0xFFFF */ CS_CMD_END = 0xFFFF
} CutsceneCmd;
typedef enum CutsceneMiscType {
@@ -176,8 +176,8 @@ typedef enum CutsceneMiscType {
/* 0x11 */ CS_MISC_QUAKE_STOP,
/* 0x12 */ CS_MISC_STOP_STORM_AND_ADVANCE_TO_DAY,
/* 0x13 */ CS_MISC_SET_FLAG_FAST_WINDMILL,
- /* 0x14 */ CS_MISC_SET_FLAG_WELL_DRAINED,
- /* 0x15 */ CS_MISC_SET_FLAG_LAKE_HYLIA_RESTORED,
+ /* 0x14 */ CS_MISC_SET_FLAG_DRAINED_WELL,
+ /* 0x15 */ CS_MISC_SET_FLAG_RESTORED_LAKE_HYLIA,
/* 0x16 */ CS_MISC_VISMONO_BLACK_AND_WHITE,
/* 0x17 */ CS_MISC_VISMONO_SEPIA,
/* 0x18 */ CS_MISC_HIDE_ROOM,
diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h
index 1e974b318a..64991b887c 100644
--- a/include/z64cutscene_commands.h
+++ b/include/z64cutscene_commands.h
@@ -37,9 +37,10 @@
#endif
/**
- * Marks the beginning of a cutscene script.
+ * Describes the length and the total number of command entries for a cutscene script.
+ * Required at the beginning of every script.
*/
-#define CS_BEGIN_CUTSCENE(totalEntries, frameCount) CMD_W(totalEntries), CMD_W(frameCount)
+#define CS_HEADER(totalEntries, frameCount) CMD_W(totalEntries), CMD_W(frameCount)
/**
* Defines data for `CutsceneCameraPoint`, which can be used with any of the `eye` or `at` camera commands.
@@ -291,9 +292,9 @@
CS_MOTION_BLUR(CS_MOTION_BLUR_DISABLE, 0, startFrame, endFrame)
/**
- * Marks the end of a cutscene script.
+ * Marks the end of a command list in a cutscene script. Processing for the current frame will finish.
*/
-#define CS_END() 0xFFFFFFFF, 0x00000000
+#define CS_END_OF_SCRIPT() CS_CMD_END_OF_SCRIPT, CMD_W(0)
// most instances of this look like unimplemented actor cues.
diff --git a/include/z64horse.h b/include/z64horse.h
new file mode 100644
index 0000000000..d58de4b6d4
--- /dev/null
+++ b/include/z64horse.h
@@ -0,0 +1,16 @@
+#ifndef Z64HORSE_H
+#define Z64HORSE_H
+
+#include "ultra64.h"
+#include "z64math.h"
+
+struct PlayState;
+struct Actor;
+struct Player;
+
+void Horse_ResetHorseData(struct PlayState* play);
+void Horse_FixLakeHyliaPosition(struct PlayState* play);
+void Horse_InitPlayerHorse(struct PlayState* play, struct Player* player);
+void Horse_RotateToPoint(struct Actor* actor, Vec3f* pos, s16 turnAmount);
+
+#endif
diff --git a/include/z64player.h b/include/z64player.h
index 732f02cbcb..619b41e5f9 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -8,7 +8,19 @@
struct Player;
-#define PLAYER_GET_START_MODE(thisx) PARAMS_GET_S(thisx->params, 8, 4)
+#define PLAYER_PARAMS(startMode, startBgCamIndex) (PARAMS_PACK_NOMASK(startMode, 8) | PARAMS_PACK_NOMASK(startBgCamIndex, 0))
+
+// Determines behavior when spawning. See `PlayerStartMode`.
+#define PLAYER_GET_START_MODE(thisx) PARAMS_GET_S((thisx)->params, 8, 4)
+
+// Sets initial `bgCamIndex`, which determines camera behavior.
+// The value is used to index a list of `BgCamInfo` contained within the scene's collision data.
+// See `PLAYER_START_BG_CAM_DEFAULT` for what a value of -1 does.
+#define PLAYER_GET_START_BG_CAM_INDEX(thisx) PARAMS_GET_S((thisx)->params, 0, 8)
+
+// A value of -1 for `startBgCamIndex` indicates that default behavior should be used.
+// This means the `bgCamIndex` will be read from the current floor polygon.
+#define PLAYER_START_BG_CAM_DEFAULT ((u8)-1)
typedef enum PlayerStartMode {
/* 0 */ PLAYER_START_MODE_NOTHING, // Update is empty and draw function is NULL, nothing occurs. Useful in cutscenes, for example.
diff --git a/include/z64save.h b/include/z64save.h
index d36a93cd14..90d1545daf 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -476,7 +476,18 @@ typedef enum LinkAge {
* SaveContext.eventChkInf
*/
-#define EVENTCHKINF_02 0x02
+#define EVENTCHKINF_INDEX(flag) ((flag) >> 4)
+#define EVENTCHKINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] & EVENTCHKINF_MASK(flag))
+#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] |= EVENTCHKINF_MASK(flag))
+#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX(flag)] &= ~EVENTCHKINF_MASK(flag))
+
+// EVENTCHKINF 0x00-0x0F
+#define EVENTCHKINF_INDEX_0 0
+#define EVENTCHKINF_00_UNUSED 0x00 // flag is set in the debug save, but has no functionality
+#define EVENTCHKINF_01_UNUSED 0x01 // flag is set in the debug save, but has no functionality
+#define EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS 0x02
#define EVENTCHKINF_03 0x03
#define EVENTCHKINF_04 0x04
#define EVENTCHKINF_05 0x05
@@ -511,19 +522,17 @@ typedef enum LinkAge {
#define EVENTCHKINF_30 0x30
#define EVENTCHKINF_31 0x31
#define EVENTCHKINF_32 0x32
-#define EVENTCHKINF_33 0x33
+#define EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA 0x33
#define EVENTCHKINF_37 0x37
#define EVENTCHKINF_38 0x38
#define EVENTCHKINF_39 0x39
-#define EVENTCHKINF_3A 0x3A
+#define EVENTCHKINF_OPENED_JABU_JABU 0x3A
#define EVENTCHKINF_3B 0x3B
-#define EVENTCHKINF_3C 0x3C
+#define EVENTCHKINF_DEFEATED_NABOORU_KNUCKLE 0x3C
-// 0x40
-#define EVENTCHKINF_40_INDEX 4
-#define EVENTCHKINF_40_SHIFT 0
-#define EVENTCHKINF_40_MASK (1 << EVENTCHKINF_40_SHIFT)
-#define EVENTCHKINF_40 ((EVENTCHKINF_40_INDEX << 4) | EVENTCHKINF_40_SHIFT)
+// EVENTCHKINF 0x40
+#define EVENTCHKINF_INDEX_40 EVENTCHKINF_INDEX(EVENTCHKINF_40)
+#define EVENTCHKINF_40 0x40
#define EVENTCHKINF_41 0x41
#define EVENTCHKINF_42 0x42
@@ -532,11 +541,11 @@ typedef enum LinkAge {
#define EVENTCHKINF_48 0x48
#define EVENTCHKINF_49 0x49
#define EVENTCHKINF_4A 0x4A
-#define EVENTCHKINF_4B 0x4B
+#define EVENTCHKINF_OPENED_DOOR_OF_TIME 0x4B
#define EVENTCHKINF_4C 0x4C
-#define EVENTCHKINF_4D 0x4D
-#define EVENTCHKINF_4E 0x4E
-#define EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS 0x4F // Cutscene in Temple of Time as adult after pulling the Master Sword for the first time
+#define EVENTCHKINF_CREATED_RAINBOW_BRIDGE 0x4D
+#define EVENTCHKINF_CAUGHT_BY_CASTLE_GUARDS 0x4E // set but unused
+#define EVENTCHKINF_REVEALED_MASTER_SWORD 0x4F // Cutscene in Temple of Time when entering the Master Sword chamber for the first time
#define EVENTCHKINF_50 0x50
#define EVENTCHKINF_51 0x51
#define EVENTCHKINF_52 0x52
@@ -547,48 +556,66 @@ typedef enum LinkAge {
#define EVENTCHKINF_5B 0x5B
#define EVENTCHKINF_5C 0x5C
#define EVENTCHKINF_65 0x65
-#define EVENTCHKINF_67 0x67
+#define EVENTCHKINF_DRAINED_WELL 0x67
#define EVENTCHKINF_68 0x68
-#define EVENTCHKINF_69 0x69
+#define EVENTCHKINF_RESTORED_LAKE_HYLIA 0x69
#define EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO 0x6A
-// 0x6B
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX 6
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT 11
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK (1 << EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
-#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO ((EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX << 4) | EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_SHIFT)
+// EVENTCHKINF 0x6B
+#define EVENTCHKINF_INDEX_TALON_RETURNED_FROM_KAKARIKO EVENTCHKINF_INDEX(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO)
+#define EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO 0x6B
#define EVENTCHKINF_6E 0x6E
#define EVENTCHKINF_6F 0x6F
-#define EVENTCHKINF_70 0x70
-#define EVENTCHKINF_71 0x71
-#define EVENTCHKINF_72 0x72
-#define EVENTCHKINF_73 0x73
-#define EVENTCHKINF_74 0x74
-#define EVENTCHKINF_75 0x75
-#define EVENTCHKINF_76 0x76
-#define EVENTCHKINF_77 0x77
-#define EVENTCHKINF_78 0x78
+#define EVENTCHKINF_BEGAN_GOHMA_BATTLE 0x70
+#define EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE 0x71
+#define EVENTCHKINF_BEGAN_PHANTOM_GANON_BATTLE 0x72
+#define EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE 0x73
+#define EVENTCHKINF_BEGAN_MORPHA_BATTLE 0x74
+#define EVENTCHKINF_BEGAN_TWINROVA_BATTLE 0x75
+#define EVENTCHKINF_BEGAN_BARINADE_BATTLE 0x76
+#define EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE 0x77
+#define EVENTCHKINF_BEGAN_GANONDORF_BATTLE 0x78
#define EVENTCHKINF_80 0x80
#define EVENTCHKINF_82 0x82
-#define EVENTCHKINF_8C 0x8C
-#define EVENTCHKINF_8D 0x8D
-#define EVENTCHKINF_8E 0x8E
-#define EVENTCHKINF_8F 0x8F
-
-// 0x90-0x93
-// carpenters freed from the gerudo
-#define EVENTCHKINF_CARPENTERS_FREE_INDEX 9
-#define EVENTCHKINF_CARPENTERS_FREE_SHIFT(n) (0 + (n))
-#define EVENTCHKINF_CARPENTERS_FREE_MASK(n) (1 << EVENTCHKINF_CARPENTERS_FREE_SHIFT(n))
-#define EVENTCHKINF_CARPENTERS_FREE(n) ((EVENTCHKINF_CARPENTERS_FREE_INDEX << 4) | EVENTCHKINF_CARPENTERS_FREE_SHIFT(n))
-#define EVENTCHKINF_CARPENTERS_FREE_MASK_ALL (\
- EVENTCHKINF_CARPENTERS_FREE_MASK(0) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(1) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(2) \
- | EVENTCHKINF_CARPENTERS_FREE_MASK(3) )
-#define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \
- CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX], EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)
+#define EVENTCHKINF_PAID_BACK_KEATON_MASK 0x8C
+#define EVENTCHKINF_PAID_BACK_SKULL_MASK 0x8D
+#define EVENTCHKINF_PAID_BACK_SPOOKY_MASK 0x8E
+#define EVENTCHKINF_PAID_BACK_BUNNY_HOOD 0x8F
+
+// EVENTCHKINF 0x90-0x93
+// Carpenters rescued from Gerudo Fortress
+#define EVENTCHKINF_INDEX_CARPENTERS_RESCUED 0x9
+#define EVENTCHKINF_CARPENTER_0_RESCUED 0x90
+#define EVENTCHKINF_CARPENTER_1_RESCUED 0x91
+#define EVENTCHKINF_CARPENTER_2_RESCUED 0x92
+#define EVENTCHKINF_CARPENTER_3_RESCUED 0x93
+
+#define EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK \
+ (EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_0_RESCUED) | EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_1_RESCUED) | \
+ EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_2_RESCUED) | EVENTCHKINF_MASK(EVENTCHKINF_CARPENTER_3_RESCUED))
+
+#define GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED() \
+ CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED], \
+ EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK)
+
+#define GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED2() \
+ CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & \
+ (EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK | 0xF0), \
+ EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK)
+
+#define ENDAIKU_CARPENTER_RESCUED_MASK(carpenterType) (1 << (carpenterType))
+
+#define ENDAIKU_IS_CARPENTER_RESCUED(carpenterType) \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & \
+ ENDAIKU_CARPENTER_RESCUED_MASK(carpenterType)
+
+#define ENDAIKU_SET_CARPENTER_RESCUED(carpenterType) \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] |= \
+ ENDAIKU_CARPENTER_RESCUED_MASK((carpenterType))
+
+#define GET_EVENTCHKINF_CARPENTERS_RESCUED_FLAGS() \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_CARPENTERS_RESCUED] & EVENTCHKINF_CARPENTERS_ALL_RESCUED_MASK
#define EVENTCHKINF_94 0x94
#define EVENTCHKINF_95 0x95
@@ -632,48 +659,35 @@ typedef enum LinkAge {
#define EVENTCHKINF_C8 0xC8
#define EVENTCHKINF_C9 0xC9
-// 0xD0-0xD6
-#define EVENTCHKINF_SONGS_FOR_FROGS_INDEX 13
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT 6
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_SOT ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
-#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
-
-// 0xDA-0xDE
-#define EVENTCHKINF_DA_DB_DC_DD_DE_INDEX 13
-#define EVENTCHKINF_DA_MASK (1 << 10)
-#define EVENTCHKINF_DB_MASK (1 << 11)
-#define EVENTCHKINF_DC_MASK (1 << 12)
-#define EVENTCHKINF_DD_MASK (1 << 13)
-#define EVENTCHKINF_DE_MASK (1 << 14)
-
-
-#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
+// EVENTCHKINF 0xD0-0xD6
+#define EVENTCHKINF_INDEX_SONGS_FOR_FROGS EVENTCHKINF_INDEX(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR)
+#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR 0xD0
+#define EVENTCHKINF_SONGS_FOR_FROGS_ZL 0xD1
+#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA 0xD2
+#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS 0xD3
+#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA 0xD4
+#define EVENTCHKINF_SONGS_FOR_FROGS_SOT 0xD5
+#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS 0xD6
+
+// EVENTCHKINF 0xDA-0xDE
+#define EVENTCHKINF_INDEX_SKULLTULA_REWARD 0xD
+#define EVENTCHKINF_SKULLTULA_REWARD_10 0xDA
+#define EVENTCHKINF_SKULLTULA_REWARD_20 0xDB
+#define EVENTCHKINF_SKULLTULA_REWARD_30 0xDC
+#define EVENTCHKINF_SKULLTULA_REWARD_40 0xDD
+#define EVENTCHKINF_SKULLTULA_REWARD_50 0xDE
/*
* SaveContext.itemGetInf
*/
+#define ITEMGETINF_INDEX(flag) ((flag) >> 4)
+#define ITEMGETINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] & ITEMGETINF_MASK(flag))
+#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX(flag)] |= ITEMGETINF_MASK(flag))
+
#define ITEMGETINF_TALON_BOTTLE 0x02
#define ITEMGETINF_03 0x03
#define ITEMGETINF_04 0x04
@@ -696,23 +710,20 @@ typedef enum LinkAge {
#define ITEMGETINF_16 0x16
#define ITEMGETINF_17 0x17
-// 0x18-0x1A
-#define ITEMGETINF_18_19_1A_INDEX 1
-#define ITEMGETINF_18_SHIFT 8
-#define ITEMGETINF_19_SHIFT 9
-#define ITEMGETINF_1A_SHIFT 10
-#define ITEMGETINF_18_MASK (1 << ITEMGETINF_18_SHIFT)
-#define ITEMGETINF_19_MASK (1 << ITEMGETINF_19_SHIFT)
-#define ITEMGETINF_1A_MASK (1 << ITEMGETINF_1A_SHIFT)
-#define ITEMGETINF_18 ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_18_SHIFT)
-#define ITEMGETINF_19 ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_19_SHIFT)
-#define ITEMGETINF_1A ((ITEMGETINF_18_19_1A_INDEX << 4) | ITEMGETINF_1A_SHIFT)
+// ITEMGETINF 0x18-0x1A
+#define ITEMGETINF_INDEX_18_19_1A 1
+#define ITEMGETINF_18 0x18
+#define ITEMGETINF_19 0x19
+#define ITEMGETINF_1A 0x1A
#define ITEMGETINF_1B 0x1B
#define ITEMGETINF_1C 0x1C
#define ITEMGETINF_1D 0x1D
-#define ITEMGETINF_1E 0x1E
-#define ITEMGETINF_1F 0x1F
+#define ITEMGETINF_FOREST_STAGE_STICK_UPGRADE 0x1E
+// This flag is shared by two events; It is set when obtaining the Deku Nut upgrade at the Forest Stage and when obtaining Poachers Saw.
+// This will make obtaining the Deku Nut upgrade impossible if Poachers Saw is obtained first.
+// This flag is never read for the Poachers Saw event, so the overlap only causes an issue for the Deku Nut Upgrade. It will not prevent obtaining Poachers Saw.
+#define ITEMGETINF_FOREST_STAGE_NUT_UPGRADE 0x1F
#define ITEMGETINF_23 0x23
#define ITEMGETINF_24 0x24
#define ITEMGETINF_25 0x25
@@ -729,14 +740,19 @@ typedef enum LinkAge {
#define ITEMGETINF_3F 0x3F
-#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-
-
/*
* SaveContext.infTable
*/
+#define INFTABLE_INDEX(flag) ((flag) >> 4)
+#define INFTABLE_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] & INFTABLE_MASK(flag))
+#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] |= INFTABLE_MASK(flag))
+#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[INFTABLE_INDEX(flag)] &= ~INFTABLE_MASK(flag))
+
+// INFTABLE 0x0-0xF
+#define INFTABLE_INDEX_0 0
#define INFTABLE_00 0x00
#define INFTABLE_01 0x01
#define INFTABLE_03 0x03
@@ -864,18 +880,18 @@ typedef enum LinkAge {
#define INFTABLE_197 0x197
#define INFTABLE_198 0x198
-// 0x199-0x19F
-#define INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX 25
-#define INFTABLE_199_MASK (1 << 9)
-#define INFTABLE_19A_MASK (1 << 10)
-#define INFTABLE_19B_MASK (1 << 11)
-#define INFTABLE_19C_MASK (1 << 12)
-#define INFTABLE_19D_MASK (1 << 13)
-#define INFTABLE_19E_MASK (1 << 14)
-#define INFTABLE_19F_MASK (1 << 15)
-
-// 0x1A0-0x1AF
-#define INFTABLE_1AX_INDEX 26
+// INFTABLE 0x199-0x19F
+#define INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F 25
+#define INFTABLE_199 0x199
+#define INFTABLE_19A 0x19A
+#define INFTABLE_19B 0x19B
+#define INFTABLE_19C 0x19C
+#define INFTABLE_19D 0x19D
+#define INFTABLE_19E 0x19E
+#define INFTABLE_19F 0x19F
+
+// INFTABLE 0x1A0-0x1AF
+#define INFTABLE_INDEX_1AX 26
#define INFTABLE_1A0_SHIFT 0
#define INFTABLE_1A1_SHIFT 1
#define INFTABLE_1A2_SHIFT 2
@@ -889,80 +905,78 @@ typedef enum LinkAge {
#define INFTABLE_1AB_SHIFT 11
#define INFTABLE_1AD_SHIFT 13
-// 0x1D0-0x1DF
-#define INFTABLE_1DX_INDEX 29
-
-
-#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
+// INFTABLE 0x1D0-0x1DF
+#define INFTABLE_INDEX_1DX INFTABLE_INDEX(INFTABLE_1D0)
+#define INFTABLE_1D0 0x1D0
/*
* SaveContext.eventInf
*/
-// 0x00-0x0F
-// horses related
-#define EVENTINF_HORSES_INDEX 0
-#define EVENTINF_HORSES_STATE_SHIFT 0
-#define EVENTINF_HORSES_HORSETYPE_SHIFT 4
-#define EVENTINF_HORSES_05_SHIFT 5
-#define EVENTINF_HORSES_06_SHIFT 6
-#define EVENTINF_HORSES_08_SHIFT 8
-#define EVENTINF_HORSES_0A_SHIFT 10
-#define EVENTINF_HORSES_0F_SHIFT 15 // unused?
-#define EVENTINF_HORSES_STATE_MASK (0xF << EVENTINF_HORSES_STATE_SHIFT)
-#define EVENTINF_HORSES_HORSETYPE_MASK (1 << EVENTINF_HORSES_HORSETYPE_SHIFT)
-#define EVENTINF_HORSES_05_MASK (1 << EVENTINF_HORSES_05_SHIFT)
-#define EVENTINF_HORSES_06_MASK (1 << EVENTINF_HORSES_06_SHIFT)
-#define EVENTINF_HORSES_0F_MASK (1 << EVENTINF_HORSES_0F_SHIFT)
-#define EVENTINF_HORSES_05 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_05_SHIFT)
-#define EVENTINF_HORSES_06 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_06_SHIFT)
+#define EVENTINF_INDEX(flag) ((flag) >> 4)
+#define EVENTINF_MASK(flag) (1 << ((flag) & 0xF))
+
+#define GET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] & EVENTINF_MASK(flag))
+#define SET_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] |= EVENTINF_MASK(flag))
+#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[EVENTINF_INDEX(flag)] &= ~EVENTINF_MASK(flag))
+
+// EVENTINF 0x00-0x0F
+// Ingo Race, Lon Lon Ranch minigames, and Horseback Archery minigame flags
+#define EVENTINF_INDEX_HORSES 0
+// EVENTINF 0x00-0x03 reserved for IngoRaceState
+#define EVENTINF_INGO_RACE_STATE_MASK (0xF << 0x00)
+typedef enum IngoRaceState {
+ /* 0 */ INGO_RACE_STATE_OFFER_RENTAL,
+ /* 1 */ INGO_RACE_STATE_HORSE_RENTAL_PERIOD,
+ /* 2 */ INGO_RACE_STATE_RACING,
+ /* 3 */ INGO_RACE_STATE_PLAYER_LOSE,
+ /* 4 */ INGO_RACE_STATE_FIRST_WIN,
+ /* 5 */ INGO_RACE_STATE_TRAPPED_WIN_UNUSED,
+ /* 6 */ INGO_RACE_STATE_TRAPPED_WIN_EPONA, // Ingo Traps you in Lon Lon
+ /* 7 */ INGO_RACE_STATE_REMATCH
+} IngoRaceState;
+
+#define EVENTINF_INGO_RACE_HORSETYPE 0x04
+#define EVENTINF_INGO_RACE_LOST_ONCE 0x05
+#define EVENTINF_INGO_RACE_SECOND_RACE 0x06
// Used in z_en_ta (Talon) to store Cucco game winning status
// and in z_en_ge1 (Gerudo) to store archery in-progress status
-#define EVENTINF_HORSES_08 ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_08_SHIFT)
+#define EVENTINF_HORSES_08 0x08
#define EVENTINF_CUCCO_GAME_WON EVENTINF_HORSES_08
// Used in z_en_ta (Talon) and z_en_ma3 (Malon) to store minigame finishing status
-#define EVENTINF_HORSES_0A ((EVENTINF_HORSES_INDEX << 4) | EVENTINF_HORSES_0A_SHIFT)
+#define EVENTINF_HORSES_0A 0x0A
#define EVENTINF_CUCCO_GAME_FINISHED EVENTINF_HORSES_0A
-
-typedef enum EventInfHorsesState {
- /* 0 */ EVENTINF_HORSES_STATE_0,
- /* 1 */ EVENTINF_HORSES_STATE_1,
- /* 2 */ EVENTINF_HORSES_STATE_2,
- /* 3 */ EVENTINF_HORSES_STATE_3,
- /* 4 */ EVENTINF_HORSES_STATE_4,
- /* 5 */ EVENTINF_HORSES_STATE_5,
- /* 6 */ EVENTINF_HORSES_STATE_6,
- /* 7 */ EVENTINF_HORSES_STATE_7
-} EventInfHorsesState;
+#define EVENTINF_INGO_RACE_0F 0x0F // unused?
// "InRaceSeq"
-#define GET_EVENTINF_HORSES_STATE() \
- ((gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & EVENTINF_HORSES_STATE_MASK) >> EVENTINF_HORSES_STATE_SHIFT)
-#define SET_EVENTINF_HORSES_STATE(v) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~EVENTINF_HORSES_STATE_MASK) | \
- ((v) << EVENTINF_HORSES_STATE_SHIFT)
+#define GET_EVENTINF_INGO_RACE_STATE() (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & EVENTINF_INGO_RACE_STATE_MASK)
-#define GET_EVENTINF_HORSES_HORSETYPE() \
- ((gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & EVENTINF_HORSES_HORSETYPE_MASK) >> EVENTINF_HORSES_HORSETYPE_SHIFT)
-#define SET_EVENTINF_HORSES_HORSETYPE(v) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~EVENTINF_HORSES_HORSETYPE_MASK) | \
- ((v) << EVENTINF_HORSES_HORSETYPE_SHIFT)
+#define SET_EVENTINF_INGO_RACE_STATE(v) \
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & ~EVENTINF_INGO_RACE_STATE_MASK) | (v)
-#define SET_EVENTINF_HORSES_0F(v) \
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = \
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & ~EVENTINF_HORSES_0F_MASK) | ((v) << EVENTINF_HORSES_0F_SHIFT)
+#define GET_EVENTINF_INGO_RACE_FLAG(flag) \
+ ((gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & EVENTINF_MASK(flag)) >> ((flag) & 0xF))
+#define SET_EVENTINF_INGO_RACE_FLAG(flag) \
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & 0xFFFF) | EVENTINF_MASK(flag)
+
+#define WRITE_EVENTINF_INGO_RACE_FLAG(flag, v) \
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = \
+ (gSaveContext.eventInf[EVENTINF_INDEX_HORSES] & ~EVENTINF_MASK(flag)) | ((v) << ((flag) & 0xF))
+
+#define GET_EVENTINF_INGO_RACE_HORSETYPE() GET_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_HORSETYPE)
+#define WRITE_EVENTINF_INGO_RACE_HORSETYPE(v) WRITE_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_HORSETYPE, v)
+
+#define WRITE_EVENTINF_INGO_RACE_0F(v) WRITE_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_0F, v)
// Is the running man race active
#define EVENTINF_MARATHON_ACTIVE 0x10
-// 0x20-0x24
-#define EVENTINF_20_21_22_23_24_INDEX 2
+// EVENTINF 0x20-0x24
+#define EVENTINF_INDEX_20_21_22_23_24 2
#define EVENTINF_20_MASK (1 << 0)
#define EVENTINF_21_MASK (1 << 1)
#define EVENTINF_22_MASK (1 << 2)
@@ -972,11 +986,6 @@ typedef enum EventInfHorsesState {
#define EVENTINF_30 0x30
-#define GET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
-#define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
-#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
-
-
extern SaveContext gSaveContext;
#endif
diff --git a/linker_scripts/makerom.ld b/linker_scripts/makerom.ld
new file mode 100644
index 0000000000..a898c6b34f
--- /dev/null
+++ b/linker_scripts/makerom.ld
@@ -0,0 +1,13 @@
+#include "boot.h"
+
+/* These are only here due to iQue entry.s using ori to load the lower halves of symbols
+ * rather than addiu, so the usual relocation operators %hi() and %lo() can't be used. */
+
+_bootSegmentBssStart_HI = _bootSegmentBssStart >> 16;
+
+_bootSegmentBssSize_HI = _bootSegmentBssSize >> 16;
+
+bootproc_HI = bootproc >> 16;
+
+BOOT_STACK_TOP = (sBootThreadStack + BOOT_STACK_SIZE);
+BOOT_STACK_TOP_HI = BOOT_STACK_TOP >> 16;
diff --git a/linker_scripts/soundfont.ld b/linker_scripts/soundfont.ld
index d914a7de31..c480e36867 100644
--- a/linker_scripts/soundfont.ld
+++ b/linker_scripts/soundfont.ld
@@ -4,14 +4,15 @@ OUTPUT_ARCH (mips)
SECTIONS {
- .rodata :
+ .rodata ALIGN(16) :
{
*(.data*)
*(.rodata*)
. = ALIGN(16);
- __LEN__ = . - ADDR(.rodata);
}
+ __LEN__ = ABSOLUTE(SIZEOF(.rodata));
+
/DISCARD/ :
{
*(*);
diff --git a/mod_assets/scenes/example/example_scene_cs_0.c b/mod_assets/scenes/example/example_scene_cs_0.c
index 3f09e7549d..9ddaf16d1f 100644
--- a/mod_assets/scenes/example/example_scene_cs_0.c
+++ b/mod_assets/scenes/example/example_scene_cs_0.c
@@ -4,7 +4,7 @@
CutsceneData gExampleCS[] = {
- CS_BEGIN_CUTSCENE(23, 308),
+ CS_HEADER(23, 308),
// CS_DESTINATION(CS_DEST_KOKIRI_FOREST_FARORE, 99, 0),
CS_TEXT_LIST(2),
CS_TEXT(0x1234, 0, 0, CS_TEXT_CHOICE, 0x0001, 0x0002),
@@ -117,6 +117,6 @@ CutsceneData gExampleCS[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0, 30, 60.0f, 0, 42, 502, 0),
CS_CAM_POINT(CS_CAM_CONTINUE, 0, 30, 60.0f, 0, 41, 502, 0),
CS_CAM_POINT(CS_CAM_STOP, 0, 0, 0.0f, 0, 0, 0, 0),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
diff --git a/requirements.txt b/requirements.txt
index 806233c045..e510f0d935 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
# Setup and compression
-crunch64>=0.3.1,<1.0.0
+crunch64>=0.5.1,<1.0.0
ipl3checksum>=1.2.0,<2.0.0
pyyaml>=6.0.1,<7.0.0
diff --git a/spec b/spec
index 8575e33809..4d57f16563 100644
--- a/spec
+++ b/spec
@@ -590,8 +590,8 @@ beginseg
include "$(BUILD_DIR)/src/code/z_actor.o"
include "$(BUILD_DIR)/src/code/z_actor_dlftbls.o"
include "$(BUILD_DIR)/src/code/z_bgcheck.o"
- include "$(BUILD_DIR)/src/code/code_800430A0.o"
- include "$(BUILD_DIR)/src/code/code_80043480.o"
+ include "$(BUILD_DIR)/src/code/z_bg_collect.o"
+ include "$(BUILD_DIR)/src/code/z_bg_item.o"
include "$(BUILD_DIR)/src/code/z_camera.o"
include "$(BUILD_DIR)/src/code/z_collision_btltbls.o"
include "$(BUILD_DIR)/src/code/z_collision_check.o"
@@ -599,12 +599,12 @@ beginseg
include "$(BUILD_DIR)/src/code/z_debug.o"
include "$(BUILD_DIR)/src/code/z_debug_display.o"
include "$(BUILD_DIR)/src/code/z_demo.o"
- include "$(BUILD_DIR)/src/code/code_80069420.o"
+ include "$(BUILD_DIR)/src/code/z_memory_utils.o"
include "$(BUILD_DIR)/src/code/z_draw.o"
include "$(BUILD_DIR)/src/code/z_sfx_source.o"
include "$(BUILD_DIR)/src/code/z_elf_message.o"
include "$(BUILD_DIR)/src/code/z_face_reaction.o"
- include "$(BUILD_DIR)/src/code/code_8006C3A0.o"
+ include "$(BUILD_DIR)/src/code/z_env_flags.o"
include "$(BUILD_DIR)/src/code/z_fcurve_data.o"
include "$(BUILD_DIR)/src/code/z_fcurve_data_skelanime.o"
include "$(BUILD_DIR)/src/code/z_game_dlftbls.o"
@@ -638,7 +638,7 @@ beginseg
include "$(BUILD_DIR)/src/code/z_rcp.o"
include "$(BUILD_DIR)/src/code/z_room.o"
include "$(BUILD_DIR)/src/code/z_sample.o"
- include "$(BUILD_DIR)/src/code/code_80097A00.o"
+ include "$(BUILD_DIR)/src/code/z_inventory.o"
include "$(BUILD_DIR)/src/code/z_scene.o"
include "$(BUILD_DIR)/src/code/object_table.o"
include "$(BUILD_DIR)/src/code/z_scene_table.o"
@@ -670,7 +670,7 @@ beginseg
#if IS_CAMERA_DEBUG_ENABLED
include "$(BUILD_DIR)/src/code/db_camera.o"
#endif
- include "$(BUILD_DIR)/src/code/code_800BB0A0.o"
+ include "$(BUILD_DIR)/src/code/z_cutscene_spline.o"
#if ENABLE_MEMPAK
include "$(BUILD_DIR)/src/code/mempak.o"
#endif
@@ -701,7 +701,10 @@ beginseg
include "$(BUILD_DIR)/src/code/sys_matrix.o"
include "$(BUILD_DIR)/src/code/sys_ucode.o"
include "$(BUILD_DIR)/src/code/sys_rumble.o"
- include "$(BUILD_DIR)/src/code/code_800D31A0.o"
+ include "$(BUILD_DIR)/src/code/sys_freeze.o"
+#if DEBUG_FEATURES
+ include "$(BUILD_DIR)/src/code/sys_debug_controller.o"
+#endif
include "$(BUILD_DIR)/src/code/irqmgr.o"
#if PLATFORM_N64
include "$(BUILD_DIR)/src/code/code_n64dd_800AD410.o"
@@ -747,6 +750,7 @@ beginseg
include "$(BUILD_DIR)/src/audio/sequence.o"
include "$(BUILD_DIR)/src/audio/data.o"
include "$(BUILD_DIR)/src/audio/session_config.o"
+ include "$(BUILD_DIR)/src/audio/session_init.o"
#if PLATFORM_N64
include "$(BUILD_DIR)/src/libu64/gfxprint.o"
include "$(BUILD_DIR)/src/libu64/rcp_utils.o"
@@ -757,7 +761,7 @@ beginseg
include "$(BUILD_DIR)/src/libu64/mtxuty-cvt.o"
#endif
include "$(BUILD_DIR)/src/libu64/pad.o"
- include "$(BUILD_DIR)/src/libu64/code_800FC620.o"
+ include "$(BUILD_DIR)/src/libu64/system_heap.o"
include "$(BUILD_DIR)/src/libu64/padsetup.o"
#else
include "$(BUILD_DIR)/src/libu64/logseverity_gc.o"
@@ -769,7 +773,7 @@ beginseg
#endif
include "$(BUILD_DIR)/src/libu64/relocation_gc.o"
include "$(BUILD_DIR)/src/libu64/load_gc.o"
- include "$(BUILD_DIR)/src/libu64/code_800FC620.o"
+ include "$(BUILD_DIR)/src/libu64/system_heap.o"
include "$(BUILD_DIR)/src/libu64/pad.o"
include "$(BUILD_DIR)/src/libu64/padsetup.o"
#endif
@@ -899,7 +903,7 @@ beginseg
include "$(BUILD_DIR)/src/libultra/mgu/translate.o"
#endif
include "$(BUILD_DIR)/src/libultra/io/contramwrite.o"
-#if OOT_VERSION == NTSC_1_2 || (PLATFORM_GC && !DEBUG_FEATURES)
+#if OOT_VERSION >= PAL_1_0 && !(OOT_PAL_N64 || DEBUG_FEATURES)
include "$(BUILD_DIR)/src/libultra/io/vimodefpallan1.o"
#endif
#if !DEBUG_FEATURES
diff --git a/src/audio/general.c b/src/audio/general.c
index a95ec453f4..1c0f000dad 100644
--- a/src/audio/general.c
+++ b/src/audio/general.c
@@ -6,6 +6,8 @@
#define AUDIO_PRINTF osSyncPrintf
#elif IDO_PRINTF_WORKAROUND
#define AUDIO_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define AUDIO_PRINTF(format, args...) (void)0
#else
#define AUDIO_PRINTF(format, ...) (void)0
#endif
@@ -1189,7 +1191,7 @@ u8 D_8016B9F3;
u8 sFanfareStartTimer;
u16 sFanfareSeqId;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
u16 sPrevAmbienceSeqId;
#endif
@@ -1707,7 +1709,7 @@ void AudioOcarina_PlayControllerInput(u8 unused) {
} else {
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
sCurOcarinaBendIndex = 0;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
sCurOcarinaVibrato = 0;
#endif
sCurOcarinaBendFreq = 1.0f; // No bend
@@ -1854,7 +1856,7 @@ void AudioOcarina_PlaybackSong(void) {
}
// Update vibrato
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (sNotePlaybackVibrato != sPlaybackSong[sPlaybackNotePos].vibrato) {
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
// Sets vibrato to io port 6
@@ -2145,7 +2147,7 @@ void AudioOcarina_RecordSong(void) {
} else if (sRecordOcarinaVolume != sCurOcarinaVolume) {
noteChanged = true;
} else if (sRecordOcarinaVibrato != sCurOcarinaVibrato) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2153,7 +2155,7 @@ void AudioOcarina_RecordSong(void) {
noteChanged = true;
#endif
} else if (sRecordOcarinaBendIndex != sCurOcarinaBendIndex) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sRecordingState != OCARINA_RECORD_SCARECROW_SPAWN) {
noteChanged = true;
}
@@ -2494,7 +2496,7 @@ f32 Audio_ComputeSfxFreqScale(u8 bankId, u8 entryIdx) {
switch (bankId) {
case BANK_VOICE:
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (((entry->sfxId & 0xFF) < 0x40) && (sAudioBaseFilter2 != 0)) {
phi_v0 = true;
} else if (((entry->sfxId & 0xFF) >= 0x40) && (sAudioExtraFilter2 != 0)) {
@@ -2615,7 +2617,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
f32 behindScreenZ;
u8 baseFilter = 0;
SfxBankEntry* entry = &gSfxBanks[bankId][entryIdx];
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
s32 pad;
#endif
@@ -2656,7 +2658,7 @@ void Audio_SetSfxProperties(u8 bankId, u8 entryIdx, u8 channelIndex) {
}
}
if (sAudioBaseFilter != 0) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if ((bankId == BANK_PLAYER) || (bankId == BANK_ITEM) ||
((bankId == BANK_VOICE) && ((entry->sfxId & 0xFF) < 0x40)))
#else
@@ -3240,7 +3242,7 @@ void Audio_PlaySceneSequence(u16 seqId) {
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
}
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
@@ -3384,7 +3386,7 @@ void func_800F5B58(void) {
if (sPrevMainBgmSeqId == NA_BGM_DISABLED) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
} else {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (sPrevMainBgmSeqId == NA_BGM_NATURE_AMBIENCE) {
sPrevMainBgmSeqId = sPrevAmbienceSeqId;
}
@@ -3520,7 +3522,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
volumeFadeInTimer);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, 8, NA_BGM_ENEMY);
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3545,7 +3547,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
sPrevSeqMode = seqMode + 0x80;
} else {
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
// Empty
#elif OOT_VERSION < PAL_1_0
if ((seqMode == SEQ_MODE_ENEMY) && (seqId != NA_BGM_FIELD_LOGIC) &&
@@ -3601,7 +3603,7 @@ void Audio_SetBgmEnemyVolume(f32 dist) {
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sAudioEnemyVol, 10);
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3611,7 +3613,7 @@ void Audio_SetBgmEnemyVolume(f32 dist) {
}
}
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE)
#else
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId > NA_BGM_NATURE_AMBIENCE)
@@ -3929,7 +3931,7 @@ void func_800F6C34(void) {
sFanfareStartTimer = 0;
D_8016B9F3 = 1;
sMalonSingingDisabled = false;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
sPrevAmbienceSeqId = NA_BGM_DISABLED;
#endif
}
@@ -3990,7 +3992,7 @@ void Audio_StartNatureAmbienceSequence(u16 playerIO, u16 channelMask) {
}
#endif
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if ((Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
(Audio_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_NATURE_AMBIENCE)) {
Audio_StopSequence(SEQ_PLAYER_BGM_MAIN, 0);
@@ -4024,7 +4026,7 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) {
if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) ||
!(sSeqFlags[gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE)) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) {
sPrevAmbienceSeqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId;
}
diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c
index 3e66c79329..0aa3324d73 100644
--- a/src/audio/lib/load.c
+++ b/src/audio/lib/load.c
@@ -1250,8 +1250,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
ramAddr = AudioHeap_Alloc(&gAudioCtx.initPool, gAudioHeapInitSizes.permanentPoolSize);
if (ramAddr == NULL) {
- // cast away const from gAudioHeapInitSizes
- *((u32*)&gAudioHeapInitSizes.permanentPoolSize) = 0;
+ gAudioHeapInitSizes.permanentPoolSize = 0;
}
AudioHeap_InitPool(&gAudioCtx.permanentPool, ramAddr, gAudioHeapInitSizes.permanentPoolSize);
diff --git a/src/audio/lib/seqplayer.c b/src/audio/lib/seqplayer.c
index 71132797e2..a7091b24b3 100644
--- a/src/audio/lib/seqplayer.c
+++ b/src/audio/lib/seqplayer.c
@@ -437,7 +437,7 @@ void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
s32 finished = 0;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (seqPlayer->finished == 1) {
finished = 1;
}
@@ -457,7 +457,7 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
}
if (AudioLoad_IsFontLoadComplete(seqPlayer->defaultFont)) {
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (finished == 1) {
AudioHeap_ReleaseNotesForFont(seqPlayer->defaultFont);
}
diff --git a/src/audio/lib/synthesis.c b/src/audio/lib/synthesis.c
index d19ed4ae5f..85fb8d2610 100644
--- a/src/audio/lib/synthesis.c
+++ b/src/audio/lib/synthesis.c
@@ -644,7 +644,7 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updat
// Leak reverb between the left and right channels
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
if ((reverb->leakRtl != 0) || (reverb->leakLtr != 0))
#else
if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO))
@@ -785,7 +785,7 @@ Acmd* AudioSynth_ProcessNote(s32 noteIndex, NoteSubEu* noteSubEu, NoteSynthesisS
samplesLenFixedPoint = (resamplingRateFixedPoint * aiBufLen * 2) + synthState->samplePosFrac;
numSamplesToLoad = samplesLenFixedPoint >> 16;
-#if !(OOT_VERSION < NTSC_1_1 || PLATFORM_GC)
+#if !(OOT_VERSION < NTSC_1_1 || !PLATFORM_N64)
if (numSamplesToLoad == 0) {
skipBytes = false;
}
diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c
index c074f596a1..f47dbade7e 100644
--- a/src/audio/lib/thread.c
+++ b/src/audio/lib/thread.c
@@ -17,7 +17,7 @@ AudioTask* AudioThread_Update(void) {
return AudioThread_UpdateImpl();
}
-#if !(OOT_VERSION < PAL_1_0 || PLATFORM_GC)
+#if !(OOT_VERSION < PAL_1_0 || !PLATFORM_N64)
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
@@ -26,7 +26,7 @@ static AudioTask* sWaitingAudioTask = NULL;
* This is Audio_Update for the audio thread
*/
AudioTask* AudioThread_UpdateImpl(void) {
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
#endif
diff --git a/src/audio/session_config.c b/src/audio/session_config.c
index 8c2824eee4..a531d6c27b 100644
--- a/src/audio/session_config.c
+++ b/src/audio/session_config.c
@@ -4,32 +4,6 @@ AudioContext gAudioCtx;
AudioCustomUpdateFunction gAudioCustomUpdateFunction;
s32 D_801755D8[3]; // unused
-const TempoData gTempoData = {
- 0x1C00, // unk_00
- SEQTICKS_PER_BEAT, // seqTicksPerBeat
-};
-
-// TODO: Extract from table?
-#define NUM_SOUNDFONTS 38
-#define SFX_SEQ_SIZE 0x6A90
-#define SFX_SOUNDFONT_1_SIZE 0x3AA0
-#define SFX_SOUNDFONT_2_SIZE 0x17B0
-
-// Sizes of everything on the init pool
-#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
-#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
-#if OOT_VERSION < PAL_1_0 || PLATFORM_GC
-#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE)
-#else
-#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONT_1_SIZE + SFX_SOUNDFONT_2_SIZE + 0x10)
-#endif
-
-const AudioHeapInitSizes gAudioHeapInitSizes = {
- ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
- ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
- ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
-};
-
#define DEFAULT_REVERB_SETTINGS \
{ 1, 0x30, 0x3000, 0, 0, 0x7FFF, 0x0000, 0x0000, 0xFF, 0x3000, 0x0, 0x0 }
diff --git a/src/audio/session_init.c b/src/audio/session_init.c
new file mode 100644
index 0000000000..a6e67f40d4
--- /dev/null
+++ b/src/audio/session_init.c
@@ -0,0 +1,26 @@
+#include "global.h"
+#include "assets/audio/sequence_sizes.h"
+#include "assets/audio/soundfont_sizes.h"
+
+#define SFX_SEQ_SIZE Sequence_0_SIZE
+#define SFX_SOUNDFONTS_SIZE (Soundfont_0_SIZE + Soundfont_1_SIZE)
+
+TempoData gTempoData = {
+ 0x1C00, // unk_00
+ SEQTICKS_PER_BEAT, // seqTicksPerBeat
+};
+
+// Sizes of everything on the init pool
+#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
+#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
+#if OOT_VERSION < PAL_1_0 || !PLATFORM_N64
+#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE)
+#else
+#define PERMANENT_POOL_SIZE (SFX_SEQ_SIZE + SFX_SOUNDFONTS_SIZE + 0x10)
+#endif
+
+AudioHeapInitSizes gAudioHeapInitSizes = {
+ ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
+ ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE), // init pool size
+ ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
+};
diff --git a/src/audio/sfx.c b/src/audio/sfx.c
index 01d6952db0..f034283c1e 100644
--- a/src/audio/sfx.c
+++ b/src/audio/sfx.c
@@ -342,7 +342,7 @@ void Audio_ChooseActiveSfx(u8 bankId) {
entry->sfxId, entry->posX, entry->posZ, *entry->posX, *entry->posY, *entry->posZ);
}
entry->priority = (u32)entry->dist + (SQ(0xFF - sfxImportance) * SQ(76));
-#if OOT_VERSION < NTSC_1_1 || PLATFORM_GC
+#if OOT_VERSION < NTSC_1_1 || !PLATFORM_N64
temp3 = entry->sfxId; // fake
entry->priority = entry->priority + temp3 - temp3;
#endif
diff --git a/src/boot/driverominit.c b/src/boot/driverominit.c
index 7d1441cdd9..5ed69abe07 100644
--- a/src/boot/driverominit.c
+++ b/src/boot/driverominit.c
@@ -3,7 +3,14 @@
OSPiHandle __DriveRomHandle;
OSPiHandle* osDriveRomInit(void) {
+#if PLATFORM_IQUE && defined(NON_MATCHING)
+ // On iQue, the compiled output of this file is patched so that the
+ // `!first` check is always taken. For non-matching builds, we edit the
+ // source code instead.
+ static u32 first = false;
+#else
static u32 first = true;
+#endif
register s32 status;
register u32 value;
register u32 prevInt;
diff --git a/src/boot/mio0.s b/src/boot/mio0.s
index a3fb8eba26..a6c2eee6bc 100644
--- a/src/boot/mio0.s
+++ b/src/boot/mio0.s
@@ -1,10 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void Mio0_Decompress(void* src, void* dst);
@@ -12,53 +9,56 @@
* Decompress Mio0 chunk
*/
LEAF(Mio0_Decompress)
- lw $a3, 8($a0) // compressed offset
- lw $t9, 0xC($a0) // uncompressed offset
- lw $t8, 4($a0) // decompressed length
- add $a3, $a3, $a0 // compressed start
- add $t9, $t9, $a0 // uncompressed start
- move $a2, $zero // 0
- addi $a0, $a0, 0x10 // move past header
- add $t8, $t8, $a1 // dst + decompressed length = end
+ lw a3, 0x08(a0) /* compressed offset */
+ lw t9, 0x0C(a0) /* uncompressed offset */
+ lw t8, 0x04(a0) /* decompressed length */
+ add a3, a3, a0 /* compressed start */
+ add t9, t9, a0 /* uncompressed start */
+ move a2, zero /* 0 */
+ addi a0, a0, 0x10 /* move past header */
+ add t8, t8, a1 /* dst + decompressed length = end */
mainloop:
- bnez $a2, 1f
- nop
- lw $t0, ($a0)
- li $a2, 32
- addi $a0, $a0, 4
+ bnez a2, 1f
+
+ lw t0, (a0)
+ li a2, 32
+ addi a0, a0, 4
1:
- slt $t1, $t0, $zero
- beqz $t1, read_comp
- nop
- lb $t2, ($t9) // read 1 byte from uncompressed data
- addi $t9, $t9, 1 // advance uncompressed start
- addi $a1, $a1, 1
+ slt t1, t0, zero
+ beqz t1, read_comp
+
+ lb t2, (t9) /* read 1 byte from uncompressed data */
+ sb t2, (a1) /* store uncompressed byte */
+ addi t9, t9, 1 /* advance uncompressed start */
+ addi a1, a1, 1
b next_iter
- sb $t2, -1($a1) // store uncompressed byte
+
read_comp:
- lhu $t2, ($a3) // read 2 bytes from compressed data
- addi $a3, $a3, 2 // advance compressed start
- srl $t3, $t2, 0xC
- andi $t2, $t2, 0xFFF
- beqz $t3, 3f
- sub $t1, $a1, $t2
- addi $t3, $t3, 2
+ lhu t2, (a3) /* read 2 bytes from compressed data */
+ addi a3, a3, 2 /* advance compressed start */
+ srl t3, t2, 0xC
+ andi t2, t2, 0xFFF
+ sub t1, a1, t2
+ beqz t3, 3f
+
+ addi t3, t3, 2
2:
- lb $t2, -1($t1)
- addi $t3, $t3, -1
- addi $t1, $t1, 1
- addi $a1, $a1, 1
- bnez $t3, 2b
- sb $t2, -1($a1)
+ lb t2, -1(t1)
+ addi t3, t3, -1
+ addi t1, t1, 1
+ sb t2, (a1)
+ addi a1, a1, 1
+ bnez t3, 2b
+
next_iter:
- sll $t0, $t0, 1
- bne $a1, $t8, mainloop // continue until decompressed length is reached
- addi $a2, $a2, -1
- jr $ra
- nop
+ sll t0, t0, 1
+ addi a2, a2, -1
+ bne a1, t8, mainloop /* continue until decompressed length is reached */
+
+ jr ra
3:
- lbu $t3, ($t9)
- addi $t9, $t9, 1
+ lbu t3, (t9)
+ addi t9, t9, 1
+ addi t3, t3, 0x12
b 2b
- addi $t3, $t3, 0x12
END(Mio0_Decompress)
diff --git a/src/boot/vimodepal60lan1.c b/src/boot/vimodepal60lan1.c
index 5a7bf692be..de95a66d99 100644
--- a/src/boot/vimodepal60lan1.c
+++ b/src/boot/vimodepal60lan1.c
@@ -23,7 +23,7 @@ OSViMode gCustomViModePal60Lan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
+ VI_CTRL_PIXEL_ADV(3), // ctrl
WIDTH(320), // width
BURST(58, 30, 4, 69), // burst
// Ideally VSYNC would be 525 but this produces marginally-too-slow retraces. 519 is the closest value that
diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c
index 82be71b2fd..d95e917610 100644
--- a/src/boot/z_locale.c
+++ b/src/boot/z_locale.c
@@ -2,6 +2,7 @@
#include "region.h"
#include "terminal.h"
#include "versions.h"
+#include "line_numbers.h"
s32 gCurrentRegion = 0;
@@ -55,15 +56,7 @@ void Locale_Init(void) {
PRINTF(VT_COL(RED, WHITE));
PRINTF(T("z_locale_init: 日本用かアメリカ用か判別できません\n",
"z_locale_init: Can't tell if it's for Japan or America\n"));
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../z_locale.c", 86);
-#elif OOT_VERSION < PAL_1_0
- LogUtils_HungupThread("../z_locale.c", 92);
-#elif OOT_VERSION < GC_JP
- LogUtils_HungupThread("../z_locale.c", 101);
-#else
- LogUtils_HungupThread("../z_locale.c", 118);
-#endif
+ LogUtils_HungupThread("../z_locale.c", LN4(86, 92, 101, 118, UNK_LINE));
PRINTF(VT_RST);
break;
}
diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c
index f2195d8206..bfafd48aef 100644
--- a/src/boot/z_std_dma.c
+++ b/src/boot/z_std_dma.c
@@ -23,12 +23,13 @@
#include "stack.h"
#include "terminal.h"
#include "compression.h"
+#include "line_numbers.h"
#if PLATFORM_N64
#include "n64dd.h"
#endif
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:88 pal-1.0:86 pal-1.1:86"
+ "ntsc-1.2:82 pal-1.0:80 pal-1.1:80"
StackEntry sDmaMgrStackInfo;
OSMesgQueue sDmaMgrMsgQueue;
@@ -297,14 +298,9 @@ NORETURN void DmaMgr_Error(DmaRequest* req, const char* filename, const char* er
Fault_AddHungupAndCrashImpl(buff1, buff2);
}
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) \
- DmaMgr_Error(req, filename, errorName, errorDesc)
-#elif OOT_VERSION < NTSC_1_1
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line1)
-#elif OOT_VERSION < GC_JP
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line2)
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line) DmaMgr_Error(req, filename, errorName, errorDesc)
#else
-#define DMA_ERROR(req, filename, errorName, errorDesc, file, line1, line2, line3) Fault_AddHungupAndCrash(file, line3)
+#define DMA_ERROR(req, filename, errorName, errorDesc, file, line) Fault_AddHungupAndCrash(file, line)
#endif
#if PLATFORM_GC
@@ -410,7 +406,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Segment Alignment Error",
T("セグメント境界をまたがってDMA転送することはできません",
"DMA transfers cannot cross segment boundaries"),
- "../z_std_dma.c", 575, 578, 726);
+ "../z_std_dma.c", LN3(575, 578, 726));
}
DmaMgr_DmaRomToRam(iter->romStart + (vrom - iter->file.vromStart), ram, size);
@@ -431,7 +427,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの途中からはDMA転送することはできません",
"DMA transfer cannot be performed from the middle of a compressed segment"),
- "../z_std_dma.c", 595, 598, 746);
+ "../z_std_dma.c", LN3(595, 598, 746));
}
if (size != iter->file.vromEnd - iter->file.vromStart) {
@@ -440,7 +436,7 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
DMA_ERROR(req, filename, "Can't Transfer Segment",
T("圧縮されたセグメントの一部だけをDMA転送することはできません",
"It is not possible to DMA only part of a compressed segment"),
- "../z_std_dma.c", 601, 604, 752);
+ "../z_std_dma.c", LN3(601, 604, 752));
}
// Reduce the thread priority and decompress the file, the decompression routine handles the DMA
@@ -479,8 +475,8 @@ void DmaMgr_ProcessRequest(DmaRequest* req) {
// Error, rom is compressed so DMA may only be requested within the filesystem bounds
DMA_ERROR(req, NULL, "DATA DON'T EXIST",
- T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c", 621,
- 624, 771);
+ T("該当するデータが存在しません", "Corresponding data does not exist"), "../z_std_dma.c",
+ LN3(621, 624, 771));
return;
} else {
// ROM is uncompressed, allow arbitrary DMA even if the region is not marked in the filesystem
@@ -550,7 +546,7 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
(size == 0) || (size & 1)) {
//! @bug `req` is passed to `DMA_ERROR` without rom, ram and size being set
DMA_ERROR(req, NULL, "ILLIGAL DMA-FUNCTION CALL", T("パラメータ異常です", "Parameter error"), "../z_std_dma.c",
- UNK_LINE, UNK_LINE, UNK_LINE);
+ UNK_LINE);
}
#endif
@@ -655,13 +651,7 @@ void DmaMgr_Init(void) {
PRINTF("_bootSegmentRomStart(%08x) != dma_rom_ad[0].rom_b(%08x)\n", _bootSegmentRomStart,
gDmaDataTable[0].file.vromEnd);
//! @bug The main code file where fault.c resides is not yet loaded
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../z_std_dma.c", 837);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../z_std_dma.c", 840);
-#else
- Fault_AddHungupAndCrash("../z_std_dma.c", 1055);
-#endif
+ Fault_AddHungupAndCrash("../z_std_dma.c", LN3(837, 840, 1055));
}
// Start the DMA manager
diff --git a/src/boot/zlib.c b/src/boot/zlib.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/boot/zlib.c
@@ -0,0 +1 @@
+
diff --git a/src/code/PreRender.c b/src/code/PreRender.c
index 6c650b82a6..2e83e0b1ab 100644
--- a/src/code/PreRender.c
+++ b/src/code/PreRender.c
@@ -522,11 +522,11 @@ void PreRender_CopyImageRegion(PreRender* this, Gfx** gfxP) {
* This filter performs a linear interpolation on partially covered pixels between the current pixel color (called
* foreground color) and a "background" pixel color obtained by sampling fully covered pixels at the six highlighted
* points in the following 5x3 neighborhood:
- * _ _ _ _ _
+ * - - - - -
* | o o |
* | o X o |
* | o o |
- * ‾ ‾ ‾ ‾ ‾
+ * - - - - -
* Whether a pixel is partially covered is determined by reading the coverage values associated with the image.
* Coverage is a measure of how many subpixels the last drawn primitive covered. A fully covered pixel is one with a
* full coverage value, the entire pixel was covered by the primitive.
diff --git a/src/code/code_800D31A0.c b/src/code/code_800D31A0.c
deleted file mode 100644
index e7bd207d75..0000000000
--- a/src/code/code_800D31A0.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "global.h"
-#include "terminal.h"
-
-#if DEBUG_FEATURES
-u32 gIsCtrlr2Valid = false;
-#endif
-
-NORETURN void func_800D31A0(void) {
- PRINTF(VT_FGCOL(RED) "\n**** Freeze!! ****\n" VT_RST);
- for (;;) {
- Sleep_Msec(1000);
- }
-}
-
-#if DEBUG_FEATURES
-void func_800D31F0(void) {
- gIsCtrlr2Valid = (gPadMgr.validCtrlrsMask & 2) != 0;
-}
-
-void func_800D3210(void) {
- gIsCtrlr2Valid = false;
-}
-#endif
diff --git a/src/code/fault_gc.c b/src/code/fault_gc.c
index 7b28ffefa3..e69b3f1760 100644
--- a/src/code/fault_gc.c
+++ b/src/code/fault_gc.c
@@ -40,10 +40,10 @@
* DPad-Up may be pressed to enable sending fault pages over osSyncPrintf as well as displaying them on-screen.
* DPad-Down disables sending fault pages over osSyncPrintf.
*/
-#if PLATFORM_GC
+#if !PLATFORM_N64
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-eu-mq-dbg:176 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192" \
- "gc-us-mq:192"
+#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-eu-mq-dbg:160 gc-jp:176 gc-jp-ce:176 gc-jp-mq:176 gc-us:176" \
+ "gc-us-mq:176"
#include "global.h"
#include "alloca.h"
diff --git a/src/code/fault_gc_drawer.c b/src/code/fault_gc_drawer.c
index 808b258497..ba294f52d9 100644
--- a/src/code/fault_gc_drawer.c
+++ b/src/code/fault_gc_drawer.c
@@ -9,7 +9,7 @@
#include "terminal.h"
#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128"
-#if PLATFORM_GC
+#if !PLATFORM_N64
typedef struct FaultDrawer {
/* 0x00 */ u16* fb;
diff --git a/src/code/game.c b/src/code/game.c
index 7b7636145f..3c2d3a06e6 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -3,6 +3,7 @@
#include "libc64/os_malloc.h"
#include "terminal.h"
#include "versions.h"
+#include "line_numbers.h"
#if PLATFORM_N64
#include "n64dd.h"
#endif
@@ -407,15 +408,7 @@ void GameState_InitArena(GameState* gameState, size_t size) {
} else {
THA_Init(&gameState->tha, NULL, 0);
PRINTF(T("ハイラル確保失敗\n", "Failure to secure Hyrule\n"));
-#if OOT_VERSION < NTSC_1_1
- HUNGUP_AND_CRASH("../game.c", 895);
-#elif OOT_VERSION < PAL_1_0
- HUNGUP_AND_CRASH("../game.c", 898);
-#elif OOT_VERSION < GC_JP
- HUNGUP_AND_CRASH("../game.c", 985);
-#else
- HUNGUP_AND_CRASH("../game.c", 999);
-#endif
+ HUNGUP_AND_CRASH("../game.c", LN4(895, 898, 985, 999, 999));
}
}
@@ -456,15 +449,7 @@ void GameState_Realloc(GameState* gameState, size_t size) {
SystemArena_Display();
#endif
-#if OOT_VERSION < NTSC_1_1
- HUNGUP_AND_CRASH("../game.c", 940);
-#elif OOT_VERSION < PAL_1_0
- HUNGUP_AND_CRASH("../game.c", 943);
-#elif OOT_VERSION < GC_JP
- HUNGUP_AND_CRASH("../game.c", 1030);
-#else
- HUNGUP_AND_CRASH("../game.c", 1044);
-#endif
+ HUNGUP_AND_CRASH("../game.c", LN4(940, 943, 1030, 1044, 1044));
}
}
diff --git a/src/code/graph.c b/src/code/graph.c
index 150d307753..9121bd0b4e 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -3,12 +3,13 @@
#include "terminal.h"
#include "ucode_disas.h"
#include "versions.h"
+#include "line_numbers.h"
#define GFXPOOL_HEAD_MAGIC 0x1234
#define GFXPOOL_TAIL_MAGIC 0x5678
-#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:160" \
+ "ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
/**
* The time at which the previous `Graph_Update` ended.
@@ -382,30 +383,15 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE) T("ダイナミック領域先頭が破壊されています\n", "Dynamic area head is destroyed\n")
VT_RST);
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../graph.c", 937);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../graph.c", 940);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../graph.c", 951);
-#else
- Fault_AddHungupAndCrash("../graph.c", 1070);
-#endif
+ Fault_AddHungupAndCrash("../graph.c", LN4(937, 940, 951, 1070, 1067));
}
+
if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) {
problem = true;
PRINTF("%c", BEL);
PRINTF(VT_COL(RED, WHITE)
T("ダイナミック領域末尾が破壊されています\n", "Dynamic region tail is destroyed\n") VT_RST);
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../graph.c", 943);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../graph.c", 946);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../graph.c", 957);
-#else
- Fault_AddHungupAndCrash("../graph.c", 1076);
-#endif
+ Fault_AddHungupAndCrash("../graph.c", LN4(943, 946, 957, 1076, 1073));
}
}
@@ -490,14 +476,8 @@ void Graph_ThreadEntry(void* arg0) {
sprintf(faultMsg, "CLASS SIZE= %d bytes", size);
Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg);
-#elif OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../graph.c", 1067);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../graph.c", 1070);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../graph.c", 1081);
#else
- Fault_AddHungupAndCrash("../graph.c", 1200);
+ Fault_AddHungupAndCrash("../graph.c", LN4(1067, 1070, 1081, 1200, 1197));
#endif
}
diff --git a/src/code/kanread.s b/src/code/kanread.s
index a163f9ead7..fdf69ed9be 100644
--- a/src/code/kanread.s
+++ b/src/code/kanread.s
@@ -1,11 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* s32 Kanji_OffsetFromShiftJIS(s32 sjis);
@@ -26,64 +22,57 @@
* @remark Almost identical to "LeoGetKadr" from libleo.
*/
LEAF(Kanji_OffsetFromShiftJIS)
- // Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
- // so convert index directly.
- li $at, 0x8800
- slt $at, $a0, $at
- bnez $at, .nonkanji
- // 0xBC is number of glyphs in one block in the `kanji` file:
- // 0x100 possible codepoints with the same byte1
- // - 0x40 unused at beginning
- // - 1 unused at 0x7F
- // - 3 unused at 0xFD, 0xFE, 0xFF
- li $a2, 0xBC
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x88
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .kanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Characters with codepoints >= 0x8800 are kanji. Arrangement is regular, */
+ /* so convert index directly. */
+ li a2, 0xBC
+ blt a0, 0x8800, .nonkanji
+ /* 0xBC is number of glyphs in one block in the `kanji` file: */
+ /* 0x100 possible codepoints with the same byte1 */
+ /* - 0x40 unused at beginning */
+ /* - 1 unused at 0x7F */
+ /* - 3 unused at 0xFD, 0xFE, 0xFF */
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x88
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ mul a2, a2, a1
+ blt a3, 0x40, .kanji_lower_halfblock
+
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ addi a3, a3, -1
.kanji_lower_halfblock:
- addi $a3, $a3, 0x30A
- add $a3, $a3, $a2
- jr $ra
- sll $v0, $a3, 7
- // returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE
+ mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
+ addi a3, a3, 0x30A
+ add a3, a3, a2
+ /* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */
+ sll v0, a3, 7
+ jr ra
-// Non-kanji are arranged with irregular gaps, use the lookup table.
+/* Non-kanji are arranged with irregular gaps, use the lookup table. */
.nonkanji:
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x81
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .nonkanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x81
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ mul a2, a2, a1
+ blt a3, 0x40, .nonkanji_lower_halfblock
+
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ addi a3, a3, -1
.nonkanji_lower_halfblock:
- add $a3, $a3, $a2
- lui $a2, %hi(sNonKanjiIndices)
- sll $a3, $a3, 1
- addiu $a2, %lo(sNonKanjiIndices)
- add $a3, $a3, $a2
- lh $a2, ($a3)
- jr $ra
- sll $v0, $a2, 7
- // returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE
+ mflo a2 /* Unncessary mflo: the pseudo-op `mul` already performs mflo */
+ add a3, a3, a2
+ sll a3, a3, 1
+ la a2, sNonKanjiIndices
+ add a3, a3, a2
+ lh a2, (a3)
+ /* returns sNonKanjiIndices[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */
+ sll v0, a2, 7
+ jr ra
END(Kanji_OffsetFromShiftJIS)
/**
@@ -116,7 +105,7 @@ END(Kanji_OffsetFromShiftJIS)
* into blocks by high byte.
*/
DATA(sNonKanjiIndices)
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x814_ */ .half 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
/* 0x815_ */ .half 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
/* 0x816_ */ .half 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
@@ -130,7 +119,7 @@ DATA(sNonKanjiIndices)
/* 0x81E_ */ .half 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x81F_ */ .half 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x824_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092
/* 0x825_ */ .half 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x826_ */ .half 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB
@@ -144,7 +133,7 @@ DATA(sNonKanjiIndices)
/* 0x82E_ */ .half 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120
/* 0x82F_ */ .half 0x0121, 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x834_ */ .half 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133
/* 0x835_ */ .half 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143
/* 0x836_ */ .half 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153
@@ -158,7 +147,7 @@ DATA(sNonKanjiIndices)
/* 0x83E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x83F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x844_ */ .half 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA
/* 0x845_ */ .half 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA
/* 0x846_ */ .half 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -172,7 +161,7 @@ DATA(sNonKanjiIndices)
/* 0x84E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x84F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x854_ */ .half 0x020E, 0x020F, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D
/* 0x855_ */ .half 0x021E, 0x021F, 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223
/* 0x856_ */ .half 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231, 0x0232, 0x0233
@@ -186,7 +175,7 @@ DATA(sNonKanjiIndices)
/* 0x85E_ */ .half 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B
/* 0x85F_ */ .half 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x864_ */ .half 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291
/* 0x865_ */ .half 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000
/* 0x866_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -200,7 +189,7 @@ DATA(sNonKanjiIndices)
/* 0x86E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x86F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x874_ */ .half 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF
/* 0x875_ */ .half 0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x876_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
diff --git a/src/code/main.c b/src/code/main.c
index ee6515bd22..0857dec164 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -24,7 +24,7 @@ extern struct IrqMgr gIrqMgr;
#endif
#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
- "ntsc-1.0:148 ntsc-1.1:148 ntsc-1.2:148 pal-1.0:146 pal-1.1:146"
+ "ntsc-1.0:142 ntsc-1.1:142 ntsc-1.2:142 pal-1.0:140 pal-1.1:140"
extern u8 _buffersSegmentEnd[];
diff --git a/src/code/padmgr.c b/src/code/padmgr.c
index 4486e541a0..33a5056639 100644
--- a/src/code/padmgr.c
+++ b/src/code/padmgr.c
@@ -31,6 +31,7 @@
#include "global.h"
#include "fault.h"
#include "terminal.h"
+#include "line_numbers.h"
#define PADMGR_LOG(controllerNum, msg) \
if (DEBUG_FEATURES) { \
@@ -326,13 +327,7 @@ void PadMgr_UpdateInputs(PadMgr* padMgr) {
default:
// Unknown error response
LOG_HEX("padnow1->errno", pad->errno, "../padmgr.c", 396);
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../padmgr.c", 379);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../padmgr.c", 382);
-#else
- Fault_AddHungupAndCrash("../padmgr.c", 397);
-#endif
+ Fault_AddHungupAndCrash("../padmgr.c", LN3(379, 382, 397));
break;
}
diff --git a/src/code/sched.c b/src/code/sched.c
index fd82aa3d3e..012e452275 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -62,6 +62,8 @@ vs32 sSchedDebugPrintfEnabled = false;
PRINTF
#elif IDO_PRINTF_WORKAROUND
#define SCHED_DEBUG_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define SCHED_DEBUG_PRINTF(format, args...) (void)0
#else
#define SCHED_DEBUG_PRINTF(format, ...) (void)0
#endif
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index b3c01f97b5..0d92c001ba 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "config.h"
+#include "line_numbers.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"pal-1.1:128"
@@ -30,15 +31,7 @@ void SysCfb_Init(s32 n64dd) {
PRINTF("RAM4M mode\n");
sSysCfbEnd = 0x80400000;
} else {
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../sys_cfb.c", 305);
-#elif OOT_VERSION < PAL_1_0
- LogUtils_HungupThread("../sys_cfb.c", 308);
-#elif OOT_VERSION < GC_JP
- LogUtils_HungupThread("../sys_cfb.c", 322);
-#else
- LogUtils_HungupThread("../sys_cfb.c", 354);
-#endif
+ LogUtils_HungupThread("../sys_cfb.c", LN4(305, 308, 322, 354, 341));
}
screenSize = SCREEN_WIDTH * SCREEN_HEIGHT;
diff --git a/src/code/sys_debug_controller.c b/src/code/sys_debug_controller.c
new file mode 100644
index 0000000000..eb1398ff24
--- /dev/null
+++ b/src/code/sys_debug_controller.c
@@ -0,0 +1,11 @@
+#include "global.h"
+
+u32 gIsCtrlr2Valid = false;
+
+void func_800D31F0(void) {
+ gIsCtrlr2Valid = (gPadMgr.validCtrlrsMask & 2) != 0;
+}
+
+void func_800D3210(void) {
+ gIsCtrlr2Valid = false;
+}
diff --git a/src/code/sys_freeze.c b/src/code/sys_freeze.c
new file mode 100644
index 0000000000..f7cb515cfe
--- /dev/null
+++ b/src/code/sys_freeze.c
@@ -0,0 +1,9 @@
+#include "global.h"
+#include "terminal.h"
+
+NORETURN void func_800D31A0(void) {
+ PRINTF(VT_FGCOL(RED) "\n**** Freeze!! ****\n" VT_RST);
+ for (;;) {
+ Sleep_Msec(1000);
+ }
+}
diff --git a/src/code/sys_math3d.c b/src/code/sys_math3d.c
index 96b352d693..082c62fc71 100644
--- a/src/code/sys_math3d.c
+++ b/src/code/sys_math3d.c
@@ -5,7 +5,7 @@
#include "macros.h"
#include "sys_math3d.h"
-#pragma increment_block_number "gc-eu:103 gc-eu-mq:103 gc-jp:103 gc-jp-ce:103 gc-jp-mq:103 gc-us:103 gc-us-mq:103" \
+#pragma increment_block_number "gc-eu:99 gc-eu-mq:99 gc-jp:99 gc-jp-ce:99 gc-jp-mq:99 gc-us:99 gc-us-mq:99" \
"ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:79 pal-1.0:80 pal-1.1:80"
s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB,
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 37baa9f23c..b401f186d3 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4,6 +4,7 @@
#include "rand.h"
#include "terminal.h"
#include "versions.h"
+#include "z64horse.h"
#include "config.h"
#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h"
@@ -24,6 +25,8 @@ static s32 sCurCeilingBgId;
PRINTF
#elif IDO_PRINTF_WORKAROUND
#define ACTOR_DEBUG_PRINTF(args) (void)0
+#elif defined(__GNUC__) && __GNUC__ < 3
+#define ACTOR_DEBUG_PRINTF(format, args...) (void)0
#else
#define ACTOR_DEBUG_PRINTF(format, ...) (void)0
#endif
@@ -903,9 +906,9 @@ void Actor_Init(Actor* actor, PlayState* play) {
actor->minVelocityY = -20.0f;
actor->xyzDistToPlayerSq = MAXFLOAT;
actor->naviEnemyId = NAVI_ENEMY_NONE;
- actor->uncullZoneForward = 1000.0f;
- actor->uncullZoneScale = 350.0f;
- actor->uncullZoneDownward = 700.0f;
+ actor->cullingVolumeDistance = 1000.0f;
+ actor->cullingVolumeScale = 350.0f;
+ actor->cullingVolumeDownward = 700.0f;
CollisionCheck_InitInfo(&actor->colChkInfo);
actor->floorBgId = BGCHECK_SCENE;
ActorShape_Init(&actor->shape, 0.0f, NULL, 0.0f);
@@ -1146,7 +1149,7 @@ void Actor_SwapHookshotAttachment(PlayState* play, Actor* srcActor, Actor* destA
srcActor->flags &= ~ACTOR_FLAG_HOOKSHOT_ATTACHED;
}
-void func_8002DE74(PlayState* play, Player* player) {
+void Actor_RequestHorseCameraSetting(PlayState* play, Player* player) {
if ((play->roomCtx.curRoom.type != ROOM_TYPE_4) && Play_CamIsNotFixed(play)) {
Camera_RequestSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_HORSE);
}
@@ -1163,8 +1166,8 @@ int func_8002DEEC(Player* player) {
(player->csAction != PLAYER_CSACTION_NONE);
}
-void func_8002DF18(PlayState* play, Player* player) {
- func_8006DC68(play, player);
+void Actor_InitPlayerHorse(PlayState* play, Player* player) {
+ Horse_InitPlayerHorse(play, player);
}
/**
@@ -1775,7 +1778,7 @@ u32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
}
}
-s8 func_8002F368(PlayState* play) {
+s8 Actor_GetPlayerExchangeItemId(PlayState* play) {
Player* player = GET_PLAYER(play);
return player->exchangeItemId;
@@ -2193,7 +2196,8 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
if (D_8015BC18 == 0.0f) {
gSaveContext.respawn[RESPAWN_MODE_TOP] = gSaveContext.respawn[RESPAWN_MODE_DOWN];
- gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = 0x06FF;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams =
+ PLAYER_PARAMS(PLAYER_START_MODE_FARORES_WIND, PLAYER_START_BG_CAM_DEFAULT);
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 40;
}
@@ -2453,7 +2457,8 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
actor->yawTowardsPlayer = Actor_WorldYawTowardActor(actor, &player->actor);
actor->flags &= ~ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT;
- if ((DECR(actor->freezeTimer) == 0) && (actor->flags & (ACTOR_FLAG_4 | ACTOR_FLAG_6))) {
+ if ((DECR(actor->freezeTimer) == 0) &&
+ (actor->flags & (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_INSIDE_CULLING_VOLUME))) {
if (actor == player->focusActor) {
actor->isLockedOn = true;
} else {
@@ -2725,19 +2730,92 @@ void Actor_DrawLensActors(PlayState* play, s32 numInvisibleActors, Actor** invis
CLOSE_DISPS(gfxCtx, "../z_actor.c", 6284);
}
-s32 func_800314B0(PlayState* play, Actor* actor) {
- return func_800314D4(play, actor, &actor->projectedPos, actor->projectedW);
+/**
+ * Checks if an actor should be culled or not, by seeing if it is contained within its own culling volume.
+ * For more details on the culling test, see `Actor_CullingVolumeTest`.
+ *
+ * Returns true if the actor is inside its culling volume. In other words, it should not cull.
+ *
+ * "Culling" in this context refers to the removal of something for the sake of improving performance.
+ * For actors, being culled means that their Update and Draw processes are halted.
+ * While halted, an Actor's update state is frozen and it will not draw, making it invisible.
+ *
+ * Actors that are within the bounds of their culling volume may update and draw, while actors that are
+ * out of bounds of its culling volume may be excluded from updating and drawing until they are within bounds.
+ *
+ * It is possible for actors to opt out of update culling or draw culling.
+ * This is set per-actor with `ACTOR_FLAG_UPDATE_CULLING_DISABLED` and `ACTOR_FLAG_DRAW_CULLING_DISABLED`.
+ *
+ * Note: Even if either `ACTOR_FLAG_UPDATE_CULLING_DISABLED` or `ACTOR_FLAG_DRAW_CULLING_DISABLED` are set, the actor
+ * will still undergo the culling test and set `ACTOR_FLAG_INSIDE_CULLING_VOLUME` accordingly.
+ * So, `ACTOR_FLAG_INSIDE_CULLING_VOLUME` cannot be used on it own to determine if an actor is actually culled.
+ * It simply says whether or not they are physically located within the bounds of the culling volume.
+ */
+s32 Actor_CullingCheck(PlayState* play, Actor* actor) {
+ return Actor_CullingVolumeTest(play, actor, &actor->projectedPos, actor->projectedW);
}
-s32 func_800314D4(PlayState* play, Actor* actor, Vec3f* arg2, f32 arg3) {
- f32 var;
-
- if ((arg2->z > -actor->uncullZoneScale) && (arg2->z < (actor->uncullZoneForward + actor->uncullZoneScale))) {
- var = (arg3 < 1.0f) ? 1.0f : 1.0f / arg3;
-
- if ((((fabsf(arg2->x) - actor->uncullZoneScale) * var) < 1.0f) &&
- (((arg2->y + actor->uncullZoneDownward) * var) > -1.0f) &&
- (((arg2->y - actor->uncullZoneScale) * var) < 1.0f)) {
+/**
+ * Tests if an actor is currently within the bounds of its own culling volume.
+ *
+ * The culling volume is a 3D shape composed of a frustum with a box attached to the end of it. The frustum sits at the
+ * camera's position and projects forward, encompassing the player's current view; the box extrudes behind the camera,
+ * allowing actors in the immediate vicinity behind and to the sides of the camera to be detected.
+ *
+ * This function returns true if the actor is within bounds, false if not.
+ * The comparison is done in projected space against the actor's projected position as the viewing frustum
+ * in world space transforms to a box in projected space, making the calculation easy.
+ *
+ * Every actor can set properties for their own culling volume, changing its dimensions to suit the needs of
+ * it and its environment. These properties are in units of projected space (i.e. compared to the actor's position
+ * after perspective projection is applied) are therefore not directly comparable to world units.
+ * These depend on the current view parameters (fov, aspect, scale, znear, zfar).
+ * The default parameters considered are (60 degrees, 4/3, 1.0, 10, 12800).
+ *
+ * cullingVolumeDistance: Configures how far forward the far plane of the frustum should extend.
+ * This along with cullingVolumeScale determines the maximum distance from
+ * the camera eye that the actor can be detected at. This quantity is related
+ * to world units by a factor of
+ * (znear - zfar) / ((znear + zfar) * scale).
+ * For default view parameters, increasing this property by 1 increases the
+ * distance by ~0.995 world units.
+ *
+ * cullingVolumeScale: Scales the entire culling volume in all directions except the downward
+ * direction. Both the frustum and the box will scale in size. This quantity is
+ * related to world units by different factors based on direction:
+ * - For the forward and backward directions, they are related in the same way
+ * as above. For default view parameters, increasing this property by 1 increases
+ * the forward and backward scales by ~0.995 world units.
+ * - For the sideways directions, the relation to world units is
+ * (aspect / scale) * tan(0.5 * fov)
+ * For default view parameters, increasing this property by 1 increases the
+ * sideways scales by ~0.77 world units.
+ * - For the upward direction, the relation to world units is
+ * (1 / scale) * tan(0.5 * fov)
+ * For default view parameters, increasing this property by 1 increases the
+ * scale by ~0.58 world units.
+ *
+ * cullingVolumeDownward: Sets the height of the culling volume in the downward direction. Increasing
+ * this value will make actors below the camera more easily detected. This
+ * quantity is related to world units by the same factor as the upward scale.
+ * For default view parameters, increasing this property by 1 increases the
+ * downward height by ~0.58 world units.
+ *
+ * This interactive 3D graph visualizes the shape of the culling volume and has sliders for the 3 properties mentioned
+ * above: https://www.desmos.com/3d/4ztkxqky2a.
+ */
+s32 Actor_CullingVolumeTest(PlayState* play, Actor* actor, Vec3f* projPos, f32 projW) {
+ f32 invW;
+
+ if ((projPos->z > -actor->cullingVolumeScale) &&
+ (projPos->z < (actor->cullingVolumeDistance + actor->cullingVolumeScale))) {
+ // Clamping `projW` affects points behind the camera, so that the culling volume has
+ // a frustum shape in front of the camera and a box shape behind the camera.
+ invW = (projW < 1.0f) ? 1.0f : 1.0f / projW;
+
+ if ((((fabsf(projPos->x) - actor->cullingVolumeScale) * invW) < 1.0f) &&
+ (((projPos->y + actor->cullingVolumeDownward) * invW) > -1.0f) &&
+ (((projPos->y - actor->cullingVolumeScale) * invW) < 1.0f)) {
return true;
}
}
@@ -2784,17 +2862,18 @@ void func_800315AC(PlayState* play, ActorContext* actorCtx) {
}
if (!DEBUG_FEATURES || (HREG(64) != 1) || ((HREG(65) != -1) && (HREG(65) != HREG(66))) || (HREG(70) == 0)) {
- if (func_800314B0(play, actor)) {
- actor->flags |= ACTOR_FLAG_6;
+ if (Actor_CullingCheck(play, actor)) {
+ actor->flags |= ACTOR_FLAG_INSIDE_CULLING_VOLUME;
} else {
- actor->flags &= ~ACTOR_FLAG_6;
+ actor->flags &= ~ACTOR_FLAG_INSIDE_CULLING_VOLUME;
}
}
actor->isDrawn = false;
if (!DEBUG_FEATURES || (HREG(64) != 1) || ((HREG(65) != -1) && (HREG(65) != HREG(66))) || (HREG(71) == 0)) {
- if ((actor->init == NULL) && (actor->draw != NULL) && (actor->flags & (ACTOR_FLAG_5 | ACTOR_FLAG_6))) {
+ if ((actor->init == NULL) && (actor->draw != NULL) &&
+ (actor->flags & (ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_INSIDE_CULLING_VOLUME))) {
if ((actor->flags & ACTOR_FLAG_REACT_TO_LENS) &&
((play->roomCtx.curRoom.lensMode == LENS_MODE_SHOW_ACTORS) || play->actorCtx.lensActive ||
(actor->room != play->roomCtx.curRoom.num))) {
@@ -4430,25 +4509,25 @@ void func_80034CC4(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overr
CLOSE_DISPS(play->state.gfxCtx, "../z_actor.c", 8904);
}
-s16 func_80034DD4(Actor* actor, PlayState* play, s16 arg2, f32 arg3) {
+s16 Actor_UpdateAlphaByDistance(Actor* actor, PlayState* play, s16 alpha, f32 radius) {
Player* player = GET_PLAYER(play);
- f32 var;
+ f32 distance;
if ((play->csCtx.state != CS_STATE_IDLE) || IS_DEBUG_CAM_ENABLED) {
- var = Math_Vec3f_DistXYZ(&actor->world.pos, &play->view.eye) * 0.25f;
+ distance = Math_Vec3f_DistXYZ(&actor->world.pos, &play->view.eye) * 0.25f;
} else {
- var = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos);
+ distance = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos);
}
- if (arg3 < var) {
+ if (radius < distance) {
actor->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- Math_SmoothStepToS(&arg2, 0, 6, 0x14, 1);
+ Math_SmoothStepToS(&alpha, 0, 6, 0x14, 1);
} else {
actor->flags |= ACTOR_FLAG_ATTENTION_ENABLED;
- Math_SmoothStepToS(&arg2, 0xFF, 6, 0x14, 1);
+ Math_SmoothStepToS(&alpha, 0xFF, 6, 0x14, 1);
}
- return arg2;
+ return alpha;
}
void Animation_ChangeByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 index) {
@@ -4794,7 +4873,7 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
retTextId = 0x1047;
}
} else {
- if (Flags_GetEventChkInf(EVENTCHKINF_02)) {
+ if (Flags_GetEventChkInf(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS)) {
if (Flags_GetInfTable(INFTABLE_03)) {
retTextId = 0x1032;
} else {
@@ -5404,7 +5483,7 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
case 53:
if (Flags_GetEventChkInf(EVENTCHKINF_37)) {
retTextId = 0x402D;
- } else if (Flags_GetEventChkInf(EVENTCHKINF_33)) {
+ } else if (Flags_GetEventChkInf(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA)) {
retTextId = 0x4010;
} else if (Flags_GetEventChkInf(EVENTCHKINF_30)) {
retTextId = 0x400F;
@@ -5538,7 +5617,7 @@ void func_80036E50(u16 textId, s16 arg1) {
case 1:
switch (textId) {
case 0x102F:
- Flags_SetEventChkInf(EVENTCHKINF_02);
+ Flags_SetEventChkInf(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS);
Flags_SetInfTable(INFTABLE_0C);
return;
case 0x1033:
@@ -5750,7 +5829,7 @@ void func_80036E50(u16 textId, s16 arg1) {
return;
case 55:
if (textId == 0x401B) {
- Flags_SetEventChkInf(EVENTCHKINF_33);
+ Flags_SetEventChkInf(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA);
Flags_SetInfTable(INFTABLE_138);
}
return;
diff --git a/src/code/code_800430A0.c b/src/code/z_bg_collect.c
similarity index 100%
rename from src/code/code_800430A0.c
rename to src/code/z_bg_collect.c
diff --git a/src/code/code_80043480.c b/src/code/z_bg_item.c
similarity index 100%
rename from src/code/code_80043480.c
rename to src/code/z_bg_item.c
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index b84ef15a77..40d20c4fb9 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,7 +1,8 @@
#include "global.h"
#include "terminal.h"
+#include "line_numbers.h"
-#pragma increment_block_number "ntsc-1.0:136 ntsc-1.1:136 ntsc-1.2:136"
+#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128"
u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList);
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
@@ -1605,13 +1606,11 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y *
colCtx->subdivAmount.z,
ALIGNOF_MASK(StaticLookup));
+
if (colCtx->lookupTbl == NULL) {
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../z_bgcheck.c", 4173);
-#else
- LogUtils_HungupThread("../z_bgcheck.c", 4176);
-#endif
+ LogUtils_HungupThread("../z_bgcheck.c", LN1(4173, 4176));
}
+
colCtx->minBounds.x = colCtx->colHeader->minBounds.x;
colCtx->minBounds.y = colCtx->colHeader->minBounds.y;
colCtx->minBounds.z = colCtx->colHeader->minBounds.z;
@@ -1628,17 +1627,14 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
colCtx->colHeader->numPolygons * sizeof(u8) + colCtx->dyna.polyNodesMax * sizeof(SSNode) +
colCtx->dyna.polyListMax * sizeof(CollisionPoly) + colCtx->dyna.vtxListMax * sizeof(Vec3s) +
sizeof(CollisionContext);
+
if (customNodeListMax > 0) {
// tblMax is set without checking if customNodeListMax will result in a memory overflow
// this is a non-issue as long as sceneSubdivisionList.nodeListMax is -1
tblMax = customNodeListMax;
} else {
if (colCtx->memSize < memSize) {
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../z_bgcheck.c", 4227);
-#else
- LogUtils_HungupThread("../z_bgcheck.c", 4230);
-#endif
+ LogUtils_HungupThread("../z_bgcheck.c", LN1(4227, 4230));
}
tblMax = (colCtx->memSize - memSize) / sizeof(SSNode);
}
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index 3cd1830ce9..5c146b8c2f 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -6,7 +6,7 @@
#include "config.h"
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+ "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
@@ -3637,7 +3637,7 @@ s32 Camera_KeepOn3(Camera* camera) {
}
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:90 ntsc-1.1:90 ntsc-1.2:90 pal-1.0:88 pal-1.1:88"
+ "ntsc-1.0:145 ntsc-1.1:145 ntsc-1.2:145 pal-1.0:143 pal-1.1:143"
s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50;
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 7534cd5ba7..fb65e52700 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -16,7 +16,7 @@
#include "z_lib.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:104 ntsc-1.1:104 ntsc-1.2:104 pal-1.0:104 pal-1.1:104"
+ "ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:96 pal-1.0:96 pal-1.1:96"
typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
diff --git a/src/code/code_800BB0A0.c b/src/code/z_cutscene_spline.c
similarity index 100%
rename from src/code/code_800BB0A0.c
rename to src/code/z_cutscene_spline.c
diff --git a/src/code/z_debug.c b/src/code/z_debug.c
index 33f31e84d1..8a433edc0e 100644
--- a/src/code/z_debug.c
+++ b/src/code/z_debug.c
@@ -15,8 +15,8 @@ typedef struct InputCombo {
/* 0x2 */ u16 press;
} InputCombo; // size = 0x4
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
+ "ntsc-1.0:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
RegEditor* gRegEditor; // ``gRegEditor->data`` is used by non-debug features in normal gameplay
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 16edfa5e3d..dc1eb49bd9 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,3 +1,5 @@
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
+ "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#include "global.h"
#include "quake.h"
#include "z64camera.h"
@@ -100,7 +102,7 @@ EntranceCutscene sEntranceCutsceneTable[] = {
{ ENTR_GERUDO_VALLEY_0, 2, EVENTCHKINF_B2, gGerudoValleyIntroCs },
{ ENTR_GERUDOS_FORTRESS_0, 2, EVENTCHKINF_B3, gGerudoFortressIntroCs },
{ ENTR_LON_LON_RANCH_0, 2, EVENTCHKINF_B4, gLonLonRanchIntroCs },
- { ENTR_JABU_JABU_0, 2, EVENTCHKINF_B5, gJabuJabuIntroCs },
+ { ENTR_JABU_JABU_0, 2, EVENTCHKINF_B5, gJabuIntroCs },
{ ENTR_GRAVEYARD_0, 2, EVENTCHKINF_B6, gGraveyardIntroCs },
{ ENTR_ZORAS_FOUNTAIN_2, 2, EVENTCHKINF_B7, gZorasFountainIntroCs },
{ ENTR_DESERT_COLOSSUS_0, 2, EVENTCHKINF_B8, gDesertColossusIntroCs },
@@ -116,11 +118,11 @@ EntranceCutscene sEntranceCutsceneTable[] = {
{ ENTR_SPIRIT_TEMPLE_BOSS_0, 0, EVENTCHKINF_C0, gSpiritBossNabooruKnuckleIntroCs },
{ ENTR_GERUDOS_FORTRESS_17, 0, EVENTCHKINF_C7, gGerudoFortressFirstCaptureCs },
{ ENTR_DEATH_MOUNTAIN_CRATER_1, 2, EVENTCHKINF_B9, gDeathMountainCraterIntroCs },
- { ENTR_KOKIRI_FOREST_12, 2, EVENTCHKINF_C6, gKokiriForestDekuSproutCs },
+ { ENTR_KOKIRI_FOREST_12, 2, EVENTCHKINF_C6, gKokiriForestDekuSproutPart3Cs },
};
void* sCutscenesUnknownList[] = {
- gDekuTreeIntroCs, gJabuJabuIntroCs, gDcOpeningCs, gSpiritBossNabooruKnuckleDefeatCs,
+ gDekuTreeIntroCs, gJabuIntroCs, gDcOpeningCs, gSpiritBossNabooruKnuckleDefeatCs,
gIceCavernSerenadeCs, gTowerBarrierCs,
};
@@ -129,8 +131,8 @@ u16 gCamAtSplinePointsAppliedFrame;
u16 gCamEyePointAppliedFrame;
u16 gCamAtPointAppliedFrame;
-#pragma increment_block_number "gc-eu:186 gc-eu-mq:176 gc-jp:188 gc-jp-ce:188 gc-jp-mq:176 gc-us:188 gc-us-mq:176" \
- "ntsc-1.0:80 ntsc-1.1:80 ntsc-1.2:80 pal-1.0:80 pal-1.1:80"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:188 gc-jp-ce:188 gc-jp-mq:0 gc-us:188 gc-us-mq:0" \
+ "ntsc-1.0:128 ntsc-1.1:80 ntsc-1.2:80 pal-1.0:80 pal-1.1:80"
// Cam ID to return to when a scripted cutscene is finished
s16 sReturnToCamId;
@@ -414,12 +416,12 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
SET_EVENTCHKINF(EVENTCHKINF_65);
break;
- case CS_MISC_SET_FLAG_WELL_DRAINED:
- SET_EVENTCHKINF(EVENTCHKINF_67);
+ case CS_MISC_SET_FLAG_DRAINED_WELL:
+ SET_EVENTCHKINF(EVENTCHKINF_DRAINED_WELL);
break;
- case CS_MISC_SET_FLAG_LAKE_HYLIA_RESTORED:
- SET_EVENTCHKINF(EVENTCHKINF_69);
+ case CS_MISC_SET_FLAG_RESTORED_LAKE_HYLIA:
+ SET_EVENTCHKINF(EVENTCHKINF_RESTORED_LAKE_HYLIA);
break;
case CS_MISC_VISMONO_BLACK_AND_WHITE:
@@ -752,7 +754,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_TEMPLE_OF_TIME_AFTER_LIGHT_MEDALLION:
#if DEBUG_FEATURES
- SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
+ SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
#endif
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_4;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -923,7 +925,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_TEMPLE_OF_TIME_AFTER_LIGHT_MEDALLION_ALT:
#if DEBUG_FEATURES
- SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
+ SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
#endif
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_4;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -1154,7 +1156,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
- case CS_DEST_LON_LON_RANCH_CREDITS_PART_5:
+ case CS_DEST_LON_LON_RANCH_CREDITS_PART_6:
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -1162,7 +1164,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
- case CS_DEST_LON_LON_RANCH_CREDITS_PART_6:
+ case CS_DEST_LON_LON_RANCH_CREDITS_PART_5:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.save.cutsceneIndex = 0xFFF7;
@@ -1864,7 +1866,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
MemCpy(&cmdType, script, sizeof(cmdType));
script += sizeof(cmdType);
- if (cmdType == CS_CAM_STOP) {
+ if (cmdType == CS_CMD_END_OF_SCRIPT) {
return;
}
diff --git a/src/code/z_eff_ss_dead.c b/src/code/z_eff_ss_dead.c
index 3c1adf4cb6..2a64a23f4a 100644
--- a/src/code/z_eff_ss_dead.c
+++ b/src/code/z_eff_ss_dead.c
@@ -30,7 +30,7 @@ void func_80026400(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3) {
Gfx* displayListHead;
f32 cos;
-#if !PLATFORM_N64
+#if PLATFORM_GC
if (arg3 == 0) {
return;
}
diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c
index c90a7eb3bb..23d77075dd 100644
--- a/src/code/z_en_a_keep.c
+++ b/src/code/z_en_a_keep.c
@@ -2,7 +2,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_d_hsblock/object_d_hsblock.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnAObj_Init(Actor* thisx, PlayState* play);
void EnAObj_Destroy(Actor* thisx, PlayState* play);
@@ -114,8 +114,8 @@ void EnAObj_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = BGACTOR_NEG_ONE;
this->dyna.interactFlags = 0;
this->dyna.transformFlags = 0;
- thisx->uncullZoneDownward = 1200.0f;
- thisx->uncullZoneScale = 200.0f;
+ thisx->cullingVolumeDownward = 1200.0f;
+ thisx->cullingVolumeScale = 200.0f;
switch (thisx->params) {
case A_OBJ_BLOCK_LARGE:
@@ -288,8 +288,8 @@ void EnAObj_BoulderFragment(EnAObj* this, PlayState* play) {
}
void EnAObj_SetupBlock(EnAObj* this, s16 type) {
- this->dyna.actor.uncullZoneDownward = 1200.0f;
- this->dyna.actor.uncullZoneScale = 720.0f;
+ this->dyna.actor.cullingVolumeDownward = 1200.0f;
+ this->dyna.actor.cullingVolumeScale = 720.0f;
EnAObj_SetupAction(this, EnAObj_Block);
}
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index a5dddbb9f3..6f44ba5fee 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -3,7 +3,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.h"
-#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \
+#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \
"gc-us-mq:128 ntsc-1.2:128"
#define FLAGS 0
@@ -75,64 +75,293 @@ static void* sItemDropTex[] = {
};
static u8 sItemDropIds[] = {
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NONE, ITEM00_NONE, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE,
- ITEM00_MAGIC_SMALL, ITEM00_FLEXIBLE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE,
- ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_FLEXIBLE,
- ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_SEEDS, ITEM00_NONE,
- ITEM00_NONE, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL,
- ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART,
- ITEM00_NONE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE, ITEM00_BOMBS_A,
- ITEM00_NONE, ITEM00_FLEXIBLE, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN,
- ITEM00_NUTS, ITEM00_NONE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NUTS,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_NONE, ITEM00_FLEXIBLE,
- ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_RUPEE_GREEN,
- ITEM00_RUPEE_GREEN, ITEM00_SEEDS, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_BOMBS_A,
- ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_SMALL,
- ITEM00_RUPEE_GREEN, ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_NONE, ITEM00_RUPEE_BLUE,
- ITEM00_NONE, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
- ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_SEEDS, ITEM00_SEEDS, ITEM00_NONE,
- ITEM00_MAGIC_SMALL, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NONE, ITEM00_RUPEE_GREEN,
- ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE, ITEM00_BOMBS_A,
- ITEM00_ARROWS_SMALL, ITEM00_NONE, ITEM00_ARROWS_MEDIUM, ITEM00_MAGIC_SMALL, ITEM00_FLEXIBLE,
- ITEM00_NONE, ITEM00_MAGIC_LARGE, ITEM00_RUPEE_GREEN, ITEM00_NONE, ITEM00_RUPEE_BLUE,
- ITEM00_NONE, ITEM00_RUPEE_GREEN, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_BOMBS_A,
- ITEM00_ARROWS_SMALL, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_SMALL,
- ITEM00_NONE, ITEM00_NONE, ITEM00_MAGIC_LARGE, ITEM00_ARROWS_LARGE, ITEM00_ARROWS_MEDIUM,
- ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL, ITEM00_FLEXIBLE, ITEM00_ARROWS_SMALL,
- ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_SMALL, ITEM00_ARROWS_SMALL,
- ITEM00_ARROWS_SMALL, ITEM00_ARROWS_MEDIUM, ITEM00_ARROWS_LARGE, ITEM00_ARROWS_LARGE, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
- ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE, ITEM00_BOMBS_A,
- ITEM00_FLEXIBLE, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NONE,
- ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_BOMBS_A, ITEM00_NONE,
- ITEM00_BOMBS_A, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_SEEDS, ITEM00_NONE,
- ITEM00_NUTS, ITEM00_NONE, ITEM00_STICK, ITEM00_NONE, ITEM00_NONE,
- ITEM00_SEEDS, ITEM00_NONE, ITEM00_NONE, ITEM00_NONE, ITEM00_NUTS,
- ITEM00_NONE, ITEM00_NUTS, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_RECOVERY_HEART,
- ITEM00_NONE, ITEM00_SEEDS, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_NONE,
- ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_NONE,
- ITEM00_RECOVERY_HEART, ITEM00_NONE, ITEM00_RECOVERY_HEART, ITEM00_SEEDS, ITEM00_FLEXIBLE,
+ // 0
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_FLEXIBLE,
+ ITEM00_SEEDS,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_RUPEE_BLUE,
+
+ // 1
+ ITEM00_RUPEE_GREEN,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_FLEXIBLE,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_MAGIC_SMALL,
+
+ // 2
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_SEEDS,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_FLEXIBLE,
+ ITEM00_MAGIC_SMALL,
+
+ // 3
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NUTS,
+ ITEM00_NONE,
+ ITEM00_SEEDS,
+ ITEM00_SEEDS,
+ ITEM00_NUTS,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_FLEXIBLE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+
+ // 4
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_SEEDS,
+ ITEM00_BOMBS_A,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_MAGIC_SMALL,
+
+ // 5
+ ITEM00_RUPEE_GREEN,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NONE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_SEEDS,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_MAGIC_SMALL,
+
+ // 6
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NONE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_NONE,
+ ITEM00_ARROWS_MEDIUM,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_FLEXIBLE,
+ ITEM00_NONE,
+ ITEM00_MAGIC_LARGE,
+
+ // 7
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NONE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NONE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_BOMBS_A,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_MAGIC_LARGE,
+
+ // 8
+ ITEM00_ARROWS_LARGE,
+ ITEM00_ARROWS_MEDIUM,
+ ITEM00_ARROWS_MEDIUM,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_FLEXIBLE,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_MEDIUM,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_SMALL,
+ ITEM00_ARROWS_MEDIUM,
+ ITEM00_ARROWS_LARGE,
+ ITEM00_ARROWS_LARGE,
+
+ // 9
+ ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE,
+
+ // 10
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_FLEXIBLE,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+ ITEM00_NONE,
+ ITEM00_BOMBS_A,
+
+ // 11
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+
+ // 12
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+
+ // 13
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_NUTS,
+ ITEM00_NONE,
+ ITEM00_STICK,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_NUTS,
+ ITEM00_NONE,
+ ITEM00_NUTS,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_SEEDS,
+
+ // 14
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_SEEDS,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_NONE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_SEEDS,
+ ITEM00_FLEXIBLE,
};
static u8 sDropQuantities[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, // 3
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, // 4
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, // 5
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 6
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 7
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 8
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 9
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, // 10
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 11
+ 3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 1, 3, 1, 1, 1, 3, // 12
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 13
+ 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, // 14
};
void EnItem00_SetupAction(EnItem00* this, EnItem00ActionFunc actionFunc) {
@@ -984,7 +1213,7 @@ EnItem00* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, s16 params) {
(spawnedActor->actor.params != ITEM00_HEART_CONTAINER)) {
spawnedActor->actor.room = -1;
}
- spawnedActor->actor.flags |= ACTOR_FLAG_4;
+ spawnedActor->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
}
@@ -1016,7 +1245,7 @@ EnItem00* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s16 params) {
spawnedActor->actor.speed = 0.0f;
spawnedActor->actor.gravity = param4000 ? 0.0f : -0.9f;
spawnedActor->actor.world.rot.y = Rand_CenteredFloat(65536.0f);
- spawnedActor->actor.flags |= ACTOR_FLAG_4;
+ spawnedActor->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
}
@@ -1130,7 +1359,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
spawnedActor->actor.world.rot.y = Rand_ZeroOne() * 40000.0f;
Actor_SetScale(&spawnedActor->actor, 0.0f);
EnItem00_SetupAction(spawnedActor, func_8001E304);
- spawnedActor->actor.flags |= ACTOR_FLAG_4;
+ spawnedActor->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if ((spawnedActor->actor.params != ITEM00_SMALL_KEY) &&
(spawnedActor->actor.params != ITEM00_HEART_PIECE) &&
(spawnedActor->actor.params != ITEM00_HEART_CONTAINER)) {
diff --git a/src/code/code_8006C3A0.c b/src/code/z_env_flags.c
similarity index 100%
rename from src/code/code_8006C3A0.c
rename to src/code/z_env_flags.c
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index d3d66c3de6..2935a66f89 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -1,30 +1,47 @@
-#include "global.h"
#include "terminal.h"
+#include "z_lib.h"
+#include "regs.h"
+#include "z64horse.h"
+#include "z64play.h"
+#include "z64player.h"
#include "src/overlays/actors/ovl_En_Horse/z_en_horse.h"
-s32 func_8006CFC0(s32 sceneId) {
+/**
+ * Tests if the player horse can be spawned
+ *
+ * @param sceneId the checked scene
+ * @return true if the player horse can appear in the scene, else false
+ */
+s32 Horse_CanSpawn(s32 sceneId) {
s32 validSceneIds[] = { SCENE_HYRULE_FIELD, SCENE_LAKE_HYLIA, SCENE_GERUDO_VALLEY, SCENE_GERUDOS_FORTRESS,
SCENE_LON_LON_RANCH };
s32 i;
for (i = 0; i < ARRAY_COUNT(validSceneIds); i++) {
if (sceneId == validSceneIds[i]) {
- return 1;
+ return true;
}
}
- return 0;
+ return false;
}
-void func_8006D074(PlayState* play) {
+/**
+ * Sets horseData to a neutral spawn in Hyrule Field
+ */
+void Horse_ResetHorseData(PlayState* play) {
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
gSaveContext.save.info.horseData.pos.x = -1840;
gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.save.info.horseData.pos.z = 5497;
- gSaveContext.save.info.horseData.angle = -27353;
+ gSaveContext.save.info.horseData.angle = -0x6AD9;
}
-void func_8006D0AC(PlayState* play) {
+/**
+ * Forces the player horse to spawn in a safe spot if the current spawn is in Lake Hylia
+ * This prevents the horse from spawning underwater after obtaining the Water Medallion
+ */
+void Horse_FixLakeHyliaPosition(PlayState* play) {
if (gSaveContext.save.info.horseData.sceneId == SCENE_LAKE_HYLIA) {
gSaveContext.save.info.horseData.sceneId = SCENE_LAKE_HYLIA;
gSaveContext.save.info.horseData.pos.x = -2065;
@@ -41,49 +58,59 @@ typedef struct HorseSpawn {
/* 0x0A */ s16 type;
} HorseSpawn;
-void func_8006D0EC(PlayState* play, Player* player) {
+void Horse_SetupInGameplay(PlayState* play, Player* player) {
s32 i;
HorseSpawn horseSpawns[] = {
- { SCENE_HYRULE_FIELD, -460, 100, 6640, 0, 2 }, { SCENE_LAKE_HYLIA, -1929, -1025, 768, 0, 2 },
- { SCENE_GERUDO_VALLEY, 2566, -259, 767, 0, 2 }, { SCENE_GERUDOS_FORTRESS, -328, 10, 953, 0, 2 },
- { SCENE_LON_LON_RANCH, 928, 0, -2280, 0, 2 },
+ { SCENE_HYRULE_FIELD, -460, 100, 6640, 0, HORSE_PTYPE_INACTIVE },
+ { SCENE_LAKE_HYLIA, -1929, -1025, 768, 0, HORSE_PTYPE_INACTIVE },
+ { SCENE_GERUDO_VALLEY, 2566, -259, 767, 0, HORSE_PTYPE_INACTIVE },
+ { SCENE_GERUDOS_FORTRESS, -328, 10, 953, 0, HORSE_PTYPE_INACTIVE },
+ { SCENE_LON_LON_RANCH, 928, 0, -2280, 0, HORSE_PTYPE_INACTIVE },
};
- if ((AREG(6) != 0) && (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0))) {
- player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x,
- player->actor.world.pos.y, player->actor.world.pos.z, player->actor.shape.rot.x,
- player->actor.shape.rot.y, player->actor.shape.rot.z, 9);
+ if (R_EXITED_SCENE_RIDING_HORSE &&
+ (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
+ // Player entering scene on top of horse
+ player->rideActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, player->actor.world.pos.y,
+ player->actor.world.pos.z, player->actor.shape.rot.x, player->actor.shape.rot.y,
+ player->actor.shape.rot.z, HORSE_PTYPE_PLAYER_SPAWNED_RIDING);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 343);
Actor_MountHorse(play, player, player->rideActor);
- func_8002DE74(play, player);
+ Actor_RequestHorseCameraSetting(play, player);
gSaveContext.save.info.horseData.sceneId = play->sceneId;
-
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1;
}
} else if ((play->sceneId == SCENE_GERUDOS_FORTRESS) && (gSaveContext.minigameState == 3)) {
+ // Completed Horseback Archery Minigame
Actor* horseActor;
gSaveContext.minigameState = 0;
- horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
+ horseActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, HORSE_PTYPE_1);
horseActor->room = -1;
} else if ((gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_7) &&
GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
+ // Completed Horse Race
Actor* horseActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, HORSE_PTYPE_1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 389);
} else if ((play->sceneId == gSaveContext.save.info.horseData.sceneId) &&
- (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
+ (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
+ // Player enters a scene where the horse was left previously
PRINTF(T("馬存在によるセット %d %d %d\n", "Set by existence of horse %d %d %d\n"),
- gSaveContext.save.info.horseData.sceneId, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
+ gSaveContext.save.info.horseData.sceneId, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED),
+ R_DEBUG_FORCE_EPONA_OBTAINED);
- if (func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
+ if (Horse_CanSpawn(gSaveContext.save.info.horseData.sceneId)) {
Actor* horseActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.info.horseData.pos.x,
gSaveContext.save.info.horseData.pos.y, gSaveContext.save.info.horseData.pos.z, 0,
- gSaveContext.save.info.horseData.angle, 0, 1);
+ gSaveContext.save.info.horseData.angle, 0, HORSE_PTYPE_1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 414);
+
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
horseActor->room = -1;
}
@@ -93,13 +120,16 @@ void func_8006D0EC(PlayState* play, Player* player) {
T("Horse_SetNormal():%d セットスポットまずいです。\n", "Horse_SetNormal():%d set spot is no good.\n"),
gSaveContext.save.info.horseData.sceneId);
PRINTF(VT_RST);
- func_8006D074(play);
+ Horse_ResetHorseData(play);
}
- } else if ((play->sceneId == SCENE_LON_LON_RANCH) && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
- (DREG(1) == 0)) {
- Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -500.0f, 0, 0, 0, 1);
+ } else if ((play->sceneId == SCENE_LON_LON_RANCH) &&
+ !(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
+ // Player spawns in Lon-Lon Ranch without owning Epona
+ Actor* horseActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -500.0f, 0, 0, 0, HORSE_PTYPE_1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 443);
- } else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
+ } else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) {
+ // Player owns Epona, but isn't riding her and the current scene is not the same as the horse's last location.
for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
HorseSpawn* horseSpawn = &horseSpawns[i];
if (horseSpawn->sceneId == play->sceneId) {
@@ -107,134 +137,145 @@ void func_8006D0EC(PlayState* play, Player* player) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawn->pos.x, horseSpawn->pos.y,
horseSpawn->pos.z, 0, horseSpawn->angle, 0, horseSpawn->type);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 466);
+
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
horseActor->room = -1;
}
-
break;
}
}
- } else if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) {
- if ((DREG(1) == 0) && (play->sceneId == SCENE_LON_LON_BUILDINGS) && !IS_DAY) {
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, 1);
- }
+ } else if (!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) &&
+ (play->sceneId == SCENE_LON_LON_BUILDINGS) && !IS_DAY) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 0.0f, 0.0f, -60.0f, 0, 0x7360, 0, HORSE_PTYPE_1);
}
}
-typedef struct struct_8011F9B8 {
+typedef struct HorseCutsceneSpawn {
/* 0x00 */ s16 sceneId;
/* 0x04 */ s32 cutsceneIndex;
/* 0x08 */ Vec3s pos;
/* 0x0E */ s16 angle;
/* 0x10 */ s16 type;
-} struct_8011F9B8;
-
-void func_8006D684(PlayState* play, Player* player) {
- static struct_8011F9B8 D_8011F9B8[] = {
- { SCENE_GERUDOS_FORTRESS, 0xFFF0, { 3600, 1413, 360 }, 0x8001, 8 },
- { SCENE_LON_LON_RANCH, 0xFFF0, { -250, 1, -1580 }, 0x4000, 6 },
- { SCENE_LON_LON_RANCH, 0xFFF1, { 0, 0, 0 }, 0x0000, 5 },
- { SCENE_LON_LON_RANCH, 0xFFF5, { 0, 0, 0 }, 0x0000, 7 },
- { SCENE_HYRULE_FIELD, 0xFFF3, { -2961, 313, 7700 }, 0x0000, 7 },
- { SCENE_HYRULE_FIELD, 0xFFF4, { -1900, 313, 7015 }, 0x0000, 7 },
- { SCENE_HYRULE_FIELD, 0xFFF5, { -4043, 313, 6933 }, 0x0000, 7 },
- { SCENE_HYRULE_FIELD, 0xFFF6, { -4043, 313, 6933 }, 0x0000, 7 },
+} HorseCutsceneSpawn;
+
+void Horse_SetupInCutscene(PlayState* play, Player* player) {
+ static HorseCutsceneSpawn horseSpawns[] = {
+ { SCENE_GERUDOS_FORTRESS, 0xFFF0, { 3600, 1413, 360 }, 0x8001, HORSE_PTYPE_HORSEBACK_ARCHERY },
+ { SCENE_LON_LON_RANCH, 0xFFF0, { -250, 1, -1580 }, 0x4000, HORSE_PTYPE_6 }, // Horse Race
+ { SCENE_LON_LON_RANCH, 0xFFF1, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_5 }, // Learned Epona's Song
+ { SCENE_LON_LON_RANCH, 0xFFF5, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_7 }, // Credits
+ { SCENE_HYRULE_FIELD, 0xFFF3, { -2961, 313, 7700 }, 0x0000, HORSE_PTYPE_7 }, // Title Screen
+ { SCENE_HYRULE_FIELD, 0xFFF4, { -1900, 313, 7015 }, 0x0000, HORSE_PTYPE_7 },
+ { SCENE_HYRULE_FIELD, 0xFFF5, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Credits
+ { SCENE_HYRULE_FIELD, 0xFFF6, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Unused. Hopping Lon Lon
+ // Ranch North Gate
};
s32 pad;
s32 i;
- Vec3s spawnPos;
if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
(gSaveContext.respawnFlag == 0)) {
+ // Epona hopping over one of the Lon Lon Ranch fences
+ Vec3s spawnPos;
Vec3s spawnPositions[] = {
- { -2961, 313, 7700 },
- { -1900, 313, 7015 },
- { -4043, 313, 6933 },
- { -2313, 313, 5990 },
+ // Note: The east and west positions are paired with the wrong entranceIndex. However, the subsequent
+ // cutscene repositions the horse will override these coordinates while the horse is still obstructed, so no
+ // visual glitch occurs.
+ { -2961, 313, 7700 }, // South
+ { -1900, 313, 7015 }, // East
+ { -4043, 313, 6933 }, // West
+ { -2313, 313, 5990 }, // North-East
};
+ // South of Lon Lon player spawn
if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) {
spawnPos = spawnPositions[0];
+ // West of Lon Lon player spawn
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) {
spawnPos = spawnPositions[1];
+ // East of Lon Lon player spawn
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) {
spawnPos = spawnPositions[2];
+ // Lon Lon exit player spawn
} else {
spawnPos = spawnPositions[3];
}
player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, spawnPos.x, spawnPos.y, spawnPos.z, 0,
- player->actor.world.rot.y, 0, 7);
+ player->actor.world.rot.y, 0, HORSE_PTYPE_7);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 561);
Actor_MountHorse(play, player, player->rideActor);
- func_8002DE74(play, player);
+ Actor_RequestHorseCameraSetting(play, player);
gSaveContext.save.info.horseData.sceneId = play->sceneId;
- } else if ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
- !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
+ } else if ((play->sceneId == SCENE_LON_LON_RANCH) &&
+ (GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA) &&
+ !(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
player->rideActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 894.0f, 0.0f, -2084.0f, 0, -0x7FFF, 0, 5);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 894.0f, 0.0f, -2084.0f, 0, -0x7FFF, 0, HORSE_PTYPE_5);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 582);
Actor_MountHorse(play, player, player->rideActor);
- func_8002DE74(play, player);
+ Actor_RequestHorseCameraSetting(play, player);
gSaveContext.save.info.horseData.sceneId = play->sceneId;
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1;
}
} else {
- for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) {
- if ((play->sceneId == D_8011F9B8[i].sceneId) &&
- (((void)0, gSaveContext.save.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
- if (D_8011F9B8[i].type == 7) {
+ for (i = 0; i < ARRAY_COUNT(horseSpawns); i++) {
+ if ((play->sceneId == horseSpawns[i].sceneId) &&
+ (((void)0, gSaveContext.save.cutsceneIndex) == horseSpawns[i].cutsceneIndex)) {
+ if (horseSpawns[i].type == HORSE_PTYPE_7) {
if ((play->sceneId == SCENE_LON_LON_RANCH) &&
(((void)0, gSaveContext.save.cutsceneIndex) == 0xFFF1)) {
- D_8011F9B8[i].pos.x = player->actor.world.pos.x;
- D_8011F9B8[i].pos.y = player->actor.world.pos.y;
- D_8011F9B8[i].pos.z = player->actor.world.pos.z;
+ horseSpawns[i].pos.x = player->actor.world.pos.x;
+ horseSpawns[i].pos.y = player->actor.world.pos.y;
+ horseSpawns[i].pos.z = player->actor.world.pos.z;
}
player->rideActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
- D_8011F9B8[i].pos.z, 0, player->actor.world.rot.y, 0, D_8011F9B8[i].type);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
+ horseSpawns[i].pos.z, 0, player->actor.world.rot.y, 0, horseSpawns[i].type);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 628);
Actor_MountHorse(play, player, player->rideActor);
- func_8002DE74(play, player);
- } else if ((D_8011F9B8[i].type == 5) || (D_8011F9B8[i].type == 6) || (D_8011F9B8[i].type == 8)) {
- Vec3f sp54;
- s32 temp = 0;
-
- if (GET_EVENTINF_HORSES_HORSETYPE() != HORSE_EPONA && D_8011F9B8[i].type == 6) {
- temp = 0x8000;
+ Actor_RequestHorseCameraSetting(play, player);
+ } else if ((horseSpawns[i].type == HORSE_PTYPE_5) || (horseSpawns[i].type == HORSE_PTYPE_6) ||
+ (horseSpawns[i].type == HORSE_PTYPE_HORSEBACK_ARCHERY)) {
+ Vec3f eye;
+ s32 paramFlag = 0;
+
+ if (GET_EVENTINF_INGO_RACE_HORSETYPE() != HORSE_EPONA && horseSpawns[i].type == HORSE_PTYPE_6) {
+ // HORSE_HNI
+ paramFlag = 0x8000;
}
player->rideActor =
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
- D_8011F9B8[i].pos.z, 0, D_8011F9B8[i].angle, 0, D_8011F9B8[i].type | temp);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
+ horseSpawns[i].pos.z, 0, horseSpawns[i].angle, 0, horseSpawns[i].type | paramFlag);
ASSERT(player->rideActor != NULL, "player->ride.actor != NULL", "../z_horse.c", 667);
- player->actor.world.pos.x = D_8011F9B8[i].pos.x;
- player->actor.world.pos.y = D_8011F9B8[i].pos.y;
- player->actor.world.pos.z = D_8011F9B8[i].pos.z;
+ player->actor.world.pos.x = horseSpawns[i].pos.x;
+ player->actor.world.pos.y = horseSpawns[i].pos.y;
+ player->actor.world.pos.z = horseSpawns[i].pos.z;
player->actor.shape.rot.x = player->actor.shape.rot.z = 0;
- player->actor.shape.rot.y = D_8011F9B8[i].angle;
+ player->actor.shape.rot.y = horseSpawns[i].angle;
Actor_MountHorse(play, player, player->rideActor);
- func_8002DE74(play, player);
+ Actor_RequestHorseCameraSetting(play, player);
- sp54.x = player->actor.world.pos.x - 200.0f;
- sp54.y = player->actor.world.pos.y + 100.0f;
- sp54.z = player->actor.world.pos.z;
+ eye.x = player->actor.world.pos.x - 200.0f;
+ eye.y = player->actor.world.pos.y + 100.0f;
+ eye.z = player->actor.world.pos.z;
- Play_SetCameraAtEye(play, play->activeCamId, &player->actor.world.pos, &sp54);
+ Play_SetCameraAtEye(play, play->activeCamId, &player->actor.world.pos, &eye);
} else {
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, D_8011F9B8[i].pos.x, D_8011F9B8[i].pos.y,
- D_8011F9B8[i].pos.z, 0, D_8011F9B8[i].angle, 0, D_8011F9B8[i].type);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, horseSpawns[i].pos.x, horseSpawns[i].pos.y,
+ horseSpawns[i].pos.z, 0, horseSpawns[i].angle, 0, horseSpawns[i].type);
}
break;
}
@@ -242,41 +283,49 @@ void func_8006D684(PlayState* play, Player* player) {
}
}
-void func_8006DC68(PlayState* play, Player* player) {
+/**
+ * Initializes the player's horse, but only if required.
+ *
+ * This function should be called during `Play_Init`.
+ */
+void Horse_InitPlayerHorse(PlayState* play, Player* player) {
if (LINK_IS_ADULT) {
- if (!func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
+ if (!Horse_CanSpawn(gSaveContext.save.info.horseData.sceneId)) {
PRINTF(VT_COL(RED, WHITE));
PRINTF(
T("Horse_Set_Check():%d セットスポットまずいです。\n", "Horse_Set_Check():%d set spot is no good.\n"),
gSaveContext.save.info.horseData.sceneId);
PRINTF(VT_RST);
- func_8006D074(play);
+ Horse_ResetHorseData(play);
}
- if (func_8006CFC0(play->sceneId)) {
+ if (Horse_CanSpawn(play->sceneId)) {
if (IS_CUTSCENE_LAYER ||
+ // has hopped over one of the Lon-Lon Ranch fences
((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
(gSaveContext.respawnFlag == 0)) ||
- ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
- !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
- func_8006D684(play, player);
+ // trapped in Lon Lon Ranch
+ ((play->sceneId == SCENE_LON_LON_RANCH) &&
+ (GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA) &&
+ !(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED))) {
+ Horse_SetupInCutscene(play, player);
} else {
- func_8006D0EC(play, player);
+ Horse_SetupInGameplay(play, player);
}
}
}
}
-void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2) {
- s16 x = Math_Vec3f_Yaw(&actor->world.pos, arg1) - actor->world.rot.y;
+void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnAmount) {
+ s16 x = Math_Vec3f_Yaw(&actor->world.pos, pos) - actor->world.rot.y;
- if (x > arg2) {
- actor->world.rot.y += arg2;
- } else if (x < -arg2) {
- actor->world.rot.y -= arg2;
+ if (x > turnAmount) {
+ actor->world.rot.y += turnAmount;
+ } else if (x < -turnAmount) {
+ actor->world.rot.y -= turnAmount;
} else {
actor->world.rot.y += x;
}
diff --git a/src/code/code_80097A00.c b/src/code/z_inventory.c
similarity index 99%
rename from src/code/code_80097A00.c
rename to src/code/z_inventory.c
index b452a92e16..2f89c0565b 100644
--- a/src/code/code_80097A00.c
+++ b/src/code/z_inventory.c
@@ -299,7 +299,7 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
if (equipment == EQUIP_TYPE_SWORD) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 1;
}
Player_SetEquipmentData(play, player);
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index e040a840e0..db2356c41a 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -1,5 +1,5 @@
-#pragma increment_block_number "gc-eu:244 gc-eu-mq:244 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
- "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:248 pal-1.1:248"
+#pragma increment_block_number "gc-eu:232 gc-eu-mq:232 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \
+ "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:240 pal-1.1:240"
#include "global.h"
#include "ultra64.h"
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index b400100bc9..98a3303f93 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -122,11 +122,11 @@ void Map_InitData(PlayState* play, s16 room) {
extendedMapIndex = 0x15;
}
} else if (play->sceneId == SCENE_GERUDO_VALLEY) {
- if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if ((LINK_AGE_IN_YEARS == YEARS_ADULT) && !GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
extendedMapIndex = 0x16;
}
} else if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
extendedMapIndex = 0x17;
}
}
@@ -497,7 +497,7 @@ void Minimap_Draw(PlayState* play) {
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
- (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] &
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] &
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
@@ -517,7 +517,7 @@ void Minimap_Draw(PlayState* play) {
}
if ((play->sceneId == SCENE_ZORAS_FOUNTAIN) &&
- (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
diff --git a/src/code/code_80069420.c b/src/code/z_memory_utils.c
similarity index 100%
rename from src/code/code_80069420.c
rename to src/code/z_memory_utils.c
diff --git a/src/code/z_message.c b/src/code/z_message.c
index c1ab75e2d3..91eb8bbc56 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -8,7 +8,7 @@
#endif
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:112 pal-1.0:128 pal-1.1:128"
+ "ntsc-1.0:96 ntsc-1.1:96 ntsc-1.2:96 pal-1.0:128 pal-1.1:128"
#if N64_BTN_COLORS
#define OCARINA_BUTTON_A_PRIM_1_R 80
@@ -907,7 +907,7 @@ f32 sFontWidths[144] = {
5.0f, // '|'
7.0f, // '}'
10.0f, // '~'
- 10.0f, // '‾'
+ 10.0f, // ' '
12.0f, // 'À'
#if OOT_NTSC
12.0f, // 'î'
@@ -3472,7 +3472,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
if (msgCtx->disableWarpSongs || interfaceCtx->restrictions.warpSongs == 3) {
Message_StartTextbox(play, 0x88C, NULL); // "You can't warp here!"
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
- } else if (GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_1) {
+ } else if (GET_EVENTINF_INGO_RACE_STATE() != INGO_RACE_STATE_HORSE_RENTAL_PERIOD) {
Message_StartTextbox(play, msgCtx->lastPlayedSong + 0x88D,
NULL); // "Warp to [place name]?"
play->msgCtx.ocarinaMode = OCARINA_MODE_01;
@@ -4286,7 +4286,7 @@ void Message_Update(PlayState* play) {
if (Message_ShouldAdvance(play)) {
PRINTF("OCARINA_MODE=%d -> ", play->msgCtx.ocarinaMode);
play->msgCtx.ocarinaMode = (msgCtx->choiceIndex == 0) ? OCARINA_MODE_02 : OCARINA_MODE_04;
- PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_HORSES_STATE(), 1,
+ PRINTF("InRaceSeq=%d(%d) OCARINA_MODE=%d --> ", GET_EVENTINF_INGO_RACE_STATE(), 1,
play->msgCtx.ocarinaMode);
Message_CloseTextbox(play);
PRINTF("OCARINA_MODE=%d\n", play->msgCtx.ocarinaMode);
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 5ed3ecab6a..a1fb6f1fe5 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "terminal.h"
#include "versions.h"
+#include "z64horse.h"
#include "assets/textures/parameter_static/parameter_static.h"
#include "assets/textures/do_action_static/do_action_static.h"
#include "assets/textures/icon_item_static/icon_item_static.h"
@@ -1108,7 +1109,7 @@ void func_80083108(PlayState* play) {
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
}
- } else if (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_1) {
+ } else if (GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_HORSE_RENTAL_PERIOD) {
if (player->stateFlags1 & PLAYER_STATE1_23) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) &&
(gSaveContext.save.info.equips.buttonItems[0] != ITEM_BOW)) {
@@ -1169,7 +1170,7 @@ void func_80083108(PlayState* play) {
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@@ -1193,7 +1194,7 @@ void func_80083108(PlayState* play) {
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
(gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
@@ -1665,7 +1666,7 @@ void func_80084BF4(PlayState* play, u16 flag) {
}
} else if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE) {
if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ (gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] == 0)) {
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
Interface_LoadItemIcon1(play, 0);
}
@@ -1707,7 +1708,7 @@ u8 Item_Give(PlayState* play, u8 item) {
PRINTF(VT_RST);
if (item == ITEM_MEDALLION_WATER) {
- func_8006D0AC(play);
+ Horse_FixLakeHyliaPosition(play);
}
return ITEM_NONE;
@@ -2148,7 +2149,8 @@ u8 Item_Give(PlayState* play, u8 item) {
}
} else if ((item >= ITEM_WEIRD_EGG) && (item <= ITEM_CLAIM_CHECK)) {
if (!FIX_ANNOYING_GLITCH && item == ITEM_POACHERS_SAW) {
- SET_ITEMGETINF(ITEMGETINF_1F);
+ //! @bug Setting this shared flag makes getting the Deku Nut upgrade impossible
+ SET_ITEMGETINF(ITEMGETINF_FOREST_STAGE_NUT_UPGRADE);
}
temp = INV_CONTENT(item);
@@ -3932,10 +3934,11 @@ void Interface_Draw(PlayState* play) {
for (svar1 = 0; svar1 < ARRAY_COUNT(gSpoilingItems); svar1++) {
if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[svar1]) {
#if OOT_VERSION >= NTSC_1_1
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] &=
- (u16) ~(EVENTINF_HORSES_STATE_MASK | EVENTINF_HORSES_HORSETYPE_MASK | EVENTINF_HORSES_05_MASK |
- EVENTINF_HORSES_06_MASK | EVENTINF_HORSES_0F_MASK);
- PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_HORSES_INDEX]);
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] &=
+ (u16) ~(EVENTINF_INGO_RACE_STATE_MASK | EVENTINF_MASK(EVENTINF_INGO_RACE_HORSETYPE) |
+ EVENTINF_MASK(EVENTINF_INGO_RACE_LOST_ONCE) |
+ EVENTINF_MASK(EVENTINF_INGO_RACE_SECOND_RACE) | EVENTINF_MASK(EVENTINF_INGO_RACE_0F));
+ PRINTF("EVENT_INF=%x\n", gSaveContext.eventInf[EVENTINF_INDEX_HORSES]);
#endif
play->nextEntranceIndex = spoilingItemEntrances[svar1];
INV_CONTENT(gSpoilingItemReverts[svar1]) = gSpoilingItemReverts[svar1];
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 1c2bc924ff..ebeda310b2 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -5,6 +5,7 @@
#include "terminal.h"
#include "config.h"
#include "versions.h"
+#include "line_numbers.h"
#if PLATFORM_N64
#include "n64dd.h"
#endif
@@ -181,21 +182,7 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) {
break;
default:
-#if OOT_VERSION < NTSC_1_1
- HUNGUP_AND_CRASH("../z_play.c", 2263);
-#elif OOT_VERSION < PAL_1_0
- HUNGUP_AND_CRASH("../z_play.c", 2266);
-#elif OOT_VERSION < PAL_1_1
- HUNGUP_AND_CRASH("../z_play.c", 2269);
-#elif OOT_VERSION < GC_JP
- HUNGUP_AND_CRASH("../z_play.c", 2272);
-#elif OOT_VERSION < GC_EU_MQ_DBG
- HUNGUP_AND_CRASH("../z_play.c", 2287);
-#elif OOT_VERSION < GC_JP_CE
- HUNGUP_AND_CRASH("../z_play.c", 2290);
-#else
- HUNGUP_AND_CRASH("../z_play.c", 2293);
-#endif
+ HUNGUP_AND_CRASH("../z_play.c", LN5(2263, 2266, 2269, 2272, 2287, 2290, 2293));
break;
}
}
@@ -517,8 +504,9 @@ void Play_Init(GameState* thisx) {
CutsceneManager_StoreCamera(&this->mainCamera);
#endif
- playerStartBgCamIndex = PARAMS_GET_U(player->actor.params, 0, 8);
- if (playerStartBgCamIndex != 0xFF) {
+ playerStartBgCamIndex = PLAYER_GET_START_BG_CAM_INDEX(&player->actor);
+
+ if (playerStartBgCamIndex != PLAYER_START_BG_CAM_DEFAULT) {
PRINTF("player has start camera ID (" VT_FGCOL(BLUE) "%d" VT_RST ")\n", playerStartBgCamIndex);
Camera_RequestBgCam(&this->mainCamera, playerStartBgCamIndex);
}
@@ -535,7 +523,7 @@ void Play_Init(GameState* thisx) {
Environment_PlaySceneSequence(this);
gSaveContext.seqId = this->sceneSequences.seqId;
gSaveContext.natureAmbienceId = this->sceneSequences.natureAmbienceId;
- func_8002DF18(this, GET_PLAYER(this));
+ Actor_InitPlayerHorse(this, GET_PLAYER(this));
AnimTaskQueue_Update(this, &this->animTaskQueue);
gSaveContext.respawnFlag = 0;
@@ -2192,6 +2180,7 @@ void Play_LoadToLastEntrance(PlayState* this) {
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) ||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) ||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15)) {
+ // Avoid re-triggering the hop over Lon Lon fence cutscenes
this->nextEntranceIndex = ENTR_HYRULE_FIELD_6;
#endif
} else {
@@ -2202,7 +2191,7 @@ void Play_LoadToLastEntrance(PlayState* this) {
}
void Play_TriggerRespawn(PlayState* this) {
- Play_SetupRespawnPoint(this, RESPAWN_MODE_DOWN, 0xDFF);
+ Play_SetupRespawnPoint(this, RESPAWN_MODE_DOWN, PLAYER_PARAMS(PLAYER_START_MODE_IDLE, PLAYER_START_BG_CAM_DEFAULT));
Play_LoadToLastEntrance(this);
}
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index d6a473120e..b922f56638 100644
--- a/src/code/z_player_call.c
+++ b/src/code/z_player_call.c
@@ -1,8 +1,8 @@
#include "global.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | \
- ACTOR_FLAG_UPDATE_DURING_OCARINA | ACTOR_FLAG_CAN_PRESS_SWITCHES)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA | ACTOR_FLAG_CAN_PRESS_SWITCHES)
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:128 pal-1.1:128"
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 6d523137cc..0005386348 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -2,6 +2,7 @@
#include "fault.h"
#include "terminal.h"
#include "versions.h"
+#include "line_numbers.h"
#if PLATFORM_N64
#include "n64dd.h"
#endif
@@ -458,14 +459,11 @@ RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomS
PRINTF(VT_COL(RED, WHITE) T("z_room.c:カメラIDに一致するデータが存在しません camid=%d\n",
"z_room.c: Data consistent with camera id does not exist camid=%d\n") VT_RST,
bgCamIndex);
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../z_room.c", 724);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../z_room.c", 727);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../z_room.c", 721);
-#else
+
+#if !PLATFORM_N64
LogUtils_HungupThread("../z_room.c", 726);
+#else
+ Fault_AddHungupAndCrash("../z_room.c", LN2(724, 727, 721));
#endif
return NULL;
@@ -549,14 +547,10 @@ void Room_DrawImage(PlayState* play, Room* room, u32 flags) {
} else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) {
Room_DrawImageMulti(play, room, flags);
} else {
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../z_room.c", 849);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../z_room.c", 852);
-#elif OOT_VERSION < GC_JP
- Fault_AddHungupAndCrash("../z_room.c", 836);
-#else
+#if !PLATFORM_N64
LogUtils_HungupThread("../z_room.c", 841);
+#else
+ Fault_AddHungupAndCrash("../z_room.c", LN2(849, 852, 836));
#endif
}
}
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index cf391ab121..bcdffb2f23 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -1237,7 +1237,7 @@ void Scene_DrawConfigLakeHylia(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7058);
- if (IS_CUTSCENE_LAYER || (LINK_IS_ADULT && !GET_EVENTCHKINF(EVENTCHKINF_69))) {
+ if (IS_CUTSCENE_LAYER || (LINK_IS_ADULT && !GET_EVENTCHKINF(EVENTCHKINF_RESTORED_LAKE_HYLIA))) {
play->roomCtx.drawParams[0] = 87;
}
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index a953bdb214..d219815102 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -849,7 +849,7 @@ AnimTask* AnimTaskQueue_NewTask(AnimTaskQueue* animTaskQueue, s32 type) {
return task;
}
-#if PLATFORM_N64
+#if !PLATFORM_GC
#define LINK_ANIMATION_OFFSET(addr, offset) \
(((uintptr_t)_link_animetionSegmentRomStart) + SEGMENT_OFFSET(addr) + (offset))
#else
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index fe500027bc..377615e10b 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -162,7 +162,7 @@ void Sram_InitNewSave(void) {
gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.save.info.horseData.angle = -0x6AD9;
gSaveContext.save.info.playerData.magicLevel = 0;
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 1;
gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
}
@@ -325,8 +325,15 @@ void Sram_InitDebugSave(void) {
gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.save.info.horseData.angle = -0x6AD9;
- gSaveContext.save.info.infTable[0] |= 0x5009;
- gSaveContext.save.info.eventChkInf[0] |= 0x123F;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_0] |= INFTABLE_MASK(INFTABLE_00) | INFTABLE_MASK(INFTABLE_03) |
+ INFTABLE_MASK(INFTABLE_0C) | INFTABLE_MASK(INFTABLE_0E);
+
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_0] |=
+ EVENTCHKINF_MASK(EVENTCHKINF_00_UNUSED) | EVENTCHKINF_MASK(EVENTCHKINF_01_UNUSED) |
+ EVENTCHKINF_MASK(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS) | EVENTCHKINF_MASK(EVENTCHKINF_03) |
+ EVENTCHKINF_MASK(EVENTCHKINF_04) | EVENTCHKINF_MASK(EVENTCHKINF_05) | EVENTCHKINF_MASK(EVENTCHKINF_09) |
+ EVENTCHKINF_MASK(EVENTCHKINF_0C);
+
SET_EVENTCHKINF(EVENTCHKINF_80);
SET_EVENTCHKINF(EVENTCHKINF_C4);
@@ -498,8 +505,8 @@ void Sram_OpenSave(SramContext* sramCtx) {
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
- i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] = i;
+ i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] & ~EVENTCHKINF_MASK(EVENTCHKINF_40);
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] = i;
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 59fa5df2d0..0d2f5716fa 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -86,7 +86,7 @@ void ViMode_Configure(ViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antia
yScaleHiOddField = modeF ? (loResInterlaced ? (F210(0.75) << 16) : (F210(0.5) << 16)) : 0;
viMode->customViMode.type = type;
- viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV_3 | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
+ viMode->customViMode.comRegs.ctrl = VI_CTRL_PIXEL_ADV(3) | VI_CTRL_GAMMA_ON | VI_CTRL_GAMMA_DITHER_ON |
(!loResDeinterlaced ? VI_CTRL_SERRATE_ON : 0) |
(antialiasOn ? VI_CTRL_DIVOT_ON : 0) |
(fb32Bit ? VI_CTRL_TYPE_32 : VI_CTRL_TYPE_16);
diff --git a/src/elf_message/elf_message_field.c b/src/elf_message/elf_message_field.c
index bcdb71caf8..505649afda 100644
--- a/src/elf_message/elf_message_field.c
+++ b/src/elf_message/elf_message_field.c
@@ -11,7 +11,7 @@ QuestHintCmd gOverworldNaviQuestHints[] = {
QUEST_HINT_STRENGTH_UPG(CHECK, 0, true, 0x46),
QUEST_HINT_FLAG(CHECK, EVENTCHKINF_25, false, 0x47),
QUEST_HINT_MAGIC(CHECK, false, 0x48),
- QUEST_HINT_FLAG(CHECK, EVENTCHKINF_33, false, 0x49),
+ QUEST_HINT_FLAG(CHECK, EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA, false, 0x49),
QUEST_HINT_FLAG(CHECK, EVENTCHKINF_37, false, 0x4A),
QUEST_HINT_FLAG(CHECK, EVENTCHKINF_80, false, 0x4B),
QUEST_HINT_FLAG(CHECK, EVENTCHKINF_43, false, 0x4C),
diff --git a/src/libc/absf.s b/src/libc/absf.s
index b423334614..58450e7791 100644
--- a/src/libc/absf.s
+++ b/src/libc/absf.s
@@ -1,15 +1,9 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-#if DEBUG_FEATURES
-.set noreorder
-#endif
-
-.section .text
-
-.balign 16
+.text
LEAF(absf)
- abs.s $f0, $f12
- jr $ra
- nop
+ abs.s fv0, fa0
+ jr ra
END(absf)
diff --git a/src/libc/sqrt.s b/src/libc/sqrt.s
index 6ffb2b7085..1d69d3adb2 100644
--- a/src/libc/sqrt.s
+++ b/src/libc/sqrt.s
@@ -1,15 +1,9 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-#if DEBUG_FEATURES
-.set noreorder
-#endif
-
-.section .text
-
-.balign 16
+.text
LEAF(sqrt)
- sqrt.d $f0, $f12
- jr $ra
- nop
+ sqrt.d fv0, fa0
+ jr ra
END(sqrt)
diff --git a/src/libc64/__osMalloc_gc.c b/src/libc64/__osMalloc_gc.c
index f2770767fa..0338ecf3f8 100644
--- a/src/libc64/__osMalloc_gc.c
+++ b/src/libc64/__osMalloc_gc.c
@@ -3,7 +3,7 @@
#include "libc64/os_malloc.h"
#include "terminal.h"
-#if PLATFORM_GC
+#if !PLATFORM_N64
#define FILL_ALLOC_BLOCK_FLAG (1 << 0)
#define FILL_FREE_BLOCK_FLAG (1 << 1)
diff --git a/src/libc64/fp.s b/src/libc64/fp.s
index d5b42094a3..32c084ef56 100644
--- a/src/libc64/fp.s
+++ b/src/libc64/fp.s
@@ -1,12 +1,26 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
+.data
-.section .data
+#if !PLATFORM_N64
-.balign 16
+DATA(gPositiveInfinity)
+ .word 0x7F800000
+ENDDATA(gPositiveInfinity)
+
+DATA(gNegativeInfinity)
+ .word 0xFF800000
+ENDDATA(gNegativeInfinity)
+
+DATA(gPositiveZero)
+ .word 0x00000000
+ENDDATA(gPositiveZero)
+
+DATA(gNegativeZero)
+ .word 0x80000000
+ENDDATA(gNegativeZero)
-#if !PLATFORM_N64
DATA(qNaN0x3FFFFF)
.word 0x7FBFFFFF
ENDDATA(qNaN0x3FFFFF)
@@ -18,150 +32,135 @@ ENDDATA(qNaN0x10000)
DATA(sNaN0x3FFFFF)
.word 0x7FFFFFFF
ENDDATA(sNaN0x3FFFFF)
-#endif
-.section .text
+#endif
-.balign 16
+.text
LEAF(floorf)
- floor.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ floor.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(floorf)
LEAF(floor)
- floor.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ floor.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(floor)
LEAF(lfloorf)
- floor.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ floor.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lfloorf)
LEAF(lfloor)
- floor.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ floor.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lfloor)
LEAF(ceilf)
- ceil.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ ceil.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(ceilf)
LEAF(ceil)
- ceil.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ ceil.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(ceil)
LEAF(lceilf)
- ceil.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ ceil.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lceilf)
LEAF(lceil)
- ceil.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ ceil.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lceil)
LEAF(truncf)
- trunc.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ trunc.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(truncf)
LEAF(trunc)
- trunc.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ trunc.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(trunc)
LEAF(ltruncf)
- trunc.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ trunc.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(ltruncf)
LEAF(ltrunc)
- trunc.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ trunc.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(ltrunc)
LEAF(nearbyintf)
- round.w.s $f12, $f12
- jr $ra
- cvt.s.w $f0, $f12
+ round.w.s fa0, fa0
+ cvt.s.w fv0, fa0
+ jr ra
END(nearbyintf)
LEAF(nearbyint)
- round.w.d $f12, $f12
- jr $ra
- cvt.d.w $f0, $f12
+ round.w.d fa0, fa0
+ cvt.d.w fv0, fa0
+ jr ra
END(nearbyint)
LEAF(lnearbyintf)
- round.w.s $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ round.w.s ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lnearbyintf)
LEAF(lnearbyint)
- round.w.d $f4, $f12
- mfc1 $v0, $f4
- jr $ra
- nop
+ round.w.d ft0, fa0
+ mfc1 v0, ft0
+ jr ra
END(lnearbyint)
LEAF(roundf)
- li.s $f4, 0.5
- nop
- add.s $f0, $f12, $f4
- floor.w.s $f0, $f0
- jr $ra
- cvt.s.w $f0, $f0
+ li.s ft0, 0.5
+ add.s fv0, fa0, ft0
+ floor.w.s fv0, fv0
+ cvt.s.w fv0, fv0
+ jr ra
END(roundf)
LEAF(round)
- li.d $f4, 0.5
- nop
- add.d $f0, $f12, $f4
- floor.w.d $f0, $f0
- jr $ra
- cvt.d.w $f0, $f0
+ li.d ft0, 0.5
+ add.d fv0, fa0, ft0
+ floor.w.d fv0, fv0
+ cvt.d.w fv0, fv0
+ jr ra
END(round)
LEAF(lroundf)
- li.s $f4, 0.5
- nop
- add.s $f0, $f12, $f4
- floor.w.s $f0, $f0
- mfc1 $v0, $f0
- jr $ra
- nop
+ li.s ft0, 0.5
+ add.s fv0, fa0, ft0
+ floor.w.s fv0, fv0
+ mfc1 v0, fv0
+ jr ra
END(lroundf)
LEAF(lround)
- li.d $f4, 0.5
- nop
- add.d $f0, $f12, $f4
- floor.w.d $f0, $f0
- mfc1 $v0, $f0
- jr $ra
- nop
+ li.d ft0, 0.5
+ add.d fv0, fa0, ft0
+ floor.w.d fv0, fv0
+ mfc1 v0, fv0
+ jr ra
END(lround)
diff --git a/src/libgcc/__cmpdi2.s b/src/libgcc/__cmpdi2.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__divdi3.s b/src/libgcc/__divdi3.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__fixdfdi.s b/src/libgcc/__fixdfdi.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__fixsfdi.s b/src/libgcc/__fixsfdi.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__fixunsdfdi.s b/src/libgcc/__fixunsdfdi.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__fixunssfdi.s b/src/libgcc/__fixunssfdi.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__floatdidf.s b/src/libgcc/__floatdidf.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__floatdisf.s b/src/libgcc/__floatdisf.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__moddi3.s b/src/libgcc/__moddi3.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__udivdi3.s b/src/libgcc/__udivdi3.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libgcc/__umoddi3.s b/src/libgcc/__umoddi3.s
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/libleo/api/getaadr.s b/src/libleo/api/getaadr.s
index a36d27a5b3..95c1cfb14d 100644
--- a/src/libleo/api/getaadr.s
+++ b/src/libleo/api/getaadr.s
@@ -1,42 +1,33 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(LeoGetAAdr)
- bltz $a0, .out_of_range
- slti $at, $a0, 0x908
- beqz $at, .out_of_range
- nop
- lui $v1, %hi(asc2tbl)
- sll $t0, $a0, 2
- addiu $v1, %lo(asc2tbl)
- add $t1, $t0, $v1
- lbu $t8, 2($t1)
- lhu $t9, 0($t1)
- li $at, 0x70000
- andi $t2, $t8, 0xF
- addi $t3, $t2, 1
- sw $t3, ($a2)
- lb $t0, 3($t1)
- srl $t4, $t8, 4
- ori $at, $at, 0xEE80
- andi $t5, $t0, 1
- sll $t6, $t5, 4
- or $t7, $t6, $t4
- sw $t7, ($a1)
- sll $v0, $t9, 1
- sra $v1, $t0, 1
- sw $v1, ($a3)
- jr $ra
- add $v0, $v0, $at
+ bltz a0, .out_of_range
+ bge a0, 0x908, .out_of_range
+ sll t0, a0, 2
+ la v1, asc2tbl
+ add t1, t0, v1
+ lbu t8, 2(t1)
+ lhu t9, 0(t1)
+ andi t2, t8, 0xF
+ addi t3, t2, 1
+ sw t3, (a2)
+ lb t0, 3(t1)
+ srl t4, t8, 4
+ andi t5, t0, 1
+ sll t6, t5, 4
+ or t7, t6, t4
+ sw t7, (a1)
+ sll v0, t9, 1
+ sra v1, t0, 1
+ sw v1, (a3)
+ add v0, v0, 0x7EE80
+ jr ra
.out_of_range:
- jr $ra
- li $v0, -1
+ li v0, -1
+ jr ra
END(LeoGetAAdr)
DATA(asc2tbl)
diff --git a/src/libleo/api/getaadr2.s b/src/libleo/api/getaadr2.s
index e3ea0868bb..cac52cd90b 100644
--- a/src/libleo/api/getaadr2.s
+++ b/src/libleo/api/getaadr2.s
@@ -1,33 +1,25 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(LeoGetAAdr2)
- li $at, 0x10000
- srl $t8, $a0, 0xF
- ori $at, $at, 0xFFFE
- and $v1, $t8, $at
- li $at, 0x70000
- ori $at, $at, 0xEE80
- srl $t2, $a0, 0x8
- add $v0, $v1, $at
- andi $t3, $t2, 0xF
- andi $t5, $a0, 0xFE
- addi $t4, $t3, 1
- sll $t6, $t5, 0x18
- andi $t9, $a0, 0x1
- srl $v1, $a0, 0xC
- sw $t4, ($a2)
- sra $t7, $t6, 0x19
- sll $t8, $t9, 0x4
- andi $t1, $v1, 0xF
- sw $t7, ($a3)
- or $t2, $t1, $t8
- jr $ra
- sw $t2, ($a1)
+ srl t8, a0, 15
+ and v1, t8, 0x1FFFE
+ add v0, v1, 0x7EE80
+ srl t2, a0, 8
+ andi t3, t2, 0xF
+ andi t5, a0, 0xFE
+ addi t4, t3, 1
+ sll t6, t5, 24
+ andi t9, a0, 1
+ srl v1, a0, 12
+ sw t4, (a2)
+ sra t7, t6, 25
+ sll t8, t9, 4
+ andi t1, v1, 0xF
+ sw t7, (a3)
+ or t2, t1, t8
+ sw t2, (a1)
+ jr ra
END(LeoGetAAdr2)
diff --git a/src/libleo/api/getkadr.s b/src/libleo/api/getkadr.s
index 22d85cb593..d71719525a 100644
--- a/src/libleo/api/getkadr.s
+++ b/src/libleo/api/getkadr.s
@@ -1,11 +1,7 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* int LeoGetKAdr(int sjis);
@@ -22,74 +18,61 @@
* @return int Storage offset address into the N64 Disk Drive mask ROM.
*/
LEAF(LeoGetKAdr)
- // Check if the codepoint is in the range 0x8140 to 0x9872.
- li $at, 0x8140
- slt $at, $a0, $at
- bnez $at, .out_of_range
- li $at, 0x9873
- slt $at, $a0, $at
- beqz $at, .out_of_range
- // Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
- // so convert index directly.
- li $at, 0x8800
- slt $at, $a0, $at
- bnez $at, .nonkanji
- // 0xBC is number of glyphs in one block in the `kanji` file:
- // 0x100 possible codepoints with the same byte1
- // - 0x40 unused at beginning
- // - 1 unused at 0x7F
- // - 3 unused at 0xFD, 0xFE, 0xFF
- li $a2, 0xBC
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x88
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .kanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Check if the codepoint is in the range 0x8140 to 0x9872. */
+ blt a0, 0x8140, .out_of_range
+ bge a0, 0x9873, .out_of_range
+ /* Characters with codepoints >= 0x8800 are kanji. Arrangement is regular,
+ * so convert index directly. */
+ li a2, 0xBC
+ blt a0, 0x8800, .nonkanji
+ /* 0xBC is number of glyphs in one block in the `kanji` file:
+ * 0x100 possible codepoints with the same byte1
+ * - 0x40 unused at beginning
+ * - 1 unused at 0x7F
+ * - 3 unused at 0xFD, 0xFE, 0xFF */
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x88
+ mul a2, a2, a1
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ blt a3, 0x40, .kanji_lower_halfblock
+ addi a3, a3, -1
.kanji_lower_halfblock:
- addi $a3, $a3, 0x30A
- add $a3, $a3, $a2
- jr $ra
- sll $v0, $a3, 7
- // returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE
+ mflo a2
+ addi a3, a3, 0x30A
+ add a3, a3, a2
+ sll v0, a3, 7
+ jr ra
+ /* returns (0x30A + (adjusted byte2) + (adjusted byte1) * 0xBC) * FONT_CHAR_TEX_SIZE */
-// Non-kanji are arranged with irregular gaps, use the lookup table.
+/* Non-kanji are arranged with irregular gaps, use the lookup table. */
.nonkanji:
- // Get byte1 and adjust so starts at 0
- srl $a1, $a0, 8
- addi $a1, $a1, -0x81
- multu $a2, $a1
- // Get byte2 and adjust so starts at 0
- andi $a3, $a0, 0xFF
- addi $a3, $a3, -0x40
- slti $at, $a3, (0x80 - 0x40)
- mflo $a2
- // 0x__7F is always empty and elided in the file, so decrement if larger
- bnezl $at, .nonkanji_lower_halfblock
- mflo $a2
- addi $a3, $a3, -1
- mflo $a2
+ /* Get byte1 and adjust so starts at 0 */
+ srl a1, a0, 8
+ addi a1, a1, -0x81
+ mul a2, a2, a1
+ /* Get byte2 and adjust so starts at 0 */
+ andi a3, a0, 0xFF
+ addi a3, a3, -0x40
+ /* 0x__7F is always empty and elided in the file, so decrement if larger */
+ blt a3, 0x40, .nonkanji_lower_halfblock
+ addi a3, a3, -1
.nonkanji_lower_halfblock:
- add $a3, $a3, $a2
- lui $a2, %hi(kantbl)
- sll $a3, $a3, 1
- addiu $a2, %lo(kantbl)
- add $a3, $a3, $a2
- lh $a2, ($a3)
- jr $ra
- sll $v0, $a2, 7
- // returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE
+ mflo a2
+ add a3, a3, a2
+ sll a3, a3, 1
+ la a2, kantbl
+ add a3, a3, a2
+ lh a2, (a3)
+ sll v0, a2, 7
+ jr ra
+ /* returns kantbl[(adjusted byte2) + (adjusted byte1) * 0xBC] * FONT_CHAR_TEX_SIZE */
.out_of_range:
- jr $ra
- li $v0, -1
+ li v0, -1
+ jr ra
END(LeoGetKAdr)
/**
@@ -129,7 +112,7 @@ END(LeoGetKAdr)
* into blocks by high byte.
*/
DATA(kantbl)
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x814_ */ .half 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
/* 0x815_ */ .half 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
/* 0x816_ */ .half 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
@@ -143,7 +126,7 @@ DATA(kantbl)
/* 0x81E_ */ .half 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x81F_ */ .half 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0091
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x824_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092
/* 0x825_ */ .half 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x826_ */ .half 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB
@@ -157,7 +140,7 @@ DATA(kantbl)
/* 0x82E_ */ .half 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120
/* 0x82F_ */ .half 0x0121, 0x0122, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x834_ */ .half 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133
/* 0x835_ */ .half 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143
/* 0x836_ */ .half 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153
@@ -171,7 +154,7 @@ DATA(kantbl)
/* 0x83E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x83F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x844_ */ .half 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA
/* 0x845_ */ .half 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA
/* 0x846_ */ .half 0x01CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -185,7 +168,7 @@ DATA(kantbl)
/* 0x84E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x84F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x854_ */ .half 0x020E, 0x020F, 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D
/* 0x855_ */ .half 0x021E, 0x021F, 0x0220, 0x0221, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0222, 0x0223
/* 0x856_ */ .half 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, 0x022A, 0x022B, 0x022C, 0x022D, 0x022E, 0x022F, 0x0230, 0x0231, 0x0232, 0x0233
@@ -199,7 +182,7 @@ DATA(kantbl)
/* 0x85E_ */ .half 0x026C, 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B
/* 0x85F_ */ .half 0x027C, 0x027D, 0x027E, 0x027F, 0x0280, 0x0281, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x864_ */ .half 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028A, 0x028B, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291
/* 0x865_ */ .half 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x0000, 0x0000
/* 0x866_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
@@ -213,7 +196,7 @@ DATA(kantbl)
/* 0x86E_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x86F_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-// 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F
+/* 0x___0 0x___1 0x___2 0x___3 0x___4 0x___5 0x___6 0x___7 0x___8 0x___9 0x___A 0x___B 0x___C 0x___D 0x___E 0x___F */
/* 0x874_ */ .half 0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF
/* 0x875_ */ .half 0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
/* 0x876_ */ .half 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
diff --git a/src/libu64/code_800FC620.c b/src/libu64/system_heap.c
similarity index 94%
rename from src/libu64/code_800FC620.c
rename to src/libu64/system_heap.c
index 94926d838e..1ae93e868c 100644
--- a/src/libu64/code_800FC620.c
+++ b/src/libu64/system_heap.c
@@ -20,13 +20,6 @@ char sNew[] = "new";
char sNew[] = "";
#endif
-#if !PLATFORM_N64
-char D_80134488[0x18] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00,
- 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-#endif
-
// possibly some kind of new() function
void* func_800FC800(u32 size) {
DECLARE_INTERRUPT_MASK
diff --git a/src/libultra/audio/auxbus.c b/src/libultra/audio/auxbus.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/auxbus.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/copy.c b/src/libultra/audio/copy.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/copy.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/drvrnew.c b/src/libultra/audio/drvrnew.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/drvrnew.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/env.c b/src/libultra/audio/env.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/env.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/filter.c b/src/libultra/audio/filter.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/filter.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/heapalloc.c b/src/libultra/audio/heapalloc.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/heapalloc.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/load.c b/src/libultra/audio/load.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/load.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/mainbus.c b/src/libultra/audio/mainbus.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/mainbus.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/resample.c b/src/libultra/audio/resample.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/resample.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/reverb.c b/src/libultra/audio/reverb.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/reverb.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/save.c b/src/libultra/audio/save.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/save.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/sl.c b/src/libultra/audio/sl.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/sl.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/synallocfx.c b/src/libultra/audio/synallocfx.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/synallocfx.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/syndelete.c b/src/libultra/audio/syndelete.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/syndelete.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/audio/synthesizer.c b/src/libultra/audio/synthesizer.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/audio/synthesizer.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/bb/sa/common.c b/src/libultra/bb/sa/common.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/bb/sa/common.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/bb/sk/skapi.s b/src/libultra/bb/sk/skapi.s
new file mode 100644
index 0000000000..3e80adfcd1
--- /dev/null
+++ b/src/libultra/bb/sk/skapi.s
@@ -0,0 +1,48 @@
+#ifdef BBPLAYER
+#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
+#include "ultra64/bcp.h"
+
+.text
+
+#define SKC(name, num) \
+ LEAF(name) ;\
+ .set noreorder ;\
+ /* Load syscall number into v0 */ ;\
+ li v0, num ;\
+ /* Read from MI_SECURE_EXCEPTION_REG to */ ;\
+ /* transfer control to the Secure Kernel */ ;\
+ li t0, PHYS_TO_K1(MI_SECURE_EXCEPTION_REG) ;\
+ lw t1, (t0) ;\
+ nop ;\
+ jr ra ;\
+ nop ;\
+ .set reorder ;\
+ END(name)
+
+SKC(skGetId, 0)
+SKC(skLaunchSetup, 1)
+SKC(skLaunch, 2)
+SKC(skRecryptListValid, 3)
+SKC(skRecryptBegin, 4)
+SKC(skRecryptData, 5)
+SKC(skRecryptComputeState, 6)
+SKC(skRecryptEnd, 7)
+SKC(skSignHash, 8)
+SKC(skVerifyHash, 9)
+SKC(skGetConsumption, 10)
+SKC(skAdvanceTicketWindow, 11)
+SKC(skSetLimit, 12)
+SKC(skExit, 13)
+SKC(skKeepAlive, 14)
+
+/* These are not valid for a retail Secure Kernel, their usage pattern is unknown. */
+
+SKC(skGetRandomKeyData, 15)
+SKC(skDumpVirage, 16)
+SKC(skTest2, 17)
+SKC(skTest3, 18)
+SKC(skResetWindow, 19)
+SKC(skValidateRls, 20)
+
+#endif
diff --git a/src/libultra/gu/libm_vals.s b/src/libultra/gu/libm_vals.s
index 18de1ae4f2..91f2cadb37 100644
--- a/src/libultra/gu/libm_vals.s
+++ b/src/libultra/gu/libm_vals.s
@@ -1,8 +1,6 @@
#include "ultra64/asm.h"
-.section .rodata
-
-.balign 16
+.rdata
DATA(__libm_qnan_f)
.word 0x7F810000
diff --git a/src/libultra/gu/rotate.c b/src/libultra/gu/rotate.c
index b9108e1bc5..7d495e98ef 100644
--- a/src/libultra/gu/rotate.c
+++ b/src/libultra/gu/rotate.c
@@ -8,7 +8,7 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
f32 bc;
f32 ca;
f32 t;
-#if !PLATFORM_N64
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
f32 xs;
f32 ys;
f32 zs;
@@ -27,14 +27,14 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) {
guMtxIdentF(m);
-#if PLATFORM_N64
-#define xs (x * sine)
-#define ys (y * sine)
-#define zs (z * sine)
-#else
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
xs = x * sine;
ys = y * sine;
zs = z * sine;
+#else
+#define xs (x * sine)
+#define ys (y * sine)
+#define zs (z * sine)
#endif
t = x * x;
diff --git a/src/libultra/io/vimodefpalhaf1.c b/src/libultra/io/vimodefpalhaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpalhan1.c b/src/libultra/io/vimodefpalhan1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhan1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpalhpf1.c b/src/libultra/io/vimodefpalhpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpalhpf2.c b/src/libultra/io/vimodefpalhpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpalhpn1.c b/src/libultra/io/vimodefpalhpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpalhpn2.c b/src/libultra/io/vimodefpalhpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpalhpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallaf1.c b/src/libultra/io/vimodefpallaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallaf2.c b/src/libultra/io/vimodefpallaf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallaf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallan1.c b/src/libultra/io/vimodefpallan1.c
index 37cb5ff557..5fb019cdfb 100644
--- a/src/libultra/io/vimodefpallan1.c
+++ b/src/libultra/io/vimodefpallan1.c
@@ -16,15 +16,15 @@ OSViMode osViModeFpalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(58, 30, 4, 69), // burst
- VSYNC(625), // vSync
- HSYNC(3177, 23), // hSync
- LEAP(3183, 3181), // leap
- HSTART(128, 768), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV(3), // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
diff --git a/src/libultra/io/vimodefpallan2.c b/src/libultra/io/vimodefpallan2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallan2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallpf1.c b/src/libultra/io/vimodefpallpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallpf2.c b/src/libultra/io/vimodefpallpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallpn1.c b/src/libultra/io/vimodefpallpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodefpallpn2.c b/src/libultra/io/vimodefpallpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodefpallpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhaf1.c b/src/libultra/io/vimodempalhaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhan1.c b/src/libultra/io/vimodempalhan1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhan1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhpf1.c b/src/libultra/io/vimodempalhpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhpf2.c b/src/libultra/io/vimodempalhpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhpn1.c b/src/libultra/io/vimodempalhpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempalhpn2.c b/src/libultra/io/vimodempalhpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempalhpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallaf1.c b/src/libultra/io/vimodempallaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallaf2.c b/src/libultra/io/vimodempallaf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallaf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallan1.c b/src/libultra/io/vimodempallan1.c
index bcc4273afb..23d53987b0 100644
--- a/src/libultra/io/vimodempallan1.c
+++ b/src/libultra/io/vimodempallan1.c
@@ -16,15 +16,15 @@ OSViMode osViModeMpalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(57, 30, 5, 70), // burst
- VSYNC(525), // vSync
- HSYNC(3089, 4), // hSync
- LEAP(3097, 3098), // leap
- HSTART(108, 748), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV(3), // ctrl
+ WIDTH(320), // width
+ BURST(57, 30, 5, 70), // burst
+ VSYNC(525), // vSync
+ HSYNC(3089, 4), // hSync
+ LEAP(3097, 3098), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
diff --git a/src/libultra/io/vimodempallan2.c b/src/libultra/io/vimodempallan2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallan2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallpf1.c b/src/libultra/io/vimodempallpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallpf2.c b/src/libultra/io/vimodempallpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallpn1.c b/src/libultra/io/vimodempallpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodempallpn2.c b/src/libultra/io/vimodempallpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodempallpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschaf1.c b/src/libultra/io/vimodentschaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschan1.c b/src/libultra/io/vimodentschan1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschan1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschpf1.c b/src/libultra/io/vimodentschpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschpf2.c b/src/libultra/io/vimodentschpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschpn1.c b/src/libultra/io/vimodentschpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentschpn2.c b/src/libultra/io/vimodentschpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentschpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclaf1.c b/src/libultra/io/vimodentsclaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclaf2.c b/src/libultra/io/vimodentsclaf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclaf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclan1.c b/src/libultra/io/vimodentsclan1.c
index a29d15129f..19a7160ac8 100644
--- a/src/libultra/io/vimodentsclan1.c
+++ b/src/libultra/io/vimodentsclan1.c
@@ -16,15 +16,15 @@ OSViMode osViModeNtscLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(57, 34, 5, 62), // burst
- VSYNC(525), // vSync
- HSYNC(3093, 0), // hSync
- LEAP(3093, 3093), // leap
- HSTART(108, 748), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV(3), // ctrl
+ WIDTH(320), // width
+ BURST(57, 34, 5, 62), // burst
+ VSYNC(525), // vSync
+ HSYNC(3093, 0), // hSync
+ LEAP(3093, 3093), // leap
+ HSTART(108, 748), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
diff --git a/src/libultra/io/vimodentsclan2.c b/src/libultra/io/vimodentsclan2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclan2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclpf1.c b/src/libultra/io/vimodentsclpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclpf2.c b/src/libultra/io/vimodentsclpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclpn1.c b/src/libultra/io/vimodentsclpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodentsclpn2.c b/src/libultra/io/vimodentsclpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodentsclpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhaf1.c b/src/libultra/io/vimodepalhaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhan1.c b/src/libultra/io/vimodepalhan1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhan1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhpf1.c b/src/libultra/io/vimodepalhpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhpf2.c b/src/libultra/io/vimodepalhpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhpn1.c b/src/libultra/io/vimodepalhpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepalhpn2.c b/src/libultra/io/vimodepalhpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepalhpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallaf1.c b/src/libultra/io/vimodepallaf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallaf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallaf2.c b/src/libultra/io/vimodepallaf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallaf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallan1.c b/src/libultra/io/vimodepallan1.c
index d656dc4f94..7a8db603f4 100644
--- a/src/libultra/io/vimodepallan1.c
+++ b/src/libultra/io/vimodepallan1.c
@@ -16,15 +16,15 @@ OSViMode osViModePalLan1 = {
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_DIVOT_ON | VI_CTRL_ANTIALIAS_MODE_1 |
- VI_CTRL_PIXEL_ADV_3, // ctrl
- WIDTH(320), // width
- BURST(58, 30, 4, 69), // burst
- VSYNC(625), // vSync
- HSYNC(3177, 23), // hSync
- LEAP(3183, 3181), // leap
- HSTART(128, 768), // hStart
- SCALE(2, 0), // xScale
- VCURRENT(0), // vCurrent
+ VI_CTRL_PIXEL_ADV(3), // ctrl
+ WIDTH(320), // width
+ BURST(58, 30, 4, 69), // burst
+ VSYNC(625), // vSync
+ HSYNC(3177, 23), // hSync
+ LEAP(3183, 3181), // leap
+ HSTART(128, 768), // hStart
+ SCALE(2, 0), // xScale
+ VCURRENT(0), // vCurrent
},
{ // fldRegs
{
diff --git a/src/libultra/io/vimodepallan2.c b/src/libultra/io/vimodepallan2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallan2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallpf1.c b/src/libultra/io/vimodepallpf1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallpf1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallpf2.c b/src/libultra/io/vimodepallpf2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallpf2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallpn1.c b/src/libultra/io/vimodepallpn1.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallpn1.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vimodepallpn2.c b/src/libultra/io/vimodepallpn2.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vimodepallpn2.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/io/vitbl.c b/src/libultra/io/vitbl.c
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/src/libultra/io/vitbl.c
@@ -0,0 +1 @@
+
diff --git a/src/libultra/libc/bcmp.s b/src/libultra/libc/bcmp.s
index df6692feb5..dcd5bc0023 100644
--- a/src/libultra/libc/bcmp.s
+++ b/src/libultra/libc/bcmp.s
@@ -1,93 +1,89 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
+.text
-.section .text
+LEAF(bcmp)
+ xor v0, a0, a1
+ blt a2, 0x10, bytecmp
-.balign 16
+ and v0, v0, 3
+ negu t8, a0
+ bnez v0, unaligncmp
+
+ and t8, t8, 3
+ subu a2, a2, t8
+ beqz t8, wordcmp
+
+ move v0, v1
+ lwl v0, (a0)
+ lwl v1, (a1)
+ addu a0, a0, t8
+ addu a1, a1, t8
+ bne v0, v1, cmpne
-LEAF(bcmp)
- slti $at, $a2, 0x10
- bnez $at, bytecmp
- xor $v0, $a0, $a1
- andi $v0, $v0, 3
- bnez $v0, unaligncmp
- negu $t8, $a0
- andi $t8, $t8, 3
- beqz $t8, wordcmp
- subu $a2, $a2, $t8
- move $v0, $v1
- lwl $v0, ($a0)
- lwl $v1, ($a1)
- addu $a0, $a0, $t8
- addu $a1, $a1, $t8
- bne $v0, $v1, cmpne
wordcmp:
- li $at, ~3
- and $a3, $a2, $at
- beqz $a3, bytecmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lw $v0, ($a0)
+ and a3, a2, ~3
+ subu a2, a2, a3
+ beqz a3, bytecmp
+
+ addu a3, a3, a0
1:
- lw $v1, ($a1)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lw $v0, ($a0)
+ lw v0, (a0)
+ lw v1, (a1)
+ addu a0, a0, 4
+ addu a1, a1, 4
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
b bytecmp
- nop
+
unaligncmp:
- negu $a3, $a1
- andi $a3, $a3, 3
- beqz $a3, partaligncmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lbu $v0, ($a0)
+ negu a3, a1
+ and a3, a3, 3
+ subu a2, a2, a3
+ beqz a3, partaligncmp
+
+ addu a3, a3, a0
1:
- lbu $v1, ($a1)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lbu $v0, ($a0)
+ lbu v0, (a0)
+ lbu v1, (a1)
+ addu a0, a0, 1
+ addu a1, a1, 1
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
partaligncmp:
- li $at, ~3
- and $a3, $a2, $at
- beqz $a3, bytecmp
- subu $a2, $a2, $a3
- addu $a3, $a3, $a0
- lwl $v0, ($a0)
+ and a3, a2, ~3
+ subu a2, a2, a3
+ beqz a3, bytecmp
+
+ addu a3, a3, a0
1:
- lw $v1, ($a1)
- lwr $v0, 3($a0)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lwl $v0, ($a0)
+ lwl v0, (a0)
+ lw v1, (a1)
+ lwr v0, 3(a0)
+ addu a0, a0, 4
+ addu a1, a1, 4
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
bytecmp:
- blez $a2, cmpdone
- addu $a3, $a2, $a0
- lbu $v0, ($a0)
+ addu a3, a2, a0
+ blez a2, cmpdone
1:
- lbu $v1, ($a1)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $v0, $v1, cmpne
- nop
- bnel $a0, $a3, 1b
- lbu $v0, ($a0)
+ lbu v0, (a0)
+ lbu v1, (a1)
+ addu a0, a0, 1
+ addu a1, a1, 1
+ bne v0, v1, cmpne
+ bne a0, a3, 1b
+
cmpdone:
- jr $ra
- move $v0, $zero
+ move v0, zero
+ jr ra
cmpne:
- jr $ra
- li $v0, 1
+ li v0, 1
+ jr ra
END(bcmp)
diff --git a/src/libultra/libc/bcopy.s b/src/libultra/libc/bcopy.s
index e1240f113a..dcb6ad13c3 100644
--- a/src/libultra/libc/bcopy.s
+++ b/src/libultra/libc/bcopy.s
@@ -1,233 +1,211 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(bcopy)
- beqz $a2, ret
- move $a3, $a1
- beq $a0, $a1, ret
- slt $at, $a1, $a0
- bnezl $at, goforwards
- slti $at, $a2, 0x10
- add $v0, $a0, $a2
- slt $at, $a1, $v0
- beql $at, $zero, goforwards
- slti $at, $a2, 0x10
+ move a3, a1
+ beqz a2, ret
+ beq a0, a1, ret
+ blt a1, a0, goforwards
+ add v0, a0, a2
+ bge a1, v0, goforwards
b gobackwards
- slti $at, $a2, 0x10
- slti $at, $a2, 0x10
+
goforwards:
- bnez $at, forwards_bytecopy
- nop
- andi $v0, $a0, 3
- andi $v1, $a1, 3
- beq $v0, $v1, forwalignable
- nop
+ blt a2, 0x10, forwards_bytecopy
+ and v0, a0, 3
+ and v1, a1, 3
+ beq v0, v1, forwalignable
+
forwards_bytecopy:
- beqz $a2, ret
- nop
- addu $v1, $a0, $a2
+ beqz a2, ret
+ addu v1, a0, a2
99:
- lb $v0, ($a0)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- bne $a0, $v1, 99b
- sb $v0, -1($a1)
+ lb v0, (a0)
+ addu a0, a0, 1
+ sb v0, (a1)
+ addu a1, a1, 1
+ bne a0, v1, 99b
ret:
- jr $ra
- move $v0, $a3
+ move v0, a3
+ jr ra
forwalignable:
- beqz $v0, forwards_32
- li $at, 1
- beq $v0, $at, forw_copy3
- li $at, 2
- beql $v0, $at, forw_copy2
- lh $v0, ($a0)
- lb $v0, ($a0)
- addiu $a0, $a0, 1
- addiu $a1, $a1, 1
- addiu $a2, $a2, -1
+ beqz v0, forwards_32
+ beq v0, 1, forw_copy3
+ beq v0, 2, forw_copy2
+
+ lb v0, (a0)
+ addu a0, a0, 1
+ sb v0, (a1)
+ addu a1, a1, 1
+ addu a2, a2, -1
b forwards_32
- sb $v0, -1($a1)
- lh $v0, ($a0)
+
forw_copy2:
- addiu $a0, $a0, 2
- addiu $a1, $a1, 2
- addiu $a2, $a2, -2
+ lh v0, (a0)
+ addu a0, a0, 2
+ sh v0, (a1)
+ addu a1, a1, 2
+ addu a2, a2, -2
b forwards_32
- sh $v0, -2($a1)
+
forw_copy3:
- lb $v0, ($a0)
- lh $v1, 1($a0)
- addiu $a0, $a0, 3
- addiu $a1, $a1, 3
- addiu $a2, $a2, -3
- sb $v0, -3($a1)
- sh $v1, -2($a1)
+ lb v0, (a0)
+ lh v1, 1(a0)
+ addiu a0, a0, 3
+ sb v0, (a1)
+ sh v1, 1(a1)
+ addiu a1, a1, 3
+ addiu a2, a2, -3
forwards:
forwards_32:
- slti $at, $a2, 0x20
- bnezl $at, forwards_16_
- slti $at, $a2, 0x10
- lw $v0, ($a0)
- lw $v1, 4($a0)
- lw $t0, 8($a0)
- lw $t1, 0xC($a0)
- lw $t2, 0x10($a0)
- lw $t3, 0x14($a0)
- lw $t4, 0x18($a0)
- lw $t5, 0x1C($a0)
- addiu $a0, $a0, 0x20
- addiu $a1, $a1, 0x20
- addiu $a2, $a2, -0x20
- sw $v0, -0x20($a1)
- sw $v1, -0x1C($a1)
- sw $t0, -0x18($a1)
- sw $t1, -0x14($a1)
- sw $t2, -0x10($a1)
- sw $t3, -0xC($a1)
- sw $t4, -8($a1)
+ blt a2, 32, forwards_16
+ lw v0, 0(a0)
+ lw v1, 4(a0)
+ lw t0, 8(a0)
+ lw t1, 12(a0)
+ lw t2, 16(a0)
+ lw t3, 20(a0)
+ lw t4, 24(a0)
+ lw t5, 28(a0)
+ addiu a0, a0, 32
+ sw v0, 0(a1)
+ sw v1, 4(a1)
+ sw t0, 8(a1)
+ sw t1, 12(a1)
+ sw t2, 16(a1)
+ sw t3, 20(a1)
+ sw t4, 24(a1)
+ sw t5, 28(a1)
+ addiu a1, a1, 32
+ addiu a2, a2, -32
b forwards_32
- sw $t5, -4($a1)
+
forwards_16:
- slti $at, $a2, 0x10
-forwards_16_: // fake label due to branch likely optimization
- bnezl $at, forwards_4_
- slti $at, $a2, 4
- lw $v0, ($a0)
- lw $v1, 4($a0)
- lw $t0, 8($a0)
- lw $t1, 0xC($a0)
- addiu $a0, $a0, 0x10
- addiu $a1, $a1, 0x10
- addiu $a2, $a2, -0x10
- sw $v0, -0x10($a1)
- sw $v1, -0xC($a1)
- sw $t0, -8($a1)
+ blt a2, 16, forwards_4
+ lw v0, 0(a0)
+ lw v1, 4(a0)
+ lw t0, 8(a0)
+ lw t1, 12(a0)
+ addiu a0, a0, 16
+ sw v0, 0(a1)
+ sw v1, 4(a1)
+ sw t0, 8(a1)
+ sw t1, 12(a1)
+ addiu a1, a1, 16
+ addiu a2, a2, -16
b forwards_16
- sw $t1, -4($a1)
+
forwards_4:
- slti $at, $a2, 4
-forwards_4_: // fake label due to branch likely optimization
- bnez $at, forwards_bytecopy
- nop
- lw $v0, ($a0)
- addiu $a0, $a0, 4
- addiu $a1, $a1, 4
- addiu $a2, $a2, -4
+ blt a2, 4, forwards_bytecopy
+
+ lw v0, 0(a0)
+ addiu a0, a0, 4
+ sw v0, 0(a1)
+ addiu a1, a1, 4
+ addiu a2, a2, -4
b forwards_4
- sw $v0, -4($a1)
- slti $at, $a2, 0x10
+
gobackwards:
- add $a0, $a0, $a2
- bnez $at, backwards_bytecopy
- add $a1, $a1, $a2
- andi $v0, $a0, 3
- andi $v1, $a1, 3
- beq $v0, $v1, backalignable
- nop
+ add a0, a0,a2
+ add a1, a1,a2
+ blt a2, 16, backwards_bytecopy
+
+ andi v0, a0, 0x3
+ andi v1, a1, 0x3
+ beq v0, v1, backalignable
+
backwards_bytecopy:
- beqz $a2, ret
- nop
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- subu $v1, $a0, $a2
+ beqz a2, ret
+ addiu a0, a0, -1
+ addiu a1, a1, -1
+ subu v1, a0,a2
99:
- lb $v0, ($a0)
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- bne $a0, $v1, 99b
- sb $v0, 1($a1)
- jr $ra
- move $v0, $a3
+ lb v0, 0(a0)
+ addiu a0, a0, -1
+ sb v0, 0(a1)
+ addiu a1, a1, -1
+ bne a0, v1,99b
+
+ move v0, a3
+ jr ra
backalignable:
- beqz $v0, backwards_32
- li $at, 3
- beq $v0, $at, back_copy3
- li $at, 2
- beql $v0, $at, back_copy2
- lh $v0, -2($a0)
- lb $v0, -1($a0)
- addiu $a0, $a0, -1
- addiu $a1, $a1, -1
- addiu $a2, $a2, -1
- b backwards_32
- sb $v0, ($a1)
- lh $v0, -2($a0)
+ beqz v0, backwards
+ beq v0, 3, back_copy3
+ beq v0, 2, back_copy2
+ lb v0, -1(a0)
+ addiu a0, a0, -1
+ sb v0, -1(a1)
+ addiu a1, a1, -1
+ addiu a2, a2, -1
+ b backwards
+
back_copy2:
- addiu $a0, $a0, -2
- addiu $a1, $a1, -2
- addiu $a2, $a2, -2
- b backwards_32
- sh $v0, ($a1)
+ lh v0, -2(a0)
+ addiu a0, a0, -2
+ sh v0, -2(a1)
+ addiu a1, a1, -2
+ addiu a2, a2, -2
+ b backwards
+
back_copy3:
- lb $v0, -1($a0)
- lh $v1, -3($a0)
- addiu $a0, $a0, -3
- addiu $a1, $a1, -3
- addiu $a2, $a2, -3
- sb $v0, 2($a1)
- sh $v1, ($a1)
+ lb v0, -1(a0)
+ lh v1, -3(a0)
+ addiu a0, a0, -3
+ sb v0, -1(a1)
+ sh v1, -3(a1)
+ addiu a1, a1, -3
+ addiu a2, a2, -3
backwards:
backwards_32:
- slti $at, $a2, 0x20
- bnezl $at, backwards_16_
- slti $at, $a2, 0x10
- lw $v0, -4($a0)
- lw $v1, -8($a0)
- lw $t0, -0xc($a0)
- lw $t1, -0x10($a0)
- lw $t2, -0x14($a0)
- lw $t3, -0x18($a0)
- lw $t4, -0x1c($a0)
- lw $t5, -0x20($a0)
- addiu $a0, $a0, -0x20
- addiu $a1, $a1, -0x20
- addiu $a2, $a2, -0x20
- sw $v0, 0x1C($a1)
- sw $v1, 0x18($a1)
- sw $t0, 0x14($a1)
- sw $t1, 0x10($a1)
- sw $t2, 0xC($a1)
- sw $t3, 8($a1)
- sw $t4, 4($a1)
+ blt a2, 32, backwards_16
+ lw v0, -4(a0)
+ lw v1, -8(a0)
+ lw t0, -12(a0)
+ lw t1, -16(a0)
+ lw t2, -20(a0)
+ lw t3, -24(a0)
+ lw t4, -28(a0)
+ lw t5, -32(a0)
+ addiu a0, a0, -32
+ sw v0, -4(a1)
+ sw v1, -8(a1)
+ sw t0, -12(a1)
+ sw t1, -16(a1)
+ sw t2, -20(a1)
+ sw t3, -24(a1)
+ sw t4, -28(a1)
+ sw t5, -32(a1)
+ addiu a1, a1, -32
+ addiu a2, a2, -32
b backwards_32
- sw $t5, ($a1)
+
backwards_16:
- slti $at, $a2, 0x10
-backwards_16_: // fake label due to branch likely optimization
- bnezl $at, backwards_4_
- slti $at, $a2, 4
- lw $v0, -4($a0)
- lw $v1, -8($a0)
- lw $t0, -0xC($a0)
- lw $t1, -0x10($a0)
- addiu $a0, $a0, -0x10
- addiu $a1, $a1, -0x10
- addiu $a2, $a2, -0x10
- sw $v0, 0xC($a1)
- sw $v1, 8($a1)
- sw $t0, 4($a1)
+ blt a2, 16, backwards_4
+ lw v0, -4(a0)
+ lw v1, -8(a0)
+ lw t0, -12(a0)
+ lw t1, -16(a0)
+ addiu a0, a0, -16
+ sw v0, -4(a1)
+ sw v1, -8(a1)
+ sw t0, -12(a1)
+ sw t1, -16(a1)
+ addiu a1, a1, -16
+ addiu a2, a2, -16
b backwards_16
- sw $t1, ($a1)
+
backwards_4:
- slti $at, $a2, 4
-backwards_4_: // fake label due to branch likely optimization
- bnez $at, backwards_bytecopy
- nop
- lw $v0, -4($a0)
- addiu $a0, $a0, -4
- addiu $a1, $a1, -4
- addiu $a2, $a2, -4
+ blt a2, 4, backwards_bytecopy
+ lw v0, -4(a0)
+ addiu a0, a0, -4
+ sw v0, -4(a1)
+ addiu a1, a1, -4
+ addiu a2, a2, -4
b backwards_4
- sw $v0, ($a1)
END(bcopy)
diff --git a/src/libultra/libc/bzero.s b/src/libultra/libc/bzero.s
index 5323a92d7d..9c6552f654 100644
--- a/src/libultra/libc/bzero.s
+++ b/src/libultra/libc/bzero.s
@@ -1,65 +1,59 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
+.text
-.section .text
+LEAF(bzero)
+ negu v1, a0
+ blt a1, 0xC, bytezero
-.balign 16
+ and v1, v1, 3
+ subu a1, a1, v1
+ beqz v1, blkzero
-LEAF(bzero)
- slti $at, $a1, 0xC
- bnez $at, bytezero
- negu $v1, $a0
- andi $v1, $v1, 3
- beqz $v1, blkzero
- subu $a1, $a1, $v1
- swl $zero, ($a0)
- addu $a0, $a0, $v1
+ swl zero, (a0)
+ addu a0, a0, v1
blkzero:
- // align backwards to 0x20
- li $at, ~0x1F
- and $a3, $a1, $at
- // If the result is zero, the amount to zero is less than 0x20 bytes
- beqz $a3, wordzero
- subu $a1, $a1, $a3
- // zero in blocks of 0x20 at a time
- addu $a3, $a3, $a0
+ /* align backwards to 0x20 */
+ and a3, a1, ~(0x20 - 1)
+ /* If the result is zero, the amount to zero is less than 0x20 bytes */
+ subu a1, a1, a3
+ beqz a3, wordzero
+ /* zero in blocks of 0x20 at a time */
+ addu a3, a3, a0
1:
- addiu $a0, $a0, 0x20
- sw $zero, -0x20($a0)
- sw $zero, -0x1C($a0)
- sw $zero, -0x18($a0)
- sw $zero, -0x14($a0)
- sw $zero, -0x10($a0)
- sw $zero, -0xC($a0)
- sw $zero, -8($a0)
- bne $a0, $a3, 1b
- sw $zero, -4($a0)
+ sw zero, 0(a0)
+ sw zero, 4(a0)
+ sw zero, 8(a0)
+ sw zero, 12(a0)
+ addiu a0, a0, 0x20
+ sw zero, -16(a0)
+ sw zero, -12(a0)
+ sw zero, -8(a0)
+ sw zero, -4(a0)
+ bne a0, a3, 1b
+
wordzero:
- // align backwards to 0x4
- li $at, ~3
- and $a3, $a1, $at
- // If the result is zero, the amount to zero is less than 0x4 bytes
- beqz $a3, bytezero
- subu $a1, $a1, $a3
- // zero one word at a time
- addu $a3, $a3, $a0
+ /* align backwards to 0x4 */
+ and a3, a1, ~3
+ /* If the result is zero, the amount to zero is less than 0x4 bytes */
+ subu a1, a1, a3
+ beqz a3, bytezero
+ /* zero one word at a time */
+ addu a3, a3, a0
1:
- addiu $a0, $a0, 4
- bne $a0, $a3, 1b
- sw $zero, -4($a0)
+ addu a0, a0, 4
+ sw zero, -4(a0)
+ bne a0, a3, 1b
bytezero:
- // test if nothing left to zero
- blez $a1, zerodone
- nop
- // zero one byte at a time
- addu $a1, $a1, $a0
+ /* test if nothing left to zero */
+ blez a1, zerodone
+ /* zero one byte at a time */
+ addu a1, a1, a0
1:
- addiu $a0, $a0, 1
- bne $a0, $a1, 1b
- sb $zero, -1($a0)
+ sb zero, (a0)
+ addiu a0, a0, 1
+ bne a0, a1, 1b
zerodone:
- jr $ra
- nop
+ jr ra
END(bzero)
diff --git a/src/libultra/mgu/mtxf2l.s b/src/libultra/mgu/mtxf2l.s
index edbb675a8e..1fada6b530 100644
--- a/src/libultra/mgu/mtxf2l.s
+++ b/src/libultra/mgu/mtxf2l.s
@@ -1,40 +1,36 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
#define MTX_INTPART 0
#define MTX_FRACPART 0x20
LEAF(guMtxF2L)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f0
- li $t9, 0xFFFF0000
- addiu $t8, $a1, MTX_FRACPART
+ li.s fv0, 65536.0
+ li t9, 0xFFFF0000
+ addu t8, a1, MTX_FRACPART
1:
- lwc1 $f4, ($a0)
- lwc1 $f10, 4($a0)
- addiu $a1, $a1, 4
- mul.s $f6, $f4, $f0
- addiu $a0, $a0, 8
- mul.s $f16, $f10, $f0
- trunc.w.s $f8, $f6
- trunc.w.s $f18, $f16
- mfc1 $t0, $f8
- mfc1 $t1, $f18
- and $t2, $t0, $t9
- sll $t5, $t0, 0x10
- srl $t3, $t1, 0x10
- andi $t6, $t1, 0xFFFF
- or $t4, $t2, $t3
- or $t7, $t5, $t6
- sw $t4, (MTX_INTPART-4)($a1)
- bne $a1, $t8, 1b
- sw $t7, (MTX_FRACPART-4)($a1)
- jr $ra
- nop
+ lwc1 ft0, 0(a0)
+ lwc1 ft3, 4(a0)
+ mul.s ft1, ft0, fv0
+ mul.s ft4, ft3, fv0
+ trunc.w.s ft2, ft1
+ trunc.w.s ft5, ft4
+ mfc1 t0, ft2
+ mfc1 t1, ft5
+ srl t3, t1, 0x10
+ and t6, t1, 0xFFFF
+ and t2, t0, t9
+ sll t5, t0, 0x10
+ or t4, t2, t3
+ or t7, t5, t6
+ sw t4, (MTX_INTPART)(a1)
+ sw t7, (MTX_FRACPART)(a1)
+ addu a0, a0, 8
+ addu a1, a1, 4
+ bne a1, t8, 1b
+
+ jr ra
END(guMtxF2L)
diff --git a/src/libultra/mgu/mtxident.s b/src/libultra/mgu/mtxident.s
index fb0e4c44ad..7f074a5526 100644
--- a/src/libultra/mgu/mtxident.s
+++ b/src/libultra/mgu/mtxident.s
@@ -1,29 +1,27 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guMtxIdent)
- addi $t0, $zero, 1
- sll $t1, $t0, 0x10
- sw $t1, ($a0)
- sw $zero, 4($a0)
- sw $t0, 8($a0)
- sw $zero, 0xc($a0)
- sw $zero, 0x10($a0)
- sw $t1, 0x14($a0)
- sw $zero, 0x18($a0)
- sw $t0, 0x1C($a0)
- sw $zero, 0x20($a0)
- sw $zero, 0x24($a0)
- sw $zero, 0x28($a0)
- sw $zero, 0x2c($a0)
- sw $zero, 0x30($a0)
- sw $zero, 0x34($a0)
- sw $zero, 0x38($a0)
- jr $ra
- sw $zero, 0x3C($a0)
+ add t0, zero, 1
+ sll t1, t0, 0x10
+ sw t1, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw t0, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw t1, 0x14(a0)
+ sw zero, 0x18(a0)
+ sw t0, 0x1C(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x28(a0)
+ sw zero, 0x2c(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+ sw zero, 0x38(a0)
+ sw zero, 0x3C(a0)
+ jr ra
END(guMtxIdent)
diff --git a/src/libultra/mgu/mtxidentf.s b/src/libultra/mgu/mtxidentf.s
index 583fc22184..490b79e4b4 100644
--- a/src/libultra/mgu/mtxidentf.s
+++ b/src/libultra/mgu/mtxidentf.s
@@ -1,28 +1,26 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guMtxIdentF)
- li $t0, 0x3F800000 // 1.0f
- sw $t0, ($a0)
- sw $zero, 4($a0)
- sw $zero, 8($a0)
- sw $zero, 0xC($a0)
- sw $zero, 0x10($a0)
- sw $t0, 0x14($a0)
- sw $zero, 0x18($a0)
- sw $zero, 0x1C($a0)
- sw $zero, 0x20($a0)
- sw $zero, 0x24($a0)
- sw $t0, 0x28($a0)
- sw $zero, 0x2C($a0)
- sw $zero, 0x30($a0)
- sw $zero, 0x34($a0)
- sw $zero, 0x38($a0)
- jr $ra
- sw $t0, 0x3C($a0)
+ li.s t0, 1.0
+ sw t0, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw zero, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw t0, 0x14(a0)
+ sw zero, 0x18(a0)
+ sw zero, 0x1C(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw t0, 0x28(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+ sw zero, 0x38(a0)
+ sw t0, 0x3C(a0)
+ jr ra
END(guMtxIdentF)
diff --git a/src/libultra/mgu/mtxl2f.s b/src/libultra/mgu/mtxl2f.s
index 9298da37cc..b95e3aca7f 100644
--- a/src/libultra/mgu/mtxl2f.s
+++ b/src/libultra/mgu/mtxl2f.s
@@ -1,41 +1,43 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
#define MTX_INTPART 0
#define MTX_FRACPART 0x20
+#define FIXTOF 0.0000152587890625 /* 1.0f / 65536.0f */
+
LEAF(guMtxL2F)
- li $at, 0x37800000 // 1.0f / 65536.0f
- mtc1 $at, $f0
- li $t9, 0xFFFF0000
- addiu $t8, $a1, MTX_FRACPART
+ li.s fv0, FIXTOF
+ li t9, 0xFFFF0000
+ addiu t8, a1, MTX_FRACPART
1:
- lw $t0, MTX_INTPART($a1)
- lw $t1, MTX_FRACPART($a1)
- addiu $a1, $a1, 4
- and $t2, $t0, $t9
- srl $t3, $t1, 0x10
- or $t4, $t2, $t3
- mtc1 $t4, $f4
- sll $t5, $t0, 0x10
- andi $t6, $t1, 0xFFFF
- or $t7, $t5, $t6
- cvt.s.w $f6, $f4
- mtc1 $t7, $f10
- addiu $a0, $a0, 8
- cvt.s.w $f16, $f10
- mul.s $f8, $f6, $f0
- nop
- mul.s $f18, $f16, $f0
- swc1 $f8, -8($a0)
- bne $a1, $t8, 1b
- swc1 $f18, -4($a0)
- jr $ra
- nop
+ lw t0, MTX_INTPART(a1)
+ lw t1, MTX_FRACPART(a1)
+
+ and t2, t0, t9
+ srl t3, t1, 0x10
+ or t4, t2, t3
+
+ sll t5, t0, 0x10
+ and t6, t1, 0xFFFF
+ or t7, t5, t6
+
+ mtc1 t4, ft0
+ cvt.s.w ft1, ft0
+ mul.s ft2, ft1, fv0
+
+ mtc1 t7, ft3
+ cvt.s.w ft4, ft3
+ mul.s ft5, ft4, fv0
+
+ swc1 ft2, 0(a0)
+ swc1 ft5, 4(a0)
+ addu a0, a0, 8
+ addu a1, a1, 4
+ bne a1, t8, 1b
+
+ jr ra
END(guMtxL2F)
diff --git a/src/libultra/mgu/normalize.s b/src/libultra/mgu/normalize.s
index 7686317ea2..da10204d6c 100644
--- a/src/libultra/mgu/normalize.s
+++ b/src/libultra/mgu/normalize.s
@@ -1,31 +1,27 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noreorder
-
-.section .text
-
-.balign 32
+.text
+.align 5
LEAF(guNormalize)
- lwc1 $f4, ($a0)
- lwc1 $f6, ($a1)
- lwc1 $f8, ($a2)
- mul.s $f10, $f4, $f4
- li $t0, 0x3F800000 // 1.0f
- mul.s $f16, $f6, $f6
- add.s $f18, $f10, $f16
- mul.s $f16, $f8, $f8
- add.s $f10, $f16, $f18
- mtc1 $t0, $f18
- sqrt.s $f16, $f10
- div.s $f10, $f18, $f16
- mul.s $f16, $f4, $f10
- nop
- mul.s $f18, $f6, $f10
- nop
- mul.s $f4, $f8, $f10
- swc1 $f16, ($a0)
- swc1 $f18, ($a1)
- jr $ra
- swc1 $f4, ($a2)
+ lwc1 ft0, (a0)
+ lwc1 ft1, (a1)
+ lwc1 ft2, (a2)
+ li.s t0, 1.0
+ mul.s ft3, ft0, ft0
+ mul.s ft4, ft1, ft1
+ add.s ft5, ft3, ft4
+ mul.s ft4, ft2, ft2
+ add.s ft3, ft4, ft5
+ mtc1 t0, ft5
+ sqrt.s ft4, ft3
+ div.s ft3, ft5, ft4
+ mul.s ft4, ft0, ft3
+ mul.s ft5, ft1, ft3
+ mul.s ft0, ft2, ft3
+ swc1 ft4, (a0)
+ swc1 ft5, (a1)
+ swc1 ft0, (a2)
+ jr ra
END(guNormalize)
diff --git a/src/libultra/mgu/scale.s b/src/libultra/mgu/scale.s
index 80199c0621..5661b940cc 100644
--- a/src/libultra/mgu/scale.s
+++ b/src/libultra/mgu/scale.s
@@ -1,52 +1,56 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
+.text
+.align 5
-.section .text
+LEAF(guScale)
+ li.s ft0, 65536.0
-.balign 32
+ mtc1 a1, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
-LEAF(guScale)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f4
- mtc1 $a1, $f6
- sw $zero, 4($a0)
- sw $zero, 0xC($a0)
- mul.s $f8, $f6, $f4
- mtc1 $a2, $f6
- sw $zero, 0x10($a0)
- sw $zero, 0x18($a0)
- sw $zero, 0x24($a0)
- sw $zero, 0x2C($a0)
- sw $zero, 0x30($a0)
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- mtc1 $a3, $f6
- sw $zero, 0x38($a0)
- mfc1 $t1, $f10
- sw $zero, 0x3C($a0)
- srl $t2, $t1, 0x10
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- sll $t0, $t2, 0x10
- sll $t2, $t1, 0x10
- mfc1 $t1, $f10
- sw $t0, ($a0)
- sw $t2, 0x20($a0)
- srl $t0, $t1, 0x10
- trunc.w.s $f10, $f8
- andi $t2, $t1, 0xFFFF
- sw $t2, 0x28($a0)
- sw $t0, 8($a0)
- mfc1 $t1, $f10
- nop
- srl $t2, $t1, 0x10
- sll $t0, $t2, 0x10
- sw $t0, 0x14($a0)
- li $t0, 1
- sll $t2, $t1, 0x10
- sw $t2, 0x34($a0)
- jr $ra
- sw $t0, 0x1C($a0)
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ sw t0, 0x00(a0)
+ sll t2, t1, 0x10
+ sw t2, 0x20(a0)
+
+ mtc1 a2, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t0, t1, 0x10
+ sw t0, 0x08(a0)
+ andi t2, t1, 0xFFFF
+ sw t2, 0x28(a0)
+
+ mtc1 a3, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ sw t0, 0x14(a0)
+ sll t2, t1, 0x10
+ sw t2, 0x34(a0)
+
+ li t0, 1
+ sw t0, 0x1C(a0)
+
+ sw zero, 0x04(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw zero, 0x18(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x38(a0)
+ sw zero, 0x3C(a0)
+
+ jr ra
END(guScale)
diff --git a/src/libultra/mgu/translate.s b/src/libultra/mgu/translate.s
index d059ad5692..4ee630751f 100644
--- a/src/libultra/mgu/translate.s
+++ b/src/libultra/mgu/translate.s
@@ -1,61 +1,68 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
-.set noat
-.set noreorder
+.text
+.align 5
-.section .text
+LEAF(guTranslate)
+ li.s ft0, 65536.0
-.balign 32
+ mtc1 a1, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
-LEAF(guTranslate)
- li $at, 0x47800000 // 65536.0f
- mtc1 $at, $f4
- mtc1 $a1, $f6
- sw $zero, ($a0)
- sw $zero, 0x14($a0)
- mul.s $f8, $f6, $f4
- mtc1 $a2, $f6
- sw $zero, 8($a0)
- sw $zero, 4($a0)
- sw $zero, 0xC($a0)
- sw $zero, 0x10($a0)
- sw $zero, 0x20($a0)
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- mtc1 $a3, $f6
- sw $zero, 0x24($a0)
- mfc1 $t1, $f10
- sw $zero, 0x28($a0)
- sw $zero, 0x2C($a0)
- srl $t2, $t1, 0x10
- trunc.w.s $f10, $f8
- mul.s $f8, $f6, $f4
- sll $t0, $t2, 0x10
- sw $zero, 0x30($a0)
- mfc1 $t3, $f10
- sw $zero, 0x34($a0)
- srl $t2, $t3, 0x10
- trunc.w.s $f10, $f8
- or $t0, $t0, $t2
- sw $t0, 0x18($a0)
- sll $t0, $t1, 0x10
- sll $t2, $t3, 0x10
- mfc1 $t1, $f10
- srl $t2, $t2, 0x10
- or $t0, $t0, $t2
- sw $t0, 0x38($a0)
- srl $t2, $t1, 0x10
- sll $t0, $t2, 0x10
- addiu $t0, $t0, 1
- sw $t0, 0x1C($a0)
- lui $t0, 1
- ori $t0, $t0, 0
- sw $t0, ($a0)
- sw $t0, 0x14($a0)
- lui $t0, (0x00000001 >> 16)
- ori $t0, (0x00000001 & 0xFFFF)
- sll $t2, $t1, 0x10
- sw $t2, 0x3C($a0)
- jr $ra
- sw $t0, 8($a0)
+ mtc1 a2, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t3, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ srl t2, t3, 0x10
+ or t0, t0, t2
+ sw t0, 0x18(a0)
+
+ sll t2, t3, 0x10
+ sll t0, t1, 0x10
+ srl t2, t2, 0x10
+ or t0, t0, t2
+ sw t0, 0x38(a0)
+
+ mtc1 a3, ft1
+ mul.s ft2, ft1, ft0
+ trunc.w.s ft3, ft2
+ mfc1 t1, ft3
+
+ srl t2, t1, 0x10
+ sll t0, t2, 0x10
+ addiu t0, t0, 1
+ sw t0, 0x1C(a0)
+
+ sll t2, t1, 0x10
+ sw t2, 0x3C(a0)
+
+ sw zero, 0x00(a0)
+ sw zero, 0x04(a0)
+ sw zero, 0x08(a0)
+ sw zero, 0x0C(a0)
+ sw zero, 0x10(a0)
+ sw zero, 0x14(a0)
+ sw zero, 0x20(a0)
+ sw zero, 0x24(a0)
+ sw zero, 0x28(a0)
+ sw zero, 0x2C(a0)
+ sw zero, 0x30(a0)
+ sw zero, 0x34(a0)
+
+ lui t0, (0x00010000 >> 16)
+ ori t0, (0x00010000 & 0xFFFF)
+ sw t0, (a0)
+ sw t0, 0x14(a0)
+
+ lui t0, (0x00000001 >> 16)
+ ori t0, (0x00000001 & 0xFFFF)
+ sw t0, 8(a0)
+
+ jr ra
END(guTranslate)
diff --git a/src/libultra/os/exceptasm.s b/src/libultra/os/exceptasm.s
index 62e5814703..3a3919061c 100644
--- a/src/libultra/os/exceptasm.s
+++ b/src/libultra/os/exceptasm.s
@@ -1,27 +1,30 @@
+#ifdef __GNUC__
+.set gp=64
+#endif
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
+#include "ultra64/bcp.h"
#include "ultra64/message.h"
#include "ultra64/thread.h"
#include "ultra64/exception.h"
+#include "ultra64/version.h"
#include "debug/profiler.h"
#include "config.h"
-// Without these, the assembler doesn't understand C99-style bool. Only affects this file.
+/* Without these, the assembler doesn't understand C99-style bool. Only affects this file. */
#define true 1
#define false 0
-.set noat
-.set noreorder
-.set gp=64
+#define MESG(x) ((x) << 3)
-.section .data
-
-.balign 16
+.data
+.align 2
DATA(__osHwIntTable)
.word 0, 0
- .word 0, 0 // cart
+ .word 0, 0 /* cart */
.word 0, 0
.word 0, 0
.word 0, 0
@@ -31,9 +34,8 @@ DATA(__osPiIntTable)
.word 0, 0
ENDDATA(__osPiIntTable)
-.section .rodata
-
-.balign 16
+.rdata
+.align 2
__osIntOffTable:
.byte 0x00 /* redispatch */
@@ -80,220 +82,202 @@ __osIntTable:
.word IP7_Hdlr
.word counter
-.section .text
-
-.balign 16
+.text
/**
- * The exception preamble is copied to the exception vectors at
+ * The 16-byte exception preamble is copied to the exception vectors at
* UT_VEC, XUT_VEC, ECC_VEC, E_VEC, to direct execution to __osException
*/
LEAF(__osExceptionPreamble)
- lui $k0, %hi(__osException)
- addiu $k0, %lo(__osException)
- jr $k0
- nop
+ la k0, __osException
+ jr k0
END(__osExceptionPreamble)
LEAF(__osException)
- // Load scratch space for thread saving
- lui $k0, %hi(__osThreadSave)
- addiu $k0, %lo(__osThreadSave)
- // Save $at
- sd $at, THREAD_AT($k0)
- // Save sr
- mfc0 $k1, C0_SR
- sw $k1, THREAD_SR($k0)
- // Disable interrupts
- li $at, ~(SR_IE | SR_EXL)
- and $k1, $k1, $at
- mtc0 $k1, C0_SR
- // Save some temp registers for use in the following
- sd $t0, THREAD_T0($k0)
- sd $t1, THREAD_T1($k0)
- sd $t2, THREAD_T2($k0)
- // Mark FPU as unused
- sw $zero, THREAD_FP($k0)
- // Left over from misplaced ifdef, immediately overwritten on next instruction
- mfc0 $t0, C0_CAUSE
+.set noat
+ /* Load scratch space for thread saving */
+ la k0, __osThreadSave
+ /* Save at */
+ sd AT, THREAD_AT(k0)
+.set at
+ /* Save sr */
+ MFC0( k1, C0_SR)
+ sw k1, THREAD_SR(k0)
+ /* Disable interrupts */
+ and k1, k1, ~(SR_IE | SR_EXL)
+ MTC0( k1, C0_SR)
+ /* Save some temp registers for use in the following */
+ sd t0, THREAD_T0(k0)
+ sd t1, THREAD_T1(k0)
+ sd t2, THREAD_T2(k0)
+ /* Mark FPU as unused */
+ sw zero, THREAD_FP(k0)
+ /* Left over from misplaced ifdef, immediately overwritten on next instruction */
+ MFC0( t0, C0_CAUSE)
savecontext:
- // Save the previously running thread's context to be restored when it resumes
- move $t0, $k0
- lui $k0, %hi(__osRunningThread)
- lw $k0, %lo(__osRunningThread)($k0)
- ld $t1, THREAD_AT($t0)
- sd $t1, THREAD_AT($k0)
- ld $t1, THREAD_SR($t0)
- sd $t1, THREAD_SR($k0)
- ld $t1, THREAD_T0($t0)
- sd $t1, THREAD_T0($k0)
- ld $t1, THREAD_T1($t0)
- sd $t1, THREAD_T1($k0)
- ld $t1, THREAD_T2($t0)
- sd $t1, THREAD_T2($k0)
- lw $k1, THREAD_SR($k0)
- mflo $t0
- sd $t0, THREAD_LO($k0)
- mfhi $t0
- andi $t1, $k1, SR_IMASK
- sd $v0, THREAD_V0($k0)
- sd $v1, THREAD_V1($k0)
- sd $a0, THREAD_A0($k0)
- sd $a1, THREAD_A1($k0)
- sd $a2, THREAD_A2($k0)
- sd $a3, THREAD_A3($k0)
- sd $t3, THREAD_T3($k0)
- sd $t4, THREAD_T4($k0)
- sd $t5, THREAD_T5($k0)
- sd $t6, THREAD_T6($k0)
- sd $t7, THREAD_T7($k0)
- sd $s0, THREAD_S0($k0)
- sd $s1, THREAD_S1($k0)
- sd $s2, THREAD_S2($k0)
- sd $s3, THREAD_S3($k0)
- sd $s4, THREAD_S4($k0)
- sd $s5, THREAD_S5($k0)
- sd $s6, THREAD_S6($k0)
- sd $s7, THREAD_S7($k0)
- sd $t8, THREAD_T8($k0)
- sd $t9, THREAD_T9($k0)
- sd $gp, THREAD_GP($k0)
- sd $sp, THREAD_SP($k0)
- sd $fp, THREAD_S8($k0)
- sd $ra, THREAD_RA($k0)
- beqz $t1, savercp
- sd $t0, THREAD_HI($k0)
- // If any CPU interrupts are enabled in the previous thread's SR, bitwise-OR in the
- // disabled CPU interrupts from the global interrupt mask.
- // This is an attempt at reverting the effect of masking the thread's SR with the
- // global interrupt mask. This is however broken, see comments for osSetIntMask.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- li $at, ~0
- xor $t2, $t0, $at
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t2, $t2, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- or $t4, $t1, $t2
- and $t3, $k1, $at
- andi $t0, $t0, SR_IMASK
- or $t3, $t3, $t4
- and $t1, $t1, $t0
- and $k1, $k1, $at
- sw $t3, THREAD_SR($k0)
- or $k1, $k1, $t1
+.set noreorder
+ /* Save the previously running thread's context to be restored when it resumes */
+ move t0, k0
+ lw k0, __osRunningThread
+ ld t1, THREAD_AT(t0)
+ sd t1, THREAD_AT(k0)
+ ld t1, THREAD_SR(t0)
+ sd t1, THREAD_SR(k0)
+ ld t1, THREAD_T0(t0)
+ sd t1, THREAD_T0(k0)
+ ld t1, THREAD_T1(t0)
+ sd t1, THREAD_T1(k0)
+ ld t1, THREAD_T2(t0)
+ sd t1, THREAD_T2(k0)
+.set reorder
+ sd $2, THREAD_V0(k0)
+ sd $3, THREAD_V1(k0)
+ sd $4, THREAD_A0(k0)
+ sd $5, THREAD_A1(k0)
+ sd $6, THREAD_A2(k0)
+ sd $7, THREAD_A3(k0)
+ sd $11, THREAD_T3(k0)
+ sd $12, THREAD_T4(k0)
+ sd $13, THREAD_T5(k0)
+ sd $14, THREAD_T6(k0)
+ sd $15, THREAD_T7(k0)
+ sd $16, THREAD_S0(k0)
+ sd $17, THREAD_S1(k0)
+ sd $18, THREAD_S2(k0)
+ sd $19, THREAD_S3(k0)
+ sd $20, THREAD_S4(k0)
+ sd $21, THREAD_S5(k0)
+ sd $22, THREAD_S6(k0)
+ sd $23, THREAD_S7(k0)
+ sd $24, THREAD_T8(k0)
+ sd $25, THREAD_T9(k0)
+ sd $28, THREAD_GP(k0)
+ sd $29, THREAD_SP(k0)
+ sd $30, THREAD_S8(k0)
+ sd $31, THREAD_RA(k0)
+ mflo t0
+ sd t0, THREAD_LO(k0)
+ mfhi t0
+ sd t0, THREAD_HI(k0)
+ lw k1, THREAD_SR(k0)
+ andi t1, k1, SR_IMASK
+ beqz t1, savercp
+ /* If any CPU interrupts are enabled in the previous thread's SR, bitwise-OR in the */
+ /* disabled CPU interrupts from the global interrupt mask. */
+ /* This is an attempt at reverting the effect of masking the thread's SR with the */
+ /* global interrupt mask. This is however broken, see comments for osSetIntMask. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ xor t2, t0, 0xFFFFFFFF
+ andi t2, t2, SR_IMASK
+ or t4, t1, t2
+ and t3, k1, ~SR_IMASK
+ or t3, t3, t4
+ sw t3, THREAD_SR(k0)
+ andi t0, t0, SR_IMASK
+ and t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
savercp:
- // Save the currently masked RCP interrupts.
- lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1)
- beqz $t1, endrcp
- nop
- // Similar to the above comment, but for RCP interrupt enable bits rather than CPU.
- // This suffers from the same problem as above.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lw $t4, THREAD_RCP($k0)
- li $at, ~0
- srl $t0, $t0, RCP_IMASKSHIFT
- xor $t0, $t0, $at
- andi $t0, $t0, (RCP_IMASK >> RCP_IMASKSHIFT)
- and $t0, $t0, $t4
- or $t1, $t1, $t0
+ /* Save the currently masked RCP interrupts. */
+ lw t1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ beqz t1, endrcp
+ /* Similar to the above comment, but for RCP interrupt enable bits rather than CPU. */
+ /* This suffers from the same problem as above. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ srl t0, t0, RCP_IMASKSHIFT
+ xor t0, t0, 0xFFFFFFFF
+ andi t0, t0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ lw t4, THREAD_RCP(k0)
+ and t0, t0, t4
+ or t1, t1, t0
endrcp:
- sw $t1, THREAD_RCP($k0)
- mfc0 $t0, C0_EPC
- sw $t0, THREAD_PC($k0)
- lw $t0, THREAD_FP($k0)
- beqz $t0, handle_interrupt
- nop
- // Save FP Registers if FPU was used by the thread
- cfc1 $t0, C1_FPCSR
+ sw t1, THREAD_RCP(k0)
+ MFC0( t0, C0_EPC)
+ sw t0, THREAD_PC(k0)
+ lw t0, THREAD_FP(k0)
+ beqz t0, handle_interrupt
+ /* Save FP Registers if FPU was used by the thread */
+.set noreorder
+ cfc1 t0, C1_FPCSR
nop
- sw $t0, THREAD_FPCSR($k0)
- sdc1 $f0, THREAD_FP0($k0)
- sdc1 $f2, THREAD_FP2($k0)
- sdc1 $f4, THREAD_FP4($k0)
- sdc1 $f6, THREAD_FP6($k0)
- sdc1 $f8, THREAD_FP8($k0)
- sdc1 $f10, THREAD_FP10($k0)
- sdc1 $f12, THREAD_FP12($k0)
- sdc1 $f14, THREAD_FP14($k0)
- sdc1 $f16, THREAD_FP16($k0)
- sdc1 $f18, THREAD_FP18($k0)
- sdc1 $f20, THREAD_FP20($k0)
- sdc1 $f22, THREAD_FP22($k0)
- sdc1 $f24, THREAD_FP24($k0)
- sdc1 $f26, THREAD_FP26($k0)
- sdc1 $f28, THREAD_FP28($k0)
- sdc1 $f30, THREAD_FP30($k0)
+ sw t0, THREAD_FPCSR(k0)
+.set reorder
+ sdc1 $f0, THREAD_FP0(k0)
+ sdc1 $f2, THREAD_FP2(k0)
+ sdc1 $f4, THREAD_FP4(k0)
+ sdc1 $f6, THREAD_FP6(k0)
+ sdc1 $f8, THREAD_FP8(k0)
+ sdc1 $f10, THREAD_FP10(k0)
+ sdc1 $f12, THREAD_FP12(k0)
+ sdc1 $f14, THREAD_FP14(k0)
+ sdc1 $f16, THREAD_FP16(k0)
+ sdc1 $f18, THREAD_FP18(k0)
+ sdc1 $f20, THREAD_FP20(k0)
+ sdc1 $f22, THREAD_FP22(k0)
+ sdc1 $f24, THREAD_FP24(k0)
+ sdc1 $f26, THREAD_FP26(k0)
+ sdc1 $f28, THREAD_FP28(k0)
+ sdc1 $f30, THREAD_FP30(k0)
handle_interrupt:
#if ENABLE_PROFILER
- lw $a0, THREAD_ID($k0)
+ lw a0, THREAD_ID(k0)
+ addiu a0, a0, PROFILER_EVENT_TYPE_THREADEND
jal __osRecordProfilerEvent
- addiu $a0, $a0, PROFILER_EVENT_TYPE_THREADEND
#endif
- // Determine the cause of the exception or interrupt and
- // enter appropriate handling routine
- mfc0 $t0, C0_CAUSE
- sw $t0, THREAD_CAUSE($k0)
- li $t1, OS_STATE_RUNNABLE
- sh $t1, THREAD_STATE($k0)
- andi $t1, $t0, CAUSE_EXCMASK
- // Test for break exception
- li $t2, EXC_BREAK
- beq $t1, $t2, handle_break
- nop
- // Test for CpU (coprocessor unusable) exception
- li $t2, EXC_CPU
- beq $t1, $t2, handle_CpU
- nop
- // Test for interrupt, if it's not an interrupt, panic
- li $t2, EXC_INT
- bne $t1, $t2, panic
- nop
- and $s0, $k1, $t0
+ /* Determine the cause of the exception or interrupt and */
+ /* enter appropriate handling routine */
+ MFC0( t0, C0_CAUSE)
+ sw t0, THREAD_CAUSE(k0)
+label:
+ li t1, OS_STATE_RUNNABLE
+ sh t1, THREAD_STATE(k0)
+ andi t1, t0, CAUSE_EXCMASK
+ /* Test for break exception */
+ li t2, EXC_BREAK
+ beq t1, t2, handle_break
+ /* Test for CpU (coprocessor unusable) exception */
+ li t2, EXC_CPU
+ beq t1, t2, handle_CpU
+ /* Test for interrupt, if it's not an interrupt, panic */
+ li t2, EXC_INT
+ bne t1, t2, panic
+
+ and s0, k1, t0
next_interrupt:
- // Handle external interrupt causes, using a jump table
- // to enter into the appropriate handler
- andi $t1, $s0, CAUSE_IPMASK
- srl $t2, $t1, CAUSE_IPSHIFT + 4
- bnez $t2, 1f
- nop
- srl $t2, $t1, CAUSE_IPSHIFT
- addi $t2, $t2, 0x10
+ /* Handle external interrupt causes, using a jump table */
+ /* to enter into the appropriate handler */
+ andi t1, s0, CAUSE_IPMASK
+ srl t2, t1, CAUSE_IPSHIFT + 4
+ bnez t2, 1f
+
+ srl t2, t1, CAUSE_IPSHIFT
+ addi t2, t2, 0x10
1:
- lui $at, %hi(__osIntOffTable)
- addu $at, $at, $t2
- lbu $t2, %lo(__osIntOffTable)($at)
- lui $at, %hi(__osIntTable)
- addu $at, $at, $t2
- lw $t2, %lo(__osIntTable)($at)
- jr $t2
- nop
+ lbu t2, __osIntOffTable(t2)
+ lw t2, __osIntTable(t2)
+ jr t2
/**
* IP6 Interrupt
* Only signalled by development hardware
*/
IP6_Hdlr:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP6
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP6
b next_interrupt
- and $s0, $s0, $at
/**
* IP7 Interrupt
* Only signalled by development hardware
*/
IP7_Hdlr:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP7
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP7
b next_interrupt
- and $s0, $s0, $at
/**
* IP8/Counter Interrupt
@@ -301,435 +285,473 @@ IP7_Hdlr:
* cop0 compare register, this interrupt is triggered
*/
counter:
- mfc0 $t1, C0_COMPARE
- mtc0 $t1, C0_COMPARE
- // Post counter message
+ MFC0( t1, C0_COMPARE)
+ MTC0( t1, C0_COMPARE)
+ /* Post counter message */
+ li a0, MESG(OS_EVENT_COUNTER)
jal send_mesg
- li $a0, OS_EVENT_COUNTER*8
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP8
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP8
b next_interrupt
- and $s0, $s0, $at
/**
- * IP4/Cartridge Interrupt
- * Signalled by the N64 Disk Drive
+ * N64:
+ * IP4/Cartridge Interrupt
+ * Signalled by the N64 Disk Drive
+ * iQue:
+ * IP4/BCP Interrupt
+ * New RCP Interrupts
*/
cart:
- // Load cart callback set by __osSetHWIntrRoutine
- lui $t1, %hi(__osHwIntTable)
- addiu $t1, %lo(__osHwIntTable)
- lw $t2, (OS_INTR_CART*HWINT_SIZE+HWINT_CALLBACK)($t1)
- // Mask out interrupt
- li $at, ~CAUSE_IP4
- and $s0, $s0, $at
- // If the callback is NULL, handling is done
- beqz $t2, send_cart_mesg
- addi $t1, $t1, (OS_INTR_CART*HWINT_SIZE)
- // Set up a stack and run the callback
- jalr $t2
- lw $sp, HWINT_SP($t1)
- beqz $v0, send_cart_mesg
- nop
- // Redispatch immediately if the callback returned nonzero
+ /* Mask out interrupt */
+ and s0, s0, ~CAUSE_IP4
+ /* Load cart callback set by __osSetHWIntrRoutine */
+ la t1, __osHwIntTable
+ addi t1, t1, (OS_INTR_CART * HWINT_SIZE)
+ lw t2, HWINT_CALLBACK(t1)
+ /* If the callback is NULL, handling is done */
+ beqz t2, 1f
+ /* Set up a stack and run the callback */
+ lw sp, HWINT_SP(t1)
+ jalr t2
+ beqz v0, 1f
+ /* Redispatch immediately if the callback returned nonzero */
b redispatch
- nop
-send_cart_mesg:
- // Post a cart event message
+1:
+#ifndef BBPLAYER
+ /* Post a cart event message */
+ li a0, MESG(OS_EVENT_CART)
+ jal send_mesg
+#else
+ /* On the iQue Player the CART interrupt no longer exists. New RCP interrupts are vectored here */
+ lw s1, PHYS_TO_K1(MI_EX_INTR_REG)
+
+flash:
+ /* Check for FLASH interrupt */
+ andi t1, s1, MI_EX_INTR_FLASH
+ beqz t1, flashx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_FLASH
+ /* Clear it */
+ li t1, 0
+ sw t1, PHYS_TO_K1(PI_NAND_CTRL_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_FLASH)
+ jal send_mesg
+flashx:
+md:
+ /* Check for MD interrupt */
+ andi t1, s1, MI_EX_INTR_MD
+ beqz t1, mdx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_MD
+ /* Clear it */
+ li t1, MI_EX_INTR_CLR_MD
+ sw t1, PHYS_TO_K1(MI_EX_INTR_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_MD)
+ jal send_mesg
+mdx:
+aes:
+ /* Check for AES interrupt */
+ andi t1, s1, MI_EX_INTR_AES
+ beqz t1, aesx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_AES
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_AES
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_AES)
jal send_mesg
- li $a0, OS_EVENT_CART*8
- // Continue
+aesx:
+ide:
+ /* Check for IDE interrupt */
+ andi t1, s1, MI_EX_INTR_IDE
+ beqz t1, idex
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_IDE
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_IDE
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_IDE)
+ jal send_mesg
+idex:
+pi_err:
+ /* Check for PI_ERR Interrupt */
+ andi t1, s1, MI_EX_INTR_PI_ERR
+ beqz t1, pi_errx
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_PI_ERR
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_PI_ERR
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_PI_ERR)
+ jal send_mesg
+pi_errx:
+usb0:
+ /* Check for USB0 Interrupt */
+ andi t1, s1, MI_EX_INTR_USB0
+ beqz t1, usb0x
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_USB0
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_USB0
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_USB0)
+ jal send_mesg
+usb0x:
+usb1:
+ /* Check for USB1 Interrupt */
+ andi t1, s1, MI_EX_INTR_USB1
+ beqz t1, usb1x
+ /* Mask it out */
+ andi s1, s1, MI_EX_INTR_ALL & ~MI_EX_INTR_USB1
+ /* Disable the interrupt, this does not clear it.
+ * The responsibility of clearing and re-enabling
+ * the interrupt is left to the handler. */
+ li t1, MI_EX_INTR_MASK_CLR_USB1
+ sw t1, PHYS_TO_K1(MI_EX_INTR_MASK_REG)
+ /* Send the event message */
+ li a0, MESG(OS_EVENT_USB1)
+ jal send_mesg
+usb1x:
+#endif
+ /* Continue */
b next_interrupt
- nop
/**
* IP3/RCP Interrupt
* Signalled by the RCP for various reasons, described below
*/
rcp:
- // Load the MI interrupts and mask with the RCP bits in the global interrupt mask
- //! @bug this clobbers the t0 register which is expected to hold the value of the
- //! C0_CAUSE register in the sw1 and sw2 handlers. If the sw1 or sw2 handler runs
- //! after this, the interrupt will not be cleared properly.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lui $s1, %hi(PHYS_TO_K1(MI_INTR_REG))
- lw $s1, %lo(PHYS_TO_K1(MI_INTR_REG))($s1)
- srl $t0, $t0, RCP_IMASKSHIFT
- and $s1, $s1, $t0
+ /* Load the MI interrupts and mask with the RCP bits in the global interrupt mask */
+ /*! @bug this clobbers the t0 register which is expected to hold the value of the */
+ /*! C0_CAUSE register in the sw1 and sw2 handlers. If the sw1 or sw2 handler runs */
+ /*! after this, the interrupt will not be cleared properly. */
+ lw s1, PHYS_TO_K1(MI_INTR_REG)
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ srl t0, t0, RCP_IMASKSHIFT
+ and s1, s1, t0
/**
* Signal Processor (SP) Interrupt
*/
-sp:
- // Test for sp interrupt
- andi $t1, $s1, MI_INTR_SP
- beqz $t1, vi
- nop
- // Test for yielded or done signals in particular
- lui $t4, %hi(PHYS_TO_K1(SP_STATUS_REG))
- lw $t4, %lo(PHYS_TO_K1(SP_STATUS_REG))($t4)
- li $t1, (SP_CLR_INTR | SP_CLR_SIG3)
- lui $at, %hi(PHYS_TO_K1(SP_STATUS_REG))
- andi $t4, $t4, (SP_STATUS_YIELDED | SP_STATUS_TASKDONE)
- // Mask out SP interrupt
- andi $s1, $s1, (MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- beqz $t4, sp_other_break
- // Clear interrupt and signal 3
- sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at)
- // Post an SP event message
+ /* Test for sp interrupt */
+ andi t1, s1, MI_INTR_SP
+ beqz t1, vi
+ /* Mask out SP interrupt */
+ andi s1, s1, (MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ lw t4, PHYS_TO_K1(SP_STATUS_REG)
+ /* Clear interrupt and signal 3 */
+ li t1, (SP_CLR_INTR | SP_CLR_SIG3)
+ sw t1, PHYS_TO_K1(SP_STATUS_REG)
+ /* Test for yielded or done signals in particular */
+ andi t4, t4, (SP_STATUS_YIELDED | SP_STATUS_TASKDONE)
+ beqz t4, sp_other_break
+ /* Post an SP event message */
+ li a0, MESG(OS_EVENT_SP)
jal send_mesg
- li $a0, OS_EVENT_SP*8
- beqz $s1, NoMoreRcpInts
- nop
- // Step over sp_other_break handler
+ beqz s1, NoMoreRcpInts
+ /* Step over sp_other_break handler */
b vi
- nop
sp_other_break:
- // An sp signal that is not due to yielding or task completion, such as
- // an sp breakpoint. Post a different event message
+ /* An sp signal that is not due to yielding or task completion, such as */
+ /* an sp breakpoint. Post a different event message */
+ li a0, MESG(OS_EVENT_SP_BREAK)
jal send_mesg
- li $a0, OS_EVENT_SP_BREAK*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Video Interface (VI) Interrupt
*/
vi:
- // Test for vi interrupt
- andi $t1, $s1, MI_INTR_VI
- beqz $t1, ai
- lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG))
- // Mask out vi interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $zero, %lo(PHYS_TO_K1(VI_CURRENT_REG))($at)
- // Post vi event message
+ /* Test for vi interrupt */
+ andi t1, s1, MI_INTR_VI
+ beqz t1, ai
+ /* Mask out vi interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ sw zero, PHYS_TO_K1(VI_CURRENT_REG)
+ /* Post vi event message */
+ li a0, MESG(OS_EVENT_VI)
jal send_mesg
- li $a0, OS_EVENT_VI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Audio Interface (AI) Interrupt
*/
ai:
- // Test for ai interrupt
- andi $t1, $s1, MI_INTR_AI
- beqz $t1, si
- nop
- li $t1, 1
- lui $at, %hi(PHYS_TO_K1(AI_STATUS_REG))
- // Mask out ai interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $t1, %lo(PHYS_TO_K1(AI_STATUS_REG))($at)
- // Post ai event message
+ /* Test for ai interrupt */
+ andi t1, s1, MI_INTR_AI
+ beqz t1, si
+
+ /* Mask out ai interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ li t1, 1
+ sw t1, PHYS_TO_K1(AI_STATUS_REG)
+ /* Post ai event message */
+ li a0, MESG(OS_EVENT_AI)
jal send_mesg
- li $a0, OS_EVENT_AI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Serial Interface (SI) Interrupt
*/
si:
- // Test for si interrupt
- andi $t1, $s1, MI_INTR_SI
- beqz $t1, pi
- lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG))
- // Mask out si interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
- // Clear interrupt
- sw $zero, %lo(PHYS_TO_K1(SI_STATUS_REG))($at)
- // Post si event message
+ /* Test for si interrupt */
+ andi t1, s1, MI_INTR_SI
+ beqz t1, pi
+
+ /* Mask out si interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI | MI_INTR_DP)
+ /* Clear interrupt */
+ sw zero, PHYS_TO_K1(SI_STATUS_REG)
+ /* Post si event message */
+ li a0, MESG(OS_EVENT_SI)
jal send_mesg
- li $a0, OS_EVENT_SI*8
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Parallel Interface (PI) Interrupt
*/
pi:
- // Test for pi interrupt
- andi $t1, $s1, MI_INTR_PI
- beqz $t1, dp
- nop
-#if PLATFORM_N64
- // Clear interrupt and mask out pi interrupt
- li $t1, PI_STATUS_CLR_INTR
- lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
- sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
-#else
- // Clear interrupt
- li $t1, PI_STATUS_CLR_INTR
- lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
- sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
- // Load pi callback
- lui $t1, %hi(__osPiIntTable)
- addiu $t1, %lo(__osPiIntTable)
- lw $t2, HWINT_CALLBACK($t1)
- // Mask out pi interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
- // Skip callback if NULL
- beqz $t2, no_pi_callback
- nop
- // Set up a stack and run the callback
- lw $sp, HWINT_SP($t1)
- jalr $t2
- move $a0, $v0
- // If the callback returns non-zero, don't post a pi event message
- bnez $v0, skip_pi_mesg
- nop
+ /* Test for pi interrupt */
+ andi t1, s1, MI_INTR_PI
+ beqz t1, dp
+
+ /* Mask out pi interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_DP)
+ /* Clear the interrupt */
+ li t1, PI_STATUS_CLR_INTR
+ sw t1, PHYS_TO_K1(PI_STATUS_REG)
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_J
+ /* Load pi callback */
+ la t1, __osPiIntTable
+ lw t2, HWINT_CALLBACK(t1)
+ /* Skip callback if NULL */
+ beqz t2, no_pi_callback
+ /* Set up a stack and run the callback */
+ lw sp, HWINT_SP(t1)
+ move a0, v0
+ jalr t2
+ /* If the callback returns non-zero, don't post a pi event message */
+ bnez v0, skip_pi_mesg
#endif
no_pi_callback:
- // Post pi event message
+ /* Post pi event message */
+ li a0, MESG(OS_EVENT_PI)
jal send_mesg
- li $a0, OS_EVENT_PI*8
skip_pi_mesg:
- beqz $s1, NoMoreRcpInts
- nop
+ beqz s1, NoMoreRcpInts
/**
* Display Processor (DP) Interrupt
*/
dp:
- // Test for dp interrupt
- andi $t1, $s1, MI_INTR_DP
- beqz $t1, NoMoreRcpInts
- nop
- // Clear dp interrupt
- li $t1, MI_CLR_DP_INTR
- lui $at, %hi(PHYS_TO_K1(MI_INIT_MODE_REG))
- // Mask out dp interrupt
- andi $s1, $s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI)
- sw $t1, %lo(PHYS_TO_K1(MI_INIT_MODE_REG))($at)
- // Post dp event message
+ /* Test for dp interrupt */
+ andi t1, s1, MI_INTR_DP
+ beqz t1, NoMoreRcpInts
+
+ /* Mask out dp interrupt */
+ andi s1, s1, (MI_INTR_SP | MI_INTR_SI | MI_INTR_AI | MI_INTR_VI | MI_INTR_PI)
+ /* Clear dp interrupt */
+ li t1, MI_CLR_DP_INTR
+ sw t1, PHYS_TO_K1(MI_INIT_MODE_REG)
+ /* Post dp event message */
+ li a0, MESG(OS_EVENT_DP)
jal send_mesg
- li $a0, OS_EVENT_DP*8
NoMoreRcpInts:
- // Mask out interrupt and continue
- li $at, ~CAUSE_IP3
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_IP3
b next_interrupt
- and $s0, $s0, $at
/**
* IP5/PreNMI Interrupt
* Reset button has been pressed
*/
prenmi:
- // Disable IP5/PreNMI interrupt for the previously running thread
- lw $k1, THREAD_SR($k0)
- li $at, ~SR_IBIT5
- lui $t1, %hi(__osShutdown)
- and $k1, $k1, $at
- sw $k1, THREAD_SR($k0)
- addiu $t1, %lo(__osShutdown)
- // Test __osShutdown for first PreNMI event
- lw $t2, ($t1)
- beqz $t2, firstnmi
- li $at, ~CAUSE_IP5
- // Mask out interrupt and redispatch immediately
+ /* Disable IP5/PreNMI interrupt for the previously running thread */
+ lw k1, THREAD_SR(k0)
+ and k1, k1, ~SR_IBIT5
+ sw k1, THREAD_SR(k0)
+ /* Test __osShutdown for first PreNMI event */
+ la t1, __osShutdown
+ lw t2, (t1)
+ beqz t2, firstnmi
+ /* Mask out interrupt and redispatch immediately */
+ and s0, s0, ~CAUSE_IP5
b redispatch
- and $s0, $s0, $at
firstnmi:
- // Set __osShutdown
- li $t2, 1
- sw $t2, ($t1)
- // Post a PreNMI event message
+ /* Set __osShutdown */
+ li t2, 1
+ sw t2, (t1)
+ /* Post a PreNMI event message */
+ li a0, MESG(OS_EVENT_PRENMI)
jal send_mesg
- li $a0, OS_EVENT_PRENMI*8
- // Mask out and disable IP5/PreNMI interrupt for the highest priority thread
- lui $t2, %hi(__osRunQueue)
- lw $t2, %lo(__osRunQueue)($t2)
- li $at, ~SR_IBIT5
- and $s0, $s0, $at
- lw $k1, THREAD_SR($t2)
- and $k1, $k1, $at
- // Redispatch immediately
+ /* Mask out and disable IP5/PreNMI interrupt for the highest priority thread */
+ and s0, s0, ~SR_IBIT5
+ lw t2, __osRunQueue
+ lw k1, THREAD_SR(t2)
+ and k1, k1, ~SR_IBIT5
+ sw k1, THREAD_SR(t2)
+ /* Redispatch immediately */
b redispatch
- sw $k1, THREAD_SR($t2)
sw2:
- // Mask out interrupt
- li $at, ~CAUSE_SW2
- and $t0, $t0, $at
- mtc0 $t0, C0_CAUSE
- // Post sw2 event message
+ /* Mask out interrupt */
+ and t0, t0, ~CAUSE_SW2
+ MTC0( t0, C0_CAUSE)
+ /* Post sw2 event message */
+ li a0, MESG(OS_EVENT_SW2)
jal send_mesg
- li $a0, OS_EVENT_SW2*8
- li $at, ~CAUSE_SW2
- // Mask out interrupt and continue
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_SW2
b next_interrupt
- and $s0, $s0, $at
sw1:
- // Mask out interrupt
- li $at, ~CAUSE_SW1
- and $t0, $t0, $at
- mtc0 $t0, C0_CAUSE
- // Post sw1 event message
+ /* Mask out interrupt */
+ and t0, t0, ~CAUSE_SW1
+ MTC0( t0, C0_CAUSE)
+ /* Post sw1 event message */
+ li a0, MESG(OS_EVENT_SW1)
jal send_mesg
- li $a0, OS_EVENT_SW1*8
- li $at, ~CAUSE_SW1
- // Mask out interrupt and continue
+ /* Mask out interrupt and continue */
+ and s0, s0, ~CAUSE_SW1
b next_interrupt
- and $s0, $s0, $at
handle_break:
- // Set last thread as having hit a break exception
- li $t1, OS_FLAG_CPU_BREAK
- sh $t1, THREAD_FLAGS($k0)
- // Post a cpu break event message
+ /* Set last thread as having hit a break exception */
+ li t1, OS_FLAG_CPU_BREAK
+ sh t1, THREAD_FLAGS(k0)
+ /* Post a cpu break event message */
+ li a0, MESG(OS_EVENT_CPU_BREAK)
jal send_mesg
- li $a0, OS_EVENT_CPU_BREAK*8
- // Redispatch
+ /* Redispatch */
b redispatch
- nop
redispatch:
- lui $t2, %hi(__osRunQueue)
- lw $t2, %lo(__osRunQueue)($t2)
- // Get priority of previously running thread
- lw $t1, THREAD_PRI($k0)
- // Get highest priority from waiting threads
- lw $t3, THREAD_PRI($t2)
- slt $at, $t1, $t3
- beqz $at, enqueueRunning
- nop
- // The previously running thread is no longer the highest priority,
- // enqueue it to the run queue to wait its turn again
- lui $a0, %hi(__osRunQueue)
- move $a1, $k0
+ /* Get priority of previously running thread */
+ lw t1, THREAD_PRI(k0)
+ lw t2, __osRunQueue
+ /* Get highest priority from waiting threads */
+ lw t3, THREAD_PRI(t2)
+ bge t1, t3, enqueueRunning
+ /* The previously running thread is no longer the highest priority, */
+ /* enqueue it to the run queue to wait its turn again */
+ move a1, k0
+ la a0, __osRunQueue
jal __osEnqueueThread
- addiu $a0, $a0, %lo(__osRunQueue)
+
j __osDispatchThread
- nop
/**
* Resume the previously running thread by placing it at the top of
* the run queue and dispatching it
*/
enqueueRunning:
- lui $t1, %hi(__osRunQueue)
- addiu $t1, $t1, %lo(__osRunQueue)
- lw $t2, ($t1)
- sw $t2, THREAD_NEXT($k0)
+ la t1, __osRunQueue
+ lw t2, (t1)
+ sw t2, THREAD_NEXT(k0)
+ sw k0, (t1)
j __osDispatchThread
- sw $k0, ($t1)
/**
* Unhandled exceptions & interrupts end up here,
* trap to software by posting a fault message
*/
panic:
- // Mark the thread as having faulted
- lui $at, %hi(__osFaultedThread)
- sw $k0, %lo(__osFaultedThread)($at)
- li $t1, OS_STATE_STOPPED
- sh $t1, THREAD_STATE($k0)
- li $t1, OS_FLAG_FAULT
- sh $t1, THREAD_FLAGS($k0)
- // Save C0_BADVADDR
- mfc0 $t2, C0_BADVADDR
- sw $t2, THREAD_BADVADDR($k0)
- // Post the fault message
+ /* Mark the thread as having faulted */
+ sw k0, __osFaultedThread
+ li t1, OS_STATE_STOPPED
+ sh t1, THREAD_STATE(k0)
+ li t1, OS_FLAG_FAULT
+ sh t1, THREAD_FLAGS(k0)
+ /* Save C0_BADVADDR */
+ MFC0( t2, C0_BADVADDR)
+ sw t2, THREAD_BADVADDR(k0)
+ /* Post the fault message */
+ li a0, MESG(OS_EVENT_FAULT)
jal send_mesg
- li $a0, OS_EVENT_FAULT*8
- // Dispatch next thread
+ /* Dispatch next thread */
j __osDispatchThread
- nop
/**
* Handles posting event messages to the listening message queue, if there is one
*/
send_mesg:
- // Load pointer to listening message queue
- lui $t2, %hi(__osEventStateTab)
- addiu $t2, %lo(__osEventStateTab)
- addu $t2, $t2, $a0
- lw $t1, ($t2)
- // Save return address
- move $s2, $ra
- // If there is no listening message queue, done
- beqz $t1, send_done
- nop
- // Test if the message queue is full, if so don't post the message
- lw $t3, MQ_VALIDCOUNT($t1)
- lw $t4, MQ_MSGCOUNT($t1)
- slt $at, $t3, $t4
- beqz $at, send_done
- nop
- // Add validcount to first and modulo with msgcount
- lw $t5, MQ_FIRST($t1)
- addu $t5, $t5, $t3
- // Modulo
- div $zero, $t5, $t4
- bnez $t4, 1f
- nop
- break 7 // div0
-1:
- li $at, -1
- bne $t4, $at, 2f
- li $at, -0x80000000
- bne $t5, $at, 2f
- nop
- break 6 // overflow
-2:
- // End Modulo
- lw $t4, MQ_MSG($t1)
- mfhi $t5
- sll $t5, $t5, 2
- addu $t4, $t4, $t5
- // Fetch the message to post
- lw $t5, 4($t2)
- addiu $t2, $t3, 1
- // Post the message to the message queue
- sw $t5, ($t4)
- // Increment the validCount
- sw $t2, MQ_VALIDCOUNT($t1)
- // If there was a thread blocked on this message queue,
- // wake it up
- lw $t2, MQ_MTQUEUE($t1)
- lw $t3, ($t2)
- beqz $t3, send_done
- nop
+ /* Save return address */
+ move s2, ra
+ /* Load pointer to listening message queue */
+ la t2, __osEventStateTab
+ addu t2, t2, a0
+ lw t1, (t2)
+ /* If there is no listening message queue, done */
+ beqz t1, send_done
+
+ /* Test if the message queue is full, if so don't post the message */
+ lw t3, MQ_VALIDCOUNT(t1)
+ lw t4, MQ_MSGCOUNT(t1)
+ bge t3, t4, send_done
+
+ /* Add validcount to first and modulo with msgcount */
+ lw t5, MQ_FIRST(t1)
+ addu t5, t5, t3
+ rem t5, t5, t4
+ lw t4, MQ_MSG(t1)
+ mul t5, t5, 4
+ addu t4, t4, t5
+ /* Post the message to the message queue */
+ lw t5, 4(t2)
+ sw t5, (t4)
+ /* Increment the validCount */
+ addiu t2, t3, 1
+ sw t2, MQ_VALIDCOUNT(t1)
+ /* If there was a thread blocked on this message queue, */
+ /* wake it up */
+ lw t2, MQ_MTQUEUE(t1)
+ lw t3, (t2)
+ beqz t3, send_done
+ move a0, t1
jal __osPopThread
- move $a0, $t1
- move $t2, $v0
- lui $a0, %hi(__osRunQueue)
- move $a1, $t2
+ move t2, v0
+ move a1, t2
+ la a0, __osRunQueue
jal __osEnqueueThread
- addiu $a0, %lo(__osRunQueue)
send_done:
- jr $s2
- nop
+ jr s2
/**
* Handle coprocessor unusable exception
*/
handle_CpU:
- li $at, CAUSE_CEMASK
- and $t1, $t0, $at
- srl $t1, $t1, CAUSE_CESHIFT
- li $t2, 1 // if not coprocessor 1, panic
- bne $t1, $t2, panic
- nop
- // Mark cop1 as usable for previous thread
- lw $k1, THREAD_SR($k0)
- li $at, SR_CU1
- li $t1, 1
- or $k1, $k1, $at
- sw $t1, THREAD_FP($k0)
+ and t1, t0, CAUSE_CEMASK
+ srl t1, t1, CAUSE_CESHIFT
+ li t2, 1 /* if not coprocessor 1, panic */
+ bne t1, t2, panic
+ /* Mark cop1 as usable for previous thread */
+ li t1, 1
+ sw t1, THREAD_FP(k0)
+ lw k1, THREAD_SR(k0)
+ or k1, k1, SR_CU1
+ sw k1, THREAD_SR(k0)
b enqueueRunning
- sw $k1, THREAD_SR($k0)
END(__osException)
/**
@@ -741,88 +763,76 @@ END(__osException)
* unblocked runnable thread.
*/
LEAF(__osEnqueueAndYield)
- lui $a1, %hi(__osRunningThread)
- lw $a1, %lo(__osRunningThread)($a1)
- // Save SR
- mfc0 $t0, C0_SR
- lw $k1, THREAD_FP($a1)
- ori $t0, $t0, SR_EXL
- sw $t0, THREAD_SR($a1)
- // Save callee-saved registers
- sd $s0, THREAD_S0($a1)
- sd $s1, THREAD_S1($a1)
- sd $s2, THREAD_S2($a1)
- sd $s3, THREAD_S3($a1)
- sd $s4, THREAD_S4($a1)
- sd $s5, THREAD_S5($a1)
- sd $s6, THREAD_S6($a1)
- sd $s7, THREAD_S7($a1)
- sd $gp, THREAD_GP($a1)
- sd $sp, THREAD_SP($a1)
- sd $fp, THREAD_S8($a1)
- sd $ra, THREAD_RA($a1)
- // Save FPU callee-saved registers if the current thread has used the FPU
- beqz $k1, 1f
- sw $ra, THREAD_PC($a1)
- cfc1 $k1, C1_FPCSR
- sdc1 $f20, THREAD_FP20($a1)
- sdc1 $f22, THREAD_FP22($a1)
- sdc1 $f24, THREAD_FP24($a1)
- sdc1 $f26, THREAD_FP26($a1)
- sdc1 $f28, THREAD_FP28($a1)
- sdc1 $f30, THREAD_FP30($a1)
- sw $k1, THREAD_FPCSR($a1)
+ lw a1, __osRunningThread
+ /* Save SR */
+ MFC0( t0, C0_SR)
+ ori t0, t0, SR_EXL
+ sw t0, THREAD_SR(a1)
+ /* Save callee-saved registers */
+ sd s0, THREAD_S0(a1)
+ sd s1, THREAD_S1(a1)
+ sd s2, THREAD_S2(a1)
+ sd s3, THREAD_S3(a1)
+ sd s4, THREAD_S4(a1)
+ sd s5, THREAD_S5(a1)
+ sd s6, THREAD_S6(a1)
+ sd s7, THREAD_S7(a1)
+ sd gp, THREAD_GP(a1)
+ sd sp, THREAD_SP(a1)
+ sd fp, THREAD_S8(a1)
+ sd ra, THREAD_RA(a1)
+ sw ra, THREAD_PC(a1)
+ /* Save FPU callee-saved registers if the current thread has used the FPU */
+ lw k1, THREAD_FP(a1)
+ beqz k1, 1f
+ cfc1 k1, C1_FPCSR
+ sw k1, THREAD_FPCSR(a1)
+ sdc1 $f20, THREAD_FP20(a1)
+ sdc1 $f22, THREAD_FP22(a1)
+ sdc1 $f24, THREAD_FP24(a1)
+ sdc1 $f26, THREAD_FP26(a1)
+ sdc1 $f28, THREAD_FP28(a1)
+ sdc1 $f30, THREAD_FP30(a1)
1:
- lw $k1, THREAD_SR($a1)
- andi $t1, $k1, SR_IMASK
- beqz $t1, 2f
- nop
- // This code does the same thing as the block just above the `savercp` label.
- // See the comment there for more about this.
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- li $at, ~0
- xor $t0, $t0, $at
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t0, $t0, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- or $t1, $t1, $t0
- and $k1, $k1, $at
- or $k1, $k1, $t1
- sw $k1, THREAD_SR($a1)
+ lw k1, THREAD_SR(a1)
+ andi t1, k1, SR_IMASK
+ beqz t1, 2f
+ /* This code does the same thing as the block just above the `savercp` label. */
+ /* See the comment there for more about this. */
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ xor t0, t0, 0xFFFFFFFF
+ andi t0, t0, SR_IMASK
+ or t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
+ sw k1, THREAD_SR(a1)
2:
- lui $k1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $k1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($k1)
- beqz $k1, 3f
- nop
- // This code does the same thing as the block just below the `savercp` label.
- // See the comment there for more about this.
- lui $k0, %hi(__OSGlobalIntMask)
- addiu $k0, %lo(__OSGlobalIntMask)
- lw $k0, ($k0)
- lw $t0, THREAD_RCP($a1)
- li $at, ~0
- srl $k0, $k0, RCP_IMASKSHIFT
- xor $k0, $k0, $at
- andi $k0, $k0, (RCP_IMASK >> RCP_IMASKSHIFT)
- and $k0, $k0, $t0
- or $k1, $k1, $k0
+ lw k1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ beqz k1, 3f
+ /* This code does the same thing as the block just below the `savercp` label. */
+ /* See the comment there for more about this. */
+ la k0, __OSGlobalIntMask
+ lw k0, (k0)
+ srl k0, k0, RCP_IMASKSHIFT
+ xor k0, k0, 0xFFFFFFFF
+ andi k0, k0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ lw t0, THREAD_RCP(a1)
+ and k0, k0, t0
+ or k1, k1, k0
3:
- // If the specified thread queue is null, skip
- // straight to dispatching
- beqz $a0, no_enqueue
- sw $k1, THREAD_RCP($a1)
+ /* If the specified thread queue is null, skip */
+ /* straight to dispatching */
+ sw k1, THREAD_RCP(a1)
+ beqz a0, no_enqueue
jal __osEnqueueThread
- nop
no_enqueue:
#if ENABLE_PROFILER
- lw $a0, THREAD_ID($a1) // a1 is still the pointer to thread
+ lw a0, THREAD_ID(a1) /* a1 is still the pointer to thread */
+ addiu a0, a0, PROFILER_EVENT_TYPE_THREADEND
jal __osRecordProfilerEvent
- addiu $a0, $a0, PROFILER_EVENT_TYPE_THREADEND
#endif
j __osDispatchThread
- nop
END(__osEnqueueAndYield)
/**
@@ -831,31 +841,27 @@ END(__osEnqueueAndYield)
* Enqueues `thread` to the thread queue `threadQueue`, inserted by priority
*/
LEAF(__osEnqueueThread)
- lw $t8, ($a0)
- lw $t7, THREAD_PRI($a1)
- move $t9, $a0
- lw $t6, THREAD_PRI($t8)
- slt $at, $t6, $t7
- // If the current highest priority thread is a lower priority than
- // the new thread, skip searching the queue
- bnez $at, 2f
- nop
+ move t9, a0
+ lw t8, (a0)
+ lw t7, THREAD_PRI(a1)
+ lw t6, THREAD_PRI(t8)
+ /* If the current highest priority thread is a lower priority than */
+ /* the new thread, skip searching the queue */
+ blt t6, t7, 2f
1:
- // Search the queue for the position to insert the thread to maintain
- // ordering by priority
- move $t9, $t8
- lw $t8, THREAD_NEXT($t8)
- lw $t6, THREAD_PRI($t8)
- slt $at, $t6, $t7
- beqz $at, 1b
- nop
+ /* Search the queue for the position to insert the thread to maintain */
+ /* ordering by priority */
+ move t9, t8
+ lw t8, THREAD_NEXT(t8)
+ lw t6, THREAD_PRI(t8)
+ bge t6, t7, 1b
2:
- // Insert the thread into the queue
- lw $t8, ($t9)
- sw $t8, THREAD_NEXT($a1)
- sw $a1, ($t9)
- jr $ra
- sw $a0, THREAD_QUEUE($a1)
+ /* Insert the thread into the queue */
+ lw t8, (t9)
+ sw t8, THREAD_NEXT(a1)
+ sw a1, (t9)
+ sw a0, THREAD_QUEUE(a1)
+ jr ra
END(__osEnqueueThread)
/**
@@ -865,16 +871,15 @@ END(__osEnqueueThread)
* thread queue `threadQueue` and returns it
*/
LEAF(__osPopThread)
- lw $v0, ($a0)
- lw $t9, THREAD_NEXT($v0)
- jr $ra
- sw $t9, ($a0)
+ lw v0, (a0)
+ lw t9, THREAD_NEXT(v0)
+ sw t9, (a0)
+ jr ra
END(__osPopThread)
-#if !PLATFORM_N64
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
LEAF(__osNop)
- jr $ra
- nop
+ jr ra
END(__osNop)
#endif
@@ -883,31 +888,29 @@ END(__osNop)
* void __osRecordProfilerEvent(s32 type);
*/
LEAF(__osRecordProfilerEvent)
- lui $t0, %hi(activeProfilerState)
- lw $t0, %lo(activeProfilerState)($t0) // activeProfilerState
- beqz $t0, done
- mfc0 $t1, C0_COUNT // count
- lw $a1, (9*PROFILER_EVENT_COUNT)($t0) // ->numEvents
- slti $at, $a1, PROFILER_EVENT_COUNT // Profiler full?
- beqz $at, done
-get_time_no_interrupts: // osGetTime, but without the interrupts
- lui $t2, %hi(__osBaseCounter)
- lw $t2, %lo(__osBaseCounter)($t2)
- subu $t2, $t1, $t2 // base = count - __osBaseCounter
- lui $t3, %hi(__osCurrentTime)
- ld $t3, %lo(__osCurrentTime)($t3)
- addu $t1, $t2, $t3 // time = base + t
+ lui t0, %hi(activeProfilerState)
+ lw t0, %lo(activeProfilerState)(t0) /* activeProfilerState */
+ mfc0 t1, C0_COUNT /* count */
+ beqz t0, done
+ lw a1, (9*PROFILER_EVENT_COUNT)(t0) /* ->numEvents */
+ bge a1, PROFILER_EVENT_COUNT, done /* Profiler full? */
+get_time_no_interrupts: /* osGetTime, but without the interrupts */
+ lui t2, %hi(__osBaseCounter)
+ lw t2, %lo(__osBaseCounter)(t2)
+ subu t2, t1, t2 /* base = count - __osBaseCounter */
+ lui t3, %hi(__osCurrentTime)
+ ld t3, %lo(__osCurrentTime)(t3)
+ addu t1, t2, t3 /* time = base + t */
record:
- sll $a2, $a1, 3 // numEvents * 8 for eventTimes
- addu $a2, $a2, $t0 // activeProfilerState->eventTimes[e]
- sd $t1, (0)($a2)
- addu $a3, $a1, $t0 // activeProfilerState->{null}[e]
- sb $a0, (8*PROFILER_EVENT_COUNT)($a3) // eventTypes
- addiu $a1, $a1, 1 // numEvents++
- sw $a1, (9*PROFILER_EVENT_COUNT)($t0) // Write back numEvents
+ sll a2, a1, 3 /* numEvents * 8 for eventTimes */
+ addu a2, a2, t0 /* activeProfilerState->eventTimes[e] */
+ sd t1, (0)(a2)
+ addu a3, a1, t0 /* activeProfilerState->{null}[e] */
+ sb a0, (8*PROFILER_EVENT_COUNT)(a3) /* eventTypes */
+ addiu a1, a1, 1 /* numEvents++ */
+ sw a1, (9*PROFILER_EVENT_COUNT)(t0) /* Write back numEvents */
done:
- jr $ra
- nop
+ jr ra
END(__osRecordProfilerEvent)
#endif
@@ -917,120 +920,118 @@ END(__osRecordProfilerEvent)
* Dispatches the next thread to run after restoring the context
*/
LEAF(__osDispatchThread)
- // Obtain highest priority thread from the active run queue
- lui $a0, %hi(__osRunQueue)
+ /* Obtain highest priority thread from the active run queue */
+ la a0, __osRunQueue
jal __osPopThread
- addiu $a0, $a0, %lo(__osRunQueue)
- // Set thread as running
- lui $at, %hi(__osRunningThread)
- sw $v0, %lo(__osRunningThread)($at)
+ /* Set thread as running */
+ sw v0, __osRunningThread
+ li t0, OS_STATE_RUNNING
+ sh t0, THREAD_STATE(v0)
#if ENABLE_PROFILER
- move $s0, $v0
- lw $a0, THREAD_ID($v0)
+ move s0, v0
+ lw a0, THREAD_ID(v0)
+ addiu a0, a0, PROFILER_EVENT_TYPE_THREADSTART
jal __osRecordProfilerEvent
- addiu $a0, $a0, PROFILER_EVENT_TYPE_THREADSTART
- move $v0, $s0
+ move v0, s0
#endif
- li $t0, OS_STATE_RUNNING
- sh $t0, THREAD_STATE($v0)
- // Restore SR, masking out any interrupts that are not also
- // enabled in the global interrupt mask
- move $k0, $v0
- lui $t0, %hi(__OSGlobalIntMask)
- lw $k1, THREAD_SR($k0)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, ($t0)
- lui $at, ((~SR_IMASK) >> 0x10) & 0xFFFF
- andi $t1, $k1, SR_IMASK
- ori $at, (~SR_IMASK) & 0xFFFF
- andi $t0, $t0, SR_IMASK
- and $t1, $t1, $t0
- and $k1, $k1, $at
- or $k1, $k1, $t1
- mtc0 $k1, C0_SR
- // Restore GPRs
- ld $k1, THREAD_LO($k0)
- ld $at, THREAD_AT($k0)
- ld $v0, THREAD_V0($k0)
- mtlo $k1
- ld $k1, THREAD_HI($k0)
- ld $v1, THREAD_V1($k0)
- ld $a0, THREAD_A0($k0)
- ld $a1, THREAD_A1($k0)
- ld $a2, THREAD_A2($k0)
- ld $a3, THREAD_A3($k0)
- ld $t0, THREAD_T0($k0)
- ld $t1, THREAD_T1($k0)
- ld $t2, THREAD_T2($k0)
- ld $t3, THREAD_T3($k0)
- ld $t4, THREAD_T4($k0)
- ld $t5, THREAD_T5($k0)
- ld $t6, THREAD_T6($k0)
- ld $t7, THREAD_T7($k0)
- ld $s0, THREAD_S0($k0)
- ld $s1, THREAD_S1($k0)
- ld $s2, THREAD_S2($k0)
- ld $s3, THREAD_S3($k0)
- ld $s4, THREAD_S4($k0)
- ld $s5, THREAD_S5($k0)
- ld $s6, THREAD_S6($k0)
- ld $s7, THREAD_S7($k0)
- ld $t8, THREAD_T8($k0)
- ld $t9, THREAD_T9($k0)
- ld $gp, THREAD_GP($k0)
- mthi $k1
- ld $sp, THREAD_SP($k0)
- ld $fp, THREAD_S8($k0)
- ld $ra, THREAD_RA($k0)
- // Move thread pc to EPC so that eret will return execution to where the thread left off
- lw $k1, THREAD_PC($k0)
- mtc0 $k1, C0_EPC
- // Check if the FPU was used by this thread and if so also restore the FPU registers
- lw $k1, THREAD_FP($k0)
- beqz $k1, 1f
- nop
- lw $k1, THREAD_FPCSR($k0)
- ctc1 $k1, C1_FPCSR
- ldc1 $f0, THREAD_FP0($k0)
- ldc1 $f2, THREAD_FP2($k0)
- ldc1 $f4, THREAD_FP4($k0)
- ldc1 $f6, THREAD_FP6($k0)
- ldc1 $f8, THREAD_FP8($k0)
- ldc1 $f10, THREAD_FP10($k0)
- ldc1 $f12, THREAD_FP12($k0)
- ldc1 $f14, THREAD_FP14($k0)
- ldc1 $f16, THREAD_FP16($k0)
- ldc1 $f18, THREAD_FP18($k0)
- ldc1 $f20, THREAD_FP20($k0)
- ldc1 $f22, THREAD_FP22($k0)
- ldc1 $f24, THREAD_FP24($k0)
- ldc1 $f26, THREAD_FP26($k0)
- ldc1 $f28, THREAD_FP28($k0)
- ldc1 $f30, THREAD_FP30($k0)
+ /* Restore SR, masking out any interrupts that are not also */
+ /* enabled in the global interrupt mask */
+ move k0, v0
+ lw k1, THREAD_SR(k0)
+ la t0, __OSGlobalIntMask
+ lw t0, (t0)
+ andi t0, t0, SR_IMASK
+ andi t1, k1, SR_IMASK
+ and t1, t1, t0
+ and k1, k1, ~SR_IMASK
+ or k1, k1, t1
+ MTC0( k1, C0_SR)
+ /* Restore GPRs */
+.set noat
+ ld AT, THREAD_AT(k0)
+ ld v0, THREAD_V0(k0)
+ ld v1, THREAD_V1(k0)
+ ld a0, THREAD_A0(k0)
+ ld a1, THREAD_A1(k0)
+ ld a2, THREAD_A2(k0)
+ ld a3, THREAD_A3(k0)
+ ld t0, THREAD_T0(k0)
+ ld t1, THREAD_T1(k0)
+ ld t2, THREAD_T2(k0)
+ ld t3, THREAD_T3(k0)
+ ld t4, THREAD_T4(k0)
+ ld t5, THREAD_T5(k0)
+ ld t6, THREAD_T6(k0)
+ ld t7, THREAD_T7(k0)
+ ld s0, THREAD_S0(k0)
+ ld s1, THREAD_S1(k0)
+ ld s2, THREAD_S2(k0)
+ ld s3, THREAD_S3(k0)
+ ld s4, THREAD_S4(k0)
+ ld s5, THREAD_S5(k0)
+ ld s6, THREAD_S6(k0)
+ ld s7, THREAD_S7(k0)
+ ld t8, THREAD_T8(k0)
+ ld t9, THREAD_T9(k0)
+ ld gp, THREAD_GP(k0)
+ ld sp, THREAD_SP(k0)
+ ld fp, THREAD_S8(k0)
+ ld ra, THREAD_RA(k0)
+ ld k1, THREAD_LO(k0)
+ mtlo k1
+ ld k1, THREAD_HI(k0)
+ mthi k1
+ /* Move thread pc to EPC so that eret will return execution to where the thread left off */
+ lw k1, THREAD_PC(k0)
+ MTC0( k1, C0_EPC)
+ /* Check if the FPU was used by this thread and if so also restore the FPU registers */
+ lw k1, THREAD_FP(k0)
+ beqz k1, 1f
+
+.set noreorder
+ lw k1, THREAD_FPCSR(k0)
+ ctc1 k1, C1_FPCSR
+.set reorder
+ ldc1 $f0, THREAD_FP0(k0)
+ ldc1 $f2, THREAD_FP2(k0)
+ ldc1 $f4, THREAD_FP4(k0)
+ ldc1 $f6, THREAD_FP6(k0)
+ ldc1 $f8, THREAD_FP8(k0)
+ ldc1 $f10, THREAD_FP10(k0)
+ ldc1 $f12, THREAD_FP12(k0)
+ ldc1 $f14, THREAD_FP14(k0)
+ ldc1 $f16, THREAD_FP16(k0)
+ ldc1 $f18, THREAD_FP18(k0)
+ ldc1 $f20, THREAD_FP20(k0)
+ ldc1 $f22, THREAD_FP22(k0)
+ ldc1 $f24, THREAD_FP24(k0)
+ ldc1 $f26, THREAD_FP26(k0)
+ ldc1 $f28, THREAD_FP28(k0)
+ ldc1 $f30, THREAD_FP30(k0)
1:
- // Restore RCP interrupt mask, masking out any RCP interrupts that
- // are not also enabled in the global interrupt mask
- lw $k1, THREAD_RCP($k0)
- lui $k0, %hi(__OSGlobalIntMask)
- addiu $k0, %lo(__OSGlobalIntMask)
- lw $k0, ($k0)
- srl $k0, $k0, RCP_IMASKSHIFT
- and $k1, $k1, $k0
- sll $k1, $k1, 1
- lui $k0, %hi(__osRcpImTable)
- addiu $k0, %lo(__osRcpImTable)
- addu $k1, $k1, $k0
- lhu $k1, ($k1)
- lui $k0, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- addiu $k0, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))
- sw $k1, ($k0)
- // Empty pipeline
+ /* Restore RCP interrupt mask, masking out any RCP interrupts that */
+ /* are not also enabled in the global interrupt mask */
+.set noreorder
+ lw k1, THREAD_RCP(k0)
+ la k0, __OSGlobalIntMask
+ lw k0, (k0)
+ srl k0, k0, RCP_IMASKSHIFT
+ and k1, k1, k0
+ sll k1, k1, 1
+ la k0, __osRcpImTable
+ addu k1, k1, k0
+ lhu k1, (k1)
+ la k0, PHYS_TO_K1(MI_INTR_MASK_REG)
+ sw k1, (k0)
+ /* Empty pipeline */
nop
nop
nop
nop
- // Resume thread execution
+ /* Resume thread execution */
eret
+.set reorder
+.set at
END(__osDispatchThread)
/**
@@ -1041,7 +1042,7 @@ END(__osDispatchThread)
* current thread to be destroyed.
*/
LEAF(__osCleanupThread)
+ move a0, zero
jal osDestroyThread
- move $a0, $zero
- // Despite being a jal, this function does not return as the thread will have been destroyed
+ /* Despite being a jal, this function does not return as the thread will have been destroyed */
END(__osCleanupThread)
diff --git a/src/libultra/os/getcause.s b/src/libultra/os/getcause.s
index a621e97363..b59c5c6801 100644
--- a/src/libultra/os/getcause.s
+++ b/src/libultra/os/getcause.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetCause)
- mfc0 $v0, C0_CAUSE
- jr $ra
- nop
+ MFC0( v0, C0_CAUSE)
+ jr ra
END(__osGetCause)
diff --git a/src/libultra/os/getcount.s b/src/libultra/os/getcount.s
index 242c9da692..84552adb00 100644
--- a/src/libultra/os/getcount.s
+++ b/src/libultra/os/getcount.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osGetCount)
- mfc0 $v0, C0_COUNT
- jr $ra
- nop
+ MFC0( v0, C0_COUNT)
+ jr ra
END(osGetCount)
diff --git a/src/libultra/os/getfpccsr.s b/src/libultra/os/getfpccsr.s
index 93d4e51b8e..37c0e8c3b2 100644
--- a/src/libultra/os/getfpccsr.s
+++ b/src/libultra/os/getfpccsr.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetFpcCsr)
- cfc1 $v0, C1_FPCSR
- jr $ra
- nop
+ CFC1( v0, C1_FPCSR)
+ jr ra
END(__osGetFpcCsr)
diff --git a/src/libultra/os/getintmask.s b/src/libultra/os/getintmask.s
index 2c6ddc86ed..f734103938 100644
--- a/src/libultra/os/getintmask.s
+++ b/src/libultra/os/getintmask.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
#include "ultra64/exception.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* OSIntMask osGetIntMask(void);
@@ -23,38 +19,35 @@
* See the comment for osSetIntMask for more details.
*/
LEAF(osGetIntMask)
- // Extract interrupt enable bits from current SR
- mfc0 $v0, C0_SR
- andi $v0, $v0, (SR_IMASK | SR_IE)
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t1, 0($t0)
- // Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask
- li $at, ~0
- xor $t0, $t1, $at
- andi $t0, $t0, SR_IMASK
- or $v0, $v0, $t0
- // Fetch MI_INTR_MASK_REG
- lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1)
- // If there are RCP interrupts masked
- beqz $t1, 1f
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t0, 0($t0)
- // Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask
- srl $t0, $t0, RCP_IMASKSHIFT
- li $at, ~0
- xor $t0, $t0, $at
- andi $t0, $t0, (RCP_IMASK >> RCP_IMASKSHIFT)
- or $t1, $t1, $t0
+.set noreorder
+ /* Extract interrupt enable bits from current SR */
+ mfc0 v0, C0_SR
+ andi v0, v0, (SR_IMASK | SR_IE)
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask
+ lw t1, (t0)
+ /* Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask */
+ xor t0, t1, ~0
+ andi t0, t0, SR_IMASK
+ or v0, v0, t0
+ /* Fetch MI_INTR_MASK_REG */
+ lw t1, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* If there are RCP interrupts masked */
+ beqz t1, 1f
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask /* Note: macro expansion in delay slot */
+ lw t0, (t0)
+ /* Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask */
+ srl t0, t0, RCP_IMASKSHIFT
+ xor t0, t0, ~0
+ andi t0, t0, (RCP_IMASK >> RCP_IMASKSHIFT)
+ or t1, t1, t0
1:
- // Shift the RCP bits to not conflict with the CPU bits
- sll $t2, $t1, RCP_IMASKSHIFT
- // OR the CPU and RCP bits together
- or $v0, $v0, $t2
- jr $ra
+ /* Shift the RCP bits to not conflict with the CPU bits */
+ sll t2, t1, RCP_IMASKSHIFT
+ /* OR the CPU and RCP bits together */
+ or v0, v0, t2
+ jr ra
nop
+.set reorder
END(osGetIntMask)
diff --git a/src/libultra/os/getsr.s b/src/libultra/os/getsr.s
index dc6901b982..709075a7b7 100644
--- a/src/libultra/os/getsr.s
+++ b/src/libultra/os/getsr.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osGetSR)
- mfc0 $v0, C0_SR
- jr $ra
- nop
+ MFC0( v0, C0_SR)
+ jr ra
END(__osGetSR)
diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c
index e985d551d9..427a517710 100644
--- a/src/libultra/os/initialize.c
+++ b/src/libultra/os/initialize.c
@@ -16,12 +16,14 @@ OSHWIntr __OSGlobalIntMask = OS_IM_ALL;
u32 __osFinalrom;
-#if PLATFORM_N64
+#if LIBULTRA_VERSION < LIBULTRA_VERSION_K
#define OSINITIALIZE_FUNC osInitialize
#define SPEED_PARAM_FUNC createSpeedParam
+#if (LIBULTRA_VERSION == LIBULTRA_VERSION_I && LIBULTRA_PATCH == 1) || (LIBULTRA_VERSION == LIBULTRA_VERSION_J)
static void SPEED_PARAM_FUNC(void);
+#endif
#else
@@ -46,14 +48,14 @@ void SPEED_PARAM_FUNC(void) {
void OSINITIALIZE_FUNC(void) {
u32 pifdata;
-#if PLATFORM_N64
+#if LIBULTRA_VERSION < LIBULTRA_VERSION_K
u32 clock = 0;
#endif
__osFinalrom = true;
__osSetSR(__osGetSR() | SR_CU1);
__osSetFpcCsr(FPCSR_FS | FPCSR_EV);
-#if !PLATFORM_N64
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
__osSetWatchLo(0x04900000);
#endif
@@ -71,9 +73,11 @@ void OSINITIALIZE_FUNC(void) {
osWritebackDCache((void*)K0BASE, E_VEC - K0BASE + sizeof(__osExceptionVector));
osInvalICache((void*)K0BASE, E_VEC - K0BASE + sizeof(__osExceptionVector));
+#if (LIBULTRA_VERSION == LIBULTRA_VERSION_I && LIBULTRA_PATCH == 1) || (LIBULTRA_VERSION > LIBULTRA_VERSION_I)
SPEED_PARAM_FUNC();
osUnmapTLBAll();
osMapTLBRdb();
+#endif
osClockRate = osClockRate * 3 / 4;
@@ -89,19 +93,21 @@ void OSINITIALIZE_FUNC(void) {
osViClock = VI_NTSC_CLOCK;
}
+#if (LIBULTRA_VERSION == LIBULTRA_VERSION_I && LIBULTRA_PATCH == 1) || (LIBULTRA_VERSION >= LIBULTRA_VERSION_J)
// If PreNMI is pending, loop until reset
if (__osGetCause() & CAUSE_IP5) {
while (true) {
;
}
}
+#endif
IO_WRITE(AI_CONTROL_REG, AI_CONTROL_DMA_ON);
IO_WRITE(AI_DACRATE_REG, AI_MAX_DAC_RATE - 1);
IO_WRITE(AI_BITRATE_REG, AI_MAX_BIT_RATE - 1);
}
-#if PLATFORM_N64
+#if (LIBULTRA_VERSION == LIBULTRA_VERSION_I && LIBULTRA_PATCH == 1) || (LIBULTRA_VERSION == LIBULTRA_VERSION_J)
static void SPEED_PARAM_FUNC(void) {
__Dom1SpeedParam.type = DEVICE_TYPE_INIT;
__Dom1SpeedParam.latency = IO_READ(PI_BSD_DOM1_LAT_REG);
diff --git a/src/libultra/os/interrupt.s b/src/libultra/os/interrupt.s
index 829377bb0e..3a9102c579 100644
--- a/src/libultra/os/interrupt.s
+++ b/src/libultra/os/interrupt.s
@@ -1,53 +1,45 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/thread.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osDisableInt)
- lui $t2, %hi(__OSGlobalIntMask)
- addiu $t2, $t2, %lo(__OSGlobalIntMask)
- lw $t3, ($t2)
- andi $t3, $t3, SR_IMASK
- mfc0 $t0, C0_SR
- li $at, ~SR_IE
- and $t1, $t0, $at
- mtc0 $t1, C0_SR
- andi $v0, $t0, SR_IE
- lw $t0, ($t2)
- andi $t0, $t0, SR_IMASK
- beq $t0, $t3, No_Change_Global_Int
- lui $t2, %hi(__osRunningThread)
- //! @bug this addiu should be lw, it may never come up in practice as to reach this code
- //! the CPU bits of __OSGlobalIntMask must have changed while this function is running.
- addiu $t2, $t2, %lo(__osRunningThread)
- lw $t1, THREAD_SR($t2)
- andi $t2, $t1, SR_IMASK
- and $t2, $t2, $t0
- li $at, ~SR_IMASK
- and $t1, $t1, $at
- or $t1, $t1, $t2
- li $at, ~SR_IE
- and $t1, $t1, $at
- mtc0 $t1, C0_SR
- nop
- nop
+ la t2, __OSGlobalIntMask
+ lw t3, (t2)
+ and t3, t3, SR_IMASK
+ MFC0( t0, C0_SR)
+ and t1, t0, ~SR_IE
+ MTC0( t1, C0_SR)
+ and v0, t0, SR_IE
+ lw t0, (t2)
+ and t0, t0, SR_IMASK
+.set noreorder
+ beq t0, t3, No_Change_Global_Int
+ /*! @bug this la should be lw, it may never come up in practice as to reach this code
+ *! the CPU bits of __OSGlobalIntMask must have changed while this function is running.
+ */
+ la t2, __osRunningThread
+ lw t1, THREAD_SR(t2)
+ and t2, t1, SR_IMASK
+ and t2, t2, t0
+.set reorder
+ and t1, t1, ~SR_IMASK
+ or t1, t1, t2
+ and t1, t1, ~SR_IE
+ MTC0( t1, C0_SR)
+ NOP
+ NOP
No_Change_Global_Int:
- jr $ra
- nop
+ jr ra
END(__osDisableInt)
LEAF(__osRestoreInt)
- mfc0 $t0, C0_SR
- or $t0, $t0, $a0
- mtc0 $t0, C0_SR
- nop
- nop
- jr $ra
- nop
+ MFC0( t0, C0_SR)
+ or t0, t0, a0
+ MTC0( t0, C0_SR)
+ NOP
+ NOP
+ jr ra
END(__osRestoreInt)
diff --git a/src/libultra/os/invaldcache.s b/src/libultra/os/invaldcache.s
index 9464a24da6..22109e13aa 100644
--- a/src/libultra/os/invaldcache.s
+++ b/src/libultra/os/invaldcache.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void osInvalDCache(void* vaddr, s32 nbytes);
@@ -24,71 +20,67 @@
* the entire data cache is invalidated.
*/
LEAF(osInvalDCache)
- // If the amount to invalidate is less than or equal to 0, return immediately
- blez $a1, 3f
+.set noreorder
+ /* If the amount to invalidate is less than or equal to 0, return immediately */
+ blez a1, 3f
nop
- // If the amount to invalidate is as large as or larger than
- // the data cache size, invalidate all
- li $t3, DCACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, 4f
+ /* If the amount to invalidate is as large as or larger than
+ * the data cache size, invalidate all */
+ li t3, DCACHE_SIZE
+ bgeu a1, t3, 4f
nop
- // Ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, 3f
+ /* Ensure end address doesn't wrap around and end up smaller
+ * than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, 3f
nop
- // Mask start with cache line
- andi $t2, $t0, DCACHE_LINEMASK
- // If mask is not zero, the start is not cache aligned
- beqz $t2, 1f
- addiu $t1, $t1, -DCACHE_LINESIZE
- // Subtract mask result to align to cache line
- subu $t0, $t0, $t2
- // Hit-Writeback-Invalidate unaligned part
- cache (CACH_PD | C_HWBINV), ($t0)
- sltu $at, $t0, $t1
- // If that's all there is to do, return early
- beqz $at, 3f
+ /* Mask start with cache line */
+ andi t2, t0, DCACHE_LINEMASK
+ /* If mask is not zero, the start is not cache aligned */
+ beqz t2, 1f
+ addiu t1, t1, -DCACHE_LINESIZE
+ /* Subtract mask result to align to cache line */
+ subu t0, t0, t2
+ /* Hit-Writeback-Invalidate unaligned part */
+ cache (CACH_PD | C_HWBINV), (t0)
+ /* If that's all there is to do, return early */
+ bgeu t0, t1, 3f
nop
- addiu $t0, $t0, DCACHE_LINESIZE
+ addiu t0, t0, DCACHE_LINESIZE
1:
- // Mask end with cache line
- andi $t2, $t1, DCACHE_LINEMASK
- // If mask is not zero, the end is not cache aligned
- beqz $t2, 1f
+ /* Mask end with cache line */
+ andi t2, t1, DCACHE_LINEMASK
+ /* If mask is not zero, the end is not cache aligned */
+ beqz t2, 1f
nop
- // Subtract mask result to align to cache line
- subu $t1, $t1, $t2
- // Hit-Writeback-Invalidate unaligned part
- cache (CACH_PD | C_HWBINV), DCACHE_LINESIZE($t1)
- sltu $at, $t1, $t0
- // If that's all there is to do, return early
- bnez $at, 3f
+ /* Subtract mask result to align to cache line */
+ subu t1, t1, t2
+ /* Hit-Writeback-Invalidate unaligned part */
+ cache (CACH_PD | C_HWBINV), DCACHE_LINESIZE(t1)
+ /* If that's all there is to do, return early */
+ bltu t1, t0, 3f
nop
- // Invalidate the rest
+ /* Invalidate the rest */
1:
- // Hit-Invalidate
- cache (CACH_PD | C_HINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, DCACHE_LINESIZE
+ /* Hit-Invalidate */
+ cache (CACH_PD | C_HINV), (t0)
+ bltu t0, t1, 1b
+ addiu t0, t0, DCACHE_LINESIZE
3:
- jr $ra
+ jr ra
nop
4:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -DCACHE_LINESIZE
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -DCACHE_LINESIZE
5:
- // Index-Writeback-Invalidate
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 5b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
+ /* Index-Writeback-Invalidate */
+ cache (CACH_PD | C_IWBINV), (t0)
+ bltu t0, t1, 5b
+ addiu t0, DCACHE_LINESIZE
+ jr ra
nop
+.set reorder
END(osInvalDCache)
diff --git a/src/libultra/os/invalicache.s b/src/libultra/os/invalicache.s
index 55f8312380..757215cf19 100644
--- a/src/libultra/os/invalicache.s
+++ b/src/libultra/os/invalicache.s
@@ -1,52 +1,46 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osInvalICache)
- // If the amount to invalidate is less than or equal to 0, return immediately
- blez $a1, 2f
+.set noreorder
+ /* If the amount to invalidate is less than or equal to 0, return immediately */
+ blez a1, 2f
nop
- // If the amount to invalidate is as large as or larger than
- // the instruction cache size, invalidate all
- li $t3, ICACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, 3f
+ /* If the amount to invalidate is as large as or larger than */
+ /* the instruction cache size, invalidate all */
+ li t3, ICACHE_SIZE
+ bgeu a1, t3, 3f
nop
- // ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, 2f
+ /* ensure end address doesn't wrap around and end up smaller */
+ /* than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, 2f
nop
- // Mask and subtract to align to cache line
- andi $t2, $t0, ICACHE_LINEMASK
- addiu $t1, $t1, -ICACHE_LINESIZE
- subu $t0, $t0, $t2
+ /* Mask and subtract to align to cache line */
+ andi t2, t0, ICACHE_LINEMASK
+ addiu t1, t1, -ICACHE_LINESIZE
+ subu t0, t0, t2
1:
- cache (CACH_PI | C_HINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, ICACHE_LINESIZE
+ cache (CACH_PI | C_HINV), (t0)
+ bltu t0, t1, 1b
+ addiu t0, t0, ICACHE_LINESIZE
2:
- jr $ra
+ jr ra
nop
3:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -ICACHE_LINESIZE
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -ICACHE_LINESIZE
4:
- cache (CACH_PI | C_IINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 4b
- addiu $t0, ICACHE_LINESIZE
- jr $ra
+ cache (CACH_PI | C_IINV), (t0)
+ bltu t0, t1, 4b
+ addiu t0, ICACHE_LINESIZE
+ jr ra
nop
+.set reorder
END(osInvalICache)
diff --git a/src/libultra/os/maptlbrdb.s b/src/libultra/os/maptlbrdb.s
index c3ac20948b..43e7cc93a3 100644
--- a/src/libultra/os/maptlbrdb.s
+++ b/src/libultra/os/maptlbrdb.s
@@ -1,36 +1,31 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rdb.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osMapTLBRdb)
- mfc0 $t0, C0_ENTRYHI
- li $t1, NTLBENTRIES
- mtc0 $t1, C0_INX
- mtc0 $zero, C0_PAGEMASK
- li $t2, (TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G)
- li $t1, (RDB_BASE_REG & TLBHI_VPN2MASK)
- mtc0 $t1, C0_ENTRYHI
- // Possible bug? Virtual address instead of physical address
- // set as page frame number
- li $t1, RDB_BASE_VIRTUAL_ADDR
- srl $t3, $t1, TLBLO_PFNSHIFT
- or $t3, $t3, $t2
- mtc0 $t3, C0_ENTRYLO0
- li $t1, TLBLO_G
- mtc0 $t1, C0_ENTRYLO1
- nop
- tlbwi
- nop
- nop
- nop
- nop
- mtc0 $t0, C0_ENTRYHI
- jr $ra
- nop
+ MFC0( t0, C0_ENTRYHI)
+ li t1, NTLBENTRIES
+ MTC0( t1, C0_INX)
+ MTC0( zero, C0_PAGEMASK)
+ li t2, (TLBLO_UNCACHED | TLBLO_D | TLBLO_V | TLBLO_G)
+ li t1, (RDB_BASE_REG & TLBHI_VPN2MASK)
+ MTC0( t1, C0_ENTRYHI)
+ /* Possible bug? Virtual address instead of physical address set as page frame number */
+ li t1, RDB_BASE_VIRTUAL_ADDR
+ srl t3, t1, TLBLO_PFNSHIFT
+ or t3, t3, t2
+ MTC0( t3, C0_ENTRYLO0)
+ li t1, TLBLO_G
+ MTC0( t1, C0_ENTRYLO1)
+ NOP
+ TLBWI
+ NOP
+ NOP
+ NOP
+ NOP
+ MTC0( t0, C0_ENTRYHI)
+ jr ra
END(osMapTLBRdb)
diff --git a/src/libultra/os/parameters.s b/src/libultra/os/parameters.s
index c0020ddbed..8fb324d240 100644
--- a/src/libultra/os/parameters.s
+++ b/src/libultra/os/parameters.s
@@ -1,22 +1,48 @@
#include "ultra64/asm.h"
-.section .text
-
-.macro IPL_SYMBOL name, address, size
- .global \name
- .set \name, \address
- .type \name, @object
- .size \name, \size
-.endm
-
-IPL_SYMBOL leoBootID, 0x800001A0, 4
-IPL_SYMBOL osTvType, 0x80000300, 4
-IPL_SYMBOL osRomType, 0x80000304, 4
-IPL_SYMBOL osRomBase, 0x80000308, 4
-IPL_SYMBOL osResetType, 0x8000030C, 4
-IPL_SYMBOL osCicId, 0x80000310, 4
-IPL_SYMBOL osVersion, 0x80000314, 4
-IPL_SYMBOL osMemSize, 0x80000318, 4
-IPL_SYMBOL osAppNMIBuffer, 0x8000031C, 0x40
-
-.fill 0x60
+.text
+
+#ifdef __sgi
+#define IPL_SYMBOL(name, address, size) \
+ ABS(name, address)
+#else
+#define IPL_SYMBOL(name, address, sz) \
+ ABS(name, address) ;\
+ .type name, @object ;\
+ .size name, sz
+#endif
+
+
+IPL_SYMBOL(leoBootID, 0x800001A0, 4)
+IPL_SYMBOL(osTvType, 0x80000300, 4)
+IPL_SYMBOL(osRomType, 0x80000304, 4)
+IPL_SYMBOL(osRomBase, 0x80000308, 4)
+IPL_SYMBOL(osResetType, 0x8000030C, 4)
+IPL_SYMBOL(osCicId, 0x80000310, 4)
+IPL_SYMBOL(osVersion, 0x80000314, 4)
+IPL_SYMBOL(osMemSize, 0x80000318, 4)
+IPL_SYMBOL(osAppNMIBuffer, 0x8000031C, 0x40)
+
+#ifdef BBPLAYER
+
+IPL_SYMBOL(__osBbEepromAddress, 0x8000035C, 4)
+IPL_SYMBOL(__osBbEepromSize, 0x80000360, 4)
+IPL_SYMBOL(__osBbFlashAddress, 0x80000364, 4)
+IPL_SYMBOL(__osBbFlashSize, 0x80000368, 4)
+IPL_SYMBOL(__osBbSramAddress, 0x8000036C, 4)
+IPL_SYMBOL(__osBbSramSize, 0x80000370, 4)
+IPL_SYMBOL(__osBbPakAddress, 0x80000374, 0x10)
+IPL_SYMBOL(__osBbPakSize, 0x80000384, 4)
+IPL_SYMBOL(__osBbIsBb, 0x80000388, 4)
+IPL_SYMBOL(__osBbHackFlags, 0x8000038C, 4)
+IPL_SYMBOL(__osBbStashMagic, 0x80000390, 4)
+IPL_SYMBOL(__osBbPakBindings, 0x80000394, 0x10)
+IPL_SYMBOL(__osBbStateName, 0x800003A4, 0x10)
+IPL_SYMBOL(__osBbStateDirty, 0x800003B4, 4)
+IPL_SYMBOL(__osBbAuxDataLimit, 0x800003B8, 4)
+
+.space 0x30
+
+#endif
+
+.space 0x60
diff --git a/src/libultra/os/probetlb.s b/src/libultra/os/probetlb.s
index 7bc7856e13..4fa8abc38e 100644
--- a/src/libultra/os/probetlb.s
+++ b/src/libultra/os/probetlb.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* u32 __osProbeTLB(void* vaddr);
@@ -17,70 +13,71 @@
* Returns the physical address if found, or -1 if not found.
*/
LEAF(__osProbeTLB)
- // Set C0_ENTRYHI based on supplied vaddr
- mfc0 $t0, C0_ENTRYHI
- andi $t1, $t0, TLBHI_PIDMASK
- li $at, TLBHI_VPN2MASK
- and $t2, $a0, $at
- or $t1, $t1, $t2
- mtc0 $t1, C0_ENTRYHI
+.set noreorder
+ /* Set C0_ENTRYHI based on supplied vaddr */
+ mfc0 t0, C0_ENTRYHI
+ and t1, t0, TLBHI_PIDMASK
+ and t2, a0, TLBHI_VPN2MASK
+ or t1, t1, t2
+ mtc0 t1, C0_ENTRYHI
nop
nop
nop
- // TLB probe, sets C0_INX to a value matching C0_ENTRYHI.
- // If no match is found the TLBINX_PROBE bit is set to indicate this.
+ /* TLB probe, sets C0_INX to a value matching C0_ENTRYHI. */
+ /* If no match is found the TLBINX_PROBE bit is set to indicate this. */
tlbp
nop
nop
- // Read result
- mfc0 $t3, C0_INX
- li $at, TLBINX_PROBE
- and $t3, $t3, $at
- // Branch if no match was found
- bnez $t3, 3f
+ /* Read result */
+ mfc0 t3, C0_INX
+ and t3, t3, TLBINX_PROBE
+ /* Branch if no match was found */
+ bnez t3, 3f
nop
- // Read TLB, sets C0_ENTRYHI, C0_ENTRYLO0, C0_ENTRYLO1 and C0_PAGEMASK for the TLB
- // entry indicated by C0_INX
+
+ /* Read TLB, sets C0_ENTRYHI, C0_ENTRYLO0, C0_ENTRYLO1 and C0_PAGEMASK for the TLB */
+ /* entry indicated by C0_INX */
tlbr
nop
nop
nop
- // Calculate page size = (page mask + 0x2000) >> 1
- mfc0 $t3, C0_PAGEMASK
- addi $t3, $t3, 0x2000
- srl $t3, $t3, 1
- // & with vaddr
- and $t4, $t3, $a0
- // Select C0_ENTRYLO0 or C0_ENTRYLO1
- bnez $t4, 1f
- addi $t3, $t3, -1 // make bitmask out of page size
- mfc0 $v0, C0_ENTRYLO0
+ /* Calculate page size = (page mask + 0x2000) >> 1 */
+ mfc0 t3, C0_PAGEMASK
+ add t3, t3, 0x2000
+ srl t3, t3, 1
+ /* & with vaddr */
+ and t4, t3, a0
+ /* Select C0_ENTRYLO0 or C0_ENTRYLO1 */
+ bnez t4, 1f
+ add t3, t3, -1 /* make bitmask out of page size */
+ mfc0 v0, C0_ENTRYLO0
b 2f
nop
1:
- mfc0 $v0, C0_ENTRYLO1
+ mfc0 v0, C0_ENTRYLO1
2:
- // Check valid bit and branch if not valid
- andi $t5, $v0, TLBLO_V
- beqz $t5, 3f
+ /* Check valid bit and branch if not valid */
+ and t5, v0, TLBLO_V
+ beqz t5, 3f
nop
- // Extract the Page Frame Number from the entry
- li $at, TLBLO_PFNMASK
- and $v0, $v0, $at
- sll $v0, $v0, TLBLO_PFNSHIFT
- // Mask vaddr with page size mask
- and $t5, $a0, $t3
- // Add masked vaddr to pfn to obtain the physical address
- add $v0, $v0, $t5
+
+ /* Extract the Page Frame Number from the entry */
+ and v0, v0, TLBLO_PFNMASK
+ sll v0, v0, TLBLO_PFNSHIFT
+ /* Mask vaddr with page size mask */
+ and t5, a0, t3
+ /* Add masked vaddr to pfn to obtain the physical address */
+ add v0, v0, t5
b 4f
nop
3:
- // No physical address for the supplied virtual address was found,
- // return -1
- li $v0, -1
+ /* No physical address for the supplied virtual address was found, */
+ /* return -1 */
+ li v0, -1
4:
- // Restore original C0_ENTRYHI value before returning
- mtc0 $t0, C0_ENTRYHI
- jr $ra
+ /* Restore original C0_ENTRYHI value before returning */
+ mtc0 t0, C0_ENTRYHI
+ jr ra
nop
+.set reorder
END(__osProbeTLB)
diff --git a/src/libultra/os/setcompare.s b/src/libultra/os/setcompare.s
index bd16533774..3c175c4943 100644
--- a/src/libultra/os/setcompare.s
+++ b/src/libultra/os/setcompare.s
@@ -1,14 +1,10 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetCompare)
- mtc0 $a0, C0_COMPARE
- jr $ra
- nop
+ MTC0( a0, C0_COMPARE)
+ jr ra
END(__osSetCompare)
diff --git a/src/libultra/os/setfpccsr.s b/src/libultra/os/setfpccsr.s
index 1aa0e7d298..e333550844 100644
--- a/src/libultra/os/setfpccsr.s
+++ b/src/libultra/os/setfpccsr.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetFpcCsr)
- cfc1 $v0, C1_FPCSR
- ctc1 $a0, C1_FPCSR
- jr $ra
- nop
+ CFC1( v0, C1_FPCSR)
+ CTC1( a0, C1_FPCSR)
+ jr ra
END(__osSetFpcCsr)
diff --git a/src/libultra/os/setintmask.s b/src/libultra/os/setintmask.s
index e48c1b376f..bf6bec020b 100644
--- a/src/libultra/os/setintmask.s
+++ b/src/libultra/os/setintmask.s
@@ -1,14 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
#include "ultra64/rcp.h"
#include "ultra64/exception.h"
-.set noat
-.set noreorder
-
-.section .rodata
-
-.balign 16
+.rdata
+.align 2
/**
* LUT to convert between an interrupt mask value and a value for MI_INTR_MASK_REG.
@@ -82,9 +79,7 @@ DATA(__osRcpImTable)
.half MI_INTR_MASK_SET_SP | MI_INTR_MASK_SET_SI | MI_INTR_MASK_SET_AI | MI_INTR_MASK_SET_VI | MI_INTR_MASK_SET_PI | MI_INTR_MASK_SET_DP
ENDDATA(__osRcpImTable)
-.section .text
-
-.balign 16
+.text
/**
* OSIntMask osSetIntMask(OSIntMask);
@@ -113,56 +108,47 @@ ENDDATA(__osRcpImTable)
* OS_IM_ALL, so the operation is usually simply (SR | 0).
*/
LEAF(osSetIntMask)
- // Extract interrupt enable bits from current SR
- mfc0 $t4, C0_SR
- andi $v0, $t4, (SR_IMASK | SR_IE)
- // Get value of __OSGlobalIntMask
- lui $t0, %hi(__OSGlobalIntMask)
- addiu $t0, %lo(__OSGlobalIntMask)
- lw $t3, ($t0)
- // Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask
- li $at, ~0
- xor $t0, $t3, $at
- andi $t0, $t0, SR_IMASK
- or $v0, $v0, $t0
- // Fetch MI_INTR_MASK_REG
- lui $t2, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- lw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t2)
- // If there are RCP interrupts masked
- beqz $t2, 1f
- srl $t1, $t3, RCP_IMASKSHIFT
- // Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask
- li $at, ~0
- xor $t1, $t1, $at
- andi $t1, $t1, (RCP_IMASK >> RCP_IMASKSHIFT)
- or $t2, $t2, $t1
+ /* Extract interrupt enable bits from current SR */
+ MFC0( t4, C0_SR)
+.set noreorder
+ and v0, t4, (SR_IMASK | SR_IE)
+ /* Get value of __OSGlobalIntMask */
+ la t0, __OSGlobalIntMask
+ lw t3, (t0)
+ /* Bitwise-OR in the disabled CPU bits of __OSGlobalIntMask */
+ xor t0, t3, ~0
+ and t0, t0, SR_IMASK
+ or v0, v0, t0
+ /* Fetch MI_INTR_MASK_REG */
+ lw t2, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* If there are RCP interrupts masked */
+ beqz t2, 1f
+ srl t1, t3, RCP_IMASKSHIFT
+ /* Bitwise-OR in the disabled RCP bits of __OSGlobalIntMask */
+ xor t1, t1, ~0
+ and t1, t1, (RCP_IMASK >> RCP_IMASKSHIFT)
+ or t2, t2, t1
1:
- // Shift the RCP bits to not conflict with the CPU bits
- sll $t2, $t2, RCP_IMASKSHIFT
- // OR the CPU and RCP bits together
- or $v0, $v0, $t2
- // Extract RCP interrupt enable bits from requested mask and mask with __OSGlobalIntMask
- li $at, RCP_IMASK
- and $t0, $a0, $at
- and $t0, $t0, $t3
- // Convert to a value for MI_INTR_MASK_REG and set it
- srl $t0, $t0, (RCP_IMASKSHIFT-1)
- lui $t2, %hi(__osRcpImTable)
- addu $t2, $t2, $t0
- lhu $t2, %lo(__osRcpImTable)($t2)
- lui $at, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
- sw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($at)
- // Extract CPU interrupt enable bits from requested mask and mask with __OSGlobalIntMask
- andi $t0, $a0, OS_IM_CPU
- andi $t1, $t3, SR_IMASK
- and $t0, $t0, $t1
- li $at, ~SR_IMASK
- and $t4, $t4, $at
- // Bitwise OR in the remaining bits of SR and set new SR
- or $t4, $t4, $t0
- mtc0 $t4, C0_SR
- nop
- nop
- jr $ra
- nop
+ /* Shift the RCP bits to not conflict with the CPU bits */
+ sll t2, t2, RCP_IMASKSHIFT
+ /* OR the CPU and RCP bits together */
+ or v0, v0, t2
+ /* Extract RCP interrupt enable bits from requested mask and mask with __OSGlobalIntMask */
+ and t0, a0, RCP_IMASK
+ and t0, t0, t3
+ /* Convert to a value for MI_INTR_MASK_REG and set it */
+ srl t0, t0, (RCP_IMASKSHIFT-1)
+ lhu t2, __osRcpImTable(t0)
+ sw t2, PHYS_TO_K1(MI_INTR_MASK_REG)
+ /* Extract CPU interrupt enable bits from requested mask and mask with __OSGlobalIntMask */
+ and t0, a0, OS_IM_CPU
+ and t1, t3, SR_IMASK
+ and t0, t0, t1
+ and t4, t4, ~SR_IMASK
+ /* Bitwise OR in the remaining bits of SR and set new SR */
+ or t4, t4, t0
+ MTC0( t4, C0_SR)
+ NOP
+ NOP
+ jr ra
END(osSetIntMask)
diff --git a/src/libultra/os/setsr.s b/src/libultra/os/setsr.s
index b754359eae..fb7a1586d4 100644
--- a/src/libultra/os/setsr.s
+++ b/src/libultra/os/setsr.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetSR)
- mtc0 $a0, C0_SR
- nop
- jr $ra
- nop
+ MTC0( a0, C0_SR)
+ NOP
+ jr ra
END(__osSetSR)
diff --git a/src/libultra/os/settimer.c b/src/libultra/os/settimer.c
index 194f4eff78..a876641e88 100644
--- a/src/libultra/os/settimer.c
+++ b/src/libultra/os/settimer.c
@@ -2,7 +2,7 @@
s32 osSetTimer(OSTimer* timer, OSTime countdown, OSTime interval, OSMesgQueue* mq, OSMesg msg) {
UNUSED OSTime time;
-#if !PLATFORM_N64
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
OSTimer* next;
u32 count;
u32 value;
@@ -21,12 +21,7 @@ s32 osSetTimer(OSTimer* timer, OSTime countdown, OSTime interval, OSMesgQueue* m
timer->mq = mq;
timer->msg = msg;
-#if PLATFORM_N64
- time = __osInsertTimer(timer);
- if (__osTimerList->next == timer) {
- __osSetTimerIntr(time);
- }
-#else
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
prevInt = __osDisableInt();
if (__osTimerList->next != __osTimerList) {
if (1) {}
@@ -46,6 +41,11 @@ s32 osSetTimer(OSTimer* timer, OSTime countdown, OSTime interval, OSMesgQueue* m
__osSetTimerIntr(__osTimerList->next->value);
__osRestoreInt(prevInt);
+#else
+ time = __osInsertTimer(timer);
+ if (__osTimerList->next == timer) {
+ __osSetTimerIntr(time);
+ }
#endif
return 0;
diff --git a/src/libultra/os/setwatchlo.s b/src/libultra/os/setwatchlo.s
index aee3ad4d6d..962513a480 100644
--- a/src/libultra/os/setwatchlo.s
+++ b/src/libultra/os/setwatchlo.s
@@ -1,15 +1,11 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(__osSetWatchLo)
- mtc0 $a0, C0_WATCHLO
- nop
- jr $ra
- nop
+ MTC0( a0, C0_WATCHLO)
+ NOP
+ jr ra
END(__osSetWatchLo)
diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c
index 943aca0ffc..ce5c12fc5f 100644
--- a/src/libultra/os/timerintr.c
+++ b/src/libultra/os/timerintr.c
@@ -63,7 +63,7 @@ void __osSetTimerIntr(OSTime time) {
OSTime newTime;
u32 prevInt;
-#if !PLATFORM_N64
+#if LIBULTRA_VERSION >= LIBULTRA_VERSION_K
if (time < 468) {
time = 468;
}
diff --git a/src/libultra/os/unmaptlball.s b/src/libultra/os/unmaptlball.s
index e1a03b1a23..8cd79984ec 100644
--- a/src/libultra/os/unmaptlball.s
+++ b/src/libultra/os/unmaptlball.s
@@ -1,29 +1,25 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osUnmapTLBAll)
- mfc0 $t0, C0_ENTRYHI
- li $t1, (NTLBENTRIES - 1)
- li $t2, (K0BASE & TLBHI_VPN2MASK)
- mtc0 $t2, C0_ENTRYHI
- mtc0 $zero, C0_ENTRYLO0
- mtc0 $zero, C0_ENTRYLO1
+ MFC0( t0, C0_ENTRYHI)
+ li t1, (NTLBENTRIES - 1)
+ li t2, (K0BASE & TLBHI_VPN2MASK)
+ MTC0( t2, C0_ENTRYHI)
+ MTC0( zero, C0_ENTRYLO0)
+ MTC0( zero, C0_ENTRYLO1)
1:
- mtc0 $t1, C0_INX
- nop
- tlbwi
- nop
- nop
- addi $t1, $t1, -1
- bgez $t1, 1b
- nop
- mtc0 $t0, C0_ENTRYHI
- jr $ra
- nop
+ MTC0( t1, C0_INX)
+ NOP
+ TLBWI
+ NOP
+ NOP
+ addi t1, t1, -1
+ bgez t1, 1b
+
+ MTC0( t0, C0_ENTRYHI)
+ jr ra
END(osUnmapTLBAll)
diff --git a/src/libultra/os/writebackdcache.s b/src/libultra/os/writebackdcache.s
index 829f6f4a05..c7207c7e56 100644
--- a/src/libultra/os/writebackdcache.s
+++ b/src/libultra/os/writebackdcache.s
@@ -1,12 +1,8 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
/**
* void osWritebackDCache(void* vaddr, s32 nbytes);
@@ -16,45 +12,43 @@
* written back.
*/
LEAF(osWritebackDCache)
- // If the amount to write back is less than or equal to 0, return immediately
- blez $a1, .ret
- nop
- // If the amount to write back is as large as or larger than
- // the data cache size, write back all
- li $t3, DCACHE_SIZE
- sltu $at, $a1, $t3
- beqz $at, .all
- nop
- // ensure end address doesn't wrap around and end up smaller
- // than the start address
- move $t0, $a0
- addu $t1, $a0, $a1
- sltu $at, $t0, $t1
- beqz $at, .ret
- nop
- // Mask and subtract to align to cache line
- andi $t2, $t0, DCACHE_LINEMASK
- addiu $t1, $t1, -DCACHE_LINESIZE
- subu $t0, $t0, $t2
+ /* If the amount to write back is less than or equal to 0, return immediately */
+ blez a1, .ret
+
+ /* If the amount to write back is as large as or larger than */
+ /* the data cache size, write back all */
+ li t3, DCACHE_SIZE
+ bgeu a1, t3, .all
+
+ /* ensure end address doesn't wrap around and end up smaller */
+ /* than the start address */
+ move t0, a0
+ addu t1, a0, a1
+ bgeu t0, t1, .ret
+
+ /* Mask and subtract to align to cache line */
+ andi t2, t0, DCACHE_LINEMASK
+ addiu t1, t1, -DCACHE_LINESIZE
+ subu t0, t0, t2
1:
- cache (CACH_PD | C_HWB), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, $t0, DCACHE_LINESIZE
+.set noreorder
+ cache (CACH_PD | C_HWB), (t0)
+ bltu t0, t1, 1b
+ addiu t0, t0, DCACHE_LINESIZE
+.set reorder
.ret:
- jr $ra
- nop
+ jr ra
-// same as osWritebackDCacheAll in operation
+/* same as osWritebackDCacheAll in operation */
.all:
- li $t0, K0BASE
- addu $t1, $t0, $t3
- addiu $t1, $t1, -DCACHE_LINESIZE
+ li t0, K0BASE
+ addu t1, t0, t3
+ addiu t1, t1, -DCACHE_LINESIZE
1:
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
- nop
+.set noreorder
+ cache (CACH_PD | C_IWBINV), (t0)
+ bltu t0, t1, 1b
+ addiu t0, DCACHE_LINESIZE
+.set reorder
+ jr ra
END(osWritebackDCache)
diff --git a/src/libultra/os/writebackdcacheall.s b/src/libultra/os/writebackdcacheall.s
index 54a58dff8a..a15ef4554f 100644
--- a/src/libultra/os/writebackdcacheall.s
+++ b/src/libultra/os/writebackdcacheall.s
@@ -1,23 +1,19 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "ultra64/R4300.h"
-.set noat
-.set noreorder
-
-.section .text
-
-.balign 16
+.text
LEAF(osWritebackDCacheAll)
- li $t0, K0BASE
- li $t2, DCACHE_SIZE
- addu $t1, $t0, $t2
- addiu $t1, $t1, -DCACHE_LINESIZE
+ li t0, K0BASE
+ li t2, DCACHE_SIZE
+ addu t1, t0, t2
+ addiu t1, t1, -DCACHE_LINESIZE
1:
- cache (CACH_PD | C_IWBINV), ($t0)
- sltu $at, $t0, $t1
- bnez $at, 1b
- addiu $t0, DCACHE_LINESIZE
- jr $ra
- nop
+.set noreorder
+ cache (CACH_PD | C_IWBINV), (t0)
+ bltu t0, t1, 1b
+ addiu t0, DCACHE_LINESIZE
+.set reorder
+ jr ra
END(osWritebackDCacheAll)
diff --git a/src/makerom/entry.s b/src/makerom/entry.s
index 6be493e6b6..870b979d69 100644
--- a/src/makerom/entry.s
+++ b/src/makerom/entry.s
@@ -1,34 +1,59 @@
#include "ultra64/asm.h"
+#include "ultra64/regdef.h"
#include "boot.h"
-.set noreorder
+.text
-.section .text
-
-.balign 16
+#if defined(NON_MATCHING) || defined(__sgi)
+/* Non-matching builds or IDO */
+#define PAD_TO 0x60
+#define LA(reg, sym) la reg, sym
+#define BOOT_STACK_TOP sBootThreadStack + BOOT_STACK_SIZE
+#else
+/* EGCS */
+#define PAD_TO 0x50
+#define LA(reg, sym) \
+ lui reg, %lo(sym##_HI); \
+ ori reg, %lo(sym)
+#endif
-LEAF(entrypoint)
- // Clear boot segment .bss
- la $t0, _bootSegmentBssStart
-#ifndef AVOID_UB
- // UB: li only loads the lower 16 bits of _bootSegmentBssSize when it may be larger than this,
- // so not all of bss may be cleared if it is too large
- li $t1, _bootSegmentBssSize
+#if !defined(AVOID_UB)
+/* Old assembler workarounds: The makerom tool in the N64 SDK was given the bss segment size as a const
+ * literal, and since this literal was < 0x10000 it was loaded in one instruction. We don't have access
+ * to the bss segment size until we link everything so we cannot do the same thing. Instead we must load
+ * only the lower 16 bits of the bss size for matching.
+ * When AVOID_UB is enabled, don't do this and instead load the full symbol value, otherwise not all of
+ * bss may be cleared. */
+#if defined(__sgi)
+#define LOAD_BSS_SIZE(reg) li reg, %half(_bootSegmentBssSize)
+#else
+#define LOAD_BSS_SIZE(reg) ori reg, zero, %lo(_bootSegmentBssSize)
+#endif
#else
- la $t1, _bootSegmentBssSize
+#define LOAD_BSS_SIZE(reg) LA(reg, _bootSegmentBssSize)
#endif
+
+LEAF(entrypoint)
+ /* Clear boot segment .bss */
+ LA( t0, _bootSegmentBssStart)
+ LOAD_BSS_SIZE(t1)
.clear_bss:
- addi $t1, $t1, -8
- sw $zero, ($t0)
- sw $zero, 4($t0)
- bnez $t1, .clear_bss
- addi $t0, $t0, 8
- // Set up stack and enter program code
- lui $t2, %hi(bootproc)
- lui $sp, %hi(sBootThreadStack + BOOT_STACK_SIZE)
- addiu $t2, %lo(bootproc)
- jr $t2
- addiu $sp, %lo(sBootThreadStack + BOOT_STACK_SIZE)
+ sw zero, 0(t0)
+ sw zero, 4(t0)
+ addi t0, t0, 8
+ addi t1, t1, -8
+ bnez t1, .clear_bss
+
+ /* Set up stack and enter program code */
+ LA( sp, BOOT_STACK_TOP)
+ LA( t2, bootproc)
+ jr t2
END(entrypoint)
-.fill 0x60 - (. - entrypoint)
+#ifdef __sgi
+/* IDO can't take absolute differences of symbols so the size of the above is hardcoded */
+.space PAD_TO - 0x34
+#else
+/* Pad to a total size taking into account the size of the above */
+.space PAD_TO - (. - entrypoint)
+#endif
diff --git a/src/makerom/ipl3.s b/src/makerom/ipl3.s
deleted file mode 100644
index 45f1c8e6f8..0000000000
--- a/src/makerom/ipl3.s
+++ /dev/null
@@ -1,4 +0,0 @@
-
-.section .text
-
-.incbin "incbin/ipl3"
diff --git a/src/makerom/rom_header.h b/src/makerom/rom_header.h
index 6a47fb34bb..ff0b1319f5 100644
--- a/src/makerom/rom_header.h
+++ b/src/makerom/rom_header.h
@@ -55,13 +55,13 @@
* and what libultra version (os_ver) it uses.
*
* The hardware revision for a retail N64 is (2,0).
- * The libultra version may be a single letter, without quotes.
+ * The libultra version must be a single char, in quotes.
*/
-#define LIBULTRA_VERSION(hw_major, hw_minor, os_ver) \
+#define OS_VERSION(hw_major, hw_minor, os_ver) \
.half 0; \
.byte (hw_major) * 10 + (hw_minor); \
_os_ver_start = .; \
- .ascii #os_ver ; \
+ .byte (os_ver) ; \
.if (. - _os_ver_start) != 1; \
.error "OS version should be just one letter"; \
.endif
diff --git a/src/makerom/rom_header.s b/src/makerom/rom_header.s
index a02462f8b8..2320e5629b 100644
--- a/src/makerom/rom_header.s
+++ b/src/makerom/rom_header.s
@@ -1,4 +1,5 @@
#include "rom_header.h"
+#include "ultra64/version.h"
#include "region.h"
#include "versions.h"
@@ -6,28 +7,23 @@
/* 0x01 */ PI_DOMAIN_1_CFG(64, 18, 7, 3)
/* 0x04 */ SYSTEM_CLOCK_RATE_SETTING(0xF)
/* 0x08 */ ENTRYPOINT(0x80000400)
-#if PLATFORM_N64
-/* 0x0C */ LIBULTRA_VERSION(2, 0, I)
-#else
-/* 0x0C */ LIBULTRA_VERSION(2, 0, L)
-#endif
+/* 0x0C */ OS_VERSION(2, 0, LIBULTRA_VERSION)
/* 0x10 */ CHECKSUM()
+
+#if !PLATFORM_IQUE
+
/* 0x18 */ PADDING(8)
/* 0x20 */ ROM_NAME("THE LEGEND OF ZELDA")
/* 0x34 */ PADDING(7)
-
#if OOT_NTSC || ((defined CONSOLE_WIIVC) || (defined CONSOLE_GC))
/* 0x3B */ MEDIUM(CARTRIDGE_EXPANDABLE)
#else
/* 0x3B */ MEDIUM(CARTRIDGE)
#endif
-
/* 0x3C */ GAME_ID("ZL")
-
#if (defined CONSOLE_WIIVC) || (defined CONSOLE_GC)
/* 0x3E */ REGION(US)
-#else
-#if OOT_REGION == REGION_NULL
+#elif OOT_REGION == REGION_NULL
/* 0x3E */ REGION(FREE)
#elif OOT_REGION == REGION_US
/* 0x3E */ REGION(US)
@@ -36,20 +32,10 @@
#elif OOT_REGION == REGION_EU
/* 0x3E */ REGION(PAL)
#endif
-#endif
+/* 0x3F */ GAME_REVISION(OOT_REVISION)
-#if (defined CONSOLE_WIIVC) || (defined CONSOLE_GC)
-/* 0x3F */ GAME_REVISION(0)
#else
-#if OOT_VERSION == NTSC_1_0 || OOT_VERSION == PAL_1_0
-/* 0x3F */ GAME_REVISION(0)
-#elif OOT_VERSION == NTSC_1_1 || OOT_VERSION == PAL_1_1
-/* 0x3F */ GAME_REVISION(1)
-#elif OOT_VERSION == NTSC_1_2
-/* 0x3F */ GAME_REVISION(2)
-#else
-/* 0x3F */ GAME_REVISION(15)
-#endif
+ .fill 0x40 - 0x18
#endif
diff --git a/src/n64dd/z_n64dd.c b/src/n64dd/z_n64dd.c
index ddc7790116..3524cd348e 100644
--- a/src/n64dd/z_n64dd.c
+++ b/src/n64dd/z_n64dd.c
@@ -5,6 +5,7 @@
#include "n64dd.h"
#include "stack.h"
#include "versions.h"
+#include "line_numbers.h"
#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
@@ -112,14 +113,9 @@ void func_801C6FD8(void) {
// Adds a HungupAndCrash
void func_801C7018(void) {
if (D_80121213 != 0) {
-#if OOT_VERSION < NTSC_1_1
- Fault_AddHungupAndCrash("../z_n64dd.c", 503);
-#elif OOT_VERSION < PAL_1_0
- Fault_AddHungupAndCrash("../z_n64dd.c", 551);
-#else
- Fault_AddHungupAndCrash("../z_n64dd.c", 573);
-#endif
+ Fault_AddHungupAndCrash("../z_n64dd.c", LN2(503, 551, 573));
}
+
D_80121213 = 1;
}
diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
index 4b475c9c66..c79f9b0aa1 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
@@ -1,7 +1,7 @@
#include "z_arms_hook.h"
#include "assets/objects/object_link_boy/object_link_boy.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void ArmsHook_Init(Actor* thisx, PlayState* play);
void ArmsHook_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
index c590f341e5..9fec296d7a 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
@@ -7,7 +7,7 @@
#include "z_arrow_fire.h"
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void ArrowFire_Init(Actor* thisx, PlayState* play);
void ArrowFire_Destroy(Actor* thisx, PlayState* play);
@@ -33,7 +33,7 @@ ActorProfile Arrow_Fire_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_STOP),
};
void ArrowFire_SetupAction(ArrowFire* this, ArrowFireActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
index 09815d086c..326486aee0 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void ArrowIce_Init(Actor* thisx, PlayState* play);
void ArrowIce_Destroy(Actor* thisx, PlayState* play);
@@ -34,7 +34,7 @@ ActorProfile Arrow_Ice_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_STOP),
};
void ArrowIce_SetupAction(ArrowIce* this, ArrowIceActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
index f88e2c092e..6922b5ba68 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void ArrowLight_Init(Actor* thisx, PlayState* play);
void ArrowLight_Destroy(Actor* thisx, PlayState* play);
@@ -34,7 +34,7 @@ ActorProfile Arrow_Light_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_STOP),
};
void ArrowLight_SetupAction(ArrowLight* this, ArrowLightActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c b/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
index 055f93e200..bcc7651687 100644
--- a/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
+++ b/src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.c
@@ -8,7 +8,7 @@
#include "quake.h"
#include "assets/objects/object_bdan_objects/object_bdan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum BgBdanObjectsPropertyGetter {
JABU_OBJECTS_GET_PROP_CAM_SETTING_NORMAL0 = 0,
@@ -126,7 +126,7 @@ void BgBdanObjects_Init(Actor* thisx, PlayState* play) {
this->var.switchFlag = PARAMS_GET_U(thisx->params, 8, 6);
thisx->params &= 0xFF;
if (thisx->params == JABU_OBJECTS_TYPE_WATERBOX_HEIGHT_CHANGER) {
- thisx->flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
play->colCtx.colHeader->waterBoxes[7].ySurface = thisx->world.pos.y;
this->actionFunc = BgBdanObjects_WaitForSwitch;
return;
diff --git a/src/overlays/actors/ovl_Bg_Bdan_Switch/z_bg_bdan_switch.c b/src/overlays/actors/ovl_Bg_Bdan_Switch/z_bg_bdan_switch.c
index d22c6124eb..f09d24d536 100644
--- a/src/overlays/actors/ovl_Bg_Bdan_Switch/z_bg_bdan_switch.c
+++ b/src/overlays/actors/ovl_Bg_Bdan_Switch/z_bg_bdan_switch.c
@@ -7,7 +7,7 @@
#include "z_bg_bdan_switch.h"
#include "assets/objects/object_bdan_objects/object_bdan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgBdanSwitch_Init(Actor* thisx, PlayState* play);
void BgBdanSwitch_Destroy(Actor* thisx, PlayState* play);
@@ -82,9 +82,9 @@ static ColliderJntSphInit sJntSphInit = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_STOP),
};
static Vec3f D_8086E0E0 = { 0.0f, 140.0f, 0.0f };
diff --git a/src/overlays/actors/ovl_Bg_Bom_Guard/z_bg_bom_guard.c b/src/overlays/actors/ovl_Bg_Bom_Guard/z_bg_bom_guard.c
index 729dd81552..cfbd466021 100644
--- a/src/overlays/actors/ovl_Bg_Bom_Guard/z_bg_bom_guard.c
+++ b/src/overlays/actors/ovl_Bg_Bom_Guard/z_bg_bom_guard.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_bowl/object_bowl.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgBomGuard_Init(Actor* thisx, PlayState* play);
void BgBomGuard_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c b/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c
index 82daa4e13e..756677b225 100644
--- a/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c
@@ -104,9 +104,9 @@ void BgBombwall_RotateVec(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgBombwall_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.c b/src/overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.c
index fa3de785f4..a43804fa93 100644
--- a/src/overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.c
+++ b/src/overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.c
@@ -11,7 +11,7 @@
#include "quake.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgBowlWall_Init(Actor* thisx, PlayState* play);
void BgBowlWall_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
index 4999abd966..39f9dce855 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_bwall/object_bwall.h"
#include "assets/objects/object_kingdodongo/object_kingdodongo.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef struct BombableWallInfo {
/* 0x00 */ CollisionHeader* colHeader;
@@ -67,9 +67,9 @@ static BombableWallInfo sBombableWallInfo[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
};
void BgBreakwall_SetupAction(BgBreakwall* this, BgBreakwallActionFunc actionFunc) {
@@ -207,7 +207,7 @@ void BgBreakwall_WaitForObject(BgBreakwall* this, PlayState* play) {
this->dyna.actor.objectSlot = this->requiredObjectSlot;
Actor_SetObjectDependency(play, &this->dyna.actor);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->dyna.actor.draw = BgBreakwall_Draw;
CollisionHeader_GetVirtual(sBombableWallInfo[wallType].colHeader, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
diff --git a/src/overlays/actors/ovl_Bg_Ddan_Jd/z_bg_ddan_jd.c b/src/overlays/actors/ovl_Bg_Ddan_Jd/z_bg_ddan_jd.c
index dc5a1cba23..c1168182d8 100644
--- a/src/overlays/actors/ovl_Bg_Ddan_Jd/z_bg_ddan_jd.c
+++ b/src/overlays/actors/ovl_Bg_Ddan_Jd/z_bg_ddan_jd.c
@@ -7,7 +7,7 @@
#include "z_bg_ddan_jd.h"
#include "assets/objects/object_ddan_objects/object_ddan_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgDdanJd_Init(Actor* thisx, PlayState* play);
void BgDdanJd_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Ddan_Kd/z_bg_ddan_kd.c b/src/overlays/actors/ovl_Bg_Ddan_Kd/z_bg_ddan_kd.c
index 3fe150cc6f..e542f69705 100644
--- a/src/overlays/actors/ovl_Bg_Ddan_Kd/z_bg_ddan_kd.c
+++ b/src/overlays/actors/ovl_Bg_Ddan_Kd/z_bg_ddan_kd.c
@@ -7,7 +7,7 @@
#include "z_bg_ddan_kd.h"
#include "assets/objects/object_ddan_objects/object_ddan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgDdanKd_Init(Actor* thisx, PlayState* play);
void BgDdanKd_Destroy(Actor* thisx, PlayState* play);
@@ -52,9 +52,9 @@ static ColliderCylinderInit sCylinderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 32767, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 32767, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 32767, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 32767, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 32767, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 32767, ICHAIN_STOP),
};
void BgDdanKd_SetupAction(BgDdanKd* this, BgDdanKdActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
index b8e3cfa33b..747a03d93f 100644
--- a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
+++ b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c
@@ -102,9 +102,9 @@ void BgDodoago_SpawnSparkles(Vec3f* meanPos, PlayState* play) {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 5000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
void BgDodoago_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
index 567b141e72..c8877e0e64 100644
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
+++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
@@ -13,9 +13,9 @@
#include "assets/scenes/indoors/daiyousei_izumi/daiyousei_izumi_scene.h"
#if OOT_VERSION < NTSC_1_1
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
#else
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
#endif
typedef enum BgDyYoseizoRewardType {
@@ -696,7 +696,8 @@ static s16 sDemoEffectLightColors[] = { DEMO_EFFECT_LIGHT_GREEN, DEMO_EFFECT_LIG
static s16 sExItemTypes[] = { EXITEM_MAGIC_WIND, EXITEM_MAGIC_FIRE, EXITEM_MAGIC_DARK };
-static s16 sItemGetFlags[] = { ITEMGETINF_18_MASK, ITEMGETINF_19_MASK, ITEMGETINF_1A_MASK };
+static s16 sItemGetFlagMasks[] = { ITEMGETINF_MASK(ITEMGETINF_18), ITEMGETINF_MASK(ITEMGETINF_19),
+ ITEMGETINF_MASK(ITEMGETINF_1A) };
static u8 sItemIds[] = { ITEM_FARORES_WIND, ITEM_DINS_FIRE, ITEM_NAYRUS_LOVE };
@@ -808,7 +809,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
this->itemSpawned = true;
gSaveContext.healthAccumulator = 0x140;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC);
- gSaveContext.save.info.itemGetInf[ITEMGETINF_18_19_1A_INDEX] |= sItemGetFlags[cueIdTemp];
+ gSaveContext.save.info.itemGetInf[ITEMGETINF_INDEX_18_19_1A] |= sItemGetFlagMasks[cueIdTemp];
Item_Give(play, sItemIds[cueIdTemp]);
}
} else {
diff --git a/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c b/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
index edfb09d522..51450109de 100644
--- a/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
+++ b/src/overlays/actors/ovl_Bg_Ganon_Otyuka/z_bg_ganon_otyuka.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum FlashState {
/* 0x00 */ FLASH_NONE,
diff --git a/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c b/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c
index 4a67c02d13..d6272b9aea 100644
--- a/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c
+++ b/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c
@@ -32,7 +32,7 @@ ActorProfile Bg_Gjyo_Bridge_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
@@ -49,7 +49,7 @@ void BgGjyoBridge_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);
- if (GET_EVENTCHKINF(EVENTCHKINF_4D)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_CREATED_RAINBOW_BRIDGE)) {
this->actionFunc = func_808787A4;
} else {
this->dyna.actor.draw = NULL;
@@ -85,7 +85,7 @@ void BgGjyoBridge_SpawnBridge(BgGjyoBridge* this, PlayState* play) {
(play->csCtx.actorCues[2]->id == 2)) {
this->dyna.actor.draw = BgGjyoBridge_Draw;
DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
- SET_EVENTCHKINF(EVENTCHKINF_4D);
+ SET_EVENTCHKINF(EVENTCHKINF_CREATED_RAINBOW_BRIDGE);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Gnd_Darkmeiro/z_bg_gnd_darkmeiro.c b/src/overlays/actors/ovl_Bg_Gnd_Darkmeiro/z_bg_gnd_darkmeiro.c
index 801475e3f3..b35f1ef36f 100644
--- a/src/overlays/actors/ovl_Bg_Gnd_Darkmeiro/z_bg_gnd_darkmeiro.c
+++ b/src/overlays/actors/ovl_Bg_Gnd_Darkmeiro/z_bg_gnd_darkmeiro.c
@@ -7,7 +7,7 @@
#include "z_bg_gnd_darkmeiro.h"
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgGndDarkmeiro_Init(Actor* thisx, PlayState* play2);
void BgGndDarkmeiro_Destroy(Actor* thisx, PlayState* play2);
diff --git a/src/overlays/actors/ovl_Bg_Gnd_Firemeiro/z_bg_gnd_firemeiro.c b/src/overlays/actors/ovl_Bg_Gnd_Firemeiro/z_bg_gnd_firemeiro.c
index 9f97b57541..ad336d6fcf 100644
--- a/src/overlays/actors/ovl_Bg_Gnd_Firemeiro/z_bg_gnd_firemeiro.c
+++ b/src/overlays/actors/ovl_Bg_Gnd_Firemeiro/z_bg_gnd_firemeiro.c
@@ -7,7 +7,7 @@
#include "z_bg_gnd_firemeiro.h"
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgGndFiremeiro_Init(Actor* thisx, PlayState* play);
void BgGndFiremeiro_Destroy(Actor* thisx, PlayState* play2);
diff --git a/src/overlays/actors/ovl_Bg_Gnd_Iceblock/z_bg_gnd_iceblock.c b/src/overlays/actors/ovl_Bg_Gnd_Iceblock/z_bg_gnd_iceblock.c
index 75e44cb218..0711124304 100644
--- a/src/overlays/actors/ovl_Bg_Gnd_Iceblock/z_bg_gnd_iceblock.c
+++ b/src/overlays/actors/ovl_Bg_Gnd_Iceblock/z_bg_gnd_iceblock.c
@@ -7,7 +7,7 @@
#include "z_bg_gnd_iceblock.h"
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum BgGndIceblockAction {
/* 0 */ GNDICE_IDLE,
@@ -84,7 +84,7 @@ void BgGndIceblock_Destroy(Actor* thisx, PlayState* play) {
* | 3 h8 15 19 |
* | 4 9 11 XX *20*|
* |*5* XX 12 *21*|
- * ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+ * ----------------------
* XX are rocks
* ** are pits
* h is the hole.
diff --git a/src/overlays/actors/ovl_Bg_Gnd_Nisekabe/z_bg_gnd_nisekabe.c b/src/overlays/actors/ovl_Bg_Gnd_Nisekabe/z_bg_gnd_nisekabe.c
index 3c100311d0..7a19324501 100644
--- a/src/overlays/actors/ovl_Bg_Gnd_Nisekabe/z_bg_gnd_nisekabe.c
+++ b/src/overlays/actors/ovl_Bg_Gnd_Nisekabe/z_bg_gnd_nisekabe.c
@@ -7,7 +7,7 @@
#include "z_bg_gnd_nisekabe.h"
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgGndNisekabe_Init(Actor* thisx, PlayState* play);
void BgGndNisekabe_Destroy(Actor* thisx, PlayState* play);
@@ -30,7 +30,7 @@ void BgGndNisekabe_Init(Actor* thisx, PlayState* play) {
BgGndNisekabe* this = (BgGndNisekabe*)thisx;
Actor_SetScale(&this->actor, 0.1);
- this->actor.uncullZoneForward = 3000.0;
+ this->actor.cullingVolumeDistance = 3000.0;
}
void BgGndNisekabe_Destroy(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Gnd_Soulmeiro/z_bg_gnd_soulmeiro.c b/src/overlays/actors/ovl_Bg_Gnd_Soulmeiro/z_bg_gnd_soulmeiro.c
index 17a3ea4508..3ed190587d 100644
--- a/src/overlays/actors/ovl_Bg_Gnd_Soulmeiro/z_bg_gnd_soulmeiro.c
+++ b/src/overlays/actors/ovl_Bg_Gnd_Soulmeiro/z_bg_gnd_soulmeiro.c
@@ -53,9 +53,9 @@ static ColliderCylinderInit sCylinderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgGndSoulmeiro_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c b/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
index 3b5985d8f1..f7f31748a6 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Gate/z_bg_haka_gate.c
@@ -97,7 +97,7 @@ void BgHakaGate_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgHakaGate_FalseSkull;
}
this->vScrollTimer = Rand_ZeroOne() * 20.0f;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (Flags_GetSwitch(play, this->switchFlag)) {
this->vFlameScale = 350;
}
@@ -124,7 +124,7 @@ void BgHakaGate_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgHakaGate_DoNothing;
thisx->world.pos.y += 80.0f;
} else {
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Actor_SetFocus(thisx, 30.0f);
this->actionFunc = BgHakaGate_GateWait;
}
@@ -274,7 +274,7 @@ void BgHakaGate_GateWait(BgHakaGate* this, PlayState* play) {
void BgHakaGate_GateOpen(BgHakaGate* this, PlayState* play) {
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 80.0f, 1.0f)) {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_METALDOOR_STOP);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = BgHakaGate_DoNothing;
} else {
Actor_PlaySfx_Flagged(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Huta/z_bg_haka_huta.c b/src/overlays/actors/ovl_Bg_Haka_Huta/z_bg_haka_huta.c
index e660ccd38a..757e9ecb11 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Huta/z_bg_haka_huta.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Huta/z_bg_haka_huta.c
@@ -9,7 +9,7 @@
#include "overlays/actors/ovl_En_Rd/z_en_rd.h"
#include "quake.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHakaHuta_Init(Actor* thisx, PlayState* play);
void BgHakaHuta_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
index 3d6de9f415..dad34f592d 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Megane/z_bg_haka_megane.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_hakach_objects/object_hakach_objects.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_REACT_TO_LENS)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_REACT_TO_LENS)
void BgHakaMegane_Init(Actor* thisx, PlayState* play);
void BgHakaMegane_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Haka_MeganeBG/z_bg_haka_meganebg.c b/src/overlays/actors/ovl_Bg_Haka_MeganeBG/z_bg_haka_meganebg.c
index 3bcaac0071..f0f23b3131 100644
--- a/src/overlays/actors/ovl_Bg_Haka_MeganeBG/z_bg_haka_meganebg.c
+++ b/src/overlays/actors/ovl_Bg_Haka_MeganeBG/z_bg_haka_meganebg.c
@@ -36,8 +36,8 @@ ActorProfile Bg_Haka_MeganeBG_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
@@ -64,7 +64,7 @@ void BgHakaMeganeBG_Init(Actor* thisx, PlayState* play) {
if (thisx->params == 2) {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
CollisionHeader_GetVirtual(&object_haka_objects_Col_005334, &colHeader);
this->actionFunc = func_8087E258;
} else {
@@ -83,15 +83,15 @@ void BgHakaMeganeBG_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_8087E34C;
thisx->world.pos.y = thisx->home.pos.y;
} else {
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = func_8087E288;
}
} else {
CollisionHeader_GetVirtual(&object_haka_objects_Col_00A7F4, &colHeader);
this->unk_16A = 80;
this->actionFunc = func_8087E10C;
- thisx->uncullZoneScale = 3000.0f;
- thisx->uncullZoneDownward = 3000.0f;
+ thisx->cullingVolumeScale = 3000.0f;
+ thisx->cullingVolumeDownward = 3000.0f;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
index 4bb944cb9d..fff0314d44 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Sgami/z_bg_haka_sgami.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_haka_objects/object_haka_objects.h"
#include "assets/objects/object_ice_objects/object_ice_objects.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum SpinningScytheTrapMode {
/* 0 */ SCYTHE_TRAP_SHADOW_TEMPLE,
@@ -121,7 +121,7 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit = { 0, 80, 130, MASS_IMMOVABLE };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_4, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
@@ -200,7 +200,7 @@ void BgHakaSgami_SetupSpin(BgHakaSgami* this, PlayState* play) {
this->actor.objectSlot = this->requiredObjectSlot;
this->actor.draw = BgHakaSgami_Draw;
this->timer = SCYTHE_SPIN_TIME;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = BgHakaSgami_Spin;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Ship/z_bg_haka_ship.c b/src/overlays/actors/ovl_Bg_Haka_Ship/z_bg_haka_ship.c
index 2a8eadb18e..5a9a06d5c8 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Ship/z_bg_haka_ship.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Ship/z_bg_haka_ship.c
@@ -7,7 +7,7 @@
#include "z_bg_haka_ship.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgHakaShip_Init(Actor* thisx, PlayState* play);
void BgHakaShip_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
index 2210299c76..761be4b154 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Trap/z_bg_haka_trap.c
@@ -131,7 +131,7 @@ void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80880484;
} else {
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (thisx->params == HAKA_TRAP_SPIKED_BOX) {
CollisionHeader_GetVirtual(&object_haka_objects_Col_009CD0, &colHeader);
@@ -177,7 +177,7 @@ void BgHakaTrap_Init(Actor* thisx, PlayState* play) {
} else {
this->timer = 40;
this->actionFunc = func_808809B0;
- thisx->uncullZoneScale = 500.0f;
+ thisx->cullingVolumeScale = 500.0f;
}
CollisionCheck_SetInfo(&thisx->colChkInfo, NULL, &sColChkInfoInit);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c b/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
index de6dd98196..54d6501821 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Tubo/z_bg_haka_tubo.c
@@ -8,7 +8,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHakaTubo_Init(Actor* thisx, PlayState* play);
void BgHakaTubo_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Water/z_bg_haka_water.c b/src/overlays/actors/ovl_Bg_Haka_Water/z_bg_haka_water.c
index be7a79332d..49f42262b7 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Water/z_bg_haka_water.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Water/z_bg_haka_water.c
@@ -7,7 +7,7 @@
#include "z_bg_haka_water.h"
#include "assets/objects/object_hakach_objects/object_hakach_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgHakaWater_Init(Actor* thisx, PlayState* play);
void BgHakaWater_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
index 9b7ed31904..f328a2d6df 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Zou/z_bg_haka_zou.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_hakach_objects/object_hakach_objects.h"
#include "assets/objects/object_haka_objects/object_haka_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum ShadowTempleAssetsType {
/* 0x0 */ STA_GIANT_BIRD_STATUE,
@@ -96,9 +96,9 @@ void BgHakaZou_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
if (thisx->params == STA_GIANT_BIRD_STATUE) {
- thisx->uncullZoneForward = 2000.0f;
- thisx->uncullZoneScale = 3000.0f;
- thisx->uncullZoneDownward = 3000.0f;
+ thisx->cullingVolumeDistance = 2000.0f;
+ thisx->cullingVolumeScale = 3000.0f;
+ thisx->cullingVolumeDownward = 3000.0f;
}
}
@@ -176,7 +176,7 @@ void BgHakaZou_Wait(BgHakaZou* this, PlayState* play) {
this->collider.dim.yShift = -30;
this->collider.dim.pos.x -= 56;
this->collider.dim.pos.z += 56;
- this->dyna.actor.uncullZoneScale = 1500.0f;
+ this->dyna.actor.cullingVolumeScale = 1500.0f;
} else if (this->dyna.actor.params == STA_BOMBABLE_SKULL_WALL) {
CollisionHeader_GetVirtual(&object_haka_objects_Col_005E30, &colHeader);
this->collider.dim.yShift = -50;
diff --git a/src/overlays/actors/ovl_Bg_Heavy_Block/z_bg_heavy_block.c b/src/overlays/actors/ovl_Bg_Heavy_Block/z_bg_heavy_block.c
index ab1b72b4d1..34587ad303 100644
--- a/src/overlays/actors/ovl_Bg_Heavy_Block/z_bg_heavy_block.c
+++ b/src/overlays/actors/ovl_Bg_Heavy_Block/z_bg_heavy_block.c
@@ -42,9 +42,9 @@ ActorProfile Bg_Heavy_Block_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
};
void BgHeavyBlock_SetPieceRandRot(BgHeavyBlock* this, f32 scale) {
@@ -77,7 +77,8 @@ void BgHeavyBlock_InitPiece(BgHeavyBlock* this, f32 scale) {
void BgHeavyBlock_SetupDynapoly(BgHeavyBlock* this, PlayState* play) {
s32 pad[2];
CollisionHeader* colHeader = NULL;
- this->dyna.actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_CARRY_X_ROT_INFLUENCE;
+ this->dyna.actor.flags |=
+ ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_CARRY_X_ROT_INFLUENCE;
DynaPolyActor_Init(&this->dyna, 0);
CollisionHeader_GetVirtual(&gHeavyBlockCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
@@ -101,7 +102,7 @@ void BgHeavyBlock_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgHeavyBlock_MovePiece;
BgHeavyBlock_InitPiece(this, 1.0f);
this->timer = 120;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->unk_164.y = -50.0f;
break;
case HEAVYBLOCK_SMALL_PIECE:
@@ -109,7 +110,7 @@ void BgHeavyBlock_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgHeavyBlock_MovePiece;
BgHeavyBlock_InitPiece(this, 2.0f);
this->timer = 120;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->unk_164.y = -20.0f;
break;
case HEAVYBLOCK_BREAKABLE:
@@ -471,7 +472,7 @@ void BgHeavyBlock_Land(BgHeavyBlock* this, PlayState* play) {
break;
}
} else {
- this->dyna.actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_5);
+ this->dyna.actor.flags &= ~(ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED);
this->actionFunc = BgHeavyBlock_DoNothing;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c b/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
index ffe3b6c837..368ccedffa 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.c
@@ -7,7 +7,7 @@
#include "z_bg_hidan_curtain.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHidanCurtain_Init(Actor* thisx, PlayState* play);
void BgHidanCurtain_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Dalm/z_bg_hidan_dalm.c b/src/overlays/actors/ovl_Bg_Hidan_Dalm/z_bg_hidan_dalm.c
index 83e984ee7b..d7868a5cc6 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Dalm/z_bg_hidan_dalm.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Dalm/z_bg_hidan_dalm.c
@@ -139,7 +139,7 @@ void BgHidanDalm_Wait(BgHidanDalm* this, PlayState* play) {
this->dyna.actor.world.pos.z += 32.5f * Math_CosS(this->dyna.actor.world.rot.y);
Player_SetCsActionWithHaltedActors(play, &this->dyna.actor, PLAYER_CSACTION_8);
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = BgHidanDalm_Shrink;
this->dyna.actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND_TOUCH;
this->dyna.actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Fslift/z_bg_hidan_fslift.c b/src/overlays/actors/ovl_Bg_Hidan_Fslift/z_bg_hidan_fslift.c
index 1b4ecb10eb..43525d92f7 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Fslift/z_bg_hidan_fslift.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Fslift/z_bg_hidan_fslift.c
@@ -7,7 +7,7 @@
#include "z_bg_hidan_fslift.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHidanFslift_Init(Actor* thisx, PlayState* play);
void BgHidanFslift_Destroy(Actor* thisx, PlayState* play);
@@ -32,9 +32,9 @@ ActorProfile Bg_Hidan_Fslift_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 350, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 350, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_STOP),
};
void BgHidanFslift_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c b/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
index b8d0e63402..fef4a8d863 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Fwbig/z_bg_hidan_fwbig.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum HidanFwbigMoveState {
/* 0 */ FWBIG_MOVE,
@@ -64,7 +64,7 @@ static ColliderCylinderInit sCylinderInit = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_STOP),
};
void BgHidanFwbig_Init(Actor* thisx, PlayState* play2) {
@@ -94,7 +94,7 @@ void BgHidanFwbig_Init(Actor* thisx, PlayState* play2) {
BgHidanFwbig_UpdatePosition(this);
Actor_SetScale(&this->actor, 0.15f);
this->collider.dim.height = 230;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->moveState = FWBIG_MOVE;
this->actionFunc = BgHidanFwbig_WaitForPlayer;
this->actor.world.pos.y = this->actor.home.pos.y - (2400.0f * this->actor.scale.y);
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Hrock/z_bg_hidan_hrock.c b/src/overlays/actors/ovl_Bg_Hidan_Hrock/z_bg_hidan_hrock.c
index 3ef030dedd..53ce9892e9 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Hrock/z_bg_hidan_hrock.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Hrock/z_bg_hidan_hrock.c
@@ -118,7 +118,7 @@ void BgHidanHrock_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_808894A4;
if (thisx->params == 0) {
thisx->world.pos.y -= 2800.0f;
- thisx->uncullZoneForward = 3000.0f;
+ thisx->cullingVolumeDistance = 3000.0f;
} else if (thisx->params == 1) {
thisx->world.pos.y -= 800.0f;
} else if (thisx->params == 2) {
@@ -126,8 +126,8 @@ void BgHidanHrock_Init(Actor* thisx, PlayState* play) {
}
} else {
if (thisx->params == 0) {
- thisx->flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
- thisx->uncullZoneForward = 3000.0f;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
+ thisx->cullingVolumeDistance = 3000.0f;
}
this->actionFunc = func_808896B8;
}
@@ -185,7 +185,7 @@ void func_8088960C(BgHidanHrock* this, PlayState* play) {
this->dyna.actor.velocity.y++;
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, this->dyna.actor.velocity.y)) {
- this->dyna.actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_5);
+ this->dyna.actor.flags &= ~(ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED);
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
if (this->dyna.actor.params == 0) {
@@ -204,7 +204,7 @@ void func_808896B8(BgHidanHrock* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
this->actionFunc = func_808894B0;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (this->dyna.actor.params == 0) {
this->dyna.actor.room = -1;
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c b/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
index 7a65b45343..e5e49a947f 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Kousi/z_bg_hidan_kousi.c
@@ -7,7 +7,7 @@
#include "z_bg_hidan_kousi.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHidanKousi_Init(Actor* thisx, PlayState* play);
void BgHidanKousi_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Kowarerukabe/z_bg_hidan_kowarerukabe.c b/src/overlays/actors/ovl_Bg_Hidan_Kowarerukabe/z_bg_hidan_kowarerukabe.c
index 05e513a461..aaba19888f 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Kowarerukabe/z_bg_hidan_kowarerukabe.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Kowarerukabe/z_bg_hidan_kowarerukabe.c
@@ -106,9 +106,9 @@ void BgHidanKowarerukabe_OffsetActorYPos(BgHidanKowarerukabe* this) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgHidanKowarerukabe_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Rock/z_bg_hidan_rock.c b/src/overlays/actors/ovl_Bg_Hidan_Rock/z_bg_hidan_rock.c
index 02d864f83f..e115fb77f9 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Rock/z_bg_hidan_rock.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Rock/z_bg_hidan_rock.c
@@ -91,7 +91,7 @@ void BgHidanRock_Init(Actor* thisx, PlayState* play) {
} else {
this->actionFunc = func_8088B268;
}
- thisx->flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
CollisionHeader_GetVirtual(&gFireTempleStoneBlock1Col, &colHeader);
} else {
CollisionHeader_GetVirtual(&gFireTempleStoneBlock2Col, &colHeader);
@@ -114,7 +114,7 @@ void BgHidanRock_Destroy(Actor* thisx, PlayState* play) {
}
void func_8088B24C(BgHidanRock* this) {
- this->dyna.actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->actionFunc = func_8088B990;
}
@@ -247,7 +247,7 @@ void func_8088B79C(BgHidanRock* this, PlayState* play) {
} else {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 15.0f;
this->actionFunc = func_8088B90C;
- this->dyna.actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_5);
+ this->dyna.actor.flags &= ~(ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED);
}
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Rsekizou/z_bg_hidan_rsekizou.c b/src/overlays/actors/ovl_Bg_Hidan_Rsekizou/z_bg_hidan_rsekizou.c
index 0b4df94e12..b496a4152e 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Rsekizou/z_bg_hidan_rsekizou.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Rsekizou/z_bg_hidan_rsekizou.c
@@ -110,8 +110,8 @@ static ColliderJntSphInit sJntSphInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1500, ICHAIN_STOP),
};
static void* sFireballsTexs[] = {
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Sekizou/z_bg_hidan_sekizou.c b/src/overlays/actors/ovl_Bg_Hidan_Sekizou/z_bg_hidan_sekizou.c
index e5051d0461..206f852ee2 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Sekizou/z_bg_hidan_sekizou.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Sekizou/z_bg_hidan_sekizou.c
@@ -115,8 +115,8 @@ static CollisionCheckInfoInit sColChkInfoInit = { 1, 40, 240, MASS_IMMOVABLE };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1500, ICHAIN_STOP),
};
static void* sFireballsTexs[] = {
diff --git a/src/overlays/actors/ovl_Bg_Hidan_Syoku/z_bg_hidan_syoku.c b/src/overlays/actors/ovl_Bg_Hidan_Syoku/z_bg_hidan_syoku.c
index b5d5f4f372..e1a7007068 100644
--- a/src/overlays/actors/ovl_Bg_Hidan_Syoku/z_bg_hidan_syoku.c
+++ b/src/overlays/actors/ovl_Bg_Hidan_Syoku/z_bg_hidan_syoku.c
@@ -7,7 +7,7 @@
#include "z_bg_hidan_syoku.h"
#include "assets/objects/object_hidan_objects/object_hidan_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgHidanSyoku_Init(Actor* thisx, PlayState* play);
void BgHidanSyoku_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Ice_Objects/z_bg_ice_objects.c b/src/overlays/actors/ovl_Bg_Ice_Objects/z_bg_ice_objects.c
index f257aa5ef4..15163c9842 100644
--- a/src/overlays/actors/ovl_Bg_Ice_Objects/z_bg_ice_objects.c
+++ b/src/overlays/actors/ovl_Bg_Ice_Objects/z_bg_ice_objects.c
@@ -141,7 +141,7 @@ void BgIceObjects_Idle(BgIceObjects* this, PlayState* play) {
if ((this->dyna.unk_150 > 0.0f) && !Player_InCsMode(play)) {
BgIceObjects_SetNextTarget(this, play);
if (Actor_WorldDistXZToPoint(thisx, &this->targetPos) > 1.0f) {
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Player_SetCsActionWithHaltedActors(play, thisx, PLAYER_CSACTION_8);
thisx->params = 1;
this->actionFunc = BgIceObjects_Slide;
@@ -169,7 +169,7 @@ void BgIceObjects_Slide(BgIceObjects* this, PlayState* play) {
this->targetPos.x = thisx->world.pos.x;
this->targetPos.z = thisx->world.pos.z;
if (thisx->velocity.y <= 0.0f) {
- thisx->flags &= ~ACTOR_FLAG_4;
+ thisx->flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
thisx->params = 0;
Player_SetCsActionWithHaltedActors(play, thisx, PLAYER_CSACTION_7);
@@ -206,7 +206,7 @@ void BgIceObjects_Reset(BgIceObjects* this, PlayState* play) {
this->dyna.unk_150 = 0.0f;
}
if (Math_StepToF(&thisx->world.pos.y, thisx->home.pos.y, 1.0f)) {
- thisx->flags &= ~ACTOR_FLAG_4;
+ thisx->flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Math_Vec3f_Copy(&this->targetPos, &thisx->home.pos);
this->actionFunc = BgIceObjects_Idle;
thisx->speed = 0.0f;
diff --git a/src/overlays/actors/ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c b/src/overlays/actors/ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c
index 5f9a1a6ca1..39c891ab4f 100644
--- a/src/overlays/actors/ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c
+++ b/src/overlays/actors/ovl_Bg_Ice_Shelter/z_bg_ice_shelter.c
@@ -141,9 +141,9 @@ void BgIceShelter_RotateY(Vec3f* dest, Vec3f* src, s16 angle) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgIceShelter_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Ice_Shutter/z_bg_ice_shutter.c b/src/overlays/actors/ovl_Bg_Ice_Shutter/z_bg_ice_shutter.c
index a27d455caf..d00358e230 100644
--- a/src/overlays/actors/ovl_Bg_Ice_Shutter/z_bg_ice_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Ice_Shutter/z_bg_ice_shutter.c
@@ -7,7 +7,7 @@
#include "z_bg_ice_shutter.h"
#include "assets/objects/object_ice_objects/object_ice_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgIceShutter_Init(Actor* thisx, PlayState* play);
void BgIceShutter_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.c b/src/overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.c
index a9a560bc09..094f585645 100644
--- a/src/overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.c
+++ b/src/overlays/actors/ovl_Bg_Ice_Turara/z_bg_ice_turara.c
@@ -53,7 +53,7 @@ ActorProfile Bg_Ice_Turara_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 600, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 600, ICHAIN_CONTINUE),
ICHAIN_F32(gravity, -3, ICHAIN_CONTINUE),
ICHAIN_F32(minVelocityY, -30, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
index a9dd2adfa5..dc5b9323e3 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
@@ -52,7 +52,7 @@ void BgInGate_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->dyna.actor, 0.1f);
if ((PARAMS_GET_U(this->dyna.actor.params, 0, 1) != 0) &&
- (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6)) {
+ (GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA)) {
play->csCtx.curFrame = 0;
BgInGate_SetupAction(this, func_80892890);
} else {
diff --git a/src/overlays/actors/ovl_Bg_Jya_1flift/z_bg_jya_1flift.c b/src/overlays/actors/ovl_Bg_Jya_1flift/z_bg_jya_1flift.c
index 0e35886304..7963199d74 100644
--- a/src/overlays/actors/ovl_Bg_Jya_1flift/z_bg_jya_1flift.c
+++ b/src/overlays/actors/ovl_Bg_Jya_1flift/z_bg_jya_1flift.c
@@ -7,7 +7,7 @@
#include "z_bg_jya_1flift.h"
#include "assets/objects/object_jya_obj/object_jya_obj.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJya1flift_Init(Actor* thisx, PlayState* play);
void BgJya1flift_Destroy(Actor* thisx, PlayState* play);
@@ -61,9 +61,9 @@ static f32 sFinalPositions[] = { 443.0f, -50.0f };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_STOP),
};
void BgJya1flift_InitDynapoly(BgJya1flift* this, PlayState* play, CollisionHeader* collision, s32 moveFlag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Amishutter/z_bg_jya_amishutter.c b/src/overlays/actors/ovl_Bg_Jya_Amishutter/z_bg_jya_amishutter.c
index df98fa50ae..23f5658ce8 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Amishutter/z_bg_jya_amishutter.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Amishutter/z_bg_jya_amishutter.c
@@ -37,9 +37,9 @@ ActorProfile Bg_Jya_Amishutter_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaAmishutter_InitDynaPoly(BgJyaAmishutter* this, PlayState* play, CollisionHeader* collision, s32 flag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Bigmirror/z_bg_jya_bigmirror.c b/src/overlays/actors/ovl_Bg_Jya_Bigmirror/z_bg_jya_bigmirror.c
index 4c065932f0..ecdf4aa4de 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Bigmirror/z_bg_jya_bigmirror.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Bigmirror/z_bg_jya_bigmirror.c
@@ -7,7 +7,7 @@
#include "z_bg_jya_bigmirror.h"
#include "assets/objects/object_jya_obj/object_jya_obj.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgJyaBigmirror_Init(Actor* thisx, PlayState* play);
void BgJyaBigmirror_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Jya_Block/z_bg_jya_block.c b/src/overlays/actors/ovl_Bg_Jya_Block/z_bg_jya_block.c
index d7aaafba54..eea63927ed 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Block/z_bg_jya_block.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Block/z_bg_jya_block.c
@@ -28,9 +28,9 @@ ActorProfile Bg_Jya_Block_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 333, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
void BgJyaBlock_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Bombchuiwa/z_bg_jya_bombchuiwa.c b/src/overlays/actors/ovl_Bg_Jya_Bombchuiwa/z_bg_jya_bombchuiwa.c
index 061ef48fd1..cd177d8044 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Bombchuiwa/z_bg_jya_bombchuiwa.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Bombchuiwa/z_bg_jya_bombchuiwa.c
@@ -56,9 +56,9 @@ static ColliderJntSphInit sJntSphInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_3, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaBombchuiwa_SetupCollider(BgJyaBombchuiwa* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c b/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
index 6268abe6ab..691e2adbe2 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Bombiwa/z_bg_jya_bombiwa.c
@@ -57,9 +57,9 @@ static ColliderJntSphInit sJntSphInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaBombiwa_SetupDynaPoly(BgJyaBombiwa* this, PlayState* play, CollisionHeader* collision, s32 flag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c b/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
index e40258f9f6..3b418afec1 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Cobra/z_bg_jya_cobra.c
@@ -4,7 +4,7 @@
#include "assets/objects/object_jya_obj/object_jya_obj.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJyaCobra_Init(Actor* thisx, PlayState* play);
void BgJyaCobra_Destroy(Actor* thisx, PlayState* play);
@@ -94,9 +94,9 @@ static s32 D_80897518[] = { 0x80, 0xA0, 0xA0, 0x80 };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static Vec3s D_80897538 = { 0, -0x4000, 0 };
diff --git a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
index 9e2a0d9ad4..9122ebfcf9 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Goroiwa/z_bg_jya_goroiwa.c
@@ -8,7 +8,7 @@
#include "z_bg_jya_goroiwa.h"
#include "assets/objects/object_goroiwa/object_goroiwa.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJyaGoroiwa_Init(Actor* thisx, PlayState* play);
void BgJyaGoroiwa_Destroy(Actor* thisx, PlayState* play);
@@ -66,9 +66,9 @@ static CollisionCheckInfoInit sColChkInfoInit = { 1, 15, 0, MASS_HEAVY };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaGoroiwa_UpdateCollider(BgJyaGoroiwa* this) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Haheniron/z_bg_jya_haheniron.c b/src/overlays/actors/ovl_Bg_Jya_Haheniron/z_bg_jya_haheniron.c
index 0f100259bd..f327e15f8c 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Haheniron/z_bg_jya_haheniron.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Haheniron/z_bg_jya_haheniron.c
@@ -8,7 +8,7 @@
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
#include "assets/objects/object_jya_iron/object_jya_iron.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJyaHaheniron_Init(Actor* thisx, PlayState* play);
void BgJyaHaheniron_Destroy(Actor* thisx, PlayState* play);
@@ -64,9 +64,9 @@ static ColliderJntSphInit sJntSphInit = {
static s16 sKakeraScales[] = { 5, 8, 11, 14, 17 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static f32 D_80898794[] = { 0.13f, 0.1f, 0.1f };
diff --git a/src/overlays/actors/ovl_Bg_Jya_Ironobj/z_bg_jya_ironobj.c b/src/overlays/actors/ovl_Bg_Jya_Ironobj/z_bg_jya_ironobj.c
index cf15c084b0..e5a8e139ba 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Ironobj/z_bg_jya_ironobj.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Ironobj/z_bg_jya_ironobj.c
@@ -72,9 +72,9 @@ static s16 D_80899530[] = { 48, 42, 36, 32, 28, 24, 20, 16 };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static CollisionHeader* sCollisionHeaders[] = { &gPillarCol, &gThroneCol };
diff --git a/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c b/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
index 55f106a0ce..459e3f11af 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Kanaami/z_bg_jya_kanaami.c
@@ -35,9 +35,9 @@ ActorProfile Bg_Jya_Kanaami_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 700, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 700, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaKanaami_InitDynaPoly(BgJyaKanaami* this, PlayState* play, CollisionHeader* collision, s32 flag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c b/src/overlays/actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c
index 8b3375967e..2d1092c8e5 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Lift/z_bg_jya_lift.c
@@ -7,7 +7,7 @@
#include "z_bg_jya_lift.h"
#include "assets/objects/object_jya_obj/object_jya_obj.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJyaLift_Init(Actor* thisx, PlayState* play);
void BgJyaLift_Destroy(Actor* thisx, PlayState* play);
@@ -36,9 +36,9 @@ ActorProfile Bg_Jya_Lift_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2500, ICHAIN_STOP),
};
void BgJyaLift_InitDynapoly(BgJyaLift* this, PlayState* play, CollisionHeader* collisionHeader, s32 moveFlag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Megami/z_bg_jya_megami.c b/src/overlays/actors/ovl_Bg_Jya_Megami/z_bg_jya_megami.c
index eed3074280..546f8c8d64 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Megami/z_bg_jya_megami.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Megami/z_bg_jya_megami.c
@@ -105,9 +105,9 @@ static Vec3f sVelocity = { 0.0f, 0.0f, 0.8f };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_STOP),
};
void BgJyaMegami_InitDynaPoly(BgJyaMegami* this, PlayState* play, CollisionHeader* collision, s32 flag) {
diff --git a/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c b/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
index d33e173cee..66875ae85b 100644
--- a/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
+++ b/src/overlays/actors/ovl_Bg_Jya_Zurerukabe/z_bg_jya_zurerukabe.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_jya_obj/object_jya_obj.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgJyaZurerukabe_Init(Actor* thisx, PlayState* play);
void BgJyaZurerukabe_Destroy(Actor* thisx, PlayState* play);
@@ -54,9 +54,9 @@ static s16 D_8089BA30[6] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgJyaZurerukabe_InitDynaPoly(BgJyaZurerukabe* this, PlayState* play, CollisionHeader* collision, s32 flag) {
diff --git a/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c b/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
index 4e2dea2a9c..e44f561d83 100644
--- a/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
+++ b/src/overlays/actors/ovl_Bg_Menkuri_Eye/z_bg_menkuri_eye.c
@@ -7,7 +7,7 @@
#include "z_bg_menkuri_eye.h"
#include "assets/objects/object_menkuri_objects/object_menkuri_objects.h"
-#define FLAGS ACTOR_FLAG_5
+#define FLAGS ACTOR_FLAG_DRAW_CULLING_DISABLED
void BgMenkuriEye_Init(Actor* thisx, PlayState* play);
void BgMenkuriEye_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Menkuri_Kaiten/z_bg_menkuri_kaiten.c b/src/overlays/actors/ovl_Bg_Menkuri_Kaiten/z_bg_menkuri_kaiten.c
index 95b9bbb95d..cb3c724cf5 100644
--- a/src/overlays/actors/ovl_Bg_Menkuri_Kaiten/z_bg_menkuri_kaiten.c
+++ b/src/overlays/actors/ovl_Bg_Menkuri_Kaiten/z_bg_menkuri_kaiten.c
@@ -7,7 +7,7 @@
#include "z_bg_menkuri_kaiten.h"
#include "assets/objects/object_menkuri_objects/object_menkuri_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgMenkuriKaiten_Init(Actor* thisx, PlayState* play);
void BgMenkuriKaiten_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Mizu_Bwall/z_bg_mizu_bwall.c b/src/overlays/actors/ovl_Bg_Mizu_Bwall/z_bg_mizu_bwall.c
index 6c16b95e61..2bcc1974b2 100644
--- a/src/overlays/actors/ovl_Bg_Mizu_Bwall/z_bg_mizu_bwall.c
+++ b/src/overlays/actors/ovl_Bg_Mizu_Bwall/z_bg_mizu_bwall.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMizuBwall_Init(Actor* thisx, PlayState* play);
void BgMizuBwall_Destroy(Actor* thisx, PlayState* play);
@@ -157,9 +157,9 @@ static CollisionHeader* sColHeaders[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c b/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c
index 96583b843f..095ab67e43 100644
--- a/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c
+++ b/src/overlays/actors/ovl_Bg_Mizu_Movebg/z_bg_mizu_movebg.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define MOVEBG_TYPE(params) PARAMS_GET_U((u16)(params), 12, 4)
#define MOVEBG_FLAGS(params) PARAMS_GET_U((u16)(params), 0, 6)
@@ -62,9 +62,9 @@ static CollisionHeader* sColHeaders[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mizu_Shutter/z_bg_mizu_shutter.c b/src/overlays/actors/ovl_Bg_Mizu_Shutter/z_bg_mizu_shutter.c
index 44a2f7cce6..585f85f6f5 100644
--- a/src/overlays/actors/ovl_Bg_Mizu_Shutter/z_bg_mizu_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Mizu_Shutter/z_bg_mizu_shutter.c
@@ -1,7 +1,7 @@
#include "z_bg_mizu_shutter.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMizuShutter_Init(Actor* thisx, PlayState* play);
void BgMizuShutter_Destroy(Actor* thisx, PlayState* play);
@@ -38,9 +38,9 @@ static Vec3f sDisplacements[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mizu_Uzu/z_bg_mizu_uzu.c b/src/overlays/actors/ovl_Bg_Mizu_Uzu/z_bg_mizu_uzu.c
index 1810d0bd2d..9f1884ea49 100644
--- a/src/overlays/actors/ovl_Bg_Mizu_Uzu/z_bg_mizu_uzu.c
+++ b/src/overlays/actors/ovl_Bg_Mizu_Uzu/z_bg_mizu_uzu.c
@@ -29,8 +29,8 @@ ActorProfile Bg_Mizu_Uzu_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.c b/src/overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.c
index 2b3abc2733..68f551be8b 100644
--- a/src/overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.c
+++ b/src/overlays/actors/ovl_Bg_Mizu_Water/z_bg_mizu_water.c
@@ -7,7 +7,7 @@
#include "z_bg_mizu_water.h"
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgMizuWater_Init(Actor* thisx, PlayState* play);
void BgMizuWater_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c b/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c
index 7dd37baf58..69bbc3506c 100644
--- a/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c
+++ b/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c
@@ -14,7 +14,7 @@
#include "assets/objects/object_mjin_flash/object_mjin_flash.h"
#include "assets/objects/object_mjin_oka/object_mjin_oka.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMjin_Init(Actor* thisx, PlayState* play);
void BgMjin_Destroy(Actor* thisx, PlayState* play);
@@ -40,9 +40,9 @@ extern UNK_TYPE D_06000000;
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
};
static s16 sObjectIds[] = { OBJECT_MJIN_FLASH, OBJECT_MJIN_DARK, OBJECT_MJIN_FLAME,
@@ -78,7 +78,7 @@ void func_808A0850(BgMjin* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
colHeader = NULL;
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->dyna.actor.objectSlot = this->requiredObjectSlot;
Actor_SetObjectDependency(play, &this->dyna.actor);
DynaPolyActor_Init(&this->dyna, 0);
diff --git a/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c b/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
index 7726f3b2d1..7b02395228 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Bigst/z_bg_mori_bigst.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_mori_objects/object_mori_objects.h"
#include "quake.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMoriBigst_Init(Actor* thisx, PlayState* play);
void BgMoriBigst_Destroy(Actor* thisx, PlayState* play);
@@ -41,8 +41,8 @@ ActorProfile Bg_Mori_Bigst_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 3000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 3000, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeScale, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 3000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -500, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(minVelocityY, -12000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mori_Elevator/z_bg_mori_elevator.c b/src/overlays/actors/ovl_Bg_Mori_Elevator/z_bg_mori_elevator.c
index 3ed26dfe1c..b441ed008c 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Elevator/z_bg_mori_elevator.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Elevator/z_bg_mori_elevator.c
@@ -1,7 +1,7 @@
#include "z_bg_mori_elevator.h"
#include "assets/objects/object_mori_objects/object_mori_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMoriElevator_Init(Actor* thisx, PlayState* play);
void BgMoriElevator_Destroy(Actor* thisx, PlayState* play);
@@ -32,9 +32,9 @@ ActorProfile Bg_Mori_Elevator_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 3000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mori_Hashigo/z_bg_mori_hashigo.c b/src/overlays/actors/ovl_Bg_Mori_Hashigo/z_bg_mori_hashigo.c
index 7db118d243..53bc3b6b47 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Hashigo/z_bg_mori_hashigo.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Hashigo/z_bg_mori_hashigo.c
@@ -64,18 +64,18 @@ static ColliderJntSphInit sJntSphInit = {
};
static InitChainEntry sInitChainClasp[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_3, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 40, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
static InitChainEntry sInitChainLadder[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mori_Hashira4/z_bg_mori_hashira4.c b/src/overlays/actors/ovl_Bg_Mori_Hashira4/z_bg_mori_hashira4.c
index e1ce8bdc05..c5f634640e 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Hashira4/z_bg_mori_hashira4.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Hashira4/z_bg_mori_hashira4.c
@@ -7,7 +7,7 @@
#include "z_bg_mori_hashira4.h"
#include "assets/objects/object_mori_objects/object_mori_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgMoriHashira4_Init(Actor* thisx, PlayState* play);
void BgMoriHashira4_Destroy(Actor* thisx, PlayState* play);
@@ -34,9 +34,9 @@ ActorProfile Bg_Mori_Hashira4_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 700, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 700, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c b/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
index 3e346641eb..70e60eacf4 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c
@@ -14,7 +14,7 @@
#include "assets/objects/object_mori_hineri2a/object_mori_hineri2a.h"
#include "assets/objects/object_mori_tex/object_mori_tex.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgMoriHineri_Init(Actor* thisx, PlayState* play);
void BgMoriHineri_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Mori_Idomizu/z_bg_mori_idomizu.c b/src/overlays/actors/ovl_Bg_Mori_Idomizu/z_bg_mori_idomizu.c
index 507f92e73c..9af9f14f2f 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Idomizu/z_bg_mori_idomizu.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Idomizu/z_bg_mori_idomizu.c
@@ -7,7 +7,7 @@
#include "z_bg_mori_idomizu.h"
#include "assets/objects/object_mori_objects/object_mori_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgMoriIdomizu_Init(Actor* thisx, PlayState* play);
void BgMoriIdomizu_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Mori_Kaitenkabe/z_bg_mori_kaitenkabe.c b/src/overlays/actors/ovl_Bg_Mori_Kaitenkabe/z_bg_mori_kaitenkabe.c
index 261196640c..e9fc984f99 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Kaitenkabe/z_bg_mori_kaitenkabe.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Kaitenkabe/z_bg_mori_kaitenkabe.c
@@ -33,9 +33,9 @@ ActorProfile Bg_Mori_Kaitenkabe_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c b/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
index e4d30217dd..61bbf6b9ef 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_mori_objects/object_mori_objects.h"
#include "quake.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgMoriRakkatenjo_Init(Actor* thisx, PlayState* play);
void BgMoriRakkatenjo_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Po_Event/z_bg_po_event.c b/src/overlays/actors/ovl_Bg_Po_Event/z_bg_po_event.c
index 017f18606d..7199ec25b5 100644
--- a/src/overlays/actors/ovl_Bg_Po_Event/z_bg_po_event.c
+++ b/src/overlays/actors/ovl_Bg_Po_Event/z_bg_po_event.c
@@ -155,7 +155,7 @@ void BgPoEvent_InitBlocks(BgPoEvent* this, PlayState* play) {
CollisionHeader* colHeader = NULL;
s32 bgId;
- this->dyna.actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
CollisionHeader_GetVirtual(&gPoSistersAmyBlockCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if ((this->type == 0) && (this->index != 3)) {
@@ -308,7 +308,7 @@ void BgPoEvent_BlockFall(BgPoEvent* this, PlayState* play) {
this->dyna.actor.velocity.y++;
if (Math_StepToF(&this->dyna.actor.world.pos.y, 433.0f, this->dyna.actor.velocity.y)) {
- this->dyna.actor.flags &= ~ACTOR_FLAG_5;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->dyna.actor.velocity.y = 0.0f;
sBlocksAtRest++;
if (this->type != 1) {
diff --git a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c
index 3b1f559479..f6dfcc3d37 100644
--- a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c
+++ b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c
@@ -7,7 +7,7 @@
#include "z_bg_relay_objects.h"
#include "assets/objects/object_relay_objects/object_relay_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum WindmillSetpiecesMode {
/* 0 */ WINDMILL_ROTATING_GEAR,
@@ -62,7 +62,7 @@ void BgRelayObjects_Init(Actor* thisx, PlayState* play) {
}
Audio_PlayWindmillBgm();
thisx->room = -1;
- thisx->flags |= ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
if (D_808A9508 & 2) {
thisx->params = 0xFF;
Actor_Kill(thisx);
@@ -154,7 +154,7 @@ void func_808A9234(BgRelayObjects* this, PlayState* play) {
return;
}
Flags_UnsetSwitch(play, this->switchFlag);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (play->roomCtx.curRoom.num == 4) {
gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
}
diff --git a/src/overlays/actors/ovl_Bg_Spot00_Break/z_bg_spot00_break.c b/src/overlays/actors/ovl_Bg_Spot00_Break/z_bg_spot00_break.c
index 2ad49f6e71..3eb461a52f 100644
--- a/src/overlays/actors/ovl_Bg_Spot00_Break/z_bg_spot00_break.c
+++ b/src/overlays/actors/ovl_Bg_Spot00_Break/z_bg_spot00_break.c
@@ -27,9 +27,9 @@ ActorProfile Bg_Spot00_Break_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
index 501d0f430b..c60865af16 100644
--- a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
+++ b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_spot00_objects/object_spot00_objects.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum DrawbridgeType {
/* -1 */ DT_DRAWBRIDGE = -1,
@@ -40,9 +40,9 @@ ActorProfile Bg_Spot00_Hanebasi_Profile = {
static f32 sTorchFlameScale = 0.0f;
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 550, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 550, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 5000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Spot01_Fusya/z_bg_spot01_fusya.c b/src/overlays/actors/ovl_Bg_Spot01_Fusya/z_bg_spot01_fusya.c
index 9dde534fa8..d8b3cfaba7 100644
--- a/src/overlays/actors/ovl_Bg_Spot01_Fusya/z_bg_spot01_fusya.c
+++ b/src/overlays/actors/ovl_Bg_Spot01_Fusya/z_bg_spot01_fusya.c
@@ -7,7 +7,7 @@
#include "z_bg_spot01_fusya.h"
#include "assets/objects/object_spot01_objects/object_spot01_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot01Fusya_Init(Actor* thisx, PlayState* play);
void BgSpot01Fusya_Destroy(Actor* thisx, PlayState* play);
@@ -30,9 +30,9 @@ ActorProfile Bg_Spot01_Fusya_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 12800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 12800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1300, ICHAIN_STOP),
};
void BgSpot01Fusya_SetupAction(BgSpot01Fusya* this, BgSpot01FusyaActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Bg_Spot01_Idohashira/z_bg_spot01_idohashira.c b/src/overlays/actors/ovl_Bg_Spot01_Idohashira/z_bg_spot01_idohashira.c
index 475940dd53..ba1ff57d87 100644
--- a/src/overlays/actors/ovl_Bg_Spot01_Idohashira/z_bg_spot01_idohashira.c
+++ b/src/overlays/actors/ovl_Bg_Spot01_Idohashira/z_bg_spot01_idohashira.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_spot01_objects/object_spot01_objects.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot01Idohashira_Init(Actor* thisx, PlayState* play);
void BgSpot01Idohashira_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot01_Idomizu/z_bg_spot01_idomizu.c b/src/overlays/actors/ovl_Bg_Spot01_Idomizu/z_bg_spot01_idomizu.c
index b709fc11e3..f2c89a41de 100644
--- a/src/overlays/actors/ovl_Bg_Spot01_Idomizu/z_bg_spot01_idomizu.c
+++ b/src/overlays/actors/ovl_Bg_Spot01_Idomizu/z_bg_spot01_idomizu.c
@@ -7,14 +7,14 @@
#include "z_bg_spot01_idomizu.h"
#include "assets/objects/object_spot01_objects/object_spot01_objects.h"
-#define FLAGS ACTOR_FLAG_5
+#define FLAGS ACTOR_FLAG_DRAW_CULLING_DISABLED
void BgSpot01Idomizu_Init(Actor* thisx, PlayState* play);
void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play);
void BgSpot01Idomizu_Update(Actor* thisx, PlayState* play);
void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play);
-void func_808ABB84(BgSpot01Idomizu* this, PlayState* play);
+void BgSpot01Idomizu_UpdateWaterLevel(BgSpot01Idomizu* this, PlayState* play);
ActorProfile Bg_Spot01_Idomizu_Profile = {
/**/ ACTOR_BG_SPOT01_IDOMIZU,
@@ -36,20 +36,20 @@ void BgSpot01Idomizu_Init(Actor* thisx, PlayState* play) {
BgSpot01Idomizu* this = (BgSpot01Idomizu*)thisx;
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (GET_EVENTCHKINF(EVENTCHKINF_67) || LINK_AGE_IN_YEARS == YEARS_ADULT) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_DRAINED_WELL) || LINK_AGE_IN_YEARS == YEARS_ADULT) {
this->waterHeight = -550.0f;
} else {
this->waterHeight = 52.0f;
}
- this->actionFunc = func_808ABB84;
+ this->actionFunc = BgSpot01Idomizu_UpdateWaterLevel;
this->actor.world.pos.y = this->waterHeight;
}
void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play) {
}
-void func_808ABB84(BgSpot01Idomizu* this, PlayState* play) {
- if (GET_EVENTCHKINF(EVENTCHKINF_67)) {
+void BgSpot01Idomizu_UpdateWaterLevel(BgSpot01Idomizu* this, PlayState* play) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_DRAINED_WELL)) {
this->waterHeight = -550.0f;
}
play->colCtx.colHeader->waterBoxes[0].ySurface = this->actor.world.pos.y;
diff --git a/src/overlays/actors/ovl_Bg_Spot01_Idosoko/z_bg_spot01_idosoko.c b/src/overlays/actors/ovl_Bg_Spot01_Idosoko/z_bg_spot01_idosoko.c
index 964416c0b0..1bad86dd46 100644
--- a/src/overlays/actors/ovl_Bg_Spot01_Idosoko/z_bg_spot01_idosoko.c
+++ b/src/overlays/actors/ovl_Bg_Spot01_Idosoko/z_bg_spot01_idosoko.c
@@ -7,7 +7,7 @@
#include "z_bg_spot01_idosoko.h"
#include "assets/objects/object_spot01_matoya/object_spot01_matoya.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot01Idosoko_Init(Actor* thisx, PlayState* play);
void BgSpot01Idosoko_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c b/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c
index 6b35c92126..2ee4c58283 100644
--- a/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c
+++ b/src/overlays/actors/ovl_Bg_Spot01_Objects2/z_bg_spot01_objects2.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_spot01_matoya/object_spot01_matoya.h"
#include "assets/objects/object_spot01_matoyab/object_spot01_matoyab.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot01Objects2_Init(Actor* thisx, PlayState* play);
void BgSpot01Objects2_Destroy(Actor* thisx, PlayState* play);
@@ -31,9 +31,9 @@ ActorProfile Bg_Spot01_Objects2_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 12800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 12800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_Bg_Spot02_Objects/z_bg_spot02_objects.c b/src/overlays/actors/ovl_Bg_Spot02_Objects/z_bg_spot02_objects.c
index 811ce475ce..a0d74b4eda 100644
--- a/src/overlays/actors/ovl_Bg_Spot02_Objects/z_bg_spot02_objects.c
+++ b/src/overlays/actors/ovl_Bg_Spot02_Objects/z_bg_spot02_objects.c
@@ -7,7 +7,7 @@
#include "z_bg_spot02_objects.h"
#include "assets/objects/object_spot02_objects/object_spot02_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot02Objects_Init(Actor* thisx, PlayState* play);
void BgSpot02Objects_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot03_Taki/z_bg_spot03_taki.c b/src/overlays/actors/ovl_Bg_Spot03_Taki/z_bg_spot03_taki.c
index 12d6cced10..fccae09ba4 100644
--- a/src/overlays/actors/ovl_Bg_Spot03_Taki/z_bg_spot03_taki.c
+++ b/src/overlays/actors/ovl_Bg_Spot03_Taki/z_bg_spot03_taki.c
@@ -7,14 +7,14 @@
#include "z_bg_spot03_taki.h"
#include "assets/objects/object_spot03_object/object_spot03_object.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot03Taki_Init(Actor* thisx, PlayState* play);
void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play);
void BgSpot03Taki_Update(Actor* thisx, PlayState* play);
void BgSpot03Taki_Draw(Actor* thisx, PlayState* play);
-void func_808ADEF0(BgSpot03Taki* this, PlayState* play);
+void BgSpot03Taki_HandleWaterfallState(BgSpot03Taki* this, PlayState* play);
ActorProfile Bg_Spot03_Taki_Profile = {
/**/ ACTOR_BG_SPOT03_TAKI,
@@ -56,7 +56,7 @@ void BgSpot03Taki_Init(Actor* thisx, PlayState* play) {
this->openingAlpha = 255.0f;
BgSpot03Taki_ApplyOpeningAlpha(this, 0);
BgSpot03Taki_ApplyOpeningAlpha(this, 1);
- this->actionFunc = func_808ADEF0;
+ this->actionFunc = BgSpot03Taki_HandleWaterfallState;
}
void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play) {
@@ -65,7 +65,7 @@ void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
-void func_808ADEF0(BgSpot03Taki* this, PlayState* play) {
+void BgSpot03Taki_HandleWaterfallState(BgSpot03Taki* this, PlayState* play) {
if (this->state == WATERFALL_CLOSED) {
if (Flags_GetSwitch(play, this->switchFlag)) {
this->state = WATERFALL_OPENING_ANIMATED;
diff --git a/src/overlays/actors/ovl_Bg_Spot05_Soko/z_bg_spot05_soko.c b/src/overlays/actors/ovl_Bg_Spot05_Soko/z_bg_spot05_soko.c
index 843b3e5235..93c30e65af 100644
--- a/src/overlays/actors/ovl_Bg_Spot05_Soko/z_bg_spot05_soko.c
+++ b/src/overlays/actors/ovl_Bg_Spot05_Soko/z_bg_spot05_soko.c
@@ -61,7 +61,7 @@ void BgSpot05Soko_Init(Actor* thisx, PlayState* play) {
Actor_Kill(thisx);
} else {
this->actionFunc = func_808AE5B4;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);
diff --git a/src/overlays/actors/ovl_Bg_Spot06_Objects/z_bg_spot06_objects.c b/src/overlays/actors/ovl_Bg_Spot06_Objects/z_bg_spot06_objects.c
index 459667c5a9..d06e292e12 100644
--- a/src/overlays/actors/ovl_Bg_Spot06_Objects/z_bg_spot06_objects.c
+++ b/src/overlays/actors/ovl_Bg_Spot06_Objects/z_bg_spot06_objects.c
@@ -124,7 +124,7 @@ void BgSpot06Objects_Init(Actor* thisx, PlayState* play) {
Collider_SetJntSph(play, &this->collider, thisx, &sJntSphInit, this->colliderItem);
if (LINK_IS_ADULT && Flags_GetSwitch(play, this->switchFlag)) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_69)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_RESTORED_LAKE_HYLIA)) {
thisx->home.pos.y = thisx->world.pos.y = WATER_LEVEL_LOWERED;
} else {
thisx->home.pos.y = thisx->world.pos.y = WATER_LEVEL_RAISED;
@@ -148,9 +148,9 @@ void BgSpot06Objects_Init(Actor* thisx, PlayState* play) {
break;
case LHO_WATER_PLANE:
Actor_ProcessInitChain(thisx, sInitChainWaterPlane);
- thisx->flags = ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ thisx->flags = ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
- if (LINK_IS_ADULT && !GET_EVENTCHKINF(EVENTCHKINF_69)) {
+ if (LINK_IS_ADULT && !GET_EVENTCHKINF(EVENTCHKINF_RESTORED_LAKE_HYLIA)) {
if (!IS_CUTSCENE_LAYER) {
this->lakeHyliaWaterLevel = -681.0f;
play->colCtx.colHeader->waterBoxes[LHWB_GERUDO_VALLEY_RIVER_LOWER].ySurface =
@@ -291,7 +291,7 @@ void BgSpot06Objects_LockWait(BgSpot06Objects* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
this->timer = 130;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
sin = Math_SinS(this->dyna.actor.world.rot.y);
cos = Math_CosS(this->dyna.actor.world.rot.y);
this->dyna.actor.world.pos.x += (3.0f * sin);
@@ -365,7 +365,7 @@ void BgSpot06Objects_LockSwimToSurface(BgSpot06Objects* this, PlayState* play) {
this->dyna.actor.world.pos.z - (Math_CosS(this->dyna.actor.shape.rot.y) * 16.0f);
this->dyna.actor.world.pos.y = -1993.0f;
this->timer = 32;
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->collider.elements[0].dim.worldSphere.radius = this->collider.elements[0].dim.modelSphere.radius * 2;
this->actionFunc = BgSpot06Objects_LockFloat;
}
@@ -482,7 +482,7 @@ void BgSpot06Objects_Draw(Actor* thisx, PlayState* play) {
* cleared.
*/
void BgSpot06Objects_WaterPlaneCutsceneWait(BgSpot06Objects* this, PlayState* play) {
- if (GET_EVENTCHKINF(EVENTCHKINF_69)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_RESTORED_LAKE_HYLIA)) {
this->actionFunc = BgSpot06Objects_WaterPlaneCutsceneRise;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Spot07_Taki/z_bg_spot07_taki.c b/src/overlays/actors/ovl_Bg_Spot07_Taki/z_bg_spot07_taki.c
index 76d6ce04e7..04d06a57a5 100644
--- a/src/overlays/actors/ovl_Bg_Spot07_Taki/z_bg_spot07_taki.c
+++ b/src/overlays/actors/ovl_Bg_Spot07_Taki/z_bg_spot07_taki.c
@@ -8,7 +8,7 @@
#include "versions.h"
#include "assets/objects/object_spot07_object/object_spot07_object.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot07Taki_Init(Actor* thisx, PlayState* play);
void BgSpot07Taki_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot08_Bakudankabe/z_bg_spot08_bakudankabe.c b/src/overlays/actors/ovl_Bg_Spot08_Bakudankabe/z_bg_spot08_bakudankabe.c
index 39126bcde9..7d44d616d2 100644
--- a/src/overlays/actors/ovl_Bg_Spot08_Bakudankabe/z_bg_spot08_bakudankabe.c
+++ b/src/overlays/actors/ovl_Bg_Spot08_Bakudankabe/z_bg_spot08_bakudankabe.c
@@ -88,9 +88,9 @@ static Vec3f D_808B08AC[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 3200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 3200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void func_808B02D0(BgSpot08Bakudankabe* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c b/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
index f9a7d9c695..dfaa807a93 100644
--- a/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
+++ b/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
@@ -278,9 +278,9 @@ void BgSpot08Iceblock_SpawnTwinFloe(BgSpot08Iceblock* this, PlayState* play) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2200, ICHAIN_STOP),
};
void BgSpot08Iceblock_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
index 2cce032344..00ca47644f 100644
--- a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
+++ b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c
@@ -41,15 +41,15 @@ static s32 (*D_808B1FA4[])(BgSpot09Obj* this, PlayState* play) = {
};
static InitChainEntry sInitChain1[] = {
- ICHAIN_F32(uncullZoneForward, 7200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 7200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 7200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 7200, ICHAIN_STOP),
};
static InitChainEntry sInitChain2[] = {
- ICHAIN_F32(uncullZoneForward, 7200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 7200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
static Gfx* sDLists[] = {
@@ -63,7 +63,7 @@ s32 func_808B1AE0(BgSpot09Obj* this, PlayState* play) {
return this->dyna.actor.params == 0;
}
- carpentersRescued = GET_EVENTCHKINF_CARPENTERS_FREE_ALL();
+ carpentersRescued = GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED();
if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
switch (this->dyna.actor.params) {
@@ -138,8 +138,7 @@ void BgSpot09Obj_Init(Actor* thisx, PlayState* play) {
BgSpot09Obj* this = (BgSpot09Obj*)thisx;
PRINTF("Spot09 Object [arg_data : 0x%04x](大工救出フラグ 0x%x)\n", this->dyna.actor.params,
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- EVENTCHKINF_CARPENTERS_FREE_MASK_ALL);
+ GET_EVENTCHKINF_CARPENTERS_RESCUED_FLAGS());
this->dyna.actor.params &= 0xFF;
if ((this->dyna.actor.params < 0) || (this->dyna.actor.params >= 5)) {
PRINTF("Error : Spot 09 object の arg_data が判別出来ない(%s %d)(arg_data 0x%04x)\n", "../z_bg_spot09_obj.c",
diff --git a/src/overlays/actors/ovl_Bg_Spot11_Bakudankabe/z_bg_spot11_bakudankabe.c b/src/overlays/actors/ovl_Bg_Spot11_Bakudankabe/z_bg_spot11_bakudankabe.c
index 43dd1e73b9..d0568c23c8 100644
--- a/src/overlays/actors/ovl_Bg_Spot11_Bakudankabe/z_bg_spot11_bakudankabe.c
+++ b/src/overlays/actors/ovl_Bg_Spot11_Bakudankabe/z_bg_spot11_bakudankabe.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_spot11_obj/object_spot11_obj.h"
#include "assets/objects/gameplay_field_keep/gameplay_field_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot11Bakudankabe_Init(Actor* thisx, PlayState* play);
void BgSpot11Bakudankabe_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot11_Oasis/z_bg_spot11_oasis.c b/src/overlays/actors/ovl_Bg_Spot11_Oasis/z_bg_spot11_oasis.c
index 4218cc79fd..05987f0921 100644
--- a/src/overlays/actors/ovl_Bg_Spot11_Oasis/z_bg_spot11_oasis.c
+++ b/src/overlays/actors/ovl_Bg_Spot11_Oasis/z_bg_spot11_oasis.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
#include "assets/objects/object_spot11_obj/object_spot11_obj.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot11Oasis_Init(Actor* thisx, PlayState* play);
void BgSpot11Oasis_Update(Actor* thisx, PlayState* play);
@@ -38,9 +38,9 @@ static s16 D_808B2E10[][2] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static Vec3f D_808B2E34[] = {
diff --git a/src/overlays/actors/ovl_Bg_Spot12_Gate/z_bg_spot12_gate.c b/src/overlays/actors/ovl_Bg_Spot12_Gate/z_bg_spot12_gate.c
index 719baddf1b..b01eb98174 100644
--- a/src/overlays/actors/ovl_Bg_Spot12_Gate/z_bg_spot12_gate.c
+++ b/src/overlays/actors/ovl_Bg_Spot12_Gate/z_bg_spot12_gate.c
@@ -38,9 +38,9 @@ ActorProfile Bg_Spot12_Gate_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_STOP),
};
void BgSpot12Gate_InitDynaPoly(BgSpot12Gate* this, PlayState* play, CollisionHeader* collision, s32 flags) {
diff --git a/src/overlays/actors/ovl_Bg_Spot12_Saku/z_bg_spot12_saku.c b/src/overlays/actors/ovl_Bg_Spot12_Saku/z_bg_spot12_saku.c
index bf53fec356..7fc67b38df 100644
--- a/src/overlays/actors/ovl_Bg_Spot12_Saku/z_bg_spot12_saku.c
+++ b/src/overlays/actors/ovl_Bg_Spot12_Saku/z_bg_spot12_saku.c
@@ -35,9 +35,9 @@ ActorProfile Bg_Spot12_Saku_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void func_808B3420(BgSpot12Saku* this, PlayState* play, CollisionHeader* collision, s32 flags) {
diff --git a/src/overlays/actors/ovl_Bg_Spot15_Rrbox/z_bg_spot15_rrbox.c b/src/overlays/actors/ovl_Bg_Spot15_Rrbox/z_bg_spot15_rrbox.c
index d3aa4423c7..c0daacf78c 100644
--- a/src/overlays/actors/ovl_Bg_Spot15_Rrbox/z_bg_spot15_rrbox.c
+++ b/src/overlays/actors/ovl_Bg_Spot15_Rrbox/z_bg_spot15_rrbox.c
@@ -39,9 +39,9 @@ ActorProfile Bg_Spot15_Rrbox_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static Vec3f D_808B45C4[] = {
diff --git a/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c b/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
index 7e2f27fcc9..f7ba17ed02 100644
--- a/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
+++ b/src/overlays/actors/ovl_Bg_Spot16_Bombstone/z_bg_spot16_bombstone.c
@@ -4,7 +4,7 @@
#include "overlays/actors/ovl_En_Bombf/z_en_bombf.h"
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot16Bombstone_Init(Actor* thisx, PlayState* play);
void BgSpot16Bombstone_Destroy(Actor* thisx, PlayState* play);
@@ -122,17 +122,17 @@ ActorProfile Bg_Spot16_Bombstone_Profile = {
};
static InitChainEntry sInitChainBoulder[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static InitChainEntry sInitChainDebris[] = {
ICHAIN_F32(gravity, -1, ICHAIN_CONTINUE),
ICHAIN_F32(minVelocityY, -10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static Vec3f sVelocity = { 0.0f, 0.0f, 0.0f };
diff --git a/src/overlays/actors/ovl_Bg_Spot16_Doughnut/z_bg_spot16_doughnut.c b/src/overlays/actors/ovl_Bg_Spot16_Doughnut/z_bg_spot16_doughnut.c
index ece0d3d6d4..b71c0fd137 100644
--- a/src/overlays/actors/ovl_Bg_Spot16_Doughnut/z_bg_spot16_doughnut.c
+++ b/src/overlays/actors/ovl_Bg_Spot16_Doughnut/z_bg_spot16_doughnut.c
@@ -31,9 +31,9 @@ ActorProfile Bg_Spot16_Doughnut_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 5500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 5000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 5000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 5500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 5000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 5000, ICHAIN_STOP),
};
static s16 sScales[] = {
diff --git a/src/overlays/actors/ovl_Bg_Spot17_Bakudankabe/z_bg_spot17_bakudankabe.c b/src/overlays/actors/ovl_Bg_Spot17_Bakudankabe/z_bg_spot17_bakudankabe.c
index 7d2166dd73..c6eafbdd47 100644
--- a/src/overlays/actors/ovl_Bg_Spot17_Bakudankabe/z_bg_spot17_bakudankabe.c
+++ b/src/overlays/actors/ovl_Bg_Spot17_Bakudankabe/z_bg_spot17_bakudankabe.c
@@ -30,9 +30,9 @@ ActorProfile Bg_Spot17_Bakudankabe_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void func_808B6BC0(BgSpot17Bakudankabe* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Spot17_Funen/z_bg_spot17_funen.c b/src/overlays/actors/ovl_Bg_Spot17_Funen/z_bg_spot17_funen.c
index 8fbdd14048..8ee2e9dadf 100644
--- a/src/overlays/actors/ovl_Bg_Spot17_Funen/z_bg_spot17_funen.c
+++ b/src/overlays/actors/ovl_Bg_Spot17_Funen/z_bg_spot17_funen.c
@@ -7,7 +7,7 @@
#include "z_bg_spot17_funen.h"
#include "assets/objects/object_spot17_obj/object_spot17_obj.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot17Funen_Init(Actor* thisx, PlayState* play);
void BgSpot17Funen_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
index d41f0d86b9..95aecef7ff 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Basket/z_bg_spot18_basket.c
@@ -2,7 +2,7 @@
#include "assets/objects/object_spot18_obj/object_spot18_obj.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgSpot18Basket_Init(Actor* thisx, PlayState* play);
void BgSpot18Basket_Destroy(Actor* thisx, PlayState* play);
@@ -123,9 +123,9 @@ void func_808B7770(BgSpot18Basket* this, PlayState* play, f32 arg2) {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgSpot18Basket_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Futa/z_bg_spot18_futa.c b/src/overlays/actors/ovl_Bg_Spot18_Futa/z_bg_spot18_futa.c
index c321d5c550..cec6266a2e 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Futa/z_bg_spot18_futa.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Futa/z_bg_spot18_futa.c
@@ -28,9 +28,9 @@ ActorProfile Bg_Spot18_Futa_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void BgSpot18Futa_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c b/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
index 4156815ddf..505797f7e9 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Obj/z_bg_spot18_obj.c
@@ -67,15 +67,15 @@ static BgSpot18ObjInitFunc D_808B910C[] = {
};
static InitChainEntry sInitChain1[] = {
- ICHAIN_F32(minVelocityY, -10, ICHAIN_CONTINUE), ICHAIN_F32(gravity, -4, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32(minVelocityY, -10, ICHAIN_CONTINUE), ICHAIN_F32(gravity, -4, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 1400, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
static InitChainEntry sInitChain2[] = {
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 700, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 700, ICHAIN_STOP),
};
static BgSpot18ObjInitFunc D_808B913C[] = {
diff --git a/src/overlays/actors/ovl_Bg_Spot18_Shutter/z_bg_spot18_shutter.c b/src/overlays/actors/ovl_Bg_Spot18_Shutter/z_bg_spot18_shutter.c
index 789921509e..a078991b46 100644
--- a/src/overlays/actors/ovl_Bg_Spot18_Shutter/z_bg_spot18_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Spot18_Shutter/z_bg_spot18_shutter.c
@@ -7,7 +7,7 @@
#include "z_bg_spot18_shutter.h"
#include "assets/objects/object_spot18_obj/object_spot18_obj.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSpot18Shutter_Init(Actor* thisx, PlayState* play);
void BgSpot18Shutter_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.c b/src/overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.c
index d328a2379b..5d96a0d750 100644
--- a/src/overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.c
+++ b/src/overlays/actors/ovl_Bg_Sst_Floor/z_bg_sst_floor.c
@@ -7,7 +7,7 @@
#include "z_bg_sst_floor.h"
#include "assets/objects/object_sst/object_sst.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgSstFloor_Init(Actor* thisx, PlayState* play);
void BgSstFloor_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Toki_Hikari/z_bg_toki_hikari.c b/src/overlays/actors/ovl_Bg_Toki_Hikari/z_bg_toki_hikari.c
index f24ed0c28a..4ed9f8854c 100644
--- a/src/overlays/actors/ovl_Bg_Toki_Hikari/z_bg_toki_hikari.c
+++ b/src/overlays/actors/ovl_Bg_Toki_Hikari/z_bg_toki_hikari.c
@@ -7,7 +7,7 @@
#include "z_bg_toki_hikari.h"
#include "assets/objects/object_toki_objects/object_toki_objects.h"
-#define FLAGS ACTOR_FLAG_5
+#define FLAGS ACTOR_FLAG_DRAW_CULLING_DISABLED
void BgTokiHikari_Init(Actor* thisx, PlayState* play);
void BgTokiHikari_Destroy(Actor* thisx, PlayState* play);
@@ -46,7 +46,7 @@ void BgTokiHikari_Init(Actor* thisx, PlayState* play) {
this->actionFunc = BgTokiHikari_DoNothing;
break;
case 1:
- if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) {
this->actionFunc = func_808BA204;
this->unk_14C = 0.0f;
} else {
diff --git a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd.c b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd.c
index e25280ed0b..8dcc00db30 100644
--- a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd.c
+++ b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd.c
@@ -7,7 +7,7 @@
#include "z_bg_toki_swd.h"
#include "assets/objects/object_toki_objects/object_toki_objects.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgTokiSwd_Init(Actor* thisx, PlayState* play);
void BgTokiSwd_Destroy(Actor* thisx, PlayState* play);
@@ -18,9 +18,9 @@ void func_808BAF40(BgTokiSwd* this, PlayState* play);
void func_808BB0AC(BgTokiSwd* this, PlayState* play);
void func_808BB128(BgTokiSwd* this, PlayState* play);
-extern CutsceneData D_808BB2F0[];
-extern CutsceneData D_808BB7A0[];
-extern CutsceneData D_808BBD90[];
+extern CutsceneData gPullMasterSwordCs[];
+extern CutsceneData gPlaceMasterSwordCs[];
+extern CutsceneData gRevealMasterSwordCs[];
ActorProfile Bg_Toki_Swd_Profile = {
/**/ ACTOR_BG_TOKI_SWD,
@@ -93,19 +93,19 @@ void BgTokiSwd_Destroy(Actor* thisx, PlayState* play) {
}
void func_808BAF40(BgTokiSwd* this, PlayState* play) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS) && !IS_CUTSCENE_LAYER &&
+ if (!GET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD) && !IS_CUTSCENE_LAYER &&
Actor_IsFacingAndNearPlayer(&this->actor, 800.0f, 0x7530) && !Play_InCsMode(play)) {
- SET_EVENTCHKINF(EVENTCHKINF_WATCHED_SHEIK_AFTER_MASTER_SWORD_CS);
- play->csCtx.script = D_808BBD90;
+ SET_EVENTCHKINF(EVENTCHKINF_REVEALED_MASTER_SWORD);
+ play->csCtx.script = gRevealMasterSwordCs;
gSaveContext.cutsceneTrigger = 1;
}
if (!LINK_IS_ADULT || GET_EVENTCHKINF(EVENTCHKINF_55)) {
if (Actor_HasParent(&this->actor, play)) {
if (!LINK_IS_ADULT) {
Item_Give(play, ITEM_SWORD_MASTER);
- play->csCtx.script = D_808BB2F0;
+ play->csCtx.script = gPullMasterSwordCs;
} else {
- play->csCtx.script = D_808BB7A0;
+ play->csCtx.script = gPlaceMasterSwordCs;
}
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_MASTER_SWORD);
diff --git a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_1.c b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_1.c
index f6f5e3da76..f11a8a551a 100644
--- a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_1.c
+++ b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_1.c
@@ -2,8 +2,8 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_808BB2F0[] = {
- CS_BEGIN_CUTSCENE(9, 425),
+CutsceneData gPullMasterSwordCs[] = {
+ CS_HEADER(9, 425),
CS_PLAYER_CUE_LIST(1),
CS_PLAYER_CUE(PLAYER_CUEID_12, 0, 256, 0x0000, 0x0000, 0x0000, 0, 54, 52, 0, 54, 52, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_LIGHT_SETTING_LIST(1),
@@ -74,6 +74,6 @@ CutsceneData D_808BB2F0[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 20, CS_FLOAT(0x42700000, 60.0f), -1, 117, 7, 0x0000),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 20, CS_FLOAT(0x42700000, 60.0f), -1, 117, 7, 0x2F73),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 20, CS_FLOAT(0x42700000, 60.0f), -1, 117, 7, 0x6B2F),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_2.c b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_2.c
index ca4c06b775..de138790da 100644
--- a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_2.c
+++ b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_2.c
@@ -2,8 +2,8 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_808BB7A0[] = {
- CS_BEGIN_CUTSCENE(9, 368),
+CutsceneData gPlaceMasterSwordCs[] = {
+ CS_HEADER(9, 368),
CS_CAM_EYE_SPLINE(0, 126),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -1, 101, -110, 0x616D),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42200000, 40.0f), -1, 101, -110, 0x6964),
@@ -94,6 +94,6 @@ CutsceneData D_808BB7A0[] = {
CS_MISC(CS_MISC_SET_CSFLAG_1, 90, 91, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0xFFFFFFDD, 0x00000000, 0xFFFFFFF8, 0xFFFFFFDD, 0x00000000, 0x00000000, 0x00000000),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 190, 210),
CS_DESTINATION(CS_DEST_TEMPLE_OF_TIME_FROM_MASTER_SWORD, 210, 211),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_3.c b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_3.c
index f7f8d0067e..c6c5e4eb60 100644
--- a/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_3.c
+++ b/src/overlays/actors/ovl_Bg_Toki_Swd/z_bg_toki_swd_cutscene_data_3.c
@@ -2,15 +2,15 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_808BBD90[] = {
- CS_BEGIN_CUTSCENE(11, 3000),
+CutsceneData gRevealMasterSwordCs[] = {
+ CS_HEADER(11, 3000),
CS_UNK_DATA_LIST(0x00000021, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000),
CS_PLAYER_CUE_LIST(3),
CS_PLAYER_CUE(PLAYER_CUEID_5, 0, 1, 0x0000, 0x8000, 0x0000, 0, 0, 820, 0, 0, 820, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_2, 1, 16, 0x0000, 0x8000, 0x0000, 0, 0, 820, 0, 0, 720, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 16, 176, 0x0000, 0x8000, 0x0000, 0, 0, 720, 0, 0, 720, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(62, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 3),
CS_ACTOR_CUE(0x0004, 40, 70, 0x7D74, 0x0000, 0x0000, -1, 49, 719, 1, 47, 687, CS_FLOAT(0x3D888889, 0.06666667f), CS_FLOAT(0xBD888889, -0.06666667f), CS_FLOAT(0xBD888889, -0.06666667f)),
CS_ACTOR_CUE(0x0004, 70, 220, 0x8010, 0x0000, 0x0000, 1, 47, 687, 0, 134, 21, CS_FLOAT(0xBBDA740E, -0.006666667f), CS_FLOAT(0x3F147AE1, 0.58f), CS_FLOAT(0x3BDA740E, 0.006666667f)),
CS_ACTOR_CUE(0x0002, 220, 272, 0x8000, 0x0000, 0x0000, 0, 134, 21, 0, 101, 2, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBF227627, -0.63461536f), CS_FLOAT(0x0, 0.0f)),
@@ -18,11 +18,11 @@ CutsceneData D_808BBD90[] = {
CS_MISC(CS_MISC_STOP_CUTSCENE, 340, 341, 0x0000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000),
CS_TEXT_LIST(6),
CS_TEXT_NONE(0, 50),
- CS_TEXT(0x70E6, 50, 60, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x70E6, 50, 60, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(60, 250),
- CS_TEXT(0x70E7, 250, 260, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x70E7, 250, 260, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(260, 290),
- CS_TEXT(0x70E8, 290, 320, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x70E8, 290, 320, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_CAM_EYE_SPLINE(0, 251),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -59, 12, 690, 0x0222),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), -59, 12, 690, 0x00FA),
@@ -91,6 +91,6 @@ CutsceneData D_808BBD90[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42700001, 60.000004f), 0, 98, -31, 0x0000),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42700001, 60.000004f), 0, 98, -31, 0x2D70),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42700001, 60.000004f), 0, 98, -31, 0x0085),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c b/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c
index ef0e25f404..d245fce7cd 100644
--- a/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c
+++ b/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_spot04_objects/object_spot04_objects.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgTreemouth_Init(Actor* thisx, PlayState* play);
void BgTreemouth_Destroy(Actor* thisx, PlayState* play);
@@ -25,10 +25,10 @@ void func_808BC8B8(BgTreemouth* this, PlayState* play);
void func_808BC9EC(BgTreemouth* this, PlayState* play);
void func_808BCAF0(BgTreemouth* this, PlayState* play);
-extern CutsceneData D_808BCE20[];
-extern CutsceneData D_808BD2A0[];
-extern CutsceneData D_808BD520[];
-extern CutsceneData D_808BD790[];
+extern CutsceneData gDekuTreeMeetingCs[];
+extern CutsceneData gDekuTreeChoiceCs[];
+extern CutsceneData gDekuTreeMouthOpeningCs[];
+extern CutsceneData gDekuTreeAskAgainCs[];
ActorProfile Bg_Treemouth_Profile = {
/**/ ACTOR_BG_TREEMOUTH,
@@ -45,9 +45,9 @@ ActorProfile Bg_Treemouth_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_5, ICHAIN_CONTINUE),
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 8000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 8000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 300, ICHAIN_STOP),
};
// unused
@@ -146,14 +146,14 @@ void func_808BC8B8(BgTreemouth* this, PlayState* play) {
this->dyna.actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
if (this->dyna.actor.isLockedOn) {
this->dyna.actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- play->csCtx.script = D_808BD2A0;
+ play->csCtx.script = gDekuTreeChoiceCs;
gSaveContext.cutsceneTrigger = 1;
BgTreemouth_SetupAction(this, func_808BC9EC);
}
}
} else if (Actor_IsFacingAndNearPlayer(&this->dyna.actor, 1658.0f, 0x4E20)) {
Flags_SetEventChkInf(EVENTCHKINF_0C);
- play->csCtx.script = D_808BCE20;
+ play->csCtx.script = gDekuTreeMeetingCs;
gSaveContext.cutsceneTrigger = 1;
BgTreemouth_SetupAction(this, func_808BC9EC);
}
@@ -186,11 +186,11 @@ void func_808BC9EC(BgTreemouth* this, PlayState* play) {
play->csCtx.state = CS_STATE_RUN;
if (play->msgCtx.choiceIndex == 0) {
- play->csCtx.script = D_808BD520;
+ play->csCtx.script = gDekuTreeMouthOpeningCs;
Flags_SetEventChkInf(EVENTCHKINF_05);
BgTreemouth_SetupAction(this, func_808BCAF0);
} else {
- play->csCtx.script = D_808BD790;
+ play->csCtx.script = gDekuTreeAskAgainCs;
play->csCtx.curFrame = 0;
BgTreemouth_SetupAction(this, func_808BC8B8);
}
diff --git a/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth_cutscene_data.c b/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth_cutscene_data.c
index 0d06793b69..020b2972b1 100644
--- a/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth_cutscene_data.c
+++ b/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth_cutscene_data.c
@@ -2,8 +2,8 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_808BCE20[] = {
- CS_BEGIN_CUTSCENE(12, 3000),
+CutsceneData gDekuTreeMeetingCs[] = {
+ CS_HEADER(12, 3000),
CS_UNK_DATA_LIST(0x00000015, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
CS_PLAYER_CUE_LIST(2),
@@ -43,14 +43,14 @@ CutsceneData D_808BCE20[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x423CCCC1, 47.199955f), 2673, 127, -267, 0x7805),
CS_TEXT_LIST(4),
CS_TEXT_NONE(0, 40),
- CS_TEXT(0x107D, 40, 60, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x107D, 40, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(60, 160),
- CS_TEXT(0x1015, 160, 170, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x1015, 160, 170, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 180, 200, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFF7, 0xFFFFFFDB, 0x00000000, 0xFFFFFFF7, 0xFFFFFFDB, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(46, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_6, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, -41, -28, 0, -41, -28, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(62, 4),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 4),
CS_ACTOR_CUE(0x0001, 0, 1, 0x0000, 0x0000, 0x0000, 2668, 46, -490, 2668, 46, -490, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 1, 50, 0x5479, 0x0000, 0x0000, 2668, 46, -490, 2890, 43, -612, CS_FLOAT(0x4090FAC7, 4.5306125f), CS_FLOAT(0xBD7AC688, -0.06122449f), CS_FLOAT(0xC090FAC7, -4.5306125f)),
CS_ACTOR_CUE(0x0004, 50, 100, 0x505C, 0x0000, 0x0000, 2890, 43, -612, 3109, 121, -705, CS_FLOAT(0x408C28F6, 4.38f), CS_FLOAT(0x3FC7AE14, 1.56f), CS_FLOAT(0xC08C28F6, -4.38f)),
@@ -59,16 +59,16 @@ CutsceneData D_808BCE20[] = {
CS_START_SEQ(NA_BGM_DEKU_TREE_CS, 140, 141, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFBA, 0x00000094, 0x00000000, 0xFFFFFFBA, 0x00000094),
CS_FADE_OUT_SEQ_LIST(1),
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 0, 20, 0x0000, 0x00000000, 0xFFFFFFA2, 0x00000000, 0x00000027, 0xFFFFFFA2, 0x00000000, 0x00000027),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
-CutsceneData D_808BD2A0[] = {
- CS_BEGIN_CUTSCENE(9, 3000),
+CutsceneData gDekuTreeChoiceCs[] = {
+ CS_HEADER(9, 3000),
CS_UNK_DATA_LIST(0x00000015, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 90, 172, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFE3, 0x00000012, 0x00000000, 0xFFFFFFE3, 0x00000012, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(46, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_6, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, -27, 26, 0, -27, 26, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_CAM_EYE_SPLINE(0, 1091),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), 3740, -141, -530, 0x7065),
@@ -96,17 +96,17 @@ CutsceneData D_808BD2A0[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 1, 35, -36, 0x9D94),
CS_TEXT_LIST(2),
CS_TEXT_NONE(0, 20),
- CS_TEXT(0x1016, 20, 80, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x1016, 20, 80, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_DEKU_TREE_CS, 0, 1, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFAC, 0x0000007E, 0x00000000, 0xFFFFFFAC, 0x0000007E),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
-CutsceneData D_808BD520[] = {
- CS_BEGIN_CUTSCENE(8, 3000),
+CutsceneData gDekuTreeMouthOpeningCs[] = {
+ CS_HEADER(8, 3000),
CS_UNK_DATA_LIST(0x00000015, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(46, 2),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_6, 2),
CS_ACTOR_CUE(0x0001, 0, 20, 0x0000, 0x0000, 0x0000, 42, 0, 77, 42, 0, 77, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 20, 357, 0x0000, 0x0000, 0x0000, 42, 0, 77, 42, 0, 77, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_CAM_EYE_SPLINE(0, 1151),
@@ -127,21 +127,21 @@ CutsceneData D_808BD520[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4223FFED, 40.999928f), 3765, -118, -617, 0x01BC),
CS_TEXT_LIST(2),
CS_TEXT_NONE(0, 20),
- CS_TEXT(0x1017, 20, 60, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x1017, 20, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 100, 150, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFF5, 0x00000010, 0x00000000, 0xFFFFFFF5, 0x00000010, 0x00000000, 0x00000000, 0x00000000),
CS_STOP_SEQ_LIST(1),
CS_STOP_SEQ(NA_BGM_DEKU_TREE_CS, 90, 91, 0x0000, 0x00000000, 0xFFFFFFAC, 0x00000000, 0x00000034, 0xFFFFFFAC, 0x00000000, 0x00000034),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_KOKIRI, 99, 100, 0x0000, 0x00000000, 0xFFFFFFD0, 0x00000000, 0x00000041, 0xFFFFFFD0, 0x00000000, 0x00000041),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
-CutsceneData D_808BD790[] = {
- CS_BEGIN_CUTSCENE(8, 3000),
+CutsceneData gDekuTreeAskAgainCs[] = {
+ CS_HEADER(8, 3000),
CS_UNK_DATA_LIST(0x00000015, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x0000000F, 0xFFFFFFDE, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(46, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_6, 1),
CS_ACTOR_CUE(0x0001, 0, 119, 0x0000, 0x0000, 0x0000, 42, 0, 77, 42, 0, 77, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_CAM_EYE_SPLINE(0, 1091),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4297331E, 75.59984f), 3716, 790, -1171, 0x54EC),
@@ -157,13 +157,13 @@ CutsceneData D_808BD790[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4297331E, 75.59984f), 3769, 718, -1186, 0x56AC),
CS_TEXT_LIST(2),
CS_TEXT_NONE(0, 20),
- CS_TEXT(0x1018, 20, 60, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x1018, 20, 60, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 80, 110, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFEA, 0x00000006, 0x00000000, 0xFFFFFFEA, 0x00000006, 0x00000000, 0x00000000, 0x00000000),
CS_STOP_SEQ_LIST(1),
CS_STOP_SEQ(NA_BGM_DEKU_TREE_CS, 70, 71, 0x0000, 0x00000000, 0xFFFFFFB7, 0x00000000, 0x00000044, 0xFFFFFFB7, 0x00000000, 0x00000044),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_KOKIRI, 79, 80, 0x0000, 0x00000000, 0xFFFFFFE8, 0x00000000, 0x0000003A, 0xFFFFFFE8, 0x00000000, 0x0000003A),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
index 822a9ddd59..dbd5148b74 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
@@ -41,11 +41,11 @@ void BgUmaJump_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if (this->dyna.actor.params == 1) {
- if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
+ if (!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
Actor_Kill(&this->dyna.actor);
return;
}
- this->dyna.actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Ydan_Hasi/z_bg_ydan_hasi.c b/src/overlays/actors/ovl_Bg_Ydan_Hasi/z_bg_ydan_hasi.c
index 020b056bb4..df6e12f851 100644
--- a/src/overlays/actors/ovl_Bg_Ydan_Hasi/z_bg_ydan_hasi.c
+++ b/src/overlays/actors/ovl_Bg_Ydan_Hasi/z_bg_ydan_hasi.c
@@ -7,7 +7,7 @@
#include "z_bg_ydan_hasi.h"
#include "assets/objects/object_ydan_objects/object_ydan_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BgYdanHasi_Init(Actor* thisx, PlayState* play);
void BgYdanHasi_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Bg_Ydan_Sp/z_bg_ydan_sp.c b/src/overlays/actors/ovl_Bg_Ydan_Sp/z_bg_ydan_sp.c
index 6e5a1010fb..2d9b6f9296 100644
--- a/src/overlays/actors/ovl_Bg_Ydan_Sp/z_bg_ydan_sp.c
+++ b/src/overlays/actors/ovl_Bg_Ydan_Sp/z_bg_ydan_sp.c
@@ -293,7 +293,7 @@ void BgYdanSp_FloorWebIdle(BgYdanSp* this, PlayState* play) {
if (this->dyna.actor.xzDistToPlayer < 80.0f) {
this->unk_16C = 200.0f;
this->dyna.actor.room = -1;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->timer = 40;
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WEB_BROKEN);
this->actionFunc = BgYdanSp_FloorWebBreaking;
diff --git a/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c b/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c
index d5d3244348..958e3c3f4f 100644
--- a/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c
+++ b/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_zg/object_zg.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void BgZg_Init(Actor* thisx, PlayState* play);
void BgZg_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c b/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
index 5363ae0c54..ee1142b45a 100644
--- a/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
+++ b/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
@@ -3,7 +3,9 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "assets/scenes/dungeons/ddan_boss/ddan_boss_room_1.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BossDodongo_Init(Actor* thisx, PlayState* play);
void BossDodongo_Destroy(Actor* thisx, PlayState* play);
@@ -333,7 +335,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
this->subCamAt.z = player->actor.world.pos.z;
}
- if (GET_EVENTCHKINF(EVENTCHKINF_71)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
if (this->unk_198 == 100) {
this->actor.world.pos.x = -1114.0f;
this->actor.world.pos.z = -2804.0f;
@@ -374,7 +376,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
case 4:
Math_SmoothStepToF(&this->unk_20C, 0.0f, 1.0f, 0.01f, 0.0f);
- if (GET_EVENTCHKINF(EVENTCHKINF_71)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
phi_f0 = -50.0f;
} else {
phi_f0 = 0.0f;
@@ -402,7 +404,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
}
if (this->unk_198 == 0x5A) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_71)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx,
SEGMENTED_TO_VIRTUAL(gKingDodongoTitleCardTex), 160, 180, 128, 40);
}
@@ -421,7 +423,7 @@ void BossDodongo_IntroCutscene(BossDodongo* this, PlayState* play) {
this->unk_1DA = 50;
this->unk_1BC = 0;
player->actor.shape.rot.y = -0x4002;
- SET_EVENTCHKINF(EVENTCHKINF_71);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_KING_DODONGO_BATTLE);
}
break;
}
diff --git a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
index 8ea0553c3e..490b8986c8 100644
--- a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
+++ b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c
@@ -12,7 +12,9 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum BossFdIntroFlyState {
/* 0 */ INTRO_FLY_EMERGE,
@@ -337,7 +339,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
this->timers[0] = 0;
this->subCamVelFactor = 0.0f;
this->subCamAccel = 0.0f;
- if (GET_EVENTCHKINF(EVENTCHKINF_73)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
this->introState = BFD_CS_EMERGE;
this->subCamEyeNext.x = player2->actor.world.pos.x + 100.0f + 300.0f - 600.0f;
this->subCamEyeNext.y = player2->actor.world.pos.y + 100.0f - 50.0f;
@@ -459,7 +461,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
PRINTF("WAY_SPD X = %f\n", this->subCamAtVel.x);
PRINTF("WAY_SPD Y = %f\n", this->subCamAtVel.y);
PRINTF("WAY_SPD Z = %f\n", this->subCamAtVel.z);
- if ((this->timers[3] > 190) && !GET_EVENTCHKINF(EVENTCHKINF_73)) {
+ if ((this->timers[3] > 190) && !GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
Audio_PlaySfxGeneral(NA_SE_EN_DODO_K_ROLL - SFX_FLAG, &this->actor.projectedPos, 4,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
@@ -486,7 +488,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
if (this->timers[3] == 160) {
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_FIRE_BOSS);
}
- if ((this->timers[3] == 130) && !GET_EVENTCHKINF(EVENTCHKINF_73)) {
+ if ((this->timers[3] == 130) && !GET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gVolvagiaTitleCardTex),
160, 180, 128, 40);
}
@@ -539,7 +541,7 @@ void BossFd_Fly(BossFd* this, PlayState* play) {
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
this->actionFunc = BossFd_Wait;
this->handoffSignal = FD2_SIGNAL_GROUND;
- SET_EVENTCHKINF(EVENTCHKINF_73);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_VOLVAGIA_BATTLE);
}
break;
}
diff --git a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
index d28e4e031d..9b9fd17c75 100644
--- a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
+++ b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c
@@ -10,7 +10,9 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum BossFd2CutsceneState {
/* 0 */ DEATH_START,
diff --git a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
index 3266f61006..a4bc08270e 100644
--- a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
+++ b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
@@ -10,7 +10,9 @@
#include "assets/objects/object_ganon_anime2/object_ganon_anime2.h"
#include "assets/scenes/dungeons/ganon_boss/ganon_boss_scene.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void BossGanon_Init(Actor* thisx, PlayState* play2);
void BossGanon_Destroy(Actor* thisx, PlayState* play);
@@ -578,7 +580,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
Play_ChangeCameraStatus(play, this->csCamIndex, CAM_STAT_ACTIVE);
this->csCamFov = 60.0f;
- if (GET_EVENTCHKINF(EVENTCHKINF_78)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE)) {
// watched cutscene already, skip most of it
this->csState = 17;
this->csTimer = 0;
@@ -1096,12 +1098,12 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
gSegments[6] =
VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[Object_GetSlot(&play->objectCtx, OBJECT_GANON)].segment);
- if (!GET_EVENTCHKINF(EVENTCHKINF_78)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGanondorfTitleCardTex),
160, 180, 128, 40);
}
- SET_EVENTCHKINF(EVENTCHKINF_78);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_GANONDORF_BATTLE);
}
if (this->csTimer >= 20) {
diff --git a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
index 8255e36d0b..53efb2bad5 100644
--- a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
+++ b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
@@ -9,7 +9,9 @@
#include "assets/objects/object_geff/object_geff.h"
#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
#define BOSS_GANON2_EFFECT_COUNT 100
diff --git a/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c b/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
index 4a8842ce8e..7473f8d2d8 100644
--- a/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
+++ b/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
@@ -12,7 +12,9 @@
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum BossGanondrofDeathState {
/* 0 */ NOT_DEAD,
diff --git a/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c b/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
index de21070a97..a2d5a34db4 100644
--- a/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
+++ b/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c
@@ -4,7 +4,9 @@
#include "overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
// IRIS_FOLLOW: gohma looks towards the player (iris rotation)
// BONUS_IFRAMES: gain invincibility frames when the player does something (throwing things?), or
@@ -682,7 +684,7 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
// entrance of the boss room
if (fabsf(player->actor.world.pos.x - 150.0f) < 60.0f &&
fabsf(player->actor.world.pos.z - 350.0f) < 60.0f) {
- if (GET_EVENTCHKINF(EVENTCHKINF_70)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
BossGoma_SetupEncounterState4(this, play);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_SHUTTER, 164.72f, -480.0f,
397.68002f, 0, -0x705C, 0, DOORSHUTTER_PARAMS(SHUTTER_GOHMA_BLOCK, 0));
@@ -920,13 +922,13 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
if (Animation_OnFrame(&this->skelanime, 40.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_CRY1);
- if (!GET_EVENTCHKINF(EVENTCHKINF_70)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGohmaTitleCardTex),
160, 180, 128, 40);
}
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
- SET_EVENTCHKINF(EVENTCHKINF_70);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE);
}
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
diff --git a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
index df146be4a2..3ad6c417b7 100644
--- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
+++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c
@@ -13,7 +13,9 @@
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"pal-1.0:128 pal-1.1:128"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
#define MO_WATER_LEVEL(play) play->colCtx.colHeader->waterBoxes[0].ySurface
@@ -362,7 +364,7 @@ void BossMo_Init(Actor* thisx, PlayState* play2) {
MO_WATER_LEVEL(play) = -500;
return;
}
- if (GET_EVENTCHKINF(EVENTCHKINF_74)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_MORPHA_BATTLE)) {
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
this->tentMaxAngle = 5.0f;
this->timers[0] = 50;
@@ -1432,7 +1434,7 @@ void BossMo_IntroCs(BossMo* this, PlayState* play) {
if (this->timers[2] == 130) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gMorphaTitleCardTex), 160,
180, 128, 40);
- SET_EVENTCHKINF(EVENTCHKINF_74);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_MORPHA_BATTLE);
}
break;
case MO_INTRO_FINISH:
diff --git a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
index 95d7609c70..ea77056756 100644
--- a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
+++ b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
@@ -14,8 +14,9 @@
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"pal-1.0:128 pal-1.1:128"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
#define vParity actionVar
#define vVanish actionVar
@@ -382,7 +383,7 @@ void BossSst_HeadSetupIntro(BossSst* this, PlayState* play) {
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_WAIT);
Play_ChangeCameraStatus(play, sSubCamId, CAM_STAT_ACTIVE);
Math_Vec3f_Copy(&sSubCamAt, &player->actor.world.pos);
- if (GET_EVENTCHKINF(EVENTCHKINF_77)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
sSubCamEye.z = ROOM_CENTER_Z - 100.0f;
}
@@ -418,7 +419,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
Play_ChangeCameraStatus(play, sSubCamId, CAM_STAT_WAIT);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
Play_ClearCamera(play, sSubCamId);
- SET_EVENTCHKINF(EVENTCHKINF_77);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE);
BossSst_HeadSetupNeutral(this);
this->colliderJntSph.base.ocFlags1 |= OC1_ON;
sHands[LEFT]->colliderJntSph.base.ocFlags1 |= OC1_ON;
@@ -441,7 +442,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
this->ready = true;
Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150);
Actor_PlaySfx(&sFloor->dyna.actor, NA_SE_EN_SHADEST_TAIKO_HIGH);
- } else if (GET_EVENTCHKINF(EVENTCHKINF_77)) {
+ } else if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
//! @bug This condition assumes that the second bounce on the ground will occur before frame 545 on the
//! timer. However, it is possible to delay Player's descent to the ground by, for example, jumpslashing
//! on the last possible frame before the cutscene takes control. This delays Player's fall to the
@@ -574,7 +575,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
}
if (this->timer <= 198) {
revealStateTimer = 198 - this->timer;
- if (GET_EVENTCHKINF(EVENTCHKINF_77) && (revealStateTimer <= 44)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE) && (revealStateTimer <= 44)) {
sSubCamAt.x += 492.0f * 0.01f;
sSubCamAt.y += 200.0f * 0.01f;
sSubCamEye.x -= 80.0f * 0.01f;
@@ -603,7 +604,7 @@ void BossSst_HeadIntro(BossSst* this, PlayState* play) {
sSubCamEye.y += 125.0f * 0.01f;
sSubCamEye.z -= 350.0f * 0.01f;
} else if (revealStateTimer == 85) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_77)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BONGO_BONGO_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gBongoTitleCardTex),
160, 180, 128, 40);
}
diff --git a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
index 61cac2ec1d..110c3325e9 100644
--- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
+++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c
@@ -3,7 +3,9 @@
#include "assets/objects/object_tw/object_tw.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum TwEffType {
/* 0 */ TWEFF_NONE,
@@ -513,7 +515,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
this->actor.naviEnemyId = NAVI_ENEMY_TWINROVA_KOTAKE;
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaKotakeSkel, &gTwinrovaKotakeKoumeFlyAnim, NULL, NULL, 0);
- if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
// began twinrova battle
BossTw_SetupFlyTo(this, play);
this->actor.world.pos.x = -600.0f;
@@ -531,7 +533,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
this->actor.naviEnemyId = NAVI_ENEMY_TWINROVA_KOUME;
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaKoumeSkel, &gTwinrovaKotakeKoumeFlyAnim, NULL, NULL, 0);
- if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
// began twinrova battle
BossTw_SetupFlyTo(this, play);
this->actor.world.pos.x = 600.0f;
@@ -553,7 +555,7 @@ void BossTw_Init(Actor* thisx, PlayState* play2) {
SkelAnime_InitFlex(play, &this->skelAnime, &gTwinrovaSkel, &gTwinrovaTPoseAnim, NULL, NULL, 0);
Animation_MorphToLoop(&this->skelAnime, &gTwinrovaTPoseAnim, -3.0f);
- if (GET_EVENTCHKINF(EVENTCHKINF_75)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE)) {
// began twinrova battle
BossTw_SetupWait(this, play);
} else {
@@ -2217,7 +2219,7 @@ void BossTw_TwinrovaIntroCS(BossTw* this, PlayState* play) {
play->envCtx.lightBlend = 0.0f;
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gTwinrovaTitleCardTex), 160,
180, 128, 40);
- SET_EVENTCHKINF(EVENTCHKINF_75);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_TWINROVA_BATTLE);
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_BOSS);
}
diff --git a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
index cac3a21812..fa9448d126 100644
--- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
+++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c
@@ -12,7 +12,9 @@
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
#define GET_BODY(this) ((BossVa*)(this)->actor.parent)
#define vaGorePulse offset.x
@@ -640,7 +642,7 @@ void BossVa_Init(Actor* thisx, PlayState* play2) {
} else {
this->actor.colChkInfo.damageTable = sDamageTable;
sPhase2Timer = 0xFFFF;
- if (GET_EVENTCHKINF(EVENTCHKINF_76)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE)) {
sCsState = INTRO_CALL_BARI;
sDoorState = 100;
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
@@ -975,7 +977,7 @@ void BossVa_BodyIntro(BossVa* this, PlayState* play) {
sSubCamAtNext.y = 140.0f;
sSubCamAtNext.z = -200.0f;
- if (!GET_EVENTCHKINF(EVENTCHKINF_76)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gBarinadeTitleCardTex),
160, 180, 128, 40);
}
@@ -1017,7 +1019,7 @@ void BossVa_BodyIntro(BossVa* this, PlayState* play) {
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_7);
sCsState++;
- SET_EVENTCHKINF(EVENTCHKINF_76);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_BARINADE_BATTLE);
player->actor.shape.rot.y = player->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000;
}
break;
diff --git a/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c b/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
index 1887f64672..7657cf7432 100644
--- a/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
+++ b/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c
@@ -11,7 +11,7 @@
#include "assets/objects/object_gnd_magic/object_gnd_magic.h"
#include "overlays/actors/ovl_Eff_Dust/z_eff_dust.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void Demo6K_Init(Actor* thisx, PlayState* play);
void Demo6K_Destroy(Actor* thisx, PlayState* play);
@@ -162,7 +162,7 @@ void Demo6K_Init(Actor* thisx, PlayState* play) {
case 17:
case 18:
case 19:
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->drawFunc = func_8096865C;
this->initActionFunc = func_80967410;
this->flags |= 1;
diff --git a/src/overlays/actors/ovl_Demo_Du/z_demo_du.c b/src/overlays/actors/ovl_Demo_Du/z_demo_du.c
index 4323de1380..a5e7139f07 100644
--- a/src/overlays/actors/ovl_Demo_Du/z_demo_du.c
+++ b/src/overlays/actors/ovl_Demo_Du/z_demo_du.c
@@ -4,7 +4,7 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef void (*DemoDuActionFunc)(DemoDu*, PlayState*);
typedef void (*DemoDuDrawFunc)(Actor*, PlayState*);
@@ -201,7 +201,7 @@ void DemoDu_CsFireMedallion_AdvanceTo01(DemoDu* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->updateIndex = CS_FIREMEDALLION_SUBSCENE(1);
- play->csCtx.script = D_8096C1A4;
+ play->csCtx.script = gFireMedallionCs;
gSaveContext.cutsceneTrigger = 2;
Item_Give(play, ITEM_MEDALLION_FIRE);
diff --git a/src/overlays/actors/ovl_Demo_Du/z_demo_du_cutscene_data.inc.c b/src/overlays/actors/ovl_Demo_Du/z_demo_du_cutscene_data.inc.c
index 37506612a3..06dbb35c11 100644
--- a/src/overlays/actors/ovl_Demo_Du/z_demo_du_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_Demo_Du/z_demo_du_cutscene_data.inc.c
@@ -2,11 +2,11 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_8096C1A4[] = {
- CS_BEGIN_CUTSCENE(31, 3000),
+static CutsceneData gFireMedallionCs[] = {
+ CS_HEADER(31, 3000),
CS_UNK_DATA_LIST(0x00000020, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(31, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_6_0, 5),
CS_ACTOR_CUE(0x0001, 0, 546, 0x0000, 0x0000, 0x0000, 0, 216, -10, 0, 216, -10, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 546, 547, 0x0000, 0x0000, 0x0000, 0, 216, -10, 0, 216, -10, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 547, 616, 0x0000, 0x0000, 0x0000, 0, 216, -10, 0, 216, -10, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -16,21 +16,21 @@ static CutsceneData D_8096C1A4[] = {
CS_PLAYER_CUE(PLAYER_CUEID_13, 0, 280, 0x0000, 0x6AAA, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 280, 531, 0x0000, 0x6AAA, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_19, 531, 1716, 0x0000, 0xEAAA, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(41, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_2_2, 3),
CS_ACTOR_CUE(0x0001, 0, 170, 0x0000, 0x0000, 0x0000, 98, 6, -169, 98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 170, 465, 0x0000, 0x0000, 0x0000, 98, 6, -169, 98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 465, 2915, 0x0000, 0x0000, 0x0000, 98, 6, -169, 98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(49, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_7_0, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, -16, -121, 0, -16, -121, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 530, 539),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 540, 570),
CS_LIGHT_SETTING_LIST(2),
CS_LIGHT_SETTING(0x0000, 0, 10, 0x0000, 0x00000000, 0xFFFFFFDC, 0x00000000, 0x00000018, 0xFFFFFFDC, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000),
CS_LIGHT_SETTING(0x0000, 10, 3000, 0x0000, 0x00000000, 0xFFFFFFDC, 0x00000000, 0x00000018, 0xFFFFFFDC, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(39, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_5, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, 0, -2, 0, 0, -2, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 805, 835),
- CS_ACTOR_CUE_LIST(62, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 1),
CS_ACTOR_CUE(0x0004, 0, 3000, 0x0000, 0x0000, 0x0000, 32, 80, -51, 32, 80, -51, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_DESTINATION(CS_DEST_DEATH_MOUNTAIN_CRATER_FROM_CHAMBER_OF_SAGES, 905, 1030),
CS_START_SEQ_LIST(1),
@@ -39,15 +39,15 @@ static CutsceneData D_8096C1A4[] = {
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 500, 550, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC3, 0x0000006E, 0x00000000, 0xFFFFFFC3, 0x0000006E),
CS_TEXT_LIST(10),
CS_TEXT_NONE(0, 310),
- CS_TEXT(0x303C, 310, 323, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x303C, 310, 323, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(323, 344),
- CS_TEXT(0x3045, 344, 394, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x3045, 344, 394, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(394, 415),
- CS_TEXT(0x3046, 415, 465, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x3046, 415, 465, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(465, 800),
- CS_TEXT(0x003C, 800, 805, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x003C, 800, 805, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(805, 865),
- CS_TEXT(0x303D, 865, 875, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x303D, 865, 875, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_CAM_EYE_SPLINE(0, 1361),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4271999A, 60.4f), -85, 3211, 795, 0x00C6),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4271999A, 60.4f), -85, 3211, 795, 0x00C8),
@@ -182,6 +182,6 @@ static CutsceneData D_8096C1A4[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x013D),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x013F),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x002E),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c b/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c
index 0d6ba9ed5d..3f19529df0 100644
--- a/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c
+++ b/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c
@@ -37,7 +37,7 @@
#include "assets/objects/object_bba/object_bba.h"
#include "assets/objects/object_ane/object_ane.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DemoEc_Init(Actor* thisx, PlayState* play);
void DemoEc_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
index 2a3e8c4531..9ed730455f 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -11,7 +11,7 @@
#include "assets/objects/object_efc_tw/object_efc_tw.h"
#include "assets/objects/object_gi_jewel/object_gi_jewel.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoEffect_Init(Actor* thisx, PlayState* play2);
void DemoEffect_Destroy(Actor* thisx, PlayState* play);
@@ -1541,8 +1541,8 @@ void DemoEffect_UpdateJewelChild(DemoEffect* this, PlayState* play) {
if (play->csCtx.state && play->csCtx.actorCues[this->cueChannel]) {
switch (play->csCtx.actorCues[this->cueChannel]->id) {
case 3:
- if (GET_EVENTCHKINF(EVENTCHKINF_4B)) {
- SET_EVENTCHKINF(EVENTCHKINF_4B);
+ if (GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) {
+ SET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME);
}
DemoEffect_MoveJewelActivateDoorOfTime(this, play);
if ((play->gameplayFrames & 1) == 0) {
@@ -1575,7 +1575,7 @@ void DemoEffect_UpdateJewelChild(DemoEffect* this, PlayState* play) {
}
if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) {
hasCue = (play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.actorCues[this->cueChannel] != NULL);
if (!hasCue) {
diff --git a/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c b/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c
index 94bda4604b..caae4cff14 100644
--- a/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c
+++ b/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c
@@ -8,7 +8,7 @@
#include "terminal.h"
#include "assets/objects/object_fhg/object_fhg.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum DemoExtAction {
/* 0x00 */ EXT_WAIT,
diff --git a/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c b/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c
index a7087e8975..f0b240070d 100644
--- a/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c
+++ b/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_geff/object_geff.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoGeff_Init(Actor* thisx, PlayState* play);
void DemoGeff_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c b/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c
index d69f207b59..ae85f3ce89 100644
--- a/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c
+++ b/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_gj/object_gj.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoGj_Init(Actor* thisx, PlayState* play);
void DemoGj_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Go/z_demo_go.c b/src/overlays/actors/ovl_Demo_Go/z_demo_go.c
index 2a6ac15c52..01c173dcc4 100644
--- a/src/overlays/actors/ovl_Demo_Go/z_demo_go.c
+++ b/src/overlays/actors/ovl_Demo_Go/z_demo_go.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_oF1d_map/object_oF1d_map.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DemoGo_Init(Actor* thisx, PlayState* play);
void DemoGo_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c b/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c
index c81aa63e65..977a0b9135 100644
--- a/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c
+++ b/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c
@@ -7,7 +7,7 @@
#include "terminal.h"
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoGt_Init(Actor* thisx, PlayState* play);
void DemoGt_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c b/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c
index 88cdaa7203..82db3d7fa6 100644
--- a/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c
+++ b/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c
@@ -2,7 +2,7 @@
#include "terminal.h"
#include "assets/objects/object_ik/object_ik.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DemoIk_Init(Actor* thisx, PlayState* play);
void DemoIk_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Im/z_demo_im.c b/src/overlays/actors/ovl_Demo_Im/z_demo_im.c
index ac9afd8d84..7e359f6625 100644
--- a/src/overlays/actors/ovl_Demo_Im/z_demo_im.c
+++ b/src/overlays/actors/ovl_Demo_Im/z_demo_im.c
@@ -11,7 +11,7 @@
#include "assets/objects/object_im/object_im.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void DemoIm_Init(Actor* thisx, PlayState* play);
void DemoIm_Destroy(Actor* thisx, PlayState* play);
@@ -333,7 +333,7 @@ void func_8098544C(DemoIm* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->action = 1;
- play->csCtx.script = D_8098786C;
+ play->csCtx.script = gShadowMedallionCs;
gSaveContext.cutsceneTrigger = 2;
Item_Give(play, ITEM_MEDALLION_SHADOW);
player->actor.world.rot.y = player->actor.shape.rot.y = this->actor.world.rot.y + 0x8000;
@@ -841,7 +841,7 @@ s32 func_809869F8(DemoIm* this, PlayState* play) {
f32 playerPosX = player->actor.world.pos.x;
f32 thisPosX = this->actor.world.pos.x;
- if ((thisPosX - (kREG(16) + 30.0f) > playerPosX) && !(this->actor.flags & ACTOR_FLAG_6)) {
+ if ((thisPosX - (kREG(16) + 30.0f) > playerPosX) && !(this->actor.flags & ACTOR_FLAG_INSIDE_CULLING_VOLUME)) {
return true;
} else {
return false;
diff --git a/src/overlays/actors/ovl_Demo_Im/z_demo_im_cutscene_data.inc.c b/src/overlays/actors/ovl_Demo_Im/z_demo_im_cutscene_data.inc.c
index 46b08bc125..f56097680c 100644
--- a/src/overlays/actors/ovl_Demo_Im/z_demo_im_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_Demo_Im/z_demo_im_cutscene_data.inc.c
@@ -2,11 +2,11 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_8098786C[] = {
- CS_BEGIN_CUTSCENE(32, 3000),
+static CutsceneData gShadowMedallionCs[] = {
+ CS_HEADER(32, 3000),
CS_UNK_DATA_LIST(0x00000020, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(31, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_6_0, 5),
CS_ACTOR_CUE(0x0001, 0, 697, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 697, 698, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 698, 768, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -16,11 +16,11 @@ static CutsceneData D_8098786C[] = {
CS_PLAYER_CUE(PLAYER_CUEID_13, 0, 300, 0x0000, 0x0000, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 300, 661, 0x0000, 0xEAAA, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_19, 661, 1934, 0x0000, 0x6AAA, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(44, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_5_0, 3),
CS_ACTOR_CUE(0x0001, 0, 145, 0x0000, 0x0000, 0x0000, -97, 6, 169, -97, 6, 169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 145, 615, 0x0000, 0x0000, 0x0000, -97, 6, 169, -97, 6, 169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 615, 1906, 0x0000, 0x0000, 0x0000, -97, 6, 169, -97, 6, 169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(49, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_7_0, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, -22, 0, -55, -22, 0, -55, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_LIGHT_SETTING_LIST(2),
CS_LIGHT_SETTING(0x0001, 0, 10, 0x0000, 0x00000000, 0xFFFFFFFE, 0x00000000, 0x0000000D, 0xFFFFFFFE, 0x00000000, 0x0000000D, 0x00000000, 0x00000000, 0x00000000),
@@ -28,26 +28,26 @@ static CutsceneData D_8098786C[] = {
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 694, 724),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 960, 990),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 683, 692),
- CS_ACTOR_CUE_LIST(62, 2),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 2),
CS_ACTOR_CUE(0x0001, 0, 10, 0x0000, 0x0000, 0x0000, 64, 80, 130, 64, 80, 130, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 10, 3000, 0x0000, 0x0000, 0x0000, 64, 80, 130, 64, 80, 130, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_MEDALLION_GET, 770, 771, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC9, 0x0000005C, 0x00000000, 0xFFFFFFC9, 0x0000005C),
CS_TEXT_LIST(14),
CS_TEXT_NONE(0, 340),
- CS_TEXT(0x5022, 340, 353, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x5022, 340, 353, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(353, 374),
- CS_TEXT(0x5025, 374, 404, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x5025, 374, 404, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(404, 424),
- CS_TEXT(0x502B, 424, 474, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x502B, 424, 474, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(474, 494),
- CS_TEXT(0x502C, 494, 543, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x502C, 494, 543, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(543, 564),
- CS_TEXT(0x5026, 564, 613, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x5026, 564, 613, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(613, 955),
- CS_TEXT(0x0041, 955, 959, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x0041, 955, 959, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(959, 1020),
- CS_TEXT(0x5023, 1020, 1029, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x5023, 1020, 1029, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_DESTINATION(CS_DEST_GRAVEYARD_FROM_CHAMBER_OF_SAGES, 1060, 1061),
CS_FADE_OUT_SEQ_LIST(1),
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 673, 723, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC1, 0x00000058, 0x00000000, 0xFFFFFFC1, 0x00000058),
@@ -217,6 +217,6 @@ static CutsceneData D_8098786C[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0xFFFF),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x0000),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0xE6A0),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
index caea0b981f..a1253dbae6 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -7,9 +7,9 @@
#include "assets/objects/object_toki_objects/object_toki_objects.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.2:128"
+ "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoKankyo_Init(Actor* thisx, PlayState* play);
void DemoKankyo_Destroy(Actor* thisx, PlayState* play);
@@ -237,7 +237,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
case DEMOKANKYO_DOOR_OF_TIME:
this->actor.scale.x = this->actor.scale.y = this->actor.scale.z = 1.0f;
this->unk_150[0].unk_18 = 0.0f;
- if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_TOKI, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0x0000);
} else {
@@ -424,7 +424,7 @@ void DemoKankyo_UpdateDoorOfTime(DemoKankyo* this, PlayState* play) {
this->unk_150[0].unk_18 += 1.0f;
if (this->unk_150[0].unk_18 >= 102.0f) {
Actor_PlaySfx(&this->actor, NA_SE_EV_STONEDOOR_STOP);
- SET_EVENTCHKINF(EVENTCHKINF_4B);
+ SET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME);
Actor_Kill(this->actor.child);
DemoKankyo_SetupAction(this, DemoKankyo_KillDoorOfTimeCollision);
}
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data1.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data1.c
index f46747a1ac..3a0a95a907 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data1.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data1.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gAdultWarpInCS[] = {
- CS_BEGIN_CUTSCENE(2, 164),
+ CS_HEADER(2, 164),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 135),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA7, 60.324856f), 31, 79, 59, 0x010F),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA7, 60.324856f), 31, 78, 60, 0x0120),
@@ -20,6 +20,6 @@ CutsceneData gAdultWarpInCS[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42714CA7, 60.324856f), 57, 101, 21, 0x01F6),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42714CA7, 60.324856f), 57, 101, 21, 0x0207),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42714CA7, 60.324856f), 57, 101, 21, 0x0000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data2.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data2.c
index b98b849922..2a6e3f3e5d 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data2.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data2.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gAdultWarpOutCS[] = {
- CS_BEGIN_CUTSCENE(5, 1167),
+ CS_HEADER(5, 1167),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1138),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA8, 60.32486f), 31, 82, 61, 0x20BA),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA8, 60.32486f), 31, 82, 61, 0xA1BC),
@@ -26,6 +26,6 @@ CutsceneData gAdultWarpOutCS[] = {
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 30, 35),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 95, 97, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFE3, 0xFFFFFFF9, 0x00000000, 0xFFFFFFE3, 0xFFFFFFF9, 0x00000000, 0x00000000, 0x00000000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data3.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data3.c
index 512eb4749a..e742384ec2 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data3.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data3.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gAdultWarpInToTCS[] = {
- CS_BEGIN_CUTSCENE(2, 118),
+ CS_HEADER(2, 118),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 89),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x428EA647, 71.32476f), 53, 53, 40, 0x010F),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), 53, 53, 40, 0x0120),
@@ -20,6 +20,6 @@ CutsceneData gAdultWarpInToTCS[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x428D3328, 70.599915f), 29, 71, 25, 0x01F6),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x428D3328, 70.599915f), 29, 71, 25, 0x0207),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x428D3328, 70.599915f), 29, 71, 25, 0x0047),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data4.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data4.c
index ac79db6258..53f2b5133a 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data4.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data4.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gAdultWarpOutToTCS[] = {
- CS_BEGIN_CUTSCENE(5, 1120),
+ CS_HEADER(5, 1120),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 36, 46),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 30, 35),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1091),
@@ -20,6 +20,6 @@ CutsceneData gAdultWarpOutToTCS[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42714CA8, 60.32486f), 24, 66, 29, 0x29D0),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 95, 96, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFEE, 0xFFFFFFF3, 0x00000000, 0xFFFFFFEE, 0xFFFFFFF3, 0x00000000, 0x00000000, 0x00000000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data5.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data5.c
index c0af714eba..e1092b34dd 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data5.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data5.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gChildWarpInCS[] = {
- CS_BEGIN_CUTSCENE(2, 1164),
+ CS_HEADER(2, 1164),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1135),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA7, 60.324856f), 31, 68, 59, 0x010F),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42714CA7, 60.324856f), 32, 68, 60, 0x0120),
@@ -22,6 +22,6 @@ CutsceneData gChildWarpInCS[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x42714CA7, 60.324856f), 57, 86, 21, 0x0207),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42714CA7, 60.324856f), 57, 86, 21, 0xB46C),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42714CA7, 60.324856f), 57, 86, 21, 0x05BC),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data6.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data6.c
index 17db7679a1..9e8a7c6bc6 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data6.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data6.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gChildWarpOutCS[] = {
- CS_BEGIN_CUTSCENE(5, 1167),
+ CS_HEADER(5, 1167),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 36, 46),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 30, 35),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1138),
@@ -26,6 +26,6 @@ CutsceneData gChildWarpOutCS[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42714CA9, 60.324863f), 15, 42, 30, 0xEEC0),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 95, 96, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFEF, 0xFFFFFFCD, 0x00000000, 0xFFFFFFEF, 0xFFFFFFCD, 0x00000000, 0x00000000, 0x00000000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data7.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data7.c
index f5ce4770a2..3a718366c3 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data7.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data7.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gChildWarpInToTCS[] = {
- CS_BEGIN_CUTSCENE(2, 1118),
+ CS_HEADER(2, 1118),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1089),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x428EA647, 71.32476f), 53, 53, 40, 0x010F),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), 53, 53, 40, 0x0120),
@@ -22,6 +22,6 @@ CutsceneData gChildWarpInToTCS[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x428D3328, 70.599915f), 29, 58, 25, 0x0207),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x428D3328, 70.599915f), 29, 58, 25, 0x0000),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x428D3328, 70.599915f), 29, 58, 25, 0x0000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data8.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data8.c
index e61672a66a..84e12ec7a8 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data8.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo_cutscene_data8.c
@@ -3,7 +3,7 @@
// clang-format off
CutsceneData gChildWarpOutToTCS[] = {
- CS_BEGIN_CUTSCENE(5, 1120),
+ CS_HEADER(5, 1120),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 36, 46),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 30, 35),
CS_CAM_EYE_SPLINE_REL_TO_PLAYER(0, 1091),
@@ -20,6 +20,6 @@ CutsceneData gChildWarpOutToTCS[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42714CAA, 60.324867f), 24, 52, 29, 0x20DC),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 95, 96, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFDF, 0x00000019, 0x00000000, 0xFFFFFFDF, 0x00000019, 0x00000000, 0x00000000, 0x00000000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c b/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
index 21f7a4c763..8c6ded1651 100644
--- a/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
+++ b/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
#include "assets/scenes/dungeons/ganontika/ganontika_scene.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoKekkai_Init(Actor* thisx, PlayState* play);
void DemoKekkai_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c b/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c
index 63ab50cee7..36e521701b 100644
--- a/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c
+++ b/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c
@@ -11,7 +11,7 @@
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DemoSa_Init(Actor* thisx, PlayState* play);
void DemoSa_Destroy(Actor* thisx, PlayState* play);
@@ -261,7 +261,7 @@ void func_8098E960(DemoSa* this, PlayState* play) {
if ((gSaveContext.chamberCutsceneNum == CHAMBER_CS_FOREST) && !IS_CUTSCENE_LAYER) {
player = GET_PLAYER(play);
this->action = 1;
- play->csCtx.script = D_8099010C;
+ play->csCtx.script = gForestMedallionCs;
gSaveContext.cutsceneTrigger = 2;
Item_Give(play, ITEM_MEDALLION_FOREST);
player->actor.world.rot.y = player->actor.shape.rot.y = this->actor.world.rot.y + 0x8000;
diff --git a/src/overlays/actors/ovl_Demo_Sa/z_demo_sa_cutscene_data.inc.c b/src/overlays/actors/ovl_Demo_Sa/z_demo_sa_cutscene_data.inc.c
index 4f0e530ac3..67edd6cb9f 100644
--- a/src/overlays/actors/ovl_Demo_Sa/z_demo_sa_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_Demo_Sa/z_demo_sa_cutscene_data.inc.c
@@ -2,11 +2,11 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_8099010C[] = {
- CS_BEGIN_CUTSCENE(29, 3001),
+static CutsceneData gForestMedallionCs[] = {
+ CS_HEADER(29, 3001),
CS_UNK_DATA_LIST(0x00000020, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(31, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_6_0, 5),
CS_ACTOR_CUE(0x0001, 0, 612, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 612, 613, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 613, 684, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -16,29 +16,29 @@ static CutsceneData D_8099010C[] = {
CS_PLAYER_CUE(PLAYER_CUEID_13, 0, 261, 0x0000, 0x0000, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 261, 600, 0x0000, 0x9555, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_19, 600, 1243, 0x0000, 0x1555, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(43, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_4_2, 3),
CS_ACTOR_CUE(0x0001, 0, 165, 0x0000, 0x0000, 0x0000, -98, 6, -169, -98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 165, 466, 0x0000, 0x0000, 0x0000, -98, 6, -169, -98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 466, 3001, 0x0000, 0x0000, 0x0000, -98, 6, -169, -98, 6, -169, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 590, 607),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 617, 647),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 875, 905),
- CS_ACTOR_CUE_LIST(49, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_7_0, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, -98, 0, 98, -98, 0, 98, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(62, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 1),
CS_ACTOR_CUE(0x0004, 0, 3000, 0x0000, 0x0000, 0x0000, -35, 97, -60, -35, 97, -60, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_DESTINATION(CS_DEST_KOKIRI_FOREST_FROM_CHAMBER_OF_SAGES, 974, 1050),
CS_TEXT_LIST(10),
CS_TEXT_NONE(0, 303),
- CS_TEXT(0x106A, 303, 323, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x106A, 303, 323, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(323, 344),
- CS_TEXT(0x108F, 344, 394, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x108F, 344, 394, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(394, 415),
- CS_TEXT(0x1090, 415, 465, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x1090, 415, 465, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(465, 871),
- CS_TEXT(0x003E, 871, 875, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x003E, 871, 875, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(875, 936),
- CS_TEXT(0x106B, 936, 946, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x106B, 936, 946, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_MEDALLION_GET, 686, 687, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC5, 0x00000057, 0x00000000, 0xFFFFFFC5, 0x00000057),
CS_FADE_OUT_SEQ_LIST(1),
@@ -179,6 +179,6 @@ static CutsceneData D_8099010C[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x006F),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x006D),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x0065),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
index 2b373bec30..d5cb025e46 100644
--- a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
+++ b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
@@ -6,7 +6,7 @@
#include "z_demo_shd.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void DemoShd_Init(Actor* thisx, PlayState* play);
void DemoShd_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
index d71810b23d..67adb46e78 100644
--- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
+++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c
@@ -2,7 +2,7 @@
#include "overlays/actors/ovl_En_Box/z_en_box.h"
#include "assets/objects/object_box/object_box.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DemoTreLgt_Init(Actor* thisx, PlayState* play);
void DemoTreLgt_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
index b2b735c3ad..40f4878831 100644
--- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
+++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
@@ -72,7 +72,7 @@ void DoorAna_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
} else {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
Actor_SetScale(&this->actor, 0);
DoorAna_SetupAction(this, DoorAna_WaitClosed);
@@ -99,7 +99,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play) {
// opening with song of storms
if (this->actor.xyzDistToPlayerSq < SQ(200.0f) && CutsceneFlags_Get(play, 5)) {
openGrotto = true;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
} else {
// bombing/hammering open a grotto
@@ -131,7 +131,8 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
if ((this->actor.attentionRangeType != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(player->stateFlags1 & PLAYER_STATE1_31) && (player->av1.actionVar1 == 0)) {
destinationIdx = PARAMS_GET_U(this->actor.params, 12, 3) - 1;
- Play_SetupRespawnPoint(play, RESPAWN_MODE_RETURN, 0x4FF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_RETURN,
+ PLAYER_PARAMS(PLAYER_START_MODE_GROTTO, PLAYER_START_BG_CAM_DEFAULT));
gSaveContext.respawn[RESPAWN_MODE_RETURN].pos.y = this->actor.world.pos.y;
gSaveContext.respawn[RESPAWN_MODE_RETURN].yaw = this->actor.home.rot.y;
gSaveContext.respawn[RESPAWN_MODE_RETURN].data = PARAMS_GET_U(this->actor.params, 0, 16);
diff --git a/src/overlays/actors/ovl_Door_Killer/z_door_killer.c b/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
index 01e2762657..0f2d3163ec 100644
--- a/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
+++ b/src/overlays/actors/ovl_Door_Killer/z_door_killer.c
@@ -11,7 +11,7 @@
#include "assets/objects/object_haka_door/object_haka_door.h"
#include "assets/objects/object_door_killer/object_door_killer.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum DoorKillerBehaviour {
/* 0 */ DOOR_KILLER_DOOR,
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index 1cfb4255d3..0bb5e1074a 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -26,7 +26,7 @@
#include "assets/objects/object_demo_kekkai/object_demo_kekkai.h"
#include "assets/objects/object_ouke_haka/object_ouke_haka.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void DoorShutter_Init(Actor* thisx, PlayState* play2);
void DoorShutter_Destroy(Actor* thisx, PlayState* play);
@@ -273,9 +273,9 @@ static s8 sTypeStyles[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
};
typedef struct DoorShutterSceneInfo {
@@ -457,7 +457,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
} else if (styleType == DOORSHUTTER_STYLE_JABU_JABU) {
Actor_SetScale(&this->dyna.actor, 0.1f);
this->jabuDoorClosedAmount = 100;
- this->dyna.actor.uncullZoneScale = 200.0f;
+ this->dyna.actor.cullingVolumeScale = 200.0f;
Actor_SetFocus(&this->dyna.actor, 0.0f);
} else {
Actor_SetFocus(&this->dyna.actor, 60.0f);
@@ -821,7 +821,8 @@ void DoorShutter_SetupClosed(DoorShutter* this, PlayState* play) {
play->roomCtx.activeBufPage ^= 1;
}
Room_FinishRoomChange(play, &play->roomCtx);
- Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0x0EFF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN,
+ PLAYER_PARAMS(PLAYER_START_MODE_MOVE_FORWARD_SLOW, PLAYER_START_BG_CAM_DEFAULT));
}
this->isActive = false;
this->dyna.actor.velocity.y = 0.0f;
@@ -878,7 +879,7 @@ void DoorShutter_GohmaBlockFall(DoorShutter* this, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_2);
if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
DoorShutter_SetupAction(this, DoorShutter_GohmaBlockBounce);
- if (!GET_EVENTCHKINF(EVENTCHKINF_70)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_BEGAN_GOHMA_BATTLE)) {
BossGoma* parent = (BossGoma*)this->dyna.actor.parent;
this->isActive = 10;
diff --git a/src/overlays/actors/ovl_Door_Toki/z_door_toki.c b/src/overlays/actors/ovl_Door_Toki/z_door_toki.c
index e2e6ada56b..bf423a09b5 100644
--- a/src/overlays/actors/ovl_Door_Toki/z_door_toki.c
+++ b/src/overlays/actors/ovl_Door_Toki/z_door_toki.c
@@ -49,7 +49,7 @@ void DoorToki_Destroy(Actor* thisx, PlayState* play) {
void DoorToki_Update(Actor* thisx, PlayState* play) {
DoorToki* this = (DoorToki*)thisx;
- if (GET_EVENTCHKINF(EVENTCHKINF_4B)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
index b5ff0dbaaf..23ff72a00e 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -46,9 +46,9 @@ ActorProfile Door_Warp1_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 4000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 4000, ICHAIN_STOP),
};
static s16 sWarpTimerTarget;
diff --git a/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c b/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
index 3aa35ec587..ae7c4a807a 100644
--- a/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
+++ b/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c
@@ -1,7 +1,7 @@
#include "z_efc_erupc.h"
#include "assets/objects/object_efc_erupc/object_efc_erupc.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EfcErupc_Init(Actor* thisx, PlayState* play);
void EfcErupc_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
index 907f6d096d..f23a974a32 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -7,7 +7,7 @@
#include "z_eff_dust.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EffDust_Init(Actor* thisx, PlayState* play);
void EffDust_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
index f0b2937df3..a4ebdfb131 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
@@ -9,7 +9,7 @@
#include "terminal.h"
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ElfMsg_Init(Actor* thisx, PlayState* play);
void ElfMsg_Destroy(Actor* thisx, PlayState* play);
@@ -39,7 +39,7 @@ ActorProfile Elf_Msg_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_STOP),
};
void ElfMsg_SetupAction(ElfMsg* this, ElfMsgActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
index 769578d004..0f0edc34e5 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
@@ -7,7 +7,7 @@
#include "z_elf_msg2.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ElfMsg2_Init(Actor* thisx, PlayState* play);
void ElfMsg2_Destroy(Actor* thisx, PlayState* play);
@@ -38,7 +38,7 @@ ActorProfile Elf_Msg2_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_STOP),
};
void ElfMsg2_SetupAction(ElfMsg2* this, ElfMsg2ActionFunc actionFunc) {
diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c
index 9b552cc5ac..6f793ba1a3 100644
--- a/src/overlays/actors/ovl_En_Am/z_en_am.c
+++ b/src/overlays/actors/ovl_En_Am/z_en_am.c
@@ -8,7 +8,9 @@
#include "assets/objects/object_am/object_am.h"
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_CAN_PRESS_SWITCHES)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_CAN_PRESS_SWITCHES)
void EnAm_Init(Actor* thisx, PlayState* play);
void EnAm_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
index 6b493aa874..242afc095f 100644
--- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c
+++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
@@ -64,7 +64,7 @@ void EnAni_SetupAction(EnAni* this, EnAniActionFunc actionFunc) {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 850, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 850, ICHAIN_STOP),
};
void EnAni_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c b/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c
index f6742f9810..5773eb17ba 100644
--- a/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c
+++ b/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c
@@ -10,7 +10,7 @@
#include "overlays/actors/ovl_Bg_Hidan_Curtain/z_bg_hidan_curtain.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnAnubice_Init(Actor* thisx, PlayState* play);
void EnAnubice_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c b/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
index 1b2a1e0185..9e408a3350 100644
--- a/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
+++ b/src/overlays/actors/ovl_En_Anubice_Fire/z_en_anubice_fire.c
@@ -8,7 +8,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_anubice/object_anubice.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnAnubiceFire_Init(Actor* thisx, PlayState* play);
void EnAnubiceFire_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Anubice_Tag/z_en_anubice_tag.c b/src/overlays/actors/ovl_En_Anubice_Tag/z_en_anubice_tag.c
index 870ac86b15..d7a32e6b7b 100644
--- a/src/overlays/actors/ovl_En_Anubice_Tag/z_en_anubice_tag.c
+++ b/src/overlays/actors/ovl_En_Anubice_Tag/z_en_anubice_tag.c
@@ -7,7 +7,7 @@
#include "z_en_anubice_tag.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnAnubiceTag_Init(Actor* thisx, PlayState* play);
void EnAnubiceTag_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Arow_Trap/z_en_arow_trap.c b/src/overlays/actors/ovl_En_Arow_Trap/z_en_arow_trap.c
index 60b2121000..d44d380430 100644
--- a/src/overlays/actors/ovl_En_Arow_Trap/z_en_arow_trap.c
+++ b/src/overlays/actors/ovl_En_Arow_Trap/z_en_arow_trap.c
@@ -6,7 +6,7 @@
#include "z_en_arow_trap.h"
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnArowTrap_Init(Actor* thisx, PlayState* play);
void EnArowTrap_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
index 3cec8313e6..669e5ed1fb 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -8,7 +8,7 @@
#include "global.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnArrow_Init(Actor* thisx, PlayState* play);
void EnArrow_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
index d1b915ee45..d215d02cf3 100644
--- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
+++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_niw/object_niw.h"
#include "overlays/actors/ovl_En_Niw/z_en_niw.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnAttackNiw_Init(Actor* thisx, PlayState* play);
void EnAttackNiw_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ba/z_en_ba.c b/src/overlays/actors/ovl_En_Ba/z_en_ba.c
index 9662ec26ac..098980836e 100644
--- a/src/overlays/actors/ovl_En_Ba/z_en_ba.c
+++ b/src/overlays/actors/ovl_En_Ba/z_en_ba.c
@@ -7,7 +7,7 @@
#include "z_en_ba.h"
#include "assets/objects/object_bxa/object_bxa.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnBa_Init(Actor* thisx, PlayState* play);
void EnBa_Destroy(Actor* thisx, PlayState* play);
@@ -83,8 +83,8 @@ static Vec3f D_809B80E4 = { 0.01f, 0.01f, 0.01f };
static InitChainEntry sInitChain[] = {
ICHAIN_S8(naviEnemyId, NAVI_ENEMY_PARASITIC_TENTACLE, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2500, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 0, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
index 3b26ad61d2..26af25354a 100644
--- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c
+++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
@@ -8,7 +8,9 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_Bb/object_Bb.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT)
#define vBombHopPhase actionVar1
#define vTrailIdx actionVar1
diff --git a/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c b/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c
index b16cd52dbd..930eff2854 100644
--- a/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c
+++ b/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c
@@ -7,7 +7,7 @@
#include "z_en_bdfire.h"
#include "assets/objects/object_kingdodongo/object_kingdodongo.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnBdfire_Init(Actor* thisx, PlayState* play);
void EnBdfire_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
index 559305e71d..1bb808abaf 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
@@ -1,7 +1,9 @@
#include "z_en_bigokuta.h"
#include "assets/objects/object_bigokuta/object_bigokuta.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnBigokuta_Init(Actor* thisx, PlayState* play);
void EnBigokuta_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Bili/z_en_bili.c b/src/overlays/actors/ovl_En_Bili/z_en_bili.c
index 73a8addd8f..8e9eba0c60 100644
--- a/src/overlays/actors/ovl_En_Bili/z_en_bili.c
+++ b/src/overlays/actors/ovl_En_Bili/z_en_bili.c
@@ -221,7 +221,7 @@ void EnBili_SetupBurnt(EnBili* this) {
this->timer = 20;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.acFlags &= ~AC_ON;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.speed = 0.0f;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_XLU, 20);
this->actionFunc = EnBili_Burnt;
@@ -594,7 +594,7 @@ void EnBili_UpdateDamage(EnBili* this, PlayState* play) {
}
if (this->collider.elem.acHitElem->atDmgInfo.dmgFlags & DMG_ARROW) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
}
diff --git a/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c b/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c
index a42e48252a..2e1141ffea 100644
--- a/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c
+++ b/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c
@@ -7,7 +7,7 @@
#include "z_en_blkobj.h"
#include "assets/objects/object_blkobj/object_blkobj.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnBlkobj_Init(Actor* thisx, PlayState* play);
void EnBlkobj_Destroy(Actor* thisx, PlayState* play);
@@ -33,9 +33,9 @@ ActorProfile En_Blkobj_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 300, ICHAIN_STOP),
};
static Gfx sSetupOpaDL[] = {
@@ -87,7 +87,7 @@ void EnBlkobj_Wait(EnBlkobj* this, PlayState* play) {
}
void EnBlkobj_SpawnDarkLink(EnBlkobj* this, PlayState* play) {
- if (!(this->dyna.actor.flags & ACTOR_FLAG_6)) {
+ if (!(this->dyna.actor.flags & ACTOR_FLAG_INSIDE_CULLING_VOLUME)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TORCH2, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, 0, this->dyna.actor.yawTowardsPlayer, 0, 0);
EnBlkobj_SetupAction(this, EnBlkobj_DarkLinkFight);
diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
index 120bbaa1b2..a542cbfcb0 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -8,7 +8,7 @@
#include "overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnBom_Init(Actor* thisx, PlayState* play);
void EnBom_Destroy(Actor* thisx, PlayState* play);
@@ -170,7 +170,7 @@ void EnBom_Explode(EnBom* this, PlayState* play) {
Player* player;
if (this->explosionCollider.elements[0].dim.modelSphere.radius == 0) {
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
}
@@ -323,7 +323,7 @@ void EnBom_Update(Actor* thisx, PlayState* play2) {
Camera_RequestQuake(&play->mainCamera, 2, 11, 8);
thisx->params = BOMB_EXPLOSION;
this->timer = 10;
- thisx->flags |= ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
EnBom_SetupAction(this, EnBom_Explode);
}
}
diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
index bf2f41c6c1..4df7b35ce3 100644
--- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
+++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
@@ -4,8 +4,9 @@
#include "overlays/actors/ovl_En_Ex_Item/z_en_ex_item.h"
#include "assets/objects/object_bg/object_bg.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_LOCK_ON_DISABLED)
typedef enum BombchuGirlEyeMode {
/* 0 */ CHU_GIRL_EYES_ASLEEP,
diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.c b/src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.c
index 3e8ff39453..17657586c9 100644
--- a/src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.c
+++ b/src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.c
@@ -3,7 +3,7 @@
#include "overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h"
#include "overlays/actors/ovl_En_Ex_Item/z_en_ex_item.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnBomBowlPit_Init(Actor* thisx, PlayState* play);
void EnBomBowlPit_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
index f5deec7285..9f4263d8cd 100644
--- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
+++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
@@ -2,7 +2,7 @@
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define BOMBCHU_SCALE 0.01f
diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
index 87ed4120d4..34dd30010e 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_bombf/object_bombf.h"
#include "overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnBombf_Init(Actor* thisx, PlayState* play);
void EnBombf_Destroy(Actor* thisx, PlayState* play);
@@ -104,7 +104,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play) {
thisx->focus.pos = thisx->world.pos;
if (Actor_FindNearby(play, thisx, ACTOR_BG_DDAN_KD, ACTORCAT_BG, 10000.0f) != NULL) {
- thisx->flags |= ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
}
thisx->colChkInfo.cylRadius = 10.0f;
@@ -126,8 +126,8 @@ void EnBombf_Init(Actor* thisx, PlayState* play) {
EnBombf_SetupGrowBomb(this, thisx->params);
}
- thisx->uncullZoneScale += 31000.0f;
- thisx->uncullZoneForward += 31000.0f;
+ thisx->cullingVolumeScale += 31000.0f;
+ thisx->cullingVolumeDistance += 31000.0f;
}
void EnBombf_Destroy(Actor* thisx, PlayState* play) {
@@ -260,7 +260,7 @@ void EnBombf_Explode(EnBombf* this, PlayState* play) {
Player* player;
if (this->explosionCollider.elements[0].dim.modelSphere.radius == 0) {
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
}
@@ -431,7 +431,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
Camera_RequestQuake(&play->mainCamera, 2, 11, 8);
thisx->params = BOMBFLOWER_EXPLOSION;
this->timer = 10;
- thisx->flags |= ACTOR_FLAG_5;
+ thisx->flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
EnBombf_SetupAction(this, EnBombf_Explode);
}
}
diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
index 932e84f68a..982df71a03 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
@@ -8,7 +8,7 @@
#include "global.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnBoom_Init(Actor* thisx, PlayState* play);
void EnBoom_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c
index 9468fae6bb..2d7c748b47 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -135,7 +135,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
EnBox_SetupAction(this, EnBox_FallOnSwitchFlag);
this->alpha = 0;
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
} else if ((this->type == ENBOX_TYPE_ROOM_CLEAR_BIG || this->type == ENBOX_TYPE_ROOM_CLEAR_SMALL) &&
!Flags_GetClear(play, this->dyna.actor.room)) {
EnBox_SetupAction(this, EnBox_AppearOnRoomClear);
@@ -143,7 +143,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 50.0f;
this->alpha = 0;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
} else if (this->type == ENBOX_TYPE_9 || this->type == ENBOX_TYPE_10) {
EnBox_SetupAction(this, func_809C9700);
this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_DURING_OCARINA;
@@ -151,14 +151,14 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 50.0f;
this->alpha = 0;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
} else if (this->type == ENBOX_TYPE_SWITCH_FLAG_BIG && !Flags_GetSwitch(play, this->switchFlag)) {
EnBox_SetupAction(this, EnBox_AppearOnSwitchFlag);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 50.0f;
this->alpha = 0;
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
} else {
if (this->type == ENBOX_TYPE_4 || this->type == ENBOX_TYPE_6) {
this->dyna.actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
index 4a93d3f8dd..b3deb35f9e 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -139,9 +139,9 @@ void EnButte_DrawTransformationEffect(EnButte* this, PlayState* play) {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 700, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 20, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 700, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 20, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 600, ICHAIN_STOP),
};
void EnButte_Init(Actor* thisx, PlayState* play) {
@@ -154,7 +154,7 @@ void EnButte_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
if (PARAMS_GET_U(this->actor.params, 0, 1) == 1) {
- this->actor.uncullZoneScale = 200.0f;
+ this->actor.cullingVolumeScale = 200.0f;
}
SkelAnime_Init(play, &this->skelAnime, &gButterflySkel, &gButterflyAnim, this->jointTable, this->morphTable, 8);
@@ -347,7 +347,7 @@ void EnButte_FollowLink(EnButte* this, PlayState* play) {
void EnButte_SetupTransformIntoFairy(EnButte* this) {
this->timer = 9;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->skelAnime.playSpeed = 1.0f;
EnButte_ResetTransformationEffect();
this->actionFunc = EnButte_TransformIntoFairy;
diff --git a/src/overlays/actors/ovl_En_Bw/z_en_bw.c b/src/overlays/actors/ovl_En_Bw/z_en_bw.c
index 4c5c38e36a..6ab5fd6fcf 100644
--- a/src/overlays/actors/ovl_En_Bw/z_en_bw.c
+++ b/src/overlays/actors/ovl_En_Bw/z_en_bw.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_bw/object_bw.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnBw_Init(Actor* thisx, PlayState* play);
void EnBw_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Bx/z_en_bx.c b/src/overlays/actors/ovl_En_Bx/z_en_bx.c
index 91b701d0d7..efc4d4f5cf 100644
--- a/src/overlays/actors/ovl_En_Bx/z_en_bx.c
+++ b/src/overlays/actors/ovl_En_Bx/z_en_bx.c
@@ -7,7 +7,7 @@
#include "z_en_bx.h"
#include "assets/objects/object_bxa/object_bxa.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnBx_Init(Actor* thisx, PlayState* play);
void EnBx_Destroy(Actor* thisx, PlayState* play);
@@ -98,7 +98,7 @@ void EnBx_Init(Actor* thisx, PlayState* play) {
Collider_SetQuad(play, &this->colliderQuad, &this->actor, &sQuadInit);
thisx->colChkInfo.mass = MASS_IMMOVABLE;
this->unk_14C = 0;
- thisx->uncullZoneDownward = 2000.0f;
+ thisx->cullingVolumeDownward = 2000.0f;
if (Flags_GetSwitch(play, PARAMS_GET_U(thisx->params, 8, 8))) {
Actor_Kill(&this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
index e83dbc2dc8..c6cf2c7ad3 100644
--- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
+++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c
@@ -1,6 +1,8 @@
#include "z_en_clear_tag.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnClearTag_Init(Actor* thisx, PlayState* play);
void EnClearTag_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c
index c8319a7e79..a2533df3d5 100644
--- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c
+++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c
@@ -98,7 +98,7 @@ static DamageTable sDamageTable = {
static u32 sDeathCount = 0;
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 3000, ICHAIN_CONTINUE),
ICHAIN_S8(naviEnemyId, NAVI_ENEMY_GUAY, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(gravity, -200, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 2000, ICHAIN_STOP),
@@ -181,7 +181,7 @@ void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) {
}
this->collider.base.acFlags &= ~AC_ON;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = EnCrow_Damaged;
}
@@ -402,7 +402,7 @@ void EnCrow_Respawn(EnCrow* this, PlayState* play) {
}
if (Math_StepToF(&this->actor.scale.x, target, target * 0.1f)) {
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.colChkInfo.health = 1;
EnCrow_SetupFlyIdle(this);
}
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
index 0f84c7784a..64b3cc1088 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
@@ -2,7 +2,9 @@
#include "overlays/actors/ovl_En_GeldB/z_en_geldb.h"
#include "assets/objects/object_daiku/object_daiku.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
+
+#define ENDAIKU_GET_TYPE(thisx) PARAMS_GET_U((thisx)->params, 0, 2)
typedef struct EnDaikuEscapeSubCamParam {
Vec3f eyePosDeltaLocal;
@@ -150,21 +152,21 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
EnDaiku* this = (EnDaiku*)thisx;
s32 pad;
s32 noKill = true;
- s32 isFree = false;
-
- if (PARAMS_GET_U(this->actor.params, 0, 2) == 0 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(0))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 1 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(1))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 2 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(2))) {
- isFree = true;
- } else if (PARAMS_GET_U(this->actor.params, 0, 2) == 3 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(3))) {
- isFree = true;
+ s32 isRescued = false;
+
+ if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE0 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_0_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE1 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_1_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE2 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_2_RESCUED)) {
+ isRescued = true;
+ } else if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE3 && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_3_RESCUED)) {
+ isRescued = true;
}
- if (isFree == true && play->sceneId == SCENE_THIEVES_HIDEOUT) {
+ if (isRescued == true && play->sceneId == SCENE_THIEVES_HIDEOUT) {
noKill = false;
- } else if (!isFree && play->sceneId == SCENE_CARPENTERS_TENT) {
+ } else if (!isRescued && play->sceneId == SCENE_CARPENTERS_TENT) {
noKill = false;
}
@@ -200,7 +202,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
this->stateFlags |= ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2;
this->actionFunc = EnDaiku_Jailed;
} else {
- if (PARAMS_GET_U(this->actor.params, 0, 2) == 1 || PARAMS_GET_U(this->actor.params, 0, 2) == 3) {
+ if (ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE1 || ENDAIKU_GET_TYPE(&this->actor) == ENDAIKU_TYPE3) {
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_SIT, &this->currentAnimIndex);
this->stateFlags |= ENDAIKU_STATEFLAG_1;
} else {
@@ -254,7 +256,7 @@ s32 EnDaiku_UpdateTalking(EnDaiku* this, PlayState* play) {
void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
s32 carpenterType;
- s32 freedCount;
+ s32 rescuedCount;
s16 sp2E;
s16 sp2C;
@@ -268,15 +270,14 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
Actor_OfferTalk(&this->actor, play, 100.0f) == 1) {
if (play->sceneId == SCENE_THIEVES_HIDEOUT) {
if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) {
- freedCount = 0;
+ rescuedCount = 0;
for (carpenterType = 0; carpenterType < 4; carpenterType++) {
- if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- EVENTCHKINF_CARPENTERS_FREE_MASK(carpenterType)) {
- freedCount++;
+ if (ENDAIKU_IS_CARPENTER_RESCUED(carpenterType)) {
+ rescuedCount++;
}
}
- switch (freedCount) {
+ switch (rescuedCount) {
case 0:
this->actor.textId = 0x605B;
break;
@@ -295,15 +296,15 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
this->actor.textId = 0x6007;
}
} else if (play->sceneId == SCENE_CARPENTERS_TENT) {
- switch (PARAMS_GET_U(this->actor.params, 0, 2)) {
- case 0:
+ switch (ENDAIKU_GET_TYPE(&this->actor)) {
+ case ENDAIKU_TYPE0:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6060;
} else {
this->actor.textId = 0x605F;
}
break;
- case 1:
+ case ENDAIKU_TYPE1:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6063;
} else {
@@ -314,7 +315,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
}
}
break;
- case 2:
+ case ENDAIKU_TYPE2:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6066;
} else {
@@ -325,7 +326,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
}
}
break;
- case 3:
+ case ENDAIKU_TYPE3:
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
this->actor.textId = 0x6068;
} else {
@@ -385,7 +386,7 @@ void EnDaiku_WaitFreedom(EnDaiku* this, PlayState* play) {
}
/**
- * The carpenter is free, initializes his running away animation
+ * The carpenter is rescued, initializes his running away animation
*/
void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) {
Path* path;
@@ -399,11 +400,10 @@ void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) {
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex);
this->stateFlags &= ~(ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2);
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] |=
- EVENTCHKINF_CARPENTERS_FREE_MASK(PARAMS_GET_U(this->actor.params, 0, 2));
+ ENDAIKU_SET_CARPENTER_RESCUED(ENDAIKU_GET_TYPE(&this->actor));
this->actor.gravity = -1.0f;
- this->escapeSubCamTimer = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].maxFramesActive;
+ this->escapeSubCamTimer = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].maxFramesActive;
EnDaiku_InitSubCamera(this, play);
exitLoop = false;
@@ -444,11 +444,11 @@ void EnDaiku_InitSubCamera(EnDaiku* this, PlayState* play) {
Vec3f eyePosDeltaWorld;
this->subCamActive = true;
- this->escapeSubCamTimer = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].maxFramesActive;
+ this->escapeSubCamTimer = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].maxFramesActive;
- eyePosDeltaLocal.x = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.x;
- eyePosDeltaLocal.y = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.y;
- eyePosDeltaLocal.z = sEscapeSubCamParams[PARAMS_GET_U(this->actor.params, 0, 2)].eyePosDeltaLocal.z;
+ eyePosDeltaLocal.x = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.x;
+ eyePosDeltaLocal.y = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.y;
+ eyePosDeltaLocal.z = sEscapeSubCamParams[ENDAIKU_GET_TYPE(&this->actor)].eyePosDeltaLocal.z;
Matrix_RotateY(BINANG_TO_RAD(this->actor.world.rot.y), MTXMODE_NEW);
Matrix_MultVec3f(&eyePosDeltaLocal, &eyePosDeltaWorld);
@@ -493,7 +493,7 @@ void EnDaiku_EscapeSuccess(EnDaiku* this, PlayState* play) {
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_ACTIVE);
this->subCamActive = false;
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
Actor* gerudoGuard;
Vec3f vec;
@@ -594,13 +594,13 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- if (PARAMS_GET_U(thisx->params, 0, 2) == 0) {
+ if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE0) {
gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 1) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE1) {
gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 2) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE2) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255);
- } else if (PARAMS_GET_U(thisx->params, 0, 2) == 3) {
+ } else if (ENDAIKU_GET_TYPE(thisx) == ENDAIKU_TYPE3) {
gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255);
}
@@ -637,7 +637,7 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limb, Gfx** dList, Vec3s* rot, vo
if (limb == 15) { // head
Matrix_MultVec3f(&targetPosHeadLocal, &this->actor.focus.pos);
- gSPDisplayList(POLY_OPA_DISP++, hairDLists[PARAMS_GET_U(this->actor.params, 0, 2)]);
+ gSPDisplayList(POLY_OPA_DISP++, hairDLists[ENDAIKU_GET_TYPE(&this->actor)]);
}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku.c", 1330);
diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
index 82b7a06346..69136f6a92 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
@@ -8,6 +8,13 @@ struct EnDaiku;
typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*);
+typedef enum EnDaikuType {
+ ENDAIKU_TYPE0,
+ ENDAIKU_TYPE1,
+ ENDAIKU_TYPE2,
+ ENDAIKU_TYPE3
+} EnDaikuType;
+
typedef struct EnDaiku {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
diff --git a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
index 2612749b4e..6b27191f79 100644
--- a/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
+++ b/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
@@ -7,7 +7,7 @@
#include "z_en_daiku_kakariko.h"
#include "assets/objects/object_daiku/object_daiku.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum KakarikoCarpenterType {
/* 0x0 */ CARPENTER_ICHIRO, // Red and purple pants, normal hair
@@ -171,7 +171,7 @@ void EnDaikuKakariko_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = 0.0f;
this->runSpeed = 3.0f;
- this->actor.uncullZoneForward = 1200.0f;
+ this->actor.cullingVolumeDistance = 1200.0f;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->currentAnimIndex = -1;
diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
index b2d7f0c8af..a770abcb63 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -402,7 +402,7 @@ void EnDekubaba_SetupPrunedSomersault(EnDekubaba* this) {
this->actor.world.rot.y = this->actor.shape.rot.y + 0x8000;
this->collider.base.acFlags &= ~AC_ON;
this->actor.speed = this->size * 3.0f;
- this->actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->actionFunc = EnDekubaba_PrunedSomersault;
}
@@ -455,7 +455,7 @@ void EnDekubaba_SetupDeadStickDrop(EnDekubaba* this, PlayState* play) {
this->actor.velocity.y = 0.0f;
this->actor.shape.shadowScale = 3.0f;
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_MISC);
- this->actor.flags &= ~ACTOR_FLAG_5;
+ this->actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->timer = 200;
this->actionFunc = EnDekubaba_DeadStickDrop;
}
diff --git a/src/overlays/actors/ovl_En_Dh/z_en_dh.c b/src/overlays/actors/ovl_En_Dh/z_en_dh.c
index 4d0e0c269d..d0b44336bf 100644
--- a/src/overlays/actors/ovl_En_Dh/z_en_dh.c
+++ b/src/overlays/actors/ovl_En_Dh/z_en_dh.c
@@ -1,7 +1,9 @@
#include "z_en_dh.h"
#include "assets/objects/object_dh/object_dh.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
typedef enum EnDhAction {
/* 0 */ DH_WAIT,
diff --git a/src/overlays/actors/ovl_En_Dha/z_en_dha.c b/src/overlays/actors/ovl_En_Dha/z_en_dha.c
index 3d31717cd6..8ecca0200a 100644
--- a/src/overlays/actors/ovl_En_Dha/z_en_dha.c
+++ b/src/overlays/actors/ovl_En_Dha/z_en_dha.c
@@ -9,7 +9,7 @@
#include "overlays/actors/ovl_En_Dh/z_en_dh.h"
#include "assets/objects/object_dh/object_dh.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnDha_Init(Actor* thisx, PlayState* play);
void EnDha_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c
index 536be6a77d..504b26eaa9 100644
--- a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c
+++ b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_zo/object_zo.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnDivingGame_Init(Actor* thisx, PlayState* play);
void EnDivingGame_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c b/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c
index 0899a4592b..ba11fe4aa3 100644
--- a/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c
+++ b/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c
@@ -164,7 +164,7 @@ void EnDntDemo_Judge(EnDntDemo* this, PlayState* play) {
delay = 0;
switch (Player_GetMask(play)) {
case PLAYER_MASK_SKULL:
- if (!GET_ITEMGETINF(ITEMGETINF_1E)) {
+ if (!GET_ITEMGETINF(ITEMGETINF_FOREST_STAGE_STICK_UPGRADE)) {
reaction = DNT_SIGNAL_CELEBRATE;
this->prize = DNT_PRIZE_STICK;
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_SARIA_THEME);
@@ -172,7 +172,8 @@ void EnDntDemo_Judge(EnDntDemo* this, PlayState* play) {
}
FALLTHROUGH;
case PLAYER_MASK_TRUTH:
- if (!GET_ITEMGETINF(ITEMGETINF_1F) && (Player_GetMask(play) != PLAYER_MASK_SKULL)) {
+ if (!GET_ITEMGETINF(ITEMGETINF_FOREST_STAGE_NUT_UPGRADE) &&
+ (Player_GetMask(play) != PLAYER_MASK_SKULL)) {
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->prize = DNT_PRIZE_NUTS;
diff --git a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
index 71942c91aa..fd76aa60ba 100644
--- a/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
+++ b/src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
@@ -10,7 +10,7 @@
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnDntJiji_Init(Actor* thisx, PlayState* play);
void EnDntJiji_Destroy(Actor* thisx, PlayState* play);
@@ -282,7 +282,7 @@ void EnDntJiji_GivePrize(EnDntJiji* this, PlayState* play) {
PRINTF("実 \n");
PRINTF("実 \n");
PRINTF("実 \n");
- SET_ITEMGETINF(ITEMGETINF_1F);
+ SET_ITEMGETINF(ITEMGETINF_FOREST_STAGE_NUT_UPGRADE);
} else {
// "stick"
PRINTF("棒 \n");
@@ -291,7 +291,7 @@ void EnDntJiji_GivePrize(EnDntJiji* this, PlayState* play) {
PRINTF("棒 \n");
PRINTF("棒 \n");
PRINTF("棒 \n");
- SET_ITEMGETINF(ITEMGETINF_1E);
+ SET_ITEMGETINF(ITEMGETINF_FOREST_STAGE_STICK_UPGRADE);
}
this->actor.textId = 0;
if ((this->stage != NULL) && (this->stage->actor.update != NULL)) {
diff --git a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
index 2863aa1f80..b1631fe434 100644
--- a/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
+++ b/src/overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.c
@@ -14,7 +14,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnDntNomal_Init(Actor* thisx, PlayState* play);
void EnDntNomal_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
index 0a4242d020..5cd7fec6c5 100644
--- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
+++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
@@ -3,7 +3,7 @@
#include "overlays/actors/ovl_En_Bombf/z_en_bombf.h"
#include "assets/objects/object_dodongo/object_dodongo.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum EnDodongoActionState {
DODONGO_SWEEP_TAIL,
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 301b804966..4d650f0a1b 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -12,7 +12,7 @@
#include "assets/objects/object_mizu_objects/object_mizu_objects.h"
#include "assets/objects/object_haka_door/object_haka_door.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define DOOR_AJAR_SLAM_RANGE 120.0f
#define DOOR_AJAR_OPEN_RANGE (2 * DOOR_AJAR_SLAM_RANGE)
@@ -75,7 +75,7 @@ static EnDoorInfo sDoorInfo[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_0, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_STOP),
};
static AnimationHeader* sDoorAnims[DOOR_OPEN_ANIM_MAX] = {
@@ -177,7 +177,7 @@ void EnDoor_SetupType(EnDoor* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
s32 doorType = ENDOOR_GET_TYPE(&this->actor);
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.objectSlot = this->requiredObjectSlot;
this->actionFunc = EnDoor_Idle;
if (doorType == DOOR_EVENING) {
diff --git a/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/src/overlays/actors/ovl_En_Ds/z_en_ds.c
index b3899ae0b8..c76713a756 100644
--- a/src/overlays/actors/ovl_En_Ds/z_en_ds.c
+++ b/src/overlays/actors/ovl_En_Ds/z_en_ds.c
@@ -206,7 +206,7 @@ void EnDs_Wait(EnDs* this, PlayState* play) {
s16 yawDiff;
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- if (func_8002F368(play) == EXCH_ITEM_ODD_MUSHROOM) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_ODD_MUSHROOM) {
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
player->actor.textId = 0x504A;
diff --git a/src/overlays/actors/ovl_En_Du/z_en_du.c b/src/overlays/actors/ovl_En_Du/z_en_du.c
index 67ddf4a1f7..f77bec5a85 100644
--- a/src/overlays/actors/ovl_En_Du/z_en_du.c
+++ b/src/overlays/actors/ovl_En_Du/z_en_du.c
@@ -293,7 +293,7 @@ void EnDu_Init(Actor* thisx, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDarunia01Cs);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDaruniaDancingCs);
gSaveContext.cutsceneTrigger = 1;
EnDu_SetupAction(this, func_809FE890);
} else if (play->sceneId == SCENE_FIRE_TEMPLE) {
@@ -341,7 +341,7 @@ void func_809FE4A4(EnDu* this, PlayState* play) {
play->msgCtx.ocarinaMode = OCARINA_MODE_00;
EnDu_SetupAction(this, func_809FE3C0);
} else if (play->msgCtx.ocarinaMode >= OCARINA_MODE_06) {
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDaruniaWrongCs);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDaruniaWrongSongCs);
gSaveContext.cutsceneTrigger = 1;
this->unk_1E8 = 1;
EnDu_SetupAction(this, func_809FE890);
@@ -349,7 +349,7 @@ void func_809FE4A4(EnDu* this, PlayState* play) {
} else if (play->msgCtx.ocarinaMode == OCARINA_MODE_03) {
Audio_PlaySfxGeneral(NA_SE_SY_CORRECT_CHIME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDaruniaCorrectCs);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDaruniaCorrectSongCs);
gSaveContext.cutsceneTrigger = 1;
this->unk_1E8 = 0;
EnDu_SetupAction(this, func_809FE890);
diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
index 784e28e072..836610b781 100644
--- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
+++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_dy_obj/object_dy_obj.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnDyExtra_Init(Actor* thisx, PlayState* play);
void EnDyExtra_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Eg/z_en_eg.c b/src/overlays/actors/ovl_En_Eg/z_en_eg.c
index 733a9ccf83..c646cdf249 100644
--- a/src/overlays/actors/ovl_En_Eg/z_en_eg.c
+++ b/src/overlays/actors/ovl_En_Eg/z_en_eg.c
@@ -7,7 +7,7 @@
#include "z_en_eg.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnEg_Init(Actor* thisx, PlayState* play);
void EnEg_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c b/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
index 63e509986b..554512b148 100644
--- a/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
+++ b/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c
@@ -215,7 +215,7 @@ void EnEiyer_SetupUnderground(EnEiyer* this) {
}
this->collider.base.acFlags |= AC_ON;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
}
@@ -265,7 +265,7 @@ void EnEiyer_SetupDiveAttack(EnEiyer* this, PlayState* play) {
void EnEiyer_SetupLand(EnEiyer* this) {
Animation_MorphToPlayOnce(&this->skelanime, &gStingerDiveAnim, -3.0f);
this->collider.base.atFlags &= ~AT_ON;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
// Update BgCheck info, play sound, and spawn effect on the first frame of the land action
this->timer = -1;
diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
index a83552b9bf..cd3658756e 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -8,7 +8,7 @@
#include "global.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
#define FAIRY_FLAG_TIMED (1 << 8)
#define FAIRY_FLAG_BIG (1 << 9)
diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
index bcd652c776..7c58fb68a2 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
@@ -2,7 +2,7 @@
#include "terminal.h"
#include "overlays/actors/ovl_En_Tite/z_en_tite.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_LOCK_ON_DISABLED)
void EnEncount1_Init(Actor* thisx, PlayState* play);
void EnEncount1_Update(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
index 972f06b6f7..d0ba211fda 100644
--- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
+++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
@@ -4,7 +4,7 @@
#include "terminal.h"
#include "assets/objects/object_efc_star_field/object_efc_star_field.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum Encount2State {
/* 0x0 */ ENCOUNT2_INACTIVE,
diff --git a/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c b/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
index 53507b0e39..fea14bc560 100644
--- a/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
+++ b/src/overlays/actors/ovl_En_Ex_Item/z_en_ex_item.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnExItem_Init(Actor* thisx, PlayState* play);
void EnExItem_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
index 6db126576b..3e1ec6cee9 100644
--- a/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
+++ b/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c
@@ -3,7 +3,7 @@
#include "../ovl_En_Diving_Game/z_en_diving_game.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnExRuppy_Init(Actor* thisx, PlayState* play);
void EnExRuppy_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Fd/z_en_fd.c b/src/overlays/actors/ovl_En_Fd/z_en_fd.c
index 53234952ce..c4175c7fe4 100644
--- a/src/overlays/actors/ovl_En_Fd/z_en_fd.c
+++ b/src/overlays/actors/ovl_En_Fd/z_en_fd.c
@@ -9,7 +9,9 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_fw/object_fw.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR)
void EnFd_Init(Actor* thisx, PlayState* play);
void EnFd_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c b/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
index 472ff44b25..d408b7b9ac 100644
--- a/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
+++ b/src/overlays/actors/ovl_En_Fd_Fire/z_en_fd_fire.c
@@ -1,7 +1,7 @@
#include "z_en_fd_fire.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnFdFire_Init(Actor* thisx, PlayState* play);
void EnFdFire_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
index a76c0b8783..aa3f190cee 100644
--- a/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
+++ b/src/overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.c
@@ -11,7 +11,7 @@
#include "overlays/actors/ovl_En_fHG/z_en_fhg.h"
#include "overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum StrikeMode {
/* 0 */ STRIKE_INIT,
diff --git a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
index c3740bf9e4..0e91c96ea0 100644
--- a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
+++ b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
@@ -3,7 +3,7 @@
#include "terminal.h"
#include "assets/objects/object_efc_star_field/object_efc_star_field.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnFireRock_Init(Actor* thisx, PlayState* play);
void EnFireRock_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
index eb1be1b9cf..6a72e29224 100644
--- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
+++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
@@ -215,7 +215,7 @@ void EnFirefly_SetupFall(EnFirefly* this) {
this->actor.velocity.y = 0.0f;
Animation_Change(&this->skelAnime, &gKeeseFlyAnim, 0.5f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -3.0f);
Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_DEAD);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->actionFunc = EnFirefly_Fall;
}
@@ -262,7 +262,7 @@ void EnFirefly_SetupFrozenFall(EnFirefly* this, PlayState* play) {
s32 i;
Vec3f iceParticlePos;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->auraType = KEESE_AURA_NONE;
this->actor.speed = 0.0f;
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 255);
diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
index ccc27510e2..7f16563730 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -79,9 +79,9 @@ ActorProfile En_Fish_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 900, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 40, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 700, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 900, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 40, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 700, ICHAIN_STOP),
};
f32 EnFish_XZDistanceSquared(Vec3f* v1, Vec3f* v2) {
@@ -117,7 +117,7 @@ void EnFish_SetCutsceneData(EnFish* this) {
thisx->shape.yOffset = 600.0f;
D_80A17014 = 10.0f;
D_80A17018 = 0.0f;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
EnFish_SetOutOfWaterAnimation(this);
}
}
@@ -141,7 +141,7 @@ void EnFish_Init(Actor* thisx, PlayState* play) {
this->fastPhase = Rand_ZeroOne() * (0xFFFF + 0.5f);
if (params == FISH_DROPPED) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 8.0f);
EnFish_Dropped_SetupFall(this);
} else if (params == FISH_SWIMMING_UNIQUE) {
@@ -476,7 +476,7 @@ void EnFish_Dropped_SetupSwimAway(EnFish* this) {
this->actor.gravity = 0.0f;
this->actor.minVelocityY = 0.0f;
this->actor.shape.yOffset = 0.0f;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->timer = 200;
EnFish_SetInWaterAnimation(this);
this->actionFunc = EnFish_Dropped_SwimAway;
diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
index e08b501210..035a825073 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
@@ -279,7 +279,7 @@ void EnFloormas_SetupLand(EnFloormas* this) {
void EnFloormas_SetupSplit(EnFloormas* this) {
Actor_SetScale(&this->actor, 0.004f);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
this->actor.draw = EnFloormas_DrawHighlighted;
} else {
@@ -384,7 +384,7 @@ void EnFloormas_SetupSmallWait(EnFloormas* this) {
}
this->actor.draw = NULL;
this->actionFunc = EnFloormas_SmallWait;
- this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4);
+ this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED);
}
void EnFloormas_SetupTakeDamage(EnFloormas* this) {
@@ -911,7 +911,7 @@ void EnFloormas_Merge(EnFloormas* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->actor.scale.x >= 0.01f) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
EnFloormas_MakeVulnerable(this);
this->actor.params = 0;
this->collider.elem.acElemFlags |= ACELEM_HOOKABLE;
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index ef6b640712..6e0ec63175 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -3,7 +3,9 @@
#include "terminal.h"
#include "assets/objects/object_fr/object_fr.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnFr_Init(Actor* thisx, PlayState* play);
void EnFr_Destroy(Actor* thisx, PlayState* play);
@@ -106,22 +108,22 @@ static EnFrPointers sEnFrPointers = {
};
#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \
- (gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \
+ (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SONGS_FOR_FROGS] & \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex])
#define FROG_SET_SONG_PLAYED(frogSongIndex) \
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SONGS_FOR_FROGS] |= \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex];
static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = {
- EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK, // FROG_ZL
- EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK, // FROG_EPONA
- EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK, // FROG_SARIA
- EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK, // FROG_SUNS
- EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK, // FROG_SOT
- EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK, // FROG_STORMS
- EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK, // FROG_CHOIR_SONG
- 0, // FROG_NO_SONG
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_ZL), // FROG_ZL
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_EPONA), // FROG_EPONA
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SARIA), // FROG_SARIA
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SUNS), // FROG_SUNS
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_SOT), // FROG_SOT
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_STORMS), // FROG_STORMS
+ EVENTCHKINF_MASK(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR), // FROG_CHOIR_SONG
+ 0, // FROG_NO_SONG
};
static u8 sFrogToFrogSongIndex[] = {
@@ -236,7 +238,7 @@ void EnFr_Init(Actor* thisx, PlayState* play) {
this->actor.destroy = NULL;
this->actor.draw = NULL;
this->actor.update = EnFr_UpdateIdle;
- this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4);
+ this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED);
this->actor.flags &= ~0;
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_PROP);
this->actor.textId = 0x40AC;
@@ -278,7 +280,7 @@ void EnFr_Update(Actor* thisx, PlayState* play) {
s32 pad2;
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
frogIndex = this->actor.params - 1;
sEnFrPointers.frogs[frogIndex] = this;
Actor_ProcessInitChain(&this->actor, sInitChain);
diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
index 942bb6777e..8069e6cb26 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -8,7 +8,9 @@
#include "assets/objects/object_fu/object_fu.h"
#include "assets/scenes/indoors/hakasitarelay/hakasitarelay_scene.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA)
#define FU_RESET_LOOK_ANGLE (1 << 0)
#define FU_WAIT (1 << 1)
@@ -134,7 +136,7 @@ void EnFu_WaitChild(EnFu* this, PlayState* play) {
u16 textId = MaskReaction_GetTextId(play, MASK_REACTION_SET_WINDMILL_MAN);
if (textId == 0) {
- textId = GET_EVENTCHKINF(EVENTCHKINF_67) ? 0x5033 : 0x5032;
+ textId = GET_EVENTCHKINF(EVENTCHKINF_DRAINED_WELL) ? 0x5033 : 0x5032;
}
// if ACTOR_FLAG_TALK is set and textId is 0x5033, change animation
diff --git a/src/overlays/actors/ovl_En_Fw/z_en_fw.c b/src/overlays/actors/ovl_En_Fw/z_en_fw.c
index c1a18d41c4..09bf51927f 100644
--- a/src/overlays/actors/ovl_En_Fw/z_en_fw.c
+++ b/src/overlays/actors/ovl_En_Fw/z_en_fw.c
@@ -9,7 +9,9 @@
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR)
void EnFw_Init(Actor* thisx, PlayState* play);
void EnFw_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
index d22dbe06c2..af3ca60170 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
@@ -1,7 +1,9 @@
#include "z_en_fz.h"
#include "assets/objects/object_fz/object_fz.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
void EnFz_Init(Actor* thisx, PlayState* play);
void EnFz_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
index afadb9d886..378d790e0e 100644
--- a/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
+++ b/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c
@@ -12,7 +12,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_tsubo/object_tsubo.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum GSwitchMoveState {
/* 0 */ MOVE_TARGET,
diff --git a/src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.c b/src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.c
index 0153109acd..6e323a62c8 100644
--- a/src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.c
+++ b/src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.c
@@ -7,7 +7,7 @@
#include "z_en_ganon_mant.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnGanonMant_Init(Actor* thisx, PlayState* play);
void EnGanonMant_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ganon_Organ/z_en_ganon_organ.c b/src/overlays/actors/ovl_En_Ganon_Organ/z_en_ganon_organ.c
index 1a36f849ac..d64111fb9d 100644
--- a/src/overlays/actors/ovl_En_Ganon_Organ/z_en_ganon_organ.c
+++ b/src/overlays/actors/ovl_En_Ganon_Organ/z_en_ganon_organ.c
@@ -7,7 +7,7 @@
#include "z_en_ganon_organ.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnGanonOrgan_Init(Actor* thisx, PlayState* play);
void EnGanonOrgan_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Gb/z_en_gb.c b/src/overlays/actors/ovl_En_Gb/z_en_gb.c
index 8488152086..e37400ce5d 100644
--- a/src/overlays/actors/ovl_En_Gb/z_en_gb.c
+++ b/src/overlays/actors/ovl_En_Gb/z_en_gb.c
@@ -284,7 +284,7 @@ void func_80A2F83C(EnGb* this, PlayState* play) {
if (Actor_TalkOfferAccepted(&this->dyna.actor, play)) {
s32 pad;
- switch (func_8002F368(play)) {
+ switch (Actor_GetPlayerExchangeItemId(play)) {
case EXCH_ITEM_NONE:
func_80A2F180(this);
this->actionFunc = func_80A2F94C;
diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
index bfd827349a..8082c7d87c 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
@@ -5,6 +5,7 @@
*/
#include "z_en_ge1.h"
+#include "z64horse.h"
#include "terminal.h"
#include "assets/objects/object_ge1/object_ge1.h"
@@ -26,7 +27,7 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play);
void EnGe1_Update(Actor* thisx, PlayState* play);
void EnGe1_Draw(Actor* thisx, PlayState* play);
-s32 EnGe1_CheckCarpentersFreed(void);
+s32 EnGe1_CheckAllCarpentersRescued(void);
void EnGe1_WatchForPlayerFrontOnly(EnGe1* this, PlayState* play);
void EnGe1_SetNormalText(EnGe1* this, PlayState* play);
void EnGe1_WatchForAndSensePlayer(EnGe1* this, PlayState* play);
@@ -101,7 +102,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
this->actor.attentionRangeType = ATTENTION_RANGE_6;
Actor_SetScale(&this->actor, 0.01f);
- this->actor.uncullZoneForward = ((play->sceneId == SCENE_GERUDO_VALLEY) ? 1000.0f : 1200.0f);
+ this->actor.cullingVolumeDistance = ((play->sceneId == SCENE_GERUDO_VALLEY) ? 1000.0f : 1200.0f);
switch (PARAMS_GET_U(this->actor.params, 0, 8)) {
@@ -113,7 +114,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_GATE_OPERATOR:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_CheckGate_GateOp;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -123,7 +124,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_NORMAL:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_SetNormalText;
} else {
this->actionFunc = EnGe1_WatchForAndSensePlayer;
@@ -153,7 +154,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
if (GET_EVENTINF(EVENTINF_HORSES_08)) {
this->actionFunc = EnGe1_TalkAfterGame_Archery;
- } else if (EnGe1_CheckCarpentersFreed()) {
+ } else if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_Wait_Archery;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -163,7 +164,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
case GE1_TYPE_TRAINING_GROUNDS_GUARD:
this->hairstyle = GE1_HAIR_STRAIGHT;
- if (EnGe1_CheckCarpentersFreed()) {
+ if (EnGe1_CheckAllCarpentersRescued()) {
this->actionFunc = EnGe1_CheckForCard_GTGGuard;
} else {
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
@@ -207,9 +208,9 @@ void EnGe1_SetAnimationIdle(EnGe1* this) {
this->animFunc = EnGe1_CueUpAnimation;
}
-s32 EnGe1_CheckCarpentersFreed(void) {
- if (!(GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(0)) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(1)) &&
- GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(2)) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTERS_FREE(3)))) {
+s32 EnGe1_CheckAllCarpentersRescued(void) {
+ if (!(GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_0_RESCUED) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_1_RESCUED) &&
+ GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_2_RESCUED) && GET_EVENTCHKINF(EVENTCHKINF_CARPENTER_3_RESCUED))) {
return false;
}
return true;
@@ -224,7 +225,7 @@ void EnGe1_KickPlayer(EnGe1* this, PlayState* play) {
if (this->cutsceneTimer > 0) {
this->cutsceneTimer--;
} else {
- func_8006D074(play);
+ Horse_ResetHorseData(play);
if ((INV_CONTENT(ITEM_HOOKSHOT) == ITEM_NONE) || (INV_CONTENT(ITEM_LONGSHOT) == ITEM_NONE)) {
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_1;
diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
index da5b380082..0df133fe4f 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -5,10 +5,11 @@
*/
#include "z_en_ge2.h"
+#include "z64horse.h"
#include "terminal.h"
#include "assets/objects/object_gla/object_gla.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
#define GE2_STATE_ANIMCOMPLETE (1 << 1)
#define GE2_STATE_KO (1 << 2)
@@ -38,7 +39,7 @@ void EnGe2_Destroy(Actor* thisx, PlayState* play);
void EnGe2_Update(Actor* thisx, PlayState* play);
void EnGe2_Draw(Actor* thisx, PlayState* play);
-s32 EnGe2_CheckCarpentersFreed(void);
+s32 EnGe2_CheckAllCarpentersRescued(void);
void EnGe2_CaptureClose(EnGe2* this, PlayState* play);
void EnGe2_CaptureCharge(EnGe2* this, PlayState* play);
void EnGe2_CaptureTurn(EnGe2* this, PlayState* play);
@@ -124,9 +125,9 @@ void EnGe2_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
if (play->sceneId == SCENE_GERUDO_VALLEY) {
- this->actor.uncullZoneForward = 1000.0f;
+ this->actor.cullingVolumeDistance = 1000.0f;
} else {
- this->actor.uncullZoneForward = 1200.0f;
+ this->actor.cullingVolumeDistance = 1200.0f;
}
this->yDetectRange = (this->actor.world.rot.z + 1) * 40.0f;
@@ -136,14 +137,14 @@ void EnGe2_Init(Actor* thisx, PlayState* play) {
switch (PARAMS_GET_S(thisx->params, 0, 8)) {
case GE2_TYPE_PATROLLING:
EnGe2_ChangeAction(this, GE2_ACTION_WALK);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
break;
case GE2_TYPE_STATIONARY:
EnGe2_ChangeAction(this, GE2_ACTION_STAND);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
@@ -223,13 +224,11 @@ s32 Ge2_DetectPlayerInUpdate(PlayState* play, EnGe2* this, Vec3f* pos, s16 yRot,
return 1;
}
-s32 EnGe2_CheckCarpentersFreed(void) {
- if (CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
- (EVENTCHKINF_CARPENTERS_FREE_MASK_ALL | 0xF0),
- EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) {
- return 1;
+s32 EnGe2_CheckAllCarpentersRescued(void) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED2()) {
+ return true;
}
- return 0;
+ return false;
}
// Actions
@@ -238,7 +237,7 @@ void EnGe2_CaptureClose(EnGe2* this, PlayState* play) {
if (this->timer > 0) {
this->timer--;
} else {
- func_8006D074(play);
+ Horse_ResetHorseData(play);
if ((INV_CONTENT(ITEM_HOOKSHOT) == ITEM_NONE) || (INV_CONTENT(ITEM_LONGSHOT) == ITEM_NONE)) {
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_1;
@@ -264,7 +263,7 @@ void EnGe2_CaptureCharge(EnGe2* this, PlayState* play) {
if (this->timer > 0) {
this->timer--;
} else {
- func_8006D074(play);
+ Horse_ResetHorseData(play);
if ((INV_CONTENT(ITEM_HOOKSHOT) == ITEM_NONE) || (INV_CONTENT(ITEM_LONGSHOT) == ITEM_NONE)) {
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_1;
@@ -593,7 +592,7 @@ void EnGe2_Update(Actor* thisx, PlayState* play) {
}
EnGe2_MoveAndBlink(this, play);
- if (EnGe2_CheckCarpentersFreed() && !(this->stateFlags & GE2_STATE_KO)) {
+ if (EnGe2_CheckAllCarpentersRescued() && !(this->stateFlags & GE2_STATE_KO)) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
}
@@ -619,7 +618,7 @@ void EnGe2_UpdateStunned(Actor* thisx, PlayState* play2) {
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- if (EnGe2_CheckCarpentersFreed()) {
+ if (EnGe2_CheckAllCarpentersRescued()) {
this->actor.update = EnGe2_UpdateFriendly;
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->actor.colorFilterTimer = 0;
diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
index c49252ace7..614936d3bc 100644
--- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
+++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_geldb/object_geldb.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnGe3_Init(Actor* thisx, PlayState* play2);
void EnGe3_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c b/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c
index 4c1a386975..8ecd36af5e 100644
--- a/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c
+++ b/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c
@@ -7,7 +7,7 @@
#include "z_en_geldb.h"
#include "assets/objects/object_geldb/object_geldb.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum EnGeldBAction {
/* 0 */ GELDB_WAIT,
diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
index 34bd2e0eb1..4261af7b18 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -7,7 +7,7 @@
#include "z_en_girla.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnGirlA_Init(Actor* thisx, PlayState* play);
void EnGirlA_Destroy(Actor* thisx, PlayState* play);
@@ -982,7 +982,7 @@ void EnGirlA_WaitForObject(EnGirlA* this, PlayState* play) {
ShopItemEntry* itemEntry = &sShopItemEntries[params];
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.objectSlot = this->requiredObjectSlot;
switch (this->actor.params) {
case SI_KEATON_MASK:
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 f26c6db2ec..55c10f147d 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_gm/object_gm.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnGm_Init(Actor* thisx, PlayState* play);
void EnGm_Destroy(Actor* thisx, PlayState* play);
@@ -103,7 +103,7 @@ s32 func_80A3D7C8(void) {
void func_80A3D838(EnGm* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->gmObjectSlot)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, 18);
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->gmObjectSlot].segment);
Animation_Change(&this->skelAnime, &object_gm_Anim_0002B8, 1.0f, 0.0f,
diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c
index 9877909df5..265d806fe5 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.c
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.c
@@ -3,7 +3,9 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_oF1d_map/object_oF1d_map.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnGo_Init(Actor* thisx, PlayState* play);
void EnGo_Destroy(Actor* thisx, PlayState* play);
@@ -597,7 +599,7 @@ void func_80A3F908(EnGo* this, PlayState* play) {
if ((PARAMS_GET_NOSHIFT(this->actor.params, 4, 4) == 0x90) && (dialogStarted == true)) {
if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_BROKEN_GORONS_SWORD) {
- if (func_8002F368(play) == EXCH_ITEM_BROKEN_GORONS_SWORD) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_BROKEN_GORONS_SWORD) {
if (GET_INFTABLE(INFTABLE_B4)) {
this->actor.textId = 0x3055;
} else {
@@ -610,7 +612,7 @@ void func_80A3F908(EnGo* this, PlayState* play) {
}
if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_EYE_DROPS) {
- if (func_8002F368(play) == EXCH_ITEM_EYE_DROPS) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_EYE_DROPS) {
this->actor.textId = 0x3059;
} else {
this->actor.textId = 0x3058;
@@ -639,8 +641,8 @@ void EnGo_Init(Actor* thisx, PlayState* play) {
}
if (PARAMS_GET_NOSHIFT(this->actor.params, 4, 4) && (PARAMS_GET_NOSHIFT(this->actor.params, 4, 4) != 0x90)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
- this->actor.flags &= ~ACTOR_FLAG_5;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
+ this->actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
}
EnGo_ChangeAnim(this, ENGO_ANIM_0);
diff --git a/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/src/overlays/actors/ovl_En_Go2/z_en_go2.c
index 52e41a6cf6..af0c4e4512 100644
--- a/src/overlays/actors/ovl_En_Go2/z_en_go2.c
+++ b/src/overlays/actors/ovl_En_Go2/z_en_go2.c
@@ -5,7 +5,9 @@
#include "quake.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
/*
FLAGS
@@ -593,7 +595,7 @@ s16 EnGo2_UpdateTalkStateGoronDmtBiggoron(PlayState* play, EnGo2* this) {
case TEXT_STATE_DONE_FADING:
switch (this->actor.textId) {
case 0x305E:
- if (func_8002F368(play) != EXCH_ITEM_CLAIM_CHECK) {
+ if (Actor_GetPlayerExchangeItemId(play) != EXCH_ITEM_CLAIM_CHECK) {
break;
}
FALLTHROUGH;
@@ -1027,7 +1029,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
if (PARAMS_GET_S(this->actor.params, 0, 5) == GORON_DMT_BIGGORON) {
if (gSaveContext.save.info.playerData.bgsFlag) {
- if (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_CLAIM_CHECK) {
this->actor.textId = 0x3003;
} else {
this->actor.textId = 0x305E;
@@ -1035,7 +1037,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
player->actor.textId = this->actor.textId;
} else if (!gSaveContext.save.info.playerData.bgsFlag && (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_CLAIM_CHECK)) {
- if (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_CLAIM_CHECK) {
if (Environment_GetBgsDayCount() >= 3) {
textId = 0x305E;
} else {
@@ -1054,7 +1056,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
} else if ((INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_PRESCRIPTION) &&
(INV_CONTENT(ITEM_TRADE_ADULT) <= ITEM_CLAIM_CHECK)) {
- if (func_8002F368(play) == EXCH_ITEM_EYE_DROPS) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_EYE_DROPS) {
this->actor.textId = 0x3059;
} else {
this->actor.textId = 0x3058;
@@ -1065,7 +1067,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
player->actor.textId = this->actor.textId;
} else if (INV_CONTENT(ITEM_TRADE_ADULT) <= ITEM_BROKEN_GORONS_SWORD) {
- if (func_8002F368(play) == EXCH_ITEM_BROKEN_GORONS_SWORD) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_BROKEN_GORONS_SWORD) {
if (GET_INFTABLE(INFTABLE_B4)) {
textId = 0x3055;
} else {
@@ -1538,8 +1540,8 @@ void EnGo2_Init(Actor* thisx, PlayState* play) {
case GORON_CITY_LOST_WOODS:
case GORON_DMT_FAIRY_HINT:
case GORON_MARKET_BAZAAR:
- this->actor.flags &= ~ACTOR_FLAG_4;
- this->actor.flags &= ~ACTOR_FLAG_5;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
+ this->actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
}
EnGo2_SetColliderDim(this);
diff --git a/src/overlays/actors/ovl_En_Goma/z_en_goma.c b/src/overlays/actors/ovl_En_Goma/z_en_goma.c
index 5791eccb67..06be045412 100644
--- a/src/overlays/actors/ovl_En_Goma/z_en_goma.c
+++ b/src/overlays/actors/ovl_En_Goma/z_en_goma.c
@@ -4,7 +4,9 @@
#include "overlays/actors/ovl_Boss_Goma/z_boss_goma.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnGoma_Init(Actor* thisx, PlayState* play);
void EnGoma_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
index acf8a7b615..923d4e3e70 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -11,7 +11,7 @@
#include "quake.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef s32 (*EnGoroiwaUnkFunc1)(EnGoroiwa* this, PlayState* play);
typedef void (*EnGoroiwaUnkFunc2)(EnGoroiwa* this);
@@ -536,9 +536,9 @@ void EnGoroiwa_SpawnFragments(EnGoroiwa* this, PlayState* play) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32_DIV1000(gravity, -860, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
- ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 150, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32_DIV1000(gravity, -860, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
+ ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDistance, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 150, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
void EnGoroiwa_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
index c1e9ed9d8d..46d470c330 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -356,8 +356,8 @@ void func_80A4ED34(EnGs* this, PlayState* play) {
Actor_PlaySfx_Flagged(&this->actor, NA_SE_EV_FIRE_PILLAR - SFX_FLAG);
if (this->unk_200++ >= 40) {
this->unk_19E |= 0x10;
- this->actor.flags |= ACTOR_FLAG_4;
- this->actor.uncullZoneForward = 12000.0f;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
+ this->actor.cullingVolumeDistance = 12000.0f;
this->actor.gravity = 0.3f;
this->unk_19F++;
diff --git a/src/overlays/actors/ovl_En_Guest/z_en_guest.c b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
index 5594103fd4..9bb3cb6783 100644
--- a/src/overlays/actors/ovl_En_Guest/z_en_guest.c
+++ b/src/overlays/actors/ovl_En_Guest/z_en_guest.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_boj/object_boj.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnGuest_Init(Actor* thisx, PlayState* play);
void EnGuest_Destroy(Actor* thisx, PlayState* play);
@@ -77,7 +77,7 @@ void EnGuest_Update(Actor* thisx, PlayState* play) {
s32 pad;
if (Object_IsLoaded(&play->objectCtx, this->osAnimeObjectSlot)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Actor_ProcessInitChain(&this->actor, sInitChain);
SkelAnime_InitFlex(play, &this->skelAnime, &gHylianMan2Skel, NULL, this->jointTable, this->morphTable, 16);
diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
index a339b3c3f4..6cdb51f59b 100644
--- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c
+++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
@@ -61,9 +61,9 @@ void EnHata_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
CollisionHeader_GetVirtual(&gFlagpoleCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- this->dyna.actor.uncullZoneScale = 500.0f;
- this->dyna.actor.uncullZoneDownward = 550.0f;
- this->dyna.actor.uncullZoneForward = 2200.0f;
+ this->dyna.actor.cullingVolumeScale = 500.0f;
+ this->dyna.actor.cullingVolumeDownward = 550.0f;
+ this->dyna.actor.cullingVolumeDistance = 2200.0f;
this->invScale = 6;
this->maxStep = 1000;
this->minStep = 1;
diff --git a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
index df24f1f959..e6bdfeac22 100644
--- a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
+++ b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_sd/object_sd.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnHeishi1_Init(Actor* thisx, PlayState* play2);
void EnHeishi1_Destroy(Actor* thisx, PlayState* play);
@@ -346,7 +346,7 @@ void EnHeishi1_Kick(EnHeishi1* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) {
Message_CloseTextbox(play);
if (!this->loadStarted) {
- SET_EVENTCHKINF(EVENTCHKINF_4E);
+ SET_EVENTCHKINF(EVENTCHKINF_CAUGHT_BY_CASTLE_GUARDS);
play->nextEntranceIndex = ENTR_HYRULE_CASTLE_3;
play->transitionTrigger = TRANS_TRIGGER_START;
this->loadStarted = true;
@@ -404,9 +404,9 @@ void EnHeishi1_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- this->actor.uncullZoneForward = 550.0f;
- this->actor.uncullZoneScale = 350.0f;
- this->actor.uncullZoneDownward = 700.0f;
+ this->actor.cullingVolumeDistance = 550.0f;
+ this->actor.cullingVolumeScale = 350.0f;
+ this->actor.cullingVolumeDownward = 700.0f;
if (this->type != 5) {
path = this->path * 2;
diff --git a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c
index b1ee099721..b31974f3b3 100644
--- a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c
+++ b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c
@@ -112,7 +112,7 @@ void EnHeishi2_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
Collider_DestroyCylinder(play, &this->collider);
Player_SetCsActionWithHaltedActors(play, NULL, PLAYER_CSACTION_8);
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = func_80A544AC;
}
} else {
@@ -402,7 +402,7 @@ void func_80A53AD4(EnHeishi2* this, PlayState* play) {
this->unk_300 = TEXT_STATE_DONE;
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- s32 exchangeItemId = func_8002F368(play);
+ s32 exchangeItemId = Actor_GetPlayerExchangeItemId(play);
if (exchangeItemId == EXCH_ITEM_ZELDAS_LETTER) {
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
diff --git a/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c b/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
index 7dc72a610b..8a10e8f96e 100644
--- a/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
+++ b/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c
@@ -136,7 +136,7 @@ void EnHeishi3_StandSentinelInGrounds(EnHeishi3* this, PlayState* play) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ 発見! ☆☆☆☆☆ \n" VT_RST); // "Discovered!"
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#if OOT_PAL_N64
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
#endif
this->actionFunc = EnHeishi3_CatchStart;
}
@@ -167,7 +167,7 @@ void EnHeishi3_StandSentinelInCastle(EnHeishi3* this, PlayState* play) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ 発見! ☆☆☆☆☆ \n" VT_RST); // "Discovered!"
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_1);
#if OOT_PAL_N64
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
#endif
this->actionFunc = EnHeishi3_CatchStart;
}
@@ -208,7 +208,7 @@ void func_80A55D00(EnHeishi3* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play) &&
(this->respawnFlag == 0)) {
- SET_EVENTCHKINF(EVENTCHKINF_4E);
+ SET_EVENTCHKINF(EVENTCHKINF_CAUGHT_BY_CASTLE_GUARDS);
play->nextEntranceIndex = ENTR_HYRULE_CASTLE_4;
play->transitionTrigger = TRANS_TRIGGER_START;
this->respawnFlag = 1;
diff --git a/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c b/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c
index 2b2b65d392..541e8b8519 100644
--- a/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c
+++ b/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c
@@ -170,7 +170,7 @@ void EnHintnuts_HitByScrubProjectile2(EnHintnuts* this) {
}
sPuzzleCounter--;
}
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = EnHintnuts_BeginFreeze;
} else {
this->actionFunc = EnHintnuts_BeginRun;
@@ -195,7 +195,7 @@ void EnHintnuts_SetupLeave(EnHintnuts* this, PlayState* play) {
this->animFlagAndTimer = 100;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->collider.base.ocFlags1 &= ~OC1_ON;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ITEM00, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0x0, 0x0, 0x0, 0x3); // recovery heart
@@ -451,7 +451,7 @@ void EnHintnuts_Freeze(EnHintnuts* this, PlayState* play) {
Actor_Kill(&this->actor);
} else {
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.colChkInfo.health = sColChkInfoInit.health;
this->actor.colorFilterTimer = 0;
EnHintnuts_SetupWait(this);
diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c
index 2dd6b7d810..43710f7fb0 100644
--- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c
+++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c
@@ -1,7 +1,7 @@
#include "z_en_holl.h"
#include "config.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
/*
* Horizontal holls parameters (`ENHOLL_H_*`)
@@ -100,9 +100,9 @@ static EnHollActionFunc sActionFuncs[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
};
void EnHoll_SetupAction(EnHoll* this, EnHollActionFunc func) {
diff --git a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
index e0a1f34432..9a77366416 100644
--- a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
+++ b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
@@ -8,7 +8,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define HONOTRAP_AT_ACTIVE (1 << 0)
#define HONOTRAP_AC_ACTIVE (1 << 1)
@@ -121,9 +121,9 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit = { 0, 9, 23, 1 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void EnHonotrap_FlameCollisionCheck(EnHonotrap* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index 843427fc8b..075facff4d 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse.h"
+#include "z64horse.h"
#include "global.h"
#include "versions.h"
#include "overlays/actors/ovl_En_In/z_en_in.h"
@@ -12,7 +13,7 @@
#include "assets/objects/object_hni/object_hni.h"
#include "assets/scenes/overworld/spot09/spot09_scene.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef void (*EnHorseCsFunc)(EnHorse*, PlayState*, CsCmdActorCue*);
typedef void (*EnHorseActionFunc)(EnHorse*, PlayState*);
@@ -370,8 +371,8 @@ static RaceInfo sIngoRace = { ARRAY_COUNT(sIngoRaceWaypoints), sIngoRaceWaypoint
static s32 sAnimSoundFrames[] = { 0, 16 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 600, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 600, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 300, ICHAIN_STOP),
};
static u8 sResetNoInput[] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 };
@@ -456,7 +457,7 @@ s32 EnHorse_BgCheckBridgeJumpPoint(EnHorse* this, PlayState* play) {
if (this->actor.speed < 12.8f) {
return false;
}
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
return false;
}
@@ -525,7 +526,7 @@ void EnHorse_RaceWaypointPos(RaceWaypoint* waypoints, s32 index, Vec3f* pos) {
}
void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnAmount) {
- func_8006DD9C(&this->actor, pos, turnAmount);
+ Horse_RotateToPoint(&this->actor, pos, turnAmount);
}
void EnHorse_UpdateIngoRaceInfo(EnHorse* this, PlayState* play, RaceInfo* raceInfo) {
@@ -645,7 +646,7 @@ int func_80A5BBBC(PlayState* play, EnHorse* this, Vec3f* pos) {
return false;
}
eyeDist = Math3D_Vec3f_DistXYZ(pos, &play->view.eye);
- return func_800314D4(play, &this->actor, &sp24, sp20) || eyeDist < 100.0f;
+ return Actor_CullingVolumeTest(play, &this->actor, &sp24, sp20) || eyeDist < 100.0f;
}
void EnHorse_IdleAnimSounds(EnHorse* this, PlayState* play) {
@@ -678,7 +679,7 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) {
if (play->sceneId != SCENE_LON_LON_RANCH ||
//! Same flag checked twice
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
- (GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_6 ||
+ (GET_EVENTINF_INGO_RACE_STATE() != INGO_RACE_STATE_TRAPPED_WIN_EPONA ||
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED))) ||
// always load two spawns inside lon lon
((sHorseSpawns[i].pos.x == 856 && sHorseSpawns[i].pos.y == 0 && sHorseSpawns[i].pos.z == -918) ||
@@ -747,7 +748,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
EnHorse* this = (EnHorse*)thisx;
PlayState* play = play2;
- AREG(6) = 0;
+ R_EXITED_SCENE_RIDING_HORSE = false;
Actor_ProcessInitChain(&this->actor, sInitChain);
EnHorse_ClearDustFlags(&this->dustFlags);
R_EPONAS_SONG_PLAYED = false;
@@ -782,7 +783,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
// params was -1
if (this->actor.params == 0x7FFF) {
- this->actor.params = 1;
+ this->actor.params = HORSE_PTYPE_1;
}
if (play->sceneId == SCENE_LON_LON_BUILDINGS) {
@@ -790,25 +791,25 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
} else if (play->sceneId == SCENE_GERUDOS_FORTRESS && this->type == HORSE_HNI) {
this->stateFlags = ENHORSE_FLAG_18 | ENHORSE_UNRIDEABLE;
} else {
- if (this->actor.params == 3) {
+ if (this->actor.params == HORSE_PTYPE_INGO_SPAWNED_RIDING) {
this->stateFlags = ENHORSE_FLAG_19 | ENHORSE_CANT_JUMP | ENHORSE_UNRIDEABLE;
- } else if (this->actor.params == 6) {
+ } else if (this->actor.params == HORSE_PTYPE_6) {
this->stateFlags = ENHORSE_FLAG_19 | ENHORSE_CANT_JUMP;
- if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0) {
+ if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) {
this->stateFlags &= ~ENHORSE_CANT_JUMP;
this->stateFlags |= ENHORSE_FLAG_26;
- } else if (GET_EVENTINF(EVENTINF_HORSES_06) && this->type == HORSE_HNI) {
+ } else if (GET_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE) && this->type == HORSE_HNI) {
this->stateFlags |= ENHORSE_FLAG_21 | ENHORSE_FLAG_20;
}
- } else if (this->actor.params == 1) {
+ } else if (this->actor.params == HORSE_PTYPE_1) {
this->stateFlags = ENHORSE_FLAG_7;
} else {
this->stateFlags = 0;
}
}
- if (play->sceneId == SCENE_LON_LON_RANCH && GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6 &&
- !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1)) {
+ if (play->sceneId == SCENE_LON_LON_RANCH && GET_EVENTINF_INGO_RACE_STATE() == INGO_RACE_STATE_TRAPPED_WIN_EPONA &&
+ !(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
this->stateFlags |= ENHORSE_FLAG_25;
}
@@ -842,12 +843,13 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
Actor_Kill(&this->actor);
return;
}
- } else if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1) && !IS_DAY) {
+ } else if (!(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) && !IS_DAY) {
Actor_Kill(&this->actor);
return;
}
} else if (play->sceneId == SCENE_STABLE) {
- if (IS_DAY || Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0 || !LINK_IS_ADULT) {
+ if (IS_DAY || Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED ||
+ !LINK_IS_ADULT) {
Actor_Kill(&this->actor);
return;
}
@@ -865,24 +867,25 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
EnHorse_ResetRace(this, play);
EnHorse_ResetHorsebackArchery(this, play);
- if (this->actor.params == 2) {
+ if (this->actor.params == HORSE_PTYPE_INACTIVE) {
EnHorse_InitInactive(this);
- } else if (this->actor.params == 3) {
+ } else if (this->actor.params == HORSE_PTYPE_INGO_SPAWNED_RIDING) {
EnHorse_InitIngoHorse(this);
this->rider = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_IN, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, 1, 1);
ASSERT(this->rider != NULL, "this->race.rider != NULL", "../z_en_horse.c", 3077);
- if (!GET_EVENTINF(EVENTINF_HORSES_06)) {
+ if (!GET_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE)) {
this->ingoHorseMaxSpeed = 12.07f;
} else {
this->ingoHorseMaxSpeed = 12.625f;
}
- } else if (this->actor.params == 7) {
+ } else if (this->actor.params == HORSE_PTYPE_7) {
EnHorse_InitCutscene(this, play);
- } else if (this->actor.params == 8) {
+ } else if (this->actor.params == HORSE_PTYPE_HORSEBACK_ARCHERY) {
EnHorse_InitHorsebackArchery(this);
Interface_InitHorsebackArchery(play);
- } else if (play->sceneId == SCENE_LON_LON_RANCH && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && !DREG(1)) {
+ } else if (play->sceneId == SCENE_LON_LON_RANCH && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
+ !R_DEBUG_FORCE_EPONA_OBTAINED) {
EnHorse_InitFleePlayer(this);
} else {
if (play->sceneId == SCENE_LON_LON_BUILDINGS) {
@@ -918,7 +921,7 @@ void EnHorse_RotateToPlayer(EnHorse* this, PlayState* play) {
void EnHorse_Freeze(EnHorse* this) {
if (this->action != ENHORSE_ACT_CS_UPDATE && this->action != ENHORSE_ACT_HBA) {
- if (sResetNoInput[this->actor.params] != 0 && this->actor.params != 4) {
+ if (!(sResetNoInput[this->actor.params] == 0 || this->actor.params == HORSE_PTYPE_4)) {
this->noInputTimer = 0;
this->noInputTimerMax = 0;
}
@@ -945,10 +948,10 @@ void EnHorse_Frozen(EnHorse* this, PlayState* play) {
this->jntSph.base.ocFlags1 |= OC1_ON;
if (this->playerControlled == true) {
this->stateFlags &= ~ENHORSE_FLAG_7;
- if (this->actor.params == 4) {
+ if (this->actor.params == HORSE_PTYPE_4) {
EnHorse_StartMountedIdleResetAnim(this);
- } else if (this->actor.params == 9) {
- this->actor.params = 5;
+ } else if (this->actor.params == HORSE_PTYPE_PLAYER_SPAWNED_RIDING) {
+ this->actor.params = HORSE_PTYPE_5;
if (play->csCtx.state != CS_STATE_IDLE) {
EnHorse_StartMountedIdle(this);
} else {
@@ -960,8 +963,8 @@ void EnHorse_Frozen(EnHorse* this, PlayState* play) {
} else {
EnHorse_StartMountedIdleResetAnim(this);
}
- if (this->actor.params != 0) {
- this->actor.params = 0;
+ if (this->actor.params != HORSE_PTYPE_0) {
+ this->actor.params = HORSE_PTYPE_0;
return;
}
} else {
@@ -1741,7 +1744,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) {
if (R_EPONAS_SONG_PLAYED && this->type == HORSE_EPONA) {
R_EPONAS_SONG_PLAYED = false;
- if (EnHorse_Spawn(this, play) != 0) {
+ if (EnHorse_Spawn(this, play)) {
#if OOT_VERSION >= PAL_1_0
Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -1758,7 +1761,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) {
if (!(this->stateFlags & ENHORSE_INACTIVE)) {
this->followTimer = 0;
EnHorse_SetFollowAnimation(this, play);
- this->actor.params = 0;
+ this->actor.params = HORSE_PTYPE_0;
this->cyl1.base.ocFlags1 |= OC1_ON;
this->cyl2.base.ocFlags1 |= OC1_ON;
this->jntSph.base.ocFlags1 |= OC1_ON;
@@ -2397,7 +2400,7 @@ void EnHorse_CutsceneUpdate(EnHorse* this, PlayState* play) {
if (play->csCtx.state == 3) {
this->playerControlled = 1;
- this->actor.params = 10;
+ this->actor.params = HORSE_PTYPE_10;
this->action = ENHORSE_ACT_IDLE;
EnHorse_Freeze(this);
return;
@@ -3592,7 +3595,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
this->stateFlags &= ~ENHORSE_FLAG_24;
}
- if (play->sceneId == SCENE_GERUDO_VALLEY && !GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (play->sceneId == SCENE_GERUDO_VALLEY && !GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
EnHorse_CheckBridgeJumps(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
index e4c98beb2e..059cf67682 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
@@ -28,7 +28,7 @@ typedef enum EnHorseAction {
/* 19 */ ENHORSE_ACT_FLEE_PLAYER
} EnHorseAction;
-
+// stateFlags
#define ENHORSE_BOOST (1 << 0) /* 0x1 */
#define ENHORSE_BOOST_DECEL (1 << 1) /* 0x2 */
#define ENHORSE_JUMPING (1 << 2) /* 0x4 */
@@ -90,6 +90,21 @@ typedef enum HorseType {
/* 1 */ HORSE_HNI
} HorseType;
+typedef enum HorseParamType {
+ /* 00 */ HORSE_PTYPE_0,
+ /* 01 */ HORSE_PTYPE_1,
+ /* 02 */ HORSE_PTYPE_INACTIVE, // Waits for Epona's Song to appear
+ /* 03 */ HORSE_PTYPE_INGO_SPAWNED_RIDING,
+ /* 04 */ HORSE_PTYPE_4,
+ /* 05 */ HORSE_PTYPE_5,
+ /* 06 */ HORSE_PTYPE_6,
+ /* 07 */ HORSE_PTYPE_7,
+ /* 08 */ HORSE_PTYPE_HORSEBACK_ARCHERY,
+ /* 09 */ HORSE_PTYPE_PLAYER_SPAWNED_RIDING,
+ /* 10 */ HORSE_PTYPE_10,
+ /* 11 */ HORSE_PTYPE_11
+} HorseParamType;
+
typedef void (*EnHorsePostdrawFunc)(struct EnHorse*, struct PlayState*);
typedef struct EnHorse {
diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
index 839b25df2b..b201607cf4 100644
--- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
+++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c
@@ -6,8 +6,9 @@
#include "z_en_horse_game_check.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
+#include "line_numbers.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define AT_FINISH_LINE(actor) \
(Math3D_PointInSquare2D(sFinishLine[0], sFinishLine[1], sFinishLine[2], sFinishLine[3], (actor)->world.pos.x, \
@@ -16,15 +17,15 @@
(Math3D_PointInSquare2D(sRanchExit[0], sRanchExit[1], sRanchExit[2], sRanchExit[3], (actor)->world.pos.x, \
(actor)->world.pos.z))
-#define INGORACE_PLAYER_MOVE (1 << 0)
-#define INGORACE_SET_TIMER (1 << 1)
-#define INGORACE_INGO_MOVE (1 << 2)
+#define INGO_RACE_PLAYER_MOVE (1 << 0)
+#define INGO_RACE_SET_TIMER (1 << 1)
+#define INGO_RACE_INGO_MOVE (1 << 2)
typedef enum HorseGameIngoRaceResult {
- /* 0 */ INGORACE_NO_RESULT,
- /* 1 */ INGORACE_PLAYER_WIN,
- /* 2 */ INGORACE_INGO_WIN,
- /* 3 */ INGORACE_TIME_UP
+ /* 0 */ INGO_RACE_NO_RESULT,
+ /* 1 */ INGO_RACE_PLAYER_WIN,
+ /* 2 */ INGO_RACE_INGO_WIN,
+ /* 3 */ INGO_RACE_TIME_UP
} HorseGameIngoRaceResult;
#define MALONRACE_PLAYER_MOVE (1 << 0)
@@ -90,15 +91,12 @@ s32 EnHorseGameCheck_InitIngoRace(EnHorseGameCheckBase* base, PlayState* play) {
this->ingoHorse = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -250.0f, 1.0f, -1650.0f, 0, 0x4000, 0, 0x8003);
if (this->ingoHorse == NULL) {
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../z_en_horse_game_check.c", 382);
-#else
- LogUtils_HungupThread("../z_en_horse_game_check.c", 385);
-#endif
+ LogUtils_HungupThread("../z_en_horse_game_check.c", LN1(382, 385));
}
+
this->startTimer = 0;
this->finishTimer = 0;
- this->result = INGORACE_NO_RESULT;
+ this->result = INGO_RACE_NO_RESULT;
this->playerFinish = 0;
this->ingoFinish = 0;
@@ -111,24 +109,24 @@ s32 EnHorseGameCheck_DestroyIngoRace(EnHorseGameCheckBase* base, PlayState* play
void EnHorseGameCheck_FinishIngoRace(EnHorseGameCheckIngoRace* this, PlayState* play) {
gSaveContext.save.cutsceneIndex = 0;
- if (this->result == INGORACE_PLAYER_WIN) {
+ if (this->result == INGO_RACE_PLAYER_WIN) {
play->nextEntranceIndex = ENTR_LON_LON_RANCH_7;
- if (GET_EVENTINF(EVENTINF_HORSES_06)) {
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_6);
- SET_EVENTINF_HORSES_0F(1);
+ if (GET_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE)) {
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_TRAPPED_WIN_EPONA);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
play->transitionType = TRANS_TYPE_FADE_WHITE;
Environment_ForcePlaySequence(NA_BGM_INGO);
} else {
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_4);
- SET_EVENTINF_HORSES_0F(1);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_FIRST_WIN);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
Environment_ForcePlaySequence(NA_BGM_INGO);
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST);
}
} else {
play->nextEntranceIndex = ENTR_LON_LON_RANCH_8;
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_3);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_PLAYER_LOSE);
play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_BLACK, TCS_FAST);
- SET_EVENTINF_HORSES_0F(1);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
}
DREG(25) = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -142,20 +140,20 @@ s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play)
EnHorse* ingoHorse;
Player* player2 = player;
- if ((this->startTimer > 50) && !(this->startFlags & INGORACE_SET_TIMER)) {
- this->startFlags |= INGORACE_SET_TIMER;
+ if ((this->startTimer > 50) && !(this->startFlags & INGO_RACE_SET_TIMER)) {
+ this->startFlags |= INGO_RACE_SET_TIMER;
Interface_SetTimer(0);
- } else if ((this->startTimer > 80) && (player->rideActor != NULL) && !(this->startFlags & INGORACE_PLAYER_MOVE)) {
+ } else if ((this->startTimer > 80) && (player->rideActor != NULL) && !(this->startFlags & INGO_RACE_PLAYER_MOVE)) {
EnHorse* horse;
- this->startFlags |= INGORACE_PLAYER_MOVE;
+ this->startFlags |= INGO_RACE_PLAYER_MOVE;
horse = (EnHorse*)player->rideActor;
horse->inRace = 1;
- } else if ((this->startTimer > 81) && !(this->startFlags & INGORACE_INGO_MOVE)) {
+ } else if ((this->startTimer > 81) && !(this->startFlags & INGO_RACE_INGO_MOVE)) {
ingoHorse = (EnHorse*)this->ingoHorse;
ingoHorse->inRace = 1;
- this->startFlags |= INGORACE_INGO_MOVE;
+ this->startFlags |= INGO_RACE_INGO_MOVE;
Audio_PlaySfxGeneral(NA_SE_SY_START_SHOT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
@@ -180,11 +178,11 @@ s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play)
}
}
- if (this->result == INGORACE_NO_RESULT) {
+ if (this->result == INGO_RACE_NO_RESULT) {
if ((player2->rideActor != NULL) && (this->playerCheck[2] == 1) && AT_FINISH_LINE(player2->rideActor)) {
this->playerFinish++;
if (this->playerFinish > 0) {
- this->result = INGORACE_PLAYER_WIN;
+ this->result = INGO_RACE_PLAYER_WIN;
this->finishTimer = 55;
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_HORSE_GOAL);
Audio_PlaySfxGeneral(NA_SE_SY_START_SHOT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@@ -199,7 +197,7 @@ s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play)
if (this->ingoFinish > 0) {
ingoHorse = (EnHorse*)this->ingoHorse;
- this->result = INGORACE_INGO_WIN;
+ this->result = INGO_RACE_INGO_WIN;
this->finishTimer = 70;
ingoHorse->stateFlags |= ENHORSE_INGO_WON;
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_HORSE_GOAL);
@@ -212,12 +210,12 @@ s32 EnHorseGameCheck_UpdateIngoRace(EnHorseGameCheckBase* base, PlayState* play)
}
if (((player2->rideActor != NULL) && AT_RANCH_EXIT(player2->rideActor)) || AT_RANCH_EXIT(&player2->actor)) {
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_HORSE_GOAL);
- this->result = INGORACE_INGO_WIN;
+ this->result = INGO_RACE_INGO_WIN;
this->finishTimer = 20;
}
if ((gSaveContext.timerSeconds >= 180) && (this->startFlags & 2)) {
SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, 0, NA_BGM_HORSE_GOAL);
- this->result = INGORACE_TIME_UP;
+ this->result = INGO_RACE_TIME_UP;
this->finishTimer = 20;
}
} else {
@@ -449,7 +447,8 @@ void EnHorseGameCheck_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnHorseGameCheckBase* this = (EnHorseGameCheckBase*)thisx;
- if ((play->sceneId == SCENE_LON_LON_RANCH) && (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1))) {
+ if ((play->sceneId == SCENE_LON_LON_RANCH) &&
+ (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED)) {
this->actor.params = HORSEGAME_MALON_RACE;
}
if (sInitFuncs[this->actor.params] != NULL) {
diff --git a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
index 0612993947..0ce01f2d6e 100644
--- a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
+++ b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
@@ -7,7 +7,7 @@
#include "z_en_horse_ganon.h"
#include "assets/objects/object_horse_ganon/object_horse_ganon.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef struct unk_D_80A69248 {
/* 0x0 */ Vec3s unk_0;
@@ -102,7 +102,7 @@ static unk_D_80A69248 D_80A69248[] = {
static s32 D_80A692B8[] = { 0, 16 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_STOP),
};
static EnHorseGanonActionFunc sActionFuncs[] = { func_80A68AF0, func_80A68DB0 };
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
index c23c2a68de..755916a390 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
@@ -4,10 +4,21 @@
* Description: Young Epona
*/
+#include "global.h"
+#include "gfx.h"
+#include "gfx_setupdl.h"
+#include "ichain.h"
+#include "rand.h"
+#include "regs.h"
+#include "sfx.h"
+#include "z64actor.h"
+#include "z64horse.h"
+#include "z64player.h"
+#include "z64play.h"
#include "z_en_horse_link_child.h"
#include "assets/objects/object_horse_link_child/object_horse_link_child.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnHorseLinkChild_Init(Actor* thisx, PlayState* play);
void EnHorseLinkChild_Destroy(Actor* thisx, PlayState* play);
@@ -136,7 +147,7 @@ f32 func_80A695A4(EnHorseLinkChild* this) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_STOP),
};
void EnHorseLinkChild_Init(Actor* thisx, PlayState* play) {
@@ -451,7 +462,7 @@ void func_80A6A5A4(EnHorseLinkChild* this, PlayState* play) {
yawDiff = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
// 0.7071 = cos(pi/4)
if ((Math_CosS(yawDiff) < 0.7071f) && (this->animationIdx == 2)) {
- func_8006DD9C(&this->actor, &GET_PLAYER(play)->actor.world.pos, 300);
+ Horse_RotateToPoint(&this->actor, &GET_PLAYER(play)->actor.world.pos, 300);
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
@@ -488,9 +499,9 @@ void func_80A6A7D0(EnHorseLinkChild* this, PlayState* play) {
if ((this->animationIdx == 4) || (this->animationIdx == 3) || (this->animationIdx == 2)) {
if (!this->unk_1E8) {
- func_8006DD9C(&this->actor, &player->actor.world.pos, 300);
+ Horse_RotateToPoint(&this->actor, &player->actor.world.pos, 300);
} else {
- func_8006DD9C(&this->actor, &this->actor.home.pos, 300);
+ Horse_RotateToPoint(&this->actor, &this->actor.home.pos, 300);
}
}
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
index a61248c70a..3ad5a449af 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
@@ -2,11 +2,12 @@
#define Z_EN_HORSE_LINK_CHILD_H
#include "ultra64.h"
-#include "global.h"
+#include "z64actor.h"
+#include "z64skin.h"
struct EnHorseLinkChild;
-typedef void (*EnHorseLinkChildActionFunc)(struct EnHorseLinkChild*, PlayState*);
+typedef void (*EnHorseLinkChildActionFunc)(struct EnHorseLinkChild*, struct PlayState*);
typedef struct EnHorseLinkChild {
/* 0x0000 */ Actor actor;
diff --git a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
index 79e8998762..c760dc54d7 100644
--- a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
+++ b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
@@ -177,8 +177,8 @@ f32 func_80A6B30C(EnHorseNormal* this) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 300, ICHAIN_STOP),
};
void EnHorseNormal_Init(Actor* thisx, PlayState* play) {
@@ -216,7 +216,7 @@ void EnHorseNormal_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
return;
}
- } else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
+ } else if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) {
if (this->actor.world.rot.z != 7) {
Actor_Kill(&this->actor);
return;
@@ -276,7 +276,7 @@ void EnHorseNormal_Destroy(Actor* thisx, PlayState* play) {
}
void func_80A6B91C(EnHorseNormal* this, PlayState* play) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->action = HORSE_FOLLOW_PATH;
this->animationIdx = 6;
this->waypoint = 0;
@@ -520,7 +520,7 @@ void func_80A6C6B0(EnHorseNormal* this) {
this->unk_218 = 0.0f;
this->unk_21C = 0;
this->unk_21E = 0;
- this->actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
Animation_Change(&this->skin.skelAnime, sAnimations[this->animationIdx], func_80A6B30C(this), 0.0f,
Animation_GetLastFrame(sAnimations[this->animationIdx]), ANIMMODE_ONCE, 0.0f);
}
diff --git a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
index dd8068cd2c..04b7b19336 100644
--- a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
+++ b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
@@ -7,7 +7,7 @@
#include "z_en_horse_zelda.h"
#include "assets/objects/object_horse_zelda/object_horse_zelda.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnHorseZelda_Init(Actor* thisx, PlayState* play);
void EnHorseZelda_Destroy(Actor* thisx, PlayState* play);
@@ -97,7 +97,7 @@ static HorsePosSpeed sHorseFieldPositions[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_STOP),
};
static EnHorseZeldaActionFunc sActionFuncs[] = {
diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
index b5c521da2d..66d12bafb2 100644
--- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c
+++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
@@ -206,7 +206,7 @@ void func_80A6E9AC(EnHs* this, PlayState* play) {
s16 yawDiff;
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- if (func_8002F368(play) == EXCH_ITEM_COJIRO) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_COJIRO) {
player->actor.textId = 0x10B2;
func_80A6E3A0(this, func_80A6E8CC);
Animation_Change(&this->skelAnime, &object_hs_Anim_000304, 1.0f, 0.0f,
diff --git a/src/overlays/actors/ovl_En_Hy/z_en_hy.c b/src/overlays/actors/ovl_En_Hy/z_en_hy.c
index b861717e86..2aa163d0fb 100644
--- a/src/overlays/actors/ovl_En_Hy/z_en_hy.c
+++ b/src/overlays/actors/ovl_En_Hy/z_en_hy.c
@@ -16,7 +16,7 @@
#include "assets/objects/object_cob/object_cob.h"
#include "assets/objects/object_os_anime/object_os_anime.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnHy_Init(Actor* thisx, PlayState* play);
void EnHy_Destroy(Actor* thisx, PlayState* play);
@@ -605,7 +605,7 @@ u16 EnHy_GetTextId(PlayState* play, Actor* thisx) {
switch (ENHY_GET_TYPE(&this->actor)) {
case ENHY_TYPE_DOG_LADY:
if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) {
- return (this->talonEventChkInf & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
+ return (this->talonEventChkInf & EVENTCHKINF_MASK(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO))
? 0x508D
: (GET_INFTABLE(INFTABLE_CB) ? 0x508C : 0x508B);
} else if (play->sceneId == SCENE_MARKET_DAY) {
@@ -738,7 +738,7 @@ u16 EnHy_GetTextId(PlayState* play, Actor* thisx) {
if (!LINK_IS_ADULT) {
return GET_EVENTCHKINF(EVENTCHKINF_80) ? 0x505F : (GET_INFTABLE(INFTABLE_163) ? 0x505E : 0x505D);
} else {
- return (this->talonEventChkInf & EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_MASK)
+ return (this->talonEventChkInf & EVENTCHKINF_MASK(EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO))
? 0x5062
: (GET_INFTABLE(INFTABLE_164) ? 0x5061 : 0x5060);
}
@@ -957,7 +957,7 @@ void EnHy_OfferBuyBottledItem(EnHy* this, PlayState* play) {
if (ENHY_GET_TYPE(&this->actor) == ENHY_TYPE_BEGGAR) {
if (!Inventory_HasSpecificBottle(ITEM_BOTTLE_BLUE_FIRE) && !Inventory_HasSpecificBottle(ITEM_BOTTLE_BUG) &&
!Inventory_HasSpecificBottle(ITEM_BOTTLE_FISH)) {
- switch (func_8002F368(play)) {
+ switch (Actor_GetPlayerExchangeItemId(play)) {
case EXCH_ITEM_BOTTLE_POE:
case EXCH_ITEM_BOTTLE_BIG_POE:
case EXCH_ITEM_BOTTLE_RUTOS_LETTER:
@@ -971,7 +971,7 @@ void EnHy_OfferBuyBottledItem(EnHy* this, PlayState* play) {
break;
}
} else {
- switch (func_8002F368(play)) {
+ switch (Actor_GetPlayerExchangeItemId(play)) {
case EXCH_ITEM_BOTTLE_BLUE_FIRE:
this->actor.textId = 0x70F0;
break;
@@ -1160,12 +1160,12 @@ void EnHy_WaitForObjects(EnHy* this, PlayState* play) {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, sModelInfo[ENHY_GET_TYPE(&this->actor)].animInfoIndex);
if ((play->sceneId == SCENE_BACK_ALLEY_DAY) || (play->sceneId == SCENE_MARKET_DAY)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
- this->actor.uncullZoneScale = 0.0f;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
+ this->actor.cullingVolumeScale = 0.0f;
}
if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) {
- this->talonEventChkInf = gSaveContext.save.info.eventChkInf[EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX];
+ this->talonEventChkInf = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_TALON_RETURNED_FROM_KAKARIKO];
}
EnHy_InitSetProperties(this);
diff --git a/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c b/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
index 386b8c5e26..a0fc6e7bde 100644
--- a/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
+++ b/src/overlays/actors/ovl_En_Ice_Hono/z_en_ice_hono.c
@@ -79,21 +79,21 @@ static ColliderCylinderInit sCylinderInitDroppedFlame = {
static InitChainEntry sInitChainCapturableFlame[] = {
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_0, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 60, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static InitChainEntry sInitChainDroppedFlame[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static InitChainEntry sInitChainSmallFlame[] = {
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
f32 EnIceHono_XZDistanceSquared(Vec3f* v1, Vec3f* v2) {
diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
index 223b2a515c..e95e5d4fac 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -10,7 +10,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef void (*EnIkDrawFunc)(struct EnIk*, PlayState*);
@@ -1528,7 +1528,7 @@ void EnIk_StartDefeatCutscene(Actor* thisx, PlayState* play) {
Cutscene_SetScript(play, gSpiritBossNabooruKnuckleDefeatCs);
gSaveContext.cutsceneTrigger = 1;
Actor_SetScale(&this->actor, 0.01f);
- SET_EVENTCHKINF(EVENTCHKINF_3C);
+ SET_EVENTCHKINF(EVENTCHKINF_DEFEATED_NABOORU_KNUCKLE);
EnIk_SetupCsAction3(this, play);
}
}
@@ -1537,7 +1537,8 @@ void EnIk_Init(Actor* thisx, PlayState* play) {
EnIk* this = (EnIk*)thisx;
s32 upperParams = IK_GET_UPPER_PARAMS(&this->actor);
- if (((IK_GET_ARMOR_TYPE(&this->actor) == IK_TYPE_NABOORU) && GET_EVENTCHKINF(EVENTCHKINF_3C)) ||
+ if (((IK_GET_ARMOR_TYPE(&this->actor) == IK_TYPE_NABOORU) &&
+ GET_EVENTCHKINF(EVENTCHKINF_DEFEATED_NABOORU_KNUCKLE)) ||
(upperParams != 0 && Flags_GetSwitch(play, upperParams >> 8))) {
Actor_Kill(&this->actor);
} else {
diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c
index acb7c46e39..7ce346f633 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -3,7 +3,7 @@
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
#include "assets/objects/object_in/object_in.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnIn_Init(Actor* thisx, PlayState* play);
void EnIn_Destroy(Actor* thisx, PlayState* play);
@@ -72,6 +72,14 @@ typedef enum EnInAnimation {
/* 9 */ ENIN_ANIM_9
} EnInAnimation;
+typedef enum EnInStartMode {
+ /* 0 */ ENIN_START_MODE_0,
+ /* 1 */ ENIN_START_MODE_1,
+ /* 2 */ ENIN_START_MODE_2,
+ /* 3 */ ENIN_START_MODE_3,
+ /* 4 */ ENIN_START_MODE_4
+} EnInStartMode;
+
static AnimationFrameCountInfo sAnimationInfo[] = {
{ &object_in_Anim_001CC0, 1.0f, ANIMMODE_LOOP, 0.0f }, { &object_in_Anim_001CC0, 1.0f, ANIMMODE_LOOP, -10.0f },
{ &object_in_Anim_013C6C, 1.0f, ANIMMODE_LOOP, 0.0f }, { &object_in_Anim_013C6C, 1.0f, ANIMMODE_LOOP, -10.0f },
@@ -140,8 +148,8 @@ u16 EnIn_GetTextIdAdult(PlayState* play) {
if (IS_NIGHT) {
return 0x204E;
}
- switch (GET_EVENTINF_HORSES_STATE()) {
- case EVENTINF_HORSES_STATE_1:
+ switch (GET_EVENTINF_INGO_RACE_STATE()) {
+ case INGO_RACE_STATE_HORSE_RENTAL_PERIOD:
if (!(player->stateFlags1 & PLAYER_STATE1_23)) {
return 0x2036;
} else if (GET_EVENTCHKINF(EVENTCHKINF_1B)) {
@@ -153,24 +161,27 @@ u16 EnIn_GetTextIdAdult(PlayState* play) {
} else {
return 0x2037;
}
- case EVENTINF_HORSES_STATE_3:
- if (GET_EVENTINF(EVENTINF_HORSES_06) || GET_EVENTINF(EVENTINF_HORSES_05)) {
+ case INGO_RACE_STATE_PLAYER_LOSE:
+ if (GET_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE) || GET_EVENTINF(EVENTINF_INGO_RACE_LOST_ONCE)) {
return 0x203E;
} else {
return 0x203D;
}
- case EVENTINF_HORSES_STATE_4:
+ case INGO_RACE_STATE_FIRST_WIN:
return 0x203A;
- case EVENTINF_HORSES_STATE_5:
- case EVENTINF_HORSES_STATE_6:
+ case INGO_RACE_STATE_TRAPPED_WIN_UNUSED:
+ case INGO_RACE_STATE_TRAPPED_WIN_EPONA:
return 0x203C;
- case EVENTINF_HORSES_STATE_7:
+ case INGO_RACE_STATE_REMATCH:
+ // Ask to race again after losing race
return 0x205B;
- case EVENTINF_HORSES_STATE_2:
+ case INGO_RACE_STATE_RACING:
default:
if (GET_INFTABLE(INFTABLE_9A)) {
+ // Pay to Ride
return 0x2031;
} else {
+ // Adult Ingo first dialog, branches to pay to ride
return 0x2030;
}
}
@@ -256,9 +267,9 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) {
talkState = NPC_TALK_STATE_ACTION;
} else {
Message_ContinueTextbox(play, this->actor.textId = 0x2039);
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0);
- CLEAR_EVENTINF(EVENTINF_HORSES_05);
- CLEAR_EVENTINF(EVENTINF_HORSES_06);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_OFFER_RENTAL);
+ CLEAR_EVENTINF(EVENTINF_INGO_RACE_LOST_ONCE);
+ CLEAR_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE);
this->actionFunc = func_80A7A4C8;
}
break;
@@ -361,40 +372,40 @@ s32 func_80A7975C(EnIn* this, PlayState* play) {
return 1;
}
-s32 func_80A79830(EnIn* this, PlayState* play) {
+s32 EnIn_GetStartMode(EnIn* this, PlayState* play) {
if (play->sceneId == SCENE_LON_LON_RANCH && LINK_IS_CHILD && IS_DAY && this->actor.shape.rot.z == 1 &&
!GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
- return 1;
+ return ENIN_START_MODE_1;
}
if (play->sceneId == SCENE_STABLE && LINK_IS_CHILD && IS_DAY && this->actor.shape.rot.z == 3 &&
GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
- return 1;
+ return ENIN_START_MODE_1;
}
if (play->sceneId == SCENE_STABLE && LINK_IS_CHILD && IS_NIGHT) {
if ((this->actor.shape.rot.z == 2) && !GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
- return 1;
+ return ENIN_START_MODE_1;
}
if ((this->actor.shape.rot.z == 4) && GET_EVENTCHKINF(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE)) {
- return 1;
+ return ENIN_START_MODE_1;
}
}
if (play->sceneId == SCENE_LON_LON_RANCH && LINK_IS_ADULT && IS_DAY) {
if ((this->actor.shape.rot.z == 5) && !GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
- return 2;
+ return ENIN_START_MODE_2;
}
if ((this->actor.shape.rot.z == 7) && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
- return 4;
+ return ENIN_START_MODE_4;
}
}
if (play->sceneId == SCENE_LON_LON_BUILDINGS && LINK_IS_ADULT && IS_NIGHT) {
if (this->actor.shape.rot.z == 6 && !GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
- return 3;
+ return ENIN_START_MODE_3;
}
if (this->actor.shape.rot.z == 8 && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
- return 3;
+ return ENIN_START_MODE_3;
}
}
- return 0;
+ return ENIN_START_MODE_0;
}
void EnIn_UpdateEyes(EnIn* this) {
@@ -434,7 +445,7 @@ void func_80A79BAC(EnIn* this, PlayState* play, s32 index, u32 transitionType) {
Player_SetCsActionWithHaltedActors(play, &this->actor, PLAYER_CSACTION_8);
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
if (index == 0) {
- AREG(6) = 0;
+ R_EXITED_SCENE_RIDING_HORSE = false;
}
gSaveContext.timerState = TIMER_STATE_OFF;
}
@@ -489,7 +500,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
respawnPos = respawn->pos;
// hardcoded coords for lon lon entrance
if (D_80A7B998 == 0 && respawnPos.x == 1107.0f && respawnPos.y == 0.0f && respawnPos.z == -3740.0f) {
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = 0;
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = 0;
D_80A7B998 = 1;
}
this->actionFunc = EnIn_WaitForObject;
@@ -506,7 +517,7 @@ void EnIn_Destroy(Actor* thisx, PlayState* play) {
// This function does not actually wait since it waits for OBJECT_IN,
// but the object is already loaded at this point from being set in the ActorProfile data
void EnIn_WaitForObject(EnIn* this, PlayState* play) {
- s32 sp3C = 0;
+ s32 staySpawned = false;
if (Object_IsLoaded(&play->objectCtx, this->requiredObjectSlot) || this->actor.params <= 0) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
@@ -515,7 +526,7 @@ void EnIn_WaitForObject(EnIn* this, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
if (func_80A7975C(this, play)) {
- SET_EVENTINF_HORSES_0F(0);
+ WRITE_EVENTINF_INGO_RACE_0F(0);
return;
}
Actor_SetScale(&this->actor, 0.01f);
@@ -523,83 +534,83 @@ void EnIn_WaitForObject(EnIn* this, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
this->actionFunc = func_80A7A4BC;
- switch (func_80A79830(this, play)) {
- case 1:
+ switch (EnIn_GetStartMode(this, play)) {
+ case ENIN_START_MODE_1:
EnIn_ChangeAnim(this, ENIN_ANIM_9);
this->actionFunc = func_80A7A4BC;
break;
- case 3:
+ case ENIN_START_MODE_3:
EnIn_ChangeAnim(this, ENIN_ANIM_7);
this->actionFunc = func_80A7A4BC;
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
this->actor.params = 5;
}
break;
- case 4:
+ case ENIN_START_MODE_4:
EnIn_ChangeAnim(this, ENIN_ANIM_8);
this->eyeIndex = 3;
this->actionFunc = func_80A7A4BC;
break;
- case 0:
+ case ENIN_START_MODE_0:
Actor_Kill(&this->actor);
break;
- default:
- switch (GET_EVENTINF_HORSES_STATE()) {
- case EVENTINF_HORSES_STATE_0:
- case EVENTINF_HORSES_STATE_2:
- case EVENTINF_HORSES_STATE_3:
- case EVENTINF_HORSES_STATE_4:
- case EVENTINF_HORSES_STATE_7:
+ default: // ENIN_START_MODE_2
+ switch (GET_EVENTINF_INGO_RACE_STATE()) {
+ case INGO_RACE_STATE_OFFER_RENTAL:
+ case INGO_RACE_STATE_RACING:
+ case INGO_RACE_STATE_PLAYER_LOSE:
+ case INGO_RACE_STATE_FIRST_WIN:
+ case INGO_RACE_STATE_REMATCH:
if (this->actor.params == 2) {
- sp3C = 1;
+ staySpawned = true;
}
break;
- case EVENTINF_HORSES_STATE_1:
+ case INGO_RACE_STATE_HORSE_RENTAL_PERIOD:
if (this->actor.params == 3) {
- sp3C = 1;
+ staySpawned = true;
}
break;
- case EVENTINF_HORSES_STATE_5:
- case EVENTINF_HORSES_STATE_6:
+ case INGO_RACE_STATE_TRAPPED_WIN_UNUSED:
+ case INGO_RACE_STATE_TRAPPED_WIN_EPONA:
if (this->actor.params == 4) {
- sp3C = 1;
+ staySpawned = true;
}
break;
}
- if (sp3C != 1) {
+ if (staySpawned != true) {
Actor_Kill(&this->actor);
return;
}
- switch (GET_EVENTINF_HORSES_STATE()) {
- case EVENTINF_HORSES_STATE_0:
- case EVENTINF_HORSES_STATE_2:
+ switch (GET_EVENTINF_INGO_RACE_STATE()) {
+ case INGO_RACE_STATE_OFFER_RENTAL:
+ case INGO_RACE_STATE_RACING:
EnIn_ChangeAnim(this, ENIN_ANIM_2);
this->actionFunc = func_80A7A4C8;
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] = 0;
+ gSaveContext.eventInf[EVENTINF_INDEX_HORSES] = 0;
break;
- case EVENTINF_HORSES_STATE_1:
+ case INGO_RACE_STATE_HORSE_RENTAL_PERIOD:
this->actor.attentionRangeType = ATTENTION_RANGE_3;
EnIn_ChangeAnim(this, ENIN_ANIM_2);
this->actionFunc = func_80A7A568;
Interface_SetTimer(60);
break;
- case EVENTINF_HORSES_STATE_3:
+ case INGO_RACE_STATE_PLAYER_LOSE:
EnIn_ChangeAnim(this, ENIN_ANIM_4);
this->actionFunc = func_80A7A770;
break;
- case EVENTINF_HORSES_STATE_4:
+ case INGO_RACE_STATE_FIRST_WIN:
EnIn_ChangeAnim(this, ENIN_ANIM_6);
this->unk_1EC = 8;
this->actionFunc = func_80A7A940;
break;
- case EVENTINF_HORSES_STATE_5:
- case EVENTINF_HORSES_STATE_6:
+ case INGO_RACE_STATE_TRAPPED_WIN_UNUSED:
+ case INGO_RACE_STATE_TRAPPED_WIN_EPONA:
this->actor.attentionRangeType = ATTENTION_RANGE_3;
EnIn_ChangeAnim(this, ENIN_ANIM_6);
this->unk_1EC = 8;
this->actionFunc = func_80A7AA40;
break;
- case EVENTINF_HORSES_STATE_7:
+ case INGO_RACE_STATE_REMATCH:
EnIn_ChangeAnim(this, ENIN_ANIM_2);
this->actionFunc = func_80A7A848;
break;
@@ -640,8 +651,8 @@ void func_80A7A4BC(EnIn* this, PlayState* play) {
void func_80A7A4C8(EnIn* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
func_80A79BAC(this, play, 1, TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_BLACK, TCS_FAST));
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_1);
- SET_EVENTINF_HORSES_0F(1);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_HORSE_RENTAL_PERIOD);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
CLEAR_INFTABLE(INFTABLE_A2);
Environment_ForcePlaySequence(NA_BGM_HORSE);
play->msgCtx.stateTimer = 0;
@@ -672,8 +683,8 @@ void func_80A7A568(EnIn* this, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
return;
}
- SET_EVENTINF_HORSES_HORSETYPE(((EnHorse*)GET_PLAYER(play)->rideActor)->type);
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_2);
+ WRITE_EVENTINF_INGO_RACE_HORSETYPE(((EnHorse*)GET_PLAYER(play)->rideActor)->type);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_RACING);
phi_a2 = 2;
transitionType = TRANS_TYPE_FADE_BLACK;
} else {
@@ -685,13 +696,13 @@ void func_80A7A568(EnIn* this, PlayState* play) {
SET_INFTABLE(INFTABLE_AB);
}
}
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_OFFER_RENTAL);
phi_a2 = 0;
transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_BLACK, TCS_FAST);
}
func_80A79BAC(this, play, phi_a2, transitionType);
play->msgCtx.stateTimer = 0;
- SET_EVENTINF_HORSES_0F(1);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
}
@@ -705,11 +716,10 @@ void func_80A7A770(EnIn* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
EnIn_ChangeAnim(this, ENIN_ANIM_3);
this->actionFunc = func_80A7A848;
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_7);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_REMATCH);
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] =
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & 0xFFFF) | EVENTINF_HORSES_05_MASK;
- if (!GET_EVENTINF(EVENTINF_HORSES_06)) {
+ SET_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_LOST_ONCE);
+ if (!GET_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE)) {
play->msgCtx.stateTimer = 4;
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
}
@@ -720,18 +730,18 @@ void func_80A7A848(EnIn* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
if ((play->msgCtx.choiceIndex == 0 && gSaveContext.save.info.playerData.rupees < 50) ||
play->msgCtx.choiceIndex == 1) {
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_OFFER_RENTAL);
this->actionFunc = func_80A7A4C8;
} else {
func_80A79BAC(this, play, 2, TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_BLACK, TCS_FAST));
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_2);
- SET_EVENTINF_HORSES_0F(1);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_RACING);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
play->msgCtx.stateTimer = 0;
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
}
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
- CLEAR_EVENTINF(EVENTINF_HORSES_05);
- CLEAR_EVENTINF(EVENTINF_HORSES_06);
+ CLEAR_EVENTINF(EVENTINF_INGO_RACE_LOST_ONCE);
+ CLEAR_EVENTINF(EVENTINF_INGO_RACE_SECOND_RACE);
}
}
@@ -749,13 +759,12 @@ void func_80A7A940(EnIn* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
func_80A79BAC(this, play, 2, TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_BLACK, TCS_FAST));
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_2);
- SET_EVENTINF_HORSES_0F(1);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_RACING);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
play->msgCtx.stateTimer = 0;
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
- gSaveContext.eventInf[EVENTINF_HORSES_INDEX] =
- (gSaveContext.eventInf[EVENTINF_HORSES_INDEX] & 0xFFFF) | EVENTINF_HORSES_06_MASK;
+ SET_EVENTINF_INGO_RACE_FLAG(EVENTINF_INGO_RACE_SECOND_RACE);
}
}
@@ -904,8 +913,8 @@ void func_80A7B024(EnIn* this, PlayState* play) {
}
func_80A79BAC(this, play, 0, TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_BLACK, TCS_FAST));
- SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0);
- SET_EVENTINF_HORSES_0F(1);
+ SET_EVENTINF_INGO_RACE_STATE(INGO_RACE_STATE_OFFER_RENTAL);
+ WRITE_EVENTINF_INGO_RACE_0F(1);
play->msgCtx.stateTimer = 4;
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
@@ -925,7 +934,7 @@ void EnIn_Update(Actor* thisx, PlayState* play) {
if (this->actionFunc != func_80A7A304) {
SkelAnime_Update(&this->skelAnime);
if (this->skelAnime.animation == &object_in_Anim_001BE0 &&
- GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_6) {
+ GET_EVENTINF_INGO_RACE_STATE() != INGO_RACE_STATE_TRAPPED_WIN_EPONA) {
func_80A79690(&this->skelAnime, this, play);
}
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_2);
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
index 991c9de3ca..5fcc053a69 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -94,9 +94,9 @@ static u16 sInitInsectFlags[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 700, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 20, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 600, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 700, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 20, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 600, ICHAIN_STOP),
};
void EnInsect_InitFlags(EnInsect* this) {
@@ -203,7 +203,7 @@ void EnInsect_Init(Actor* thisx, PlayState* play2) {
if (this->insectFlags & INSECT_FLAG_IS_SHORT_LIVED) {
this->lifeTimer = Rand_S16Offset(200, 40);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
if (type == INSECT_TYPE_FIRST_DROPPED || type == INSECT_TYPE_EXTRA_DROPPED) {
diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
index e0e0dc1d50..b0f3dc5473 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -293,16 +293,16 @@ static InitChainEntry sInitChains[][5] = {
{
ICHAIN_F32_DIV1000(gravity, -1200, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(minVelocityY, -20000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 150, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 150, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 400, ICHAIN_STOP),
},
{
ICHAIN_F32_DIV1000(gravity, -2500, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(minVelocityY, -20000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 250, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 250, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 500, ICHAIN_STOP),
},
};
@@ -312,7 +312,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChains[type]);
if (play->csCtx.state != CS_STATE_IDLE) {
- this->actor.uncullZoneForward += 1000.0f;
+ this->actor.cullingVolumeDistance += 1000.0f;
}
if (this->actor.shape.rot.y == 0) {
this->actor.shape.rot.y = this->actor.world.rot.y = Rand_ZeroFloat(0x10000);
@@ -382,7 +382,7 @@ void EnIshi_Wait(EnIshi* this, PlayState* play) {
void EnIshi_SetupLiftedUp(EnIshi* this) {
this->actionFunc = EnIshi_LiftedUp;
this->actor.room = -1;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
void EnIshi_LiftedUp(EnIshi* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Jj/z_en_jj.c b/src/overlays/actors/ovl_En_Jj/z_en_jj.c
index 999e97cd24..a03c20c9ea 100644
--- a/src/overlays/actors/ovl_En_Jj/z_en_jj.c
+++ b/src/overlays/actors/ovl_En_Jj/z_en_jj.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_jj/object_jj.h"
#include "overlays/actors/ovl_Eff_Dust/z_eff_dust.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum EnJjEyeState {
/* 0 */ JABUJABU_EYE_OPEN,
@@ -68,9 +68,9 @@ static ColliderCylinderInit sCylinderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 87, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 3300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1100, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 3300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1100, ICHAIN_STOP),
};
void EnJj_SetupAction(EnJj* this, EnJjActionFunc actionFunc) {
@@ -96,7 +96,7 @@ void EnJj_Init(Actor* thisx, PlayState* play2) {
this->extraBlinkCounter = 0;
this->extraBlinkTotal = 0;
- if (GET_EVENTCHKINF(EVENTCHKINF_3A)) { // Fish given
+ if (GET_EVENTCHKINF(EVENTCHKINF_OPENED_JABU_JABU)) {
EnJj_SetupAction(this, EnJj_WaitToOpenMouth);
} else {
EnJj_SetupAction(this, EnJj_WaitForFish);
@@ -214,11 +214,11 @@ void EnJj_BeginCutscene(EnJj* this, PlayState* play) {
this->cutsceneCountdownTimer--;
} else {
EnJj_SetupAction(this, EnJj_RemoveDust);
- play->csCtx.script = D_80A88164;
+ play->csCtx.script = gJabuInhalingCs;
gSaveContext.cutsceneTrigger = 1;
DynaPoly_DisableCollision(play, &play->colCtx.dyna, bodyCollisionActor->bgId);
Camera_SetFinishedFlag(GET_ACTIVE_CAM(play));
- SET_EVENTCHKINF(EVENTCHKINF_3A);
+ SET_EVENTCHKINF(EVENTCHKINF_OPENED_JABU_JABU);
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
}
}
diff --git a/src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.inc.c b/src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.inc.c
index 14331f81d8..0cf56d63e6 100644
--- a/src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.inc.c
@@ -2,25 +2,25 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_80A88164[] = {
- CS_BEGIN_CUTSCENE(26, 1629),
+static CutsceneData gJabuInhalingCs[] = {
+ CS_HEADER(26, 1629),
CS_PLAYER_CUE_LIST(4),
CS_PLAYER_CUE(PLAYER_CUEID_5, 0, 240, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_3, 240, 255, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_6, 255, 285, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_32, 285, 300, 0x0000, 0xC000, 0x0000, -1732, 52, -44, -1537, 109, -44, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(68, 4),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_7, 4),
CS_ACTOR_CUE(0x0001, 0, 234, 0x0000, 0x4000, 0x0000, -1665, 52, -44, -1665, 52, -44, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_ACTOR_CUE(0x0002, 234, 241, 0x41F8, 0x0000, 0x0000, -1665, 52, -44, -1603, 130, -47, CS_FLOAT(0x410DB6DB, 8.857142f), CS_FLOAT(0x41324925, 11.142858f), CS_FLOAT(0xC10DB6DB, -8.857142f)),
CS_ACTOR_CUE(0x0002, 241, 280, 0x4031, 0x0000, 0x0000, -1603, 130, -47, -549, 130, -52, CS_FLOAT(0x41D83483, 27.02564f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xC1D83483, -27.02564f)),
CS_ACTOR_CUE(0x0003, 280, 300, 0x0000, 0x0000, 0x0000, -549, 130, -52, -549, 130, -52, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(67, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_2_4, 5),
CS_ACTOR_CUE(0x0001, 0, 93, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 93, 121, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0001, 121, 146, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 146, 241, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0001, 241, 441, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(69, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_2_5, 3),
CS_ACTOR_CUE(0x0001, 0, 90, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -33, 9, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 90, 330, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -62, 22, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBDF77777, -0.12083333f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 330, 380, 0x0000, 0x0000, 0x0000, 0, -62, 22, 0, -62, 22, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -151,8 +151,8 @@ static CutsceneData D_80A88164[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42726667, 60.600002f), -1721, 82, -42, 0x0000),
CS_TRANSITION(CS_TRANS_BLACK_FILL_IN, 335, 342),
CS_DESTINATION(CS_DEST_JABU_JABU, 345, 395),
- CS_ACTOR_CUE_LIST(62, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 1),
CS_ACTOR_CUE(0x0001, 305, 494, 0x0000, 0x0000, 0x0000, -1399, 452, -53, -1399, 452, -53, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c b/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
index 0a496cfc39..8a6c5c39ef 100644
--- a/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
+++ b/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c
@@ -8,9 +8,9 @@
#include "terminal.h"
#include "assets/objects/object_ka/object_ka.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_UPDATE_DURING_OCARINA | \
- ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA | ACTOR_FLAG_LOCK_ON_DISABLED)
static ColliderCylinderInit sCylinderInit = {
{
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
index a1a0369a4a..d3dce9d5aa 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -10,7 +10,7 @@
#include "assets/objects/object_kanban/object_kanban.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
#define PART_UPPER_LEFT (1 << 0)
#define PART_LEFT_UPPER (1 << 1)
diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
index f17108e82e..cdba59e661 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
@@ -178,7 +178,7 @@ void EnKarebaba_SetupDying(EnKarebaba* this) {
this->actor.world.rot.y = this->actor.shape.rot.y + 0x8000;
this->actor.speed = 3.0f;
Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
- this->actor.flags |= ACTOR_FLAG_4 | ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->actionFunc = EnKarebaba_Dying;
}
@@ -191,7 +191,7 @@ void EnKarebaba_SetupDeadItemDrop(EnKarebaba* this, PlayState* play) {
this->actor.shape.shadowScale = 3.0f;
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_MISC);
this->actor.params = 200;
- this->actor.flags &= ~ACTOR_FLAG_5;
+ this->actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->actionFunc = EnKarebaba_DeadItemDrop;
}
@@ -399,7 +399,7 @@ void EnKarebaba_Regrow(EnKarebaba* this, PlayState* play) {
this->actor.world.pos.y = this->actor.home.pos.y + (14.0f * scaleFactor);
if (this->actor.params == 20) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE;
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
EnKarebaba_SetupIdle(this);
diff --git a/src/overlays/actors/ovl_En_Ko/z_en_ko.c b/src/overlays/actors/ovl_En_Ko/z_en_ko.c
index 0eca2870da..b9013cbbe1 100644
--- a/src/overlays/actors/ovl_En_Ko/z_en_ko.c
+++ b/src/overlays/actors/ovl_En_Ko/z_en_ko.c
@@ -12,7 +12,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
#define ENKO_TYPE PARAMS_GET_S(this->actor.params, 0, 8)
#define ENKO_PATH PARAMS_GET_S(this->actor.params, 8, 8)
@@ -991,7 +991,7 @@ void func_80A9877C(EnKo* this, PlayState* play) {
ENKO_TYPE == ENKO_TYPE_CHILD_FADO && play->sceneId == SCENE_LOST_WOODS) {
this->actor.textId = INV_CONTENT(ITEM_TRADE_ADULT) > ITEM_ODD_POTION ? 0x10B9 : 0x10DF;
- if (func_8002F368(play) == EXCH_ITEM_ODD_POTION) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_ODD_POTION) {
#if OOT_VERSION < NTSC_1_1
this->actor.textId = GET_INFTABLE(INFTABLE_B6) ? 0x10B8 : 0x10B7;
#else
@@ -1172,7 +1172,7 @@ void EnKo_Destroy(Actor* thisx, PlayState* play) {
void func_80A99048(EnKo* this, PlayState* play) {
if (EnKo_IsOsAnimeLoaded(this, play) && EnKo_AreObjectsLoaded(this, play)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.objectSlot = this->legsObjectSlot;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[this->actor.objectSlot].segment);
SkelAnime_InitFlex(play, &this->skelAnime, sSkeleton[sModelInfo[ENKO_TYPE].legsId].flexSkeletonHeader, NULL,
diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
index 5f865d2387..0d938f45c6 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -12,7 +12,7 @@
#include "assets/objects/object_kusa/object_kusa.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_THROW_ONLY)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_THROW_ONLY)
void EnKusa_Init(Actor* thisx, PlayState* play);
void EnKusa_Destroy(Actor* thisx, PlayState* play2);
@@ -88,8 +88,8 @@ static s16 sFragmentScales[] = { 108, 102, 96, 84, 66, 55, 42, 38 };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 400, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(gravity, -3200, ICHAIN_CONTINUE),
- ICHAIN_F32_DIV1000(minVelocityY, -17000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 120, ICHAIN_STOP),
+ ICHAIN_F32_DIV1000(minVelocityY, -17000, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDownward, 120, ICHAIN_STOP),
};
void EnKusa_SetupAction(EnKusa* this, EnKusaActionFunc actionFunc) {
@@ -234,7 +234,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
if (play->csCtx.state != CS_STATE_IDLE) {
- this->actor.uncullZoneForward += 1000.0f;
+ this->actor.cullingVolumeDistance += 1000.0f;
}
EnKusa_InitCollider(thisx, play);
@@ -286,13 +286,13 @@ void EnKusa_WaitForObject(EnKusa* this, PlayState* play) {
this->actor.draw = EnKusa_Draw;
this->actor.objectSlot = this->requiredObjectSlot;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
void EnKusa_SetupMain(EnKusa* this) {
EnKusa_SetupAction(this, EnKusa_Main);
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
void EnKusa_Main(EnKusa* this, PlayState* play) {
@@ -340,7 +340,7 @@ void EnKusa_Main(EnKusa* this, PlayState* play) {
void EnKusa_SetupLiftedUp(EnKusa* this) {
EnKusa_SetupAction(this, EnKusa_LiftedUp);
this->actor.room = -1;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
void EnKusa_LiftedUp(EnKusa* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Kz/z_en_kz.c b/src/overlays/actors/ovl_En_Kz/z_en_kz.c
index 18ea64aa3e..a4aaf4e1ca 100644
--- a/src/overlays/actors/ovl_En_Kz/z_en_kz.c
+++ b/src/overlays/actors/ovl_En_Kz/z_en_kz.c
@@ -74,7 +74,7 @@ u16 EnKz_GetTextIdChild(PlayState* play, EnKz* this) {
if (CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
return 0x402B;
- } else if (GET_EVENTCHKINF(EVENTCHKINF_33)) {
+ } else if (GET_EVENTCHKINF(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA)) {
return 0x401C;
} else {
player->exchangeItemId = EXCH_ITEM_BOTTLE_RUTOS_LETTER;
@@ -291,8 +291,8 @@ void func_80A9CB18(EnKz* this, PlayState* play) {
if (EnKz_UpdateTalking(play, &this->actor, &this->interactInfo.talkState, 340.0f, EnKz_GetTextId,
EnKz_UpdateTalkState)) {
- if ((this->actor.textId == 0x401A) && !GET_EVENTCHKINF(EVENTCHKINF_33)) {
- if (func_8002F368(play) == EXCH_ITEM_BOTTLE_RUTOS_LETTER) {
+ if ((this->actor.textId == 0x401A) && !GET_EVENTCHKINF(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA)) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_BOTTLE_RUTOS_LETTER) {
this->actor.textId = 0x401B;
this->sfxPlayed = false;
} else {
@@ -304,7 +304,7 @@ void func_80A9CB18(EnKz* this, PlayState* play) {
if (LINK_IS_ADULT) {
if ((INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_PRESCRIPTION) &&
- (func_8002F368(play) == EXCH_ITEM_PRESCRIPTION)) {
+ (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_PRESCRIPTION)) {
this->actor.textId = 0x4014;
this->sfxPlayed = false;
player->actor.textId = this->actor.textId;
@@ -389,7 +389,7 @@ void EnKz_Init(Actor* thisx, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_0);
- if (GET_EVENTCHKINF(EVENTCHKINF_33)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA)) {
EnKz_SetMovedPos(this, play);
}
@@ -455,7 +455,7 @@ void EnKz_Mweep(EnKz* this, PlayState* play) {
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_1);
Inventory_ReplaceItem(play, ITEM_BOTTLE_RUTOS_LETTER, ITEM_BOTTLE_EMPTY);
EnKz_SetMovedPos(this, play);
- SET_EVENTCHKINF(EVENTCHKINF_33);
+ SET_EVENTCHKINF(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA);
this->actor.speed = 0.0;
this->actionFunc = EnKz_StopMweep;
}
@@ -494,7 +494,7 @@ void EnKz_SetupGetItem(EnKz* this, PlayState* play) {
this->actionFunc = EnKz_StartTimer;
} else {
#if OOT_VERSION < PAL_1_0
- getItemId = func_8002F368(play) == EXCH_ITEM_PRESCRIPTION ? GI_EYEBALL_FROG : GI_TUNIC_ZORA;
+ getItemId = Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_PRESCRIPTION ? GI_EYEBALL_FROG : GI_TUNIC_ZORA;
#else
getItemId = this->isTrading == true ? GI_EYEBALL_FROG : GI_TUNIC_ZORA;
#endif
diff --git a/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c b/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c
index ab27f30954..c2b6ca1d6c 100644
--- a/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c
+++ b/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c
@@ -7,7 +7,7 @@
#include "z_en_lightbox.h"
#include "assets/objects/object_lightbox/object_lightbox.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnLightbox_Init(Actor* thisx, PlayState* play);
void EnLightbox_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
index f8c42427d0..d0c16c3a72 100644
--- a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
+++ b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
@@ -7,9 +7,9 @@
#include "z_en_ma1.h"
#include "assets/objects/object_ma1/object_ma1.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5 | \
- ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnMa1_Init(Actor* thisx, PlayState* play);
void EnMa1_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
index 7131f697b5..a4a4a17049 100644
--- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
+++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
@@ -1,9 +1,9 @@
#include "z_en_ma2.h"
#include "assets/objects/object_ma2/object_ma2.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5 | \
- ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnMa2_Init(Actor* thisx, PlayState* play);
void EnMa2_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
index 6b7297223a..69dc0d907a 100644
--- a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
+++ b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c
@@ -8,7 +8,9 @@
#include "assets/objects/object_ma2/object_ma2.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnMa3_Init(Actor* thisx, PlayState* play);
void EnMa3_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
index 653ea2934c..b5a520d2a4 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
@@ -12,7 +12,7 @@
#endif
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnMag_Init(Actor* thisx, PlayState* play);
void EnMag_Destroy(Actor* thisx, PlayState* play);
@@ -642,7 +642,8 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
#endif
}
-#if OOT_NTSC
+ // TODO: implement for iQue
+#if OOT_NTSC && !PLATFORM_IQUE
if (gSaveContext.language == LANGUAGE_JPN) {
this->unk_E30C++;
gDPPipeSync(gfx++);
@@ -690,11 +691,11 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
gDPLoadTextureBlock(gfx++, gTitleCopyright1998Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
-#elif OOT_VERSION < GC_US
+#elif PLATFORM_GC && OOT_VERSION < GC_US
gDPLoadTextureBlock(gfx++, gTitleCopyright19982002Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
-#elif OOT_NTSC
+#elif PLATFORM_GC && OOT_NTSC
if (gSaveContext.language == LANGUAGE_JPN) {
gDPLoadTextureBlock(gfx++, gTitleCopyright19982002Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
@@ -704,10 +705,12 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) {
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
}
-#else
+#elif PLATFORM_GC && OOT_PAL
gDPLoadTextureBlock(gfx++, gTitleCopyright19982003Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 160, 16, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
+#elif PLATFORM_IQUE
+ // TODO: implement for iQue
#endif
#if PLATFORM_N64
diff --git a/src/overlays/actors/ovl_En_Mb/z_en_mb.c b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
index ac745b9dbf..1e97b32486 100644
--- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c
+++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
@@ -15,7 +15,7 @@
* - "Spear Patrol" (variable 0xPP00 PP=pathId): uses a spear, patrols following a path, charges
*/
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum EnMbType {
/* -1 */ ENMB_TYPE_SPEAR_GUARD = -1,
@@ -293,9 +293,9 @@ void EnMb_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.02f);
this->bodyCollider.dim.height = 170;
this->bodyCollider.dim.radius = 45;
- this->actor.uncullZoneForward = 4000.0f;
- this->actor.uncullZoneScale = 800.0f;
- this->actor.uncullZoneDownward = 1800.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
+ this->actor.cullingVolumeScale = 800.0f;
+ this->actor.cullingVolumeDownward = 1800.0f;
this->playerDetectionRange = 710.0f;
this->attackCollider.elem.atDmgInfo.dmgFlags = DMG_UNBLOCKABLE;
diff --git a/src/overlays/actors/ovl_En_Md/z_en_md.c b/src/overlays/actors/ovl_En_Md/z_en_md.c
index 82453526c2..d8838f74ec 100644
--- a/src/overlays/actors/ovl_En_Md/z_en_md.c
+++ b/src/overlays/actors/ovl_En_Md/z_en_md.c
@@ -8,18 +8,20 @@
#include "assets/objects/object_md/object_md.h"
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnMd_Init(Actor* thisx, PlayState* play);
void EnMd_Destroy(Actor* thisx, PlayState* play);
void EnMd_Update(Actor* thisx, PlayState* play);
void EnMd_Draw(Actor* thisx, PlayState* play);
-void func_80AAB874(EnMd* this, PlayState* play);
-void func_80AAB8F8(EnMd* this, PlayState* play);
-void func_80AAB948(EnMd* this, PlayState* play);
-void func_80AABC10(EnMd* this, PlayState* play);
-void func_80AABD0C(EnMd* this, PlayState* play);
+void EnMd_Idle(EnMd* this, PlayState* play);
+void EnMd_Watch(EnMd* this, PlayState* play);
+void EnMd_BlockPath(EnMd* this, PlayState* play);
+void EnMd_ListenToOcarina(EnMd* this, PlayState* play);
+void EnMd_Walk(EnMd* this, PlayState* play);
ActorProfile En_Md_Profile = {
/**/ ACTOR_EN_MD,
@@ -55,41 +57,56 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-typedef enum EnMdAnimation {
- /* 0 */ ENMD_ANIM_0,
- /* 1 */ ENMD_ANIM_1,
- /* 2 */ ENMD_ANIM_2,
- /* 3 */ ENMD_ANIM_3,
- /* 4 */ ENMD_ANIM_4,
- /* 5 */ ENMD_ANIM_5,
- /* 6 */ ENMD_ANIM_6,
- /* 7 */ ENMD_ANIM_7,
- /* 8 */ ENMD_ANIM_8,
- /* 9 */ ENMD_ANIM_9,
- /* 10 */ ENMD_ANIM_10,
- /* 11 */ ENMD_ANIM_11,
- /* 12 */ ENMD_ANIM_12,
- /* 13 */ ENMD_ANIM_13
-} EnMdAnimation;
+typedef enum EnMdAnimSequence {
+ /* 0x0 */ ENMD_ANIM_SEQ_NONE,
+ /* 0x1 */ ENMD_ANIM_SEQ_IDLE_TO_HALT, // hands on hips -> halt gesture
+ /* 0x2 */ ENMD_ANIM_SEQ_HALT_TO_CURIOUS, // halt gesture -> tilted head
+ /* 0x3 */ ENMD_ANIM_SEQ_WALK_AWAY, // stop halt gesture -> start walking -> walking
+ /* 0x4 */ ENMD_ANIM_SEQ_TWITCH_IDLE_UNUSED, // start walking -> hands on hips; never set
+ /* 0x5 */ ENMD_ANIM_SEQ_HALT_TO_IDLE, // halt gesture -> hands on hips
+ /* 0x6 */ ENMD_ANIM_SEQ_SURPRISE_TO_ANNOYED, // slightly raise arms from hips -> look away
+ /* 0x7 */ ENMD_ANIM_SEQ_SURPRISE_TO_IDLE, // lower slightly raised arms to hips -> hands on hips
+ /* 0x8 */ ENMD_ANIM_SEQ_CURIOUS_TO_ANNOYED, // tilted head and *slam* -> looking away
+ /* 0x9 */ ENMD_ANIM_SEQ_ANNOYED_TO_HALT, // looking away -> halt gesture
+ /* 0xA */ ENMD_ANIM_SEQ_IDLE_TO_ANNOYED, // hands on hips -> looking away
+ /* 0xB */ ENMD_ANIM_SEQ_STOP_WALKING // stop walking -> hands on hips
+} EnMdAnimSequence;
+
+typedef enum EnMdAnimIndex {
+ /* 0 */ ENMD_ANIM_INDEX_IDLE_DEFAULT, // hands on hips; default idle
+ /* 1 */ ENMD_ANIM_INDEX_IDLE_UNUSED, // hands on hips; never set
+ /* 2 */ ENMD_ANIM_INDEX_IDLE_TO_HALT, // hands on hips -> halt gesture
+ /* 3 */ ENMD_ANIM_INDEX_HALT, // halt gesture
+ /* 4 */ ENMD_ANIM_INDEX_HALT_TO_CURIOUS, // halt gesture -> tilted head
+ /* 5 */ ENMD_ANIM_INDEX_CURIOUS, // tilted head
+ /* 6 */ ENMD_ANIM_INDEX_ANNOYED, // looking away
+ /* 7 */ ENMD_ANIM_INDEX_IDLE_TO_WALK, // hands on hips -> walking
+ /* 8 */ ENMD_ANIM_INDEX_WALK, // walking
+ /* 9 */ ENMD_ANIM_INDEX_IDLE_TO_SURPISE, // hands on hips -> slightly raised arms
+ /* 10 */ ENMD_ANIM_INDEX_IDLE, // hands on hips
+ /* 11 */ ENMD_ANIM_INDEX_CURIOUS_TO_ANNOYED, // tilted head -> looking away
+ /* 12 */ ENMD_ANIM_INDEX_ANNOYED_TO_HALT, // looking away -> halt gesture
+ /* 13 */ ENMD_ANIM_INDEX_IDLE_TO_ANNOYED // hands on hips -> looking away
+} EnMdAnimIndex;
static AnimationInfo sAnimationInfo[] = {
- { &gMidoHandsOnHipsIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
- { &gMidoHandsOnHipsIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
- { &gMidoRaiseHand1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ { &gMidoIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ { &gMidoIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
+ { &gMidoIdleToHaltAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
{ &gMidoHaltAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
- { &gMidoPutHandDownAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
- { &gMidoAnnoyedPointedHeadIdle1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
- { &gMidoAnnoyedPointedHeadIdle2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
- { &gMidoAnim_92B0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
- { &gMidoWalkingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
- { &gMidoHandsOnHipsTransitionAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
- { &gMidoHandsOnHipsIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
- { &gMidoSlamAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
- { &gMidoRaiseHand2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
- { &gMidoAngryHeadTurnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ { &gMidoHaltToCuriousAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ { &gMidoCuriousAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ { &gMidoAnnoyedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ { &gMidoIdleToWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ { &gMidoWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ { &gMidoIdleToSurpriseAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ { &gMidoIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
+ { &gMidoCuriousToAnnoyedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
+ { &gMidoAnnoyedToHaltAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
+ { &gMidoIdleToAnnoyedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
};
-void func_80AAA250(EnMd* this) {
+void EnMd_ReverseAnimation(EnMd* this) {
f32 startFrame;
startFrame = this->skelAnime.startFrame;
@@ -99,289 +116,290 @@ void func_80AAA250(EnMd* this) {
this->skelAnime.playSpeed = -1.0f;
}
-void func_80AAA274(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_IdleToHalt(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_HALT);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_3);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_HALT);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA308(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_HaltToCurious(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_4);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_HALT_TO_CURIOUS);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_5);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_CURIOUS);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA39C(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_WalkAway(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
- func_80AAA250(this);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_HALT);
+ EnMd_ReverseAnimation(this);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_WALK);
+ this->animSequenceEntry++;
} else {
break;
}
FALLTHROUGH;
case 2:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_8);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_WALK);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA474(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_TwitchIdle_Unused(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_WALK);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA508(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_HaltToIdle(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
- func_80AAA250(this);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_HALT);
+ EnMd_ReverseAnimation(this);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA5A4(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_SurpriseToAnnoyed(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_9);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_SURPISE);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_ANNOYED);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA638(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_SurpriseToIdle(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_9);
- func_80AAA250(this);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_SURPISE);
+ EnMd_ReverseAnimation(this);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA6D4(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_CuriousToAnnoyed(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_11);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_CURIOUS_TO_ANNOYED);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_ANNOYED);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA768(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_AnnoyedToHalt(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_12);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_ANNOYED_TO_HALT);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_3);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_HALT);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA7FC(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_IdleToAnnoyed(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_13);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_ANNOYED);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_ANNOYED);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA890(EnMd* this) {
- switch (this->unk_20A) {
+void EnMd_UpdateAnimSequence_StopWalking(EnMd* this) {
+ switch (this->animSequenceEntry) {
case 0:
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
- func_80AAA250(this);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_TO_WALK);
+ EnMd_ReverseAnimation(this);
+ this->animSequenceEntry++;
FALLTHROUGH;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
- this->unk_20A++;
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE);
+ this->animSequenceEntry++;
}
break;
}
}
-void func_80AAA92C(EnMd* this, u8 arg1) {
- this->unk_20B = arg1;
- this->unk_20A = 0;
+void EnMd_SetAnimSequence(EnMd* this, u8 state) {
+ this->animSequence = state;
+ this->animSequenceEntry = 0;
}
-void func_80AAA93C(EnMd* this) {
- switch (this->unk_20B) {
- case 1:
- func_80AAA274(this);
+void EnMd_UpdateAnimSequence(EnMd* this) {
+ switch (this->animSequence) {
+ case ENMD_ANIM_SEQ_IDLE_TO_HALT:
+ EnMd_UpdateAnimSequence_IdleToHalt(this);
break;
- case 2:
- func_80AAA308(this);
+ case ENMD_ANIM_SEQ_HALT_TO_CURIOUS:
+ EnMd_UpdateAnimSequence_HaltToCurious(this);
break;
- case 3:
- func_80AAA39C(this);
+ case ENMD_ANIM_SEQ_WALK_AWAY:
+ EnMd_UpdateAnimSequence_WalkAway(this);
break;
- case 4:
- func_80AAA474(this);
+ case ENMD_ANIM_SEQ_TWITCH_IDLE_UNUSED:
+ // unreachable
+ EnMd_UpdateAnimSequence_TwitchIdle_Unused(this);
break;
- case 5:
- func_80AAA508(this);
+ case ENMD_ANIM_SEQ_HALT_TO_IDLE:
+ EnMd_UpdateAnimSequence_HaltToIdle(this);
break;
- case 6:
- func_80AAA5A4(this);
+ case ENMD_ANIM_SEQ_SURPRISE_TO_ANNOYED:
+ EnMd_UpdateAnimSequence_SurpriseToAnnoyed(this);
break;
- case 7:
- func_80AAA638(this);
+ case ENMD_ANIM_SEQ_SURPRISE_TO_IDLE:
+ EnMd_UpdateAnimSequence_SurpriseToIdle(this);
break;
- case 8:
- func_80AAA6D4(this);
+ case ENMD_ANIM_SEQ_CURIOUS_TO_ANNOYED:
+ EnMd_UpdateAnimSequence_CuriousToAnnoyed(this);
break;
- case 9:
- func_80AAA768(this);
+ case ENMD_ANIM_SEQ_ANNOYED_TO_HALT:
+ EnMd_UpdateAnimSequence_AnnoyedToHalt(this);
break;
- case 10:
- func_80AAA7FC(this);
+ case ENMD_ANIM_SEQ_IDLE_TO_ANNOYED:
+ EnMd_UpdateAnimSequence_IdleToAnnoyed(this);
break;
- case 11:
- func_80AAA890(this);
+ case ENMD_ANIM_SEQ_STOP_WALKING:
+ EnMd_UpdateAnimSequence_StopWalking(this);
}
}
-void func_80AAAA24(EnMd* this) {
+void EnMd_UpdateAnimSequence_WithTalking(EnMd* this) {
if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) {
switch (this->actor.textId) {
case 0x102F:
- if ((this->unk_208 == 0) && (this->unk_20B != 1)) {
- func_80AAA92C(this, 1);
+ if ((this->messageEntry == 0) && (this->animSequence != ENMD_ANIM_SEQ_IDLE_TO_HALT)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_IDLE_TO_HALT);
}
- if ((this->unk_208 == 2) && (this->unk_20B != 2)) {
- func_80AAA92C(this, 2);
+ if ((this->messageEntry == 2) && (this->animSequence != ENMD_ANIM_SEQ_HALT_TO_CURIOUS)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_HALT_TO_CURIOUS);
}
- if ((this->unk_208 == 5) && (this->unk_20B != 8)) {
- func_80AAA92C(this, 8);
+ if ((this->messageEntry == 5) && (this->animSequence != ENMD_ANIM_SEQ_CURIOUS_TO_ANNOYED)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_CURIOUS_TO_ANNOYED);
}
- if ((this->unk_208 == 11) && (this->unk_20B != 9)) {
- func_80AAA92C(this, 9);
+ if ((this->messageEntry == 11) && (this->animSequence != ENMD_ANIM_SEQ_ANNOYED_TO_HALT)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_ANNOYED_TO_HALT);
}
break;
case 0x1033:
- if ((this->unk_208 == 0) && (this->unk_20B != 1)) {
- func_80AAA92C(this, 1);
+ if ((this->messageEntry == 0) && (this->animSequence != ENMD_ANIM_SEQ_IDLE_TO_HALT)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_IDLE_TO_HALT);
}
- if ((this->unk_208 == 1) && (this->unk_20B != 2)) {
- func_80AAA92C(this, 2);
+ if ((this->messageEntry == 1) && (this->animSequence != ENMD_ANIM_SEQ_HALT_TO_CURIOUS)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_HALT_TO_CURIOUS);
}
- if ((this->unk_208 == 5) && (this->unk_20B != 10)) {
- func_80AAA92C(this, 10);
+ if ((this->messageEntry == 5) && (this->animSequence != ENMD_ANIM_SEQ_IDLE_TO_ANNOYED)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_IDLE_TO_ANNOYED);
}
- if ((this->unk_208 == 7) && (this->unk_20B != 9)) {
- func_80AAA92C(this, 9);
+ if ((this->messageEntry == 7) && (this->animSequence != ENMD_ANIM_SEQ_ANNOYED_TO_HALT)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_ANNOYED_TO_HALT);
}
break;
case 0x1030:
case 0x1034:
case 0x1045:
- if ((this->unk_208 == 0) && (this->unk_20B != 1)) {
- func_80AAA92C(this, 1);
+ if ((this->messageEntry == 0) && (this->animSequence != ENMD_ANIM_SEQ_IDLE_TO_HALT)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_IDLE_TO_HALT);
}
break;
case 0x1046:
- if ((this->unk_208 == 0) && (this->unk_20B != 6)) {
- func_80AAA92C(this, 6);
+ if ((this->messageEntry == 0) && (this->animSequence != ENMD_ANIM_SEQ_SURPRISE_TO_ANNOYED)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_SURPRISE_TO_ANNOYED);
}
break;
}
- } else if (this->skelAnime.animation != &gMidoHandsOnHipsIdleAnim) {
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
- func_80AAA92C(this, 0);
+ } else if (this->skelAnime.animation != &gMidoIdleAnim) {
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE);
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_NONE);
}
- func_80AAA93C(this);
+ EnMd_UpdateAnimSequence(this);
}
-s16 func_80AAAC78(EnMd* this, PlayState* play) {
- s16 dialogState = Message_GetState(&play->msgCtx);
+s16 EnMd_TrackMessageState(EnMd* this, PlayState* play) {
+ s16 messageState = Message_GetState(&play->msgCtx);
- if ((this->unk_209 == TEXT_STATE_AWAITING_NEXT) || (this->unk_209 == TEXT_STATE_EVENT) ||
- (this->unk_209 == TEXT_STATE_CLOSING) || (this->unk_209 == TEXT_STATE_DONE_HAS_NEXT)) {
- if (this->unk_209 != dialogState) {
- this->unk_208++;
+ if ((this->messageState == TEXT_STATE_AWAITING_NEXT) || (this->messageState == TEXT_STATE_EVENT) ||
+ (this->messageState == TEXT_STATE_CLOSING) || (this->messageState == TEXT_STATE_DONE_HAS_NEXT)) {
+ if (this->messageState != messageState) {
+ this->messageEntry++;
}
}
- this->unk_209 = dialogState;
- return dialogState;
+ this->messageState = messageState;
+ return messageState;
}
u16 EnMd_GetTextIdKokiriForest(PlayState* play, EnMd* this) {
@@ -391,8 +409,8 @@ u16 EnMd_GetTextIdKokiriForest(PlayState* play, EnMd* this) {
return textId;
}
- this->unk_208 = 0;
- this->unk_209 = TEXT_STATE_NONE;
+ this->messageEntry = 0;
+ this->messageState = TEXT_STATE_NONE;
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)) {
return 0x1045;
@@ -415,8 +433,8 @@ u16 EnMd_GetTextIdKokiriForest(PlayState* play, EnMd* this) {
}
u16 EnMd_GetTextIdMidosHouse(PlayState* play, EnMd* this) {
- this->unk_208 = 0;
- this->unk_209 = TEXT_STATE_NONE;
+ this->messageEntry = 0;
+ this->messageState = TEXT_STATE_NONE;
if (GET_EVENTCHKINF(EVENTCHKINF_40)) {
return 0x1028;
@@ -426,8 +444,8 @@ u16 EnMd_GetTextIdMidosHouse(PlayState* play, EnMd* this) {
}
u16 EnMd_GetTextIdLostWoods(PlayState* play, EnMd* this) {
- this->unk_208 = 0;
- this->unk_209 = TEXT_STATE_NONE;
+ this->messageEntry = 0;
+ this->messageState = TEXT_STATE_NONE;
if (GET_EVENTCHKINF(EVENTCHKINF_48)) {
if (GET_INFTABLE(INFTABLE_19)) {
@@ -464,7 +482,7 @@ u16 EnMd_GetTextId(PlayState* play, Actor* thisx) {
s16 EnMd_UpdateTalkState(PlayState* play, Actor* thisx) {
EnMd* this = (EnMd*)thisx;
- switch (func_80AAAC78(this, play)) {
+ switch (EnMd_TrackMessageState(this, play)) {
case TEXT_STATE_NONE:
case TEXT_STATE_DONE_HAS_NEXT:
case TEXT_STATE_DONE_FADING:
@@ -480,7 +498,7 @@ s16 EnMd_UpdateTalkState(PlayState* play, Actor* thisx) {
SET_EVENTCHKINF(EVENTCHKINF_0F);
break;
case 0x102F:
- SET_EVENTCHKINF(EVENTCHKINF_02);
+ SET_EVENTCHKINF(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS);
SET_INFTABLE(INFTABLE_0C);
break;
case 0x1060:
@@ -528,19 +546,19 @@ u8 EnMd_ShouldSpawn(EnMd* this, PlayState* play) {
void EnMd_UpdateEyes(EnMd* this) {
if (DECR(this->blinkTimer) == 0) {
- this->eyeIdx++;
- if (this->eyeIdx > 2) {
+ this->eyeTexIndex++;
+ if (this->eyeTexIndex > 2) {
this->blinkTimer = Rand_S16Offset(30, 30);
- this->eyeIdx = 0;
+ this->eyeTexIndex = 0;
}
}
}
-void func_80AAB158(EnMd* this, PlayState* play) {
+void EnMd_UpdateTalking(EnMd* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 absYawDiff;
s16 trackingMode;
- s16 temp2;
+ s16 canUpdateTalking;
s16 yawDiff;
if (this->actor.xzDistToPlayer < 170.0f) {
@@ -549,23 +567,23 @@ void func_80AAB158(EnMd* this, PlayState* play) {
trackingMode =
absYawDiff <= Npc_GetTrackingPresetMaxPlayerYaw(2) ? NPC_TRACKING_HEAD_AND_TORSO : NPC_TRACKING_NONE;
- temp2 = 1;
+ canUpdateTalking = true;
} else {
trackingMode = NPC_TRACKING_NONE;
- temp2 = 0;
+ canUpdateTalking = false;
}
if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) {
trackingMode = NPC_TRACKING_FULL_BODY;
}
- if (this->actionFunc == func_80AABD0C) {
+ if (this->actionFunc == EnMd_Walk) {
trackingMode = NPC_TRACKING_NONE;
- temp2 = 0;
+ canUpdateTalking = false;
}
- if (this->actionFunc == func_80AAB8F8) {
+ if (this->actionFunc == EnMd_Watch) {
trackingMode = NPC_TRACKING_FULL_BODY;
- temp2 = 1;
+ canUpdateTalking = true;
}
if ((play->csCtx.state != CS_STATE_IDLE) || IS_DEBUG_CAM_ENABLED) {
@@ -578,8 +596,8 @@ void func_80AAB158(EnMd* this, PlayState* play) {
}
Npc_TrackPoint(&this->actor, &this->interactInfo, 2, trackingMode);
- if (this->actionFunc != func_80AABC10) {
- if (temp2) {
+ if (this->actionFunc != EnMd_ListenToOcarina) {
+ if (canUpdateTalking) {
Npc_UpdateTalking(play, &this->actor, &this->interactInfo.talkState, this->collider.dim.radius + 30.0f,
EnMd_GetTextId, EnMd_UpdateTalkState);
}
@@ -592,11 +610,11 @@ u8 EnMd_FollowPath(EnMd* this, PlayState* play) {
f32 pathDiffX;
f32 pathDiffZ;
- if (PARAMS_GET_NOSHIFT(this->actor.params, 8, 8) == 0xFF00) {
+ if (ENMD_GET_PATH_INDEX_NOSHIFT(this) == (ENMD_PATH_NONE << 8)) {
return 0;
}
- path = &play->pathList[PARAMS_GET_S(this->actor.params, 8, 8)];
+ path = &play->pathList[ENMD_GET_PATH_INDEX(this)];
pointPos = SEGMENTED_TO_VIRTUAL(path->points);
pointPos += this->waypoint;
@@ -619,11 +637,11 @@ u8 EnMd_SetMovedPos(EnMd* this, PlayState* play) {
Path* path;
Vec3s* lastPointPos;
- if (PARAMS_GET_NOSHIFT(this->actor.params, 8, 8) == 0xFF00) {
+ if (ENMD_GET_PATH_INDEX_NOSHIFT(this) == (ENMD_PATH_NONE << 8)) {
return 0;
}
- path = &play->pathList[PARAMS_GET_S(this->actor.params, 8, 8)];
+ path = &play->pathList[ENMD_GET_PATH_INDEX(this)];
lastPointPos = SEGMENTED_TO_VIRTUAL(path->points);
lastPointPos += path->count - 1;
@@ -634,15 +652,15 @@ u8 EnMd_SetMovedPos(EnMd* this, PlayState* play) {
return 1;
}
-void func_80AAB5A4(EnMd* this, PlayState* play) {
- f32 temp;
+void EnMd_UpdateAlphaByDistance(EnMd* this, PlayState* play) {
+ f32 radius;
if (play->sceneId != SCENE_MIDOS_HOUSE) {
- temp = (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && !GET_EVENTCHKINF(EVENTCHKINF_1C) &&
- (play->sceneId == SCENE_KOKIRI_FOREST))
- ? 100.0f
- : 400.0f;
- this->alpha = func_80034DD4(&this->actor, play, this->alpha, temp);
+ radius = (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && !GET_EVENTCHKINF(EVENTCHKINF_1C) &&
+ (play->sceneId == SCENE_KOKIRI_FOREST))
+ ? 100.0f
+ : 400.0f;
+ this->alpha = Actor_UpdateAlphaByDistance(&this->actor, play, this->alpha, radius);
this->actor.shape.shadowAlpha = this->alpha;
} else {
this->alpha = 255;
@@ -665,7 +683,7 @@ void EnMd_Init(Actor* thisx, PlayState* play) {
return;
}
- Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_0);
+ Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_INDEX_IDLE_DEFAULT);
Actor_SetScale(&this->actor, 0.01f);
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->alpha = 255;
@@ -677,7 +695,7 @@ void EnMd_Init(Actor* thisx, PlayState* play) {
CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)) ||
((play->sceneId == SCENE_LOST_WOODS) && !GET_EVENTCHKINF(EVENTCHKINF_0A))) {
this->actor.home.pos = this->actor.world.pos;
- this->actionFunc = func_80AAB948;
+ this->actionFunc = EnMd_BlockPath;
return;
}
@@ -685,7 +703,7 @@ void EnMd_Init(Actor* thisx, PlayState* play) {
EnMd_SetMovedPos(this, play);
}
- this->actionFunc = func_80AAB874;
+ this->actionFunc = EnMd_Idle;
}
void EnMd_Destroy(Actor* thisx, PlayState* play) {
@@ -693,30 +711,31 @@ void EnMd_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AAB874(EnMd* this, PlayState* play) {
- if (this->skelAnime.animation == &gMidoHandsOnHipsIdleAnim) {
+void EnMd_Idle(EnMd* this, PlayState* play) {
+ if (this->skelAnime.animation == &gMidoIdleAnim) {
Actor_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENMD_LIMB_MAX);
- } else if ((this->interactInfo.talkState == NPC_TALK_STATE_IDLE) && (this->unk_20B != 7)) {
- func_80AAA92C(this, 7);
+ } else if ((this->interactInfo.talkState == NPC_TALK_STATE_IDLE) &&
+ (this->animSequence != ENMD_ANIM_SEQ_SURPRISE_TO_IDLE)) {
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_SURPRISE_TO_IDLE);
}
- func_80AAAA24(this);
+ EnMd_UpdateAnimSequence_WithTalking(this);
}
-void func_80AAB8F8(EnMd* this, PlayState* play) {
- if (this->skelAnime.animation == &gMidoHandsOnHipsIdleAnim) {
+void EnMd_Watch(EnMd* this, PlayState* play) {
+ if (this->skelAnime.animation == &gMidoIdleAnim) {
Actor_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENMD_LIMB_MAX);
}
- func_80AAA93C(this);
+ EnMd_UpdateAnimSequence(this);
}
-void func_80AAB948(EnMd* this, PlayState* play) {
+void EnMd_BlockPath(EnMd* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 temp;
Actor* actorToBlock = &GET_PLAYER(play)->actor;
s16 yaw;
- func_80AAAA24(this);
+ EnMd_UpdateAnimSequence_WithTalking(this);
if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -747,16 +766,16 @@ void func_80AAB948(EnMd* this, PlayState* play) {
SET_EVENTCHKINF(EVENTCHKINF_0A);
}
- func_80AAA92C(this, 3);
- func_80AAA93C(this);
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_WALK_AWAY);
+ EnMd_UpdateAnimSequence(this);
this->waypoint = 1;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
- this->actionFunc = func_80AABD0C;
+ this->actionFunc = EnMd_Walk;
this->actor.speed = 1.5f;
return;
}
- if (this->skelAnime.animation == &gMidoHandsOnHipsIdleAnim) {
+ if (this->skelAnime.animation == &gMidoIdleAnim) {
Actor_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENMD_LIMB_MAX);
}
@@ -765,7 +784,7 @@ void func_80AAB948(EnMd* this, PlayState* play) {
player->stateFlags2 |= PLAYER_STATE2_25;
player->unk_6A8 = &this->actor;
Message_StartOcarina(play, OCARINA_ACTION_CHECK_SARIA);
- this->actionFunc = func_80AABC10;
+ this->actionFunc = EnMd_ListenToOcarina;
return;
}
@@ -775,11 +794,11 @@ void func_80AAB948(EnMd* this, PlayState* play) {
}
}
-void func_80AABC10(EnMd* this, PlayState* play) {
+void EnMd_ListenToOcarina(EnMd* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (play->msgCtx.ocarinaMode >= OCARINA_MODE_04) {
- this->actionFunc = func_80AAB948;
+ this->actionFunc = EnMd_BlockPath;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
} else if (play->msgCtx.ocarinaMode == OCARINA_MODE_03) {
Audio_PlaySfxGeneral(NA_SE_SY_CORRECT_CHIME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@@ -787,16 +806,16 @@ void func_80AABC10(EnMd* this, PlayState* play) {
this->actor.textId = 0x1067;
Actor_OfferTalk(&this->actor, play, this->collider.dim.radius + 30.0f);
- this->actionFunc = func_80AAB948;
+ this->actionFunc = EnMd_BlockPath;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
} else {
player->stateFlags2 |= PLAYER_STATE2_23;
}
}
-void func_80AABD0C(EnMd* this, PlayState* play) {
+void EnMd_Walk(EnMd* this, PlayState* play) {
Actor_UpdateFidgetTables(play, this->fidgetTableY, this->fidgetTableZ, ENMD_LIMB_MAX);
- func_80AAA93C(this);
+ EnMd_UpdateAnimSequence(this);
if (!(EnMd_FollowPath(this, play)) || (this->waypoint != 0)) {
this->actor.shape.rot = this->actor.world.rot;
@@ -811,12 +830,12 @@ void func_80AABD0C(EnMd* this, PlayState* play) {
return;
}
- func_80AAA92C(this, 11);
+ EnMd_SetAnimSequence(this, ENMD_ANIM_SEQ_STOP_WALKING);
this->skelAnime.playSpeed = 0.0f;
this->actor.speed = 0.0f;
this->actor.home.pos = this->actor.world.pos;
- this->actionFunc = func_80AAB8F8;
+ this->actionFunc = EnMd_Watch;
}
void EnMd_Update(Actor* thisx, PlayState* play) {
@@ -827,9 +846,9 @@ void EnMd_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
SkelAnime_Update(&this->skelAnime);
EnMd_UpdateEyes(this);
- func_80AAB5A4(this, play);
+ EnMd_UpdateAlphaByDistance(this, play);
Actor_MoveXZGravity(&this->actor);
- func_80AAB158(this, play);
+ EnMd_UpdateTalking(this, play);
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_2);
this->actionFunc(this, play);
}
@@ -880,10 +899,10 @@ void EnMd_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_en_md.c", 1280);
if (this->alpha == 255) {
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIdx]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex]));
func_80034BA0(play, &this->skelAnime, EnMd_OverrideLimbDraw, EnMd_PostLimbDraw, &this->actor, this->alpha);
} else if (this->alpha != 0) {
- gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIdx]));
+ gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex]));
func_80034CC4(play, &this->skelAnime, EnMd_OverrideLimbDraw, EnMd_PostLimbDraw, &this->actor, this->alpha);
}
diff --git a/src/overlays/actors/ovl_En_Md/z_en_md.h b/src/overlays/actors/ovl_En_Md/z_en_md.h
index a30ebe047a..6a78a24904 100644
--- a/src/overlays/actors/ovl_En_Md/z_en_md.h
+++ b/src/overlays/actors/ovl_En_Md/z_en_md.h
@@ -29,18 +29,23 @@ typedef enum EnMdLimb {
typedef void (*EnMdActionFunc)(struct EnMd*, PlayState*);
+#define ENMD_GET_PATH_INDEX(this) PARAMS_GET_S(this->actor.params, 8, 8)
+#define ENMD_GET_PATH_INDEX_NOSHIFT(this) PARAMS_GET_NOSHIFT(this->actor.params, 8, 8)
+
+#define ENMD_PATH_NONE 0xFF
+
typedef struct EnMd {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ EnMdActionFunc actionFunc;
/* 0x0194 */ ColliderCylinder collider;
/* 0x01E0 */ NpcInteractInfo interactInfo;
- /* 0x0208 */ u8 unk_208;
- /* 0x0209 */ u8 unk_209;
- /* 0x020A */ u8 unk_20A;
- /* 0x020B */ u8 unk_20B;
+ /* 0x0208 */ u8 messageEntry; // tracks message state changes, like with `BOX_BREAK` or `TEXTID`
+ /* 0x0209 */ u8 messageState; // last known result of `Message_GetState`
+ /* 0x020A */ u8 animSequenceEntry; // each one changes animation info and waits
+ /* 0x020B */ u8 animSequence;
/* 0x020C */ s16 blinkTimer;
- /* 0x020E */ s16 eyeIdx;
+ /* 0x020E */ s16 eyeTexIndex;
/* 0x0210 */ s16 alpha;
/* 0x0212 */ s16 waypoint;
/* 0x0214 */ s16 fidgetTableY[ENMD_LIMB_MAX];
diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
index ab748fe164..df7708a699 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
@@ -7,7 +7,7 @@
#include "z_en_mk.h"
#include "assets/objects/object_mk/object_mk.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnMk_Init(Actor* thisx, PlayState* play);
void EnMk_Destroy(Actor* thisx, PlayState* play);
@@ -216,7 +216,7 @@ void EnMk_Wait(EnMk* this, PlayState* play) {
s32 playerExchangeItem;
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- playerExchangeItem = func_8002F368(play);
+ playerExchangeItem = Actor_GetPlayerExchangeItemId(play);
if (this->actor.textId != 0x4018) {
player->actor.textId = this->actor.textId;
diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
index 1053bfb0af..b081f8304c 100644
--- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c
+++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_mm/object_mm.h"
#include "assets/objects/object_link_child/object_link_child.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum RunningManAnimIndex {
/* 0 */ RM_ANIM_RUN,
@@ -130,7 +130,7 @@ static EnMmPathInfo sPathInfo[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_STOP),
};
void EnMm_ChangeAnim(EnMm* this, s32 index, s32* currentIndex) {
diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
index f4876f70ed..3082b5c35d 100644
--- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
+++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
@@ -8,7 +8,7 @@
#include "terminal.h"
#include "assets/objects/object_mm/object_mm.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum RunningManAnimIndex {
/* 0 */ RM2_ANIM_RUN,
@@ -75,7 +75,7 @@ static AnimationSpeedInfo sAnimationInfo[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_STOP),
};
void EnMm2_ChangeAnim(EnMm2* this, s32 index, s32* currentIndex) {
@@ -100,7 +100,7 @@ void EnMm2_ChangeAnim(EnMm2* this, s32 index, s32* currentIndex) {
}
void func_80AAEF70(EnMm2* this, PlayState* play) {
- if (!GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (!GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
this->actor.textId = 0x6086;
} else if (GET_INFTABLE(INFTABLE_17F)) {
if (GET_EVENTINF(EVENTINF_MARATHON_ACTIVE)) {
diff --git a/src/overlays/actors/ovl_En_Mu/z_en_mu.c b/src/overlays/actors/ovl_En_Mu/z_en_mu.c
index 01c3788df9..dbe5e1b15c 100644
--- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c
+++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c
@@ -64,9 +64,9 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
s32 randomIndex;
s32 i;
- textFlags = gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] &
+ textFlags = gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &
(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
- gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] &=
+ gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] &=
~(EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK);
randomIndex = (play->state.frames + (s32)(Rand_ZeroOne() * 5.0f)) % 5;
@@ -95,7 +95,7 @@ void EnMu_Interact(EnMu* this, PlayState* play) {
textFlags |= bitmask[randomIndex];
this->defaultTextId = textIdOffset[randomIndex] | 0x7000;
textFlags &= EVENTINF_20_MASK | EVENTINF_21_MASK | EVENTINF_22_MASK | EVENTINF_23_MASK | EVENTINF_24_MASK | 0xE0;
- gSaveContext.eventInf[EVENTINF_20_21_22_23_24_INDEX] |= textFlags;
+ gSaveContext.eventInf[EVENTINF_INDEX_20_21_22_23_24] |= textFlags;
}
u16 EnMu_GetTextId(PlayState* play, Actor* thisx) {
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 6c30a3ec0d..983af06780 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_nb/object_nb.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum EnNbAction {
/* 0x00 */ NB_CHAMBER_INIT,
@@ -349,7 +349,7 @@ void EnNb_SetupChamberCsImpl(EnNb* this, PlayState* play) {
if ((gSaveContext.chamberCutsceneNum == CHAMBER_CS_SPIRIT) && !IS_CUTSCENE_LAYER) {
player = GET_PLAYER(play);
this->action = NB_CHAMBER_UNDERGROUND;
- play->csCtx.script = D_80AB431C;
+ play->csCtx.script = gSpiritMedallionCs;
gSaveContext.cutsceneTrigger = 2;
Item_Give(play, ITEM_MEDALLION_SPIRIT);
player->actor.world.rot.y = player->actor.shape.rot.y = this->actor.world.rot.y + 0x8000;
diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb_cutscene_data.inc.c b/src/overlays/actors/ovl_En_Nb/z_en_nb_cutscene_data.inc.c
index 13614e7c31..3c3a68311c 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb_cutscene_data.inc.c
@@ -2,11 +2,11 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_80AB431C[] = {
- CS_BEGIN_CUTSCENE(27, 3011),
+static CutsceneData gSpiritMedallionCs[] = {
+ CS_HEADER(27, 3011),
CS_UNK_DATA_LIST(0x00000020, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(31, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_6_0, 5),
CS_ACTOR_CUE(0x0001, 0, 501, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 501, 502, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 502, 573, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -16,13 +16,13 @@ static CutsceneData D_80AB431C[] = {
CS_PLAYER_CUE(PLAYER_CUEID_13, 0, 240, 0x0000, 0x1555, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 240, 461, 0x0000, 0x1555, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_19, 461, 1616, 0x0000, 0x9555, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(49, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_7_0, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, -16, -121, 0, -16, -121, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_LIGHT_SETTING_LIST(1),
CS_LIGHT_SETTING(0x0003, 0, 3000, 0x0000, 0x00000000, 0xFFFFFF9E, 0x00000000, 0x0000002F, 0xFFFFFF9E, 0x00000000, 0x0000002F, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(39, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_5, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, 0, -2, 0, 0, -2, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(40, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_4, 3),
CS_ACTOR_CUE(0x0001, 0, 145, 0x0000, 0x0000, 0x0000, -97, 6, -167, -97, 6, -167, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 145, 431, 0x0000, 0x0000, 0x0000, -97, 6, -167, -97, 6, -167, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 431, 1399, 0x0000, 0x0000, 0x0000, -97, 6, -167, -97, 6, -167, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -31,16 +31,16 @@ static CutsceneData D_80AB431C[] = {
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 765, 795),
CS_TEXT_LIST(10),
CS_TEXT_NONE(0, 345),
- CS_TEXT(0x6035, 345, 353, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x6035, 345, 353, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(353, 374),
- CS_TEXT(0x6039, 374, 399, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x6039, 374, 399, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(399, 400),
- CS_TEXT(0x603A, 400, 424, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x603A, 400, 424, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(424, 760),
- CS_TEXT(0x003F, 760, 765, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x003F, 760, 765, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(765, 825),
- CS_TEXT(0x6036, 825, 835, 0x0000, 0x0000, 0x0000),
- CS_ACTOR_CUE_LIST(62, 1),
+ CS_TEXT(0x6036, 825, 835, CS_TEXT_NORMAL, 0x0000, 0x0000),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 1),
CS_ACTOR_CUE(0x0004, 0, 3000, 0x0000, 0x0000, 0x0000, 50, 80, 56, 50, 80, 56, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_DESTINATION(CS_DEST_DESERT_COLOSSUS_FROM_CHAMBER_OF_SAGES, 865, 907),
CS_START_SEQ_LIST(1),
@@ -165,6 +165,6 @@ static CutsceneData D_80AB431C[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x013D),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x013F),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x002E),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
index 96c00b42e6..144c76b2cb 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -10,7 +10,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_THROW_ONLY)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_THROW_ONLY)
void EnNiw_Init(Actor* thisx, PlayState* play);
void EnNiw_Destroy(Actor* thisx, PlayState* play);
@@ -66,8 +66,8 @@ static Vec3f sKakarikoPosList[] = {
};
static s16 sKakarikoFlagList[] = {
- INFTABLE_199_MASK, INFTABLE_19A_MASK, INFTABLE_19B_MASK, INFTABLE_19C_MASK,
- INFTABLE_19D_MASK, INFTABLE_19E_MASK, INFTABLE_19F_MASK,
+ INFTABLE_MASK(INFTABLE_199), INFTABLE_MASK(INFTABLE_19A), INFTABLE_MASK(INFTABLE_19B), INFTABLE_MASK(INFTABLE_19C),
+ INFTABLE_MASK(INFTABLE_19D), INFTABLE_MASK(INFTABLE_19E), INFTABLE_MASK(INFTABLE_19F),
};
static u8 sLowerRiverSpawned = false;
@@ -162,7 +162,7 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) {
this->unk_2AA = i;
PRINTF(VT_FGCOL(YELLOW) " 通常鶏index %d\n" VT_RST, this->unk_2AA);
- if (gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &
+ if (gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &
sKakarikoFlagList[i]) {
this->actor.world.pos.x = 300.0f;
this->actor.world.pos.y = 100.0f;
diff --git a/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c b/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
index dab07959e4..6af946ddeb 100644
--- a/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
+++ b/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_gr/object_gr.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnNiwGirl_Init(Actor* thisx, PlayState* play);
void EnNiwGirl_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
index 02887234c5..0415f95bb9 100644
--- a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
+++ b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
@@ -5,7 +5,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnNiwLady_Init(Actor* thisx, PlayState* play);
void EnNiwLady_Destroy(Actor* thisx, PlayState* play);
@@ -43,8 +43,8 @@ static s16 sMissingCuccoTextIds[] = {
};
static s16 D_80ABB3B4[] = {
- INFTABLE_199_MASK, INFTABLE_19A_MASK, INFTABLE_19B_MASK, INFTABLE_19C_MASK,
- INFTABLE_19D_MASK, INFTABLE_19E_MASK, INFTABLE_19F_MASK,
+ INFTABLE_MASK(INFTABLE_199), INFTABLE_MASK(INFTABLE_19A), INFTABLE_MASK(INFTABLE_19B), INFTABLE_MASK(INFTABLE_19C),
+ INFTABLE_MASK(INFTABLE_19D), INFTABLE_MASK(INFTABLE_19E), INFTABLE_MASK(INFTABLE_19F),
};
static ColliderCylinderInit sCylinderInit = {
@@ -88,7 +88,7 @@ void EnNiwLady_Init(Actor* thisx, PlayState* play) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ ねぇちゃんうっふん ☆☆☆☆☆ %d\n" VT_RST, this->unk_278);
PRINTF("\n\n");
this->actionFunc = func_80AB9F24;
- thisx->uncullZoneForward = 600.0f;
+ thisx->cullingVolumeDistance = 600.0f;
}
void EnNiwLady_Destroy(Actor* thisx, PlayState* play) {
@@ -210,7 +210,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) &&
(fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) {
if (this->unk_26C == 0) {
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] |=
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] |=
D_80ABB3B4[currentCucco->unk_2AA];
if (BREG(1) != 0) {
// "GET inside the chicken fence!"
@@ -219,7 +219,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
}
this->cuccosInPen++;
} else if (this->unk_26C == 0) {
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &=
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
~D_80ABB3B4[currentCucco->unk_2AA];
}
}
@@ -276,12 +276,13 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
this->unk_262 = TEXT_STATE_EVENT;
this->unk_26A = this->cuccosInPen;
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更前 ☆☆ %x\n" VT_RST,
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]);
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &=
- (u16) ~(INFTABLE_199_MASK | INFTABLE_19A_MASK | INFTABLE_19B_MASK | INFTABLE_19C_MASK |
- INFTABLE_19D_MASK | INFTABLE_19E_MASK | INFTABLE_19F_MASK);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F] &=
+ (u16) ~(INFTABLE_MASK(INFTABLE_199) | INFTABLE_MASK(INFTABLE_19A) | INFTABLE_MASK(INFTABLE_19B) |
+ INFTABLE_MASK(INFTABLE_19C) | INFTABLE_MASK(INFTABLE_19D) | INFTABLE_MASK(INFTABLE_19E) |
+ INFTABLE_MASK(INFTABLE_19F));
PRINTF(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更後 ☆☆ %x\n" VT_RST,
- gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]);
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_199_19A_19B_19C_19D_19E_19F]);
PRINTF("\n\n");
this->actionFunc = func_80ABA654;
return;
@@ -374,7 +375,7 @@ void func_80ABA878(EnNiwLady* this, PlayState* play) {
this->unk_26E = 11;
}
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- s8 playerExchangeItemId = func_8002F368(play);
+ s8 playerExchangeItemId = Actor_GetPlayerExchangeItemId(play);
if ((playerExchangeItemId == EXCH_ITEM_POCKET_CUCCO) && GET_EVENTCHKINF(EVENTCHKINF_TALON_WOKEN_IN_KAKARIKO)) {
Sfx_PlaySfxCentered(NA_SE_SY_TRE_BOX_APPEAR);
diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
index 016501b5fa..114971a1de 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -12,7 +12,7 @@
#include "assets/objects/object_dns/object_dns.h"
#include "assets/objects/object_dnk/object_dnk.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnNutsball_Init(Actor* thisx, PlayState* play);
void EnNutsball_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
index 00ba57f4ad..a990438adb 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
@@ -7,7 +7,7 @@
#include "z_en_nwc.h"
#include "assets/objects/object_nwc/object_nwc.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnNwc_Init(Actor* thisx, PlayState* play);
void EnNwc_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
index 5738063865..c3f579095c 100644
--- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
+++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
@@ -10,7 +10,7 @@
#include "z64frame_advance.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnOkarinaEffect_Init(Actor* thisx, PlayState* play);
void EnOkarinaEffect_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
index 3632ae5599..94c01448b9 100644
--- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
+++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
@@ -10,7 +10,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnOkarinaTag_Init(Actor* thisx, PlayState* play);
void EnOkarinaTag_Destroy(Actor* thisx, PlayState* play);
@@ -35,8 +35,8 @@ ActorProfile En_Okarina_Tag_Profile = {
/**/ NULL,
};
-extern CutsceneData D_80ABF9D0[];
-extern CutsceneData D_80ABFB40[];
+extern CutsceneData gWindmillSpinningFasterCs[];
+extern CutsceneData gDoorOfTimeOpeningCs[];
void EnOkarinaTag_Destroy(Actor* thisx, PlayState* play) {
}
@@ -204,7 +204,7 @@ void func_80ABF28C(EnOkarinaTag* this, PlayState* play) {
if ((this->ocarinaSong != 6) || (gSaveContext.save.info.scarecrowSpawnSongSet)) {
if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- } else if (((this->type != 4) || !GET_EVENTCHKINF(EVENTCHKINF_4B)) &&
+ } else if (((this->type != 4) || !GET_EVENTCHKINF(EVENTCHKINF_OPENED_DOOR_OF_TIME)) &&
((this->type != 6) || !GET_EVENTCHKINF(EVENTCHKINF_1D)) &&
(this->actor.xzDistToPlayer < (90.0f + this->interactRange)) &&
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 80.0f)) {
@@ -258,19 +258,19 @@ void func_80ABF4C8(EnOkarinaTag* this, PlayState* play) {
SET_EVENTCHKINF(EVENTCHKINF_39);
break;
case 2:
- play->csCtx.script = D_80ABF9D0;
+ play->csCtx.script = gWindmillSpinningFasterCs;
gSaveContext.cutsceneTrigger = 1;
// Increase pitch by 3 semitones i.e. 2^(3/12), scale tempo by same ratio
// Applies to the windmill bgm once the song of storms fanfare is complete
Audio_SetMainBgmTempoFreqAfterFanfare(1.18921f, 90);
break;
case 4:
- play->csCtx.script = D_80ABFB40;
+ play->csCtx.script = gDoorOfTimeOpeningCs;
gSaveContext.cutsceneTrigger = 1;
break;
case 6:
- play->csCtx.script = LINK_IS_ADULT ? SEGMENTED_TO_VIRTUAL(spot02_scene_Cs_003C80)
- : SEGMENTED_TO_VIRTUAL(spot02_scene_Cs_005020);
+ play->csCtx.script = LINK_IS_ADULT ? SEGMENTED_TO_VIRTUAL(gGraveyardTombOpeningAdultCs)
+ : SEGMENTED_TO_VIRTUAL(gGraveyardTombOpeningChildCs);
gSaveContext.cutsceneTrigger = 1;
SET_EVENTCHKINF(EVENTCHKINF_1D);
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag_cutscene_data.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag_cutscene_data.c
index fe0ecb8ecf..f0c0b4d3b3 100644
--- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag_cutscene_data.c
+++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag_cutscene_data.c
@@ -2,8 +2,8 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_80ABF9D0[] = {
- CS_BEGIN_CUTSCENE(4, 360),
+CutsceneData gWindmillSpinningFasterCs[] = {
+ CS_HEADER(4, 360),
CS_DESTINATION(CS_DEST_KAKARIKO_VILLAGE_DRAIN_WELL, 200, 201),
CS_CAM_EYE_SPLINE(0, 331),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42700000, 60.0f), 3100, 201, -100, 0x3235),
@@ -25,11 +25,11 @@ CutsceneData D_80ABF9D0[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 3118, 142, 96, 0x2C20),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_SET_FLAG_FAST_WINDMILL, 30, 31, 0x0000, 0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000002, 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
-CutsceneData D_80ABFB40[] = {
- CS_BEGIN_CUTSCENE(18, 3000),
+CutsceneData gDoorOfTimeOpeningCs[] = {
+ CS_HEADER(18, 3000),
CS_UNK_DATA_LIST(0x00000021, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFAA, 0xFFFFFFAE, 0x00000000, 0xFFFFFFAA, 0xFFFFFFAE, 0x00000000, 0x00000000, 0x00000000),
CS_PLAYER_CUE_LIST(3),
@@ -38,9 +38,9 @@ CutsceneData D_80ABFB40[] = {
CS_PLAYER_CUE(PLAYER_CUEID_5, 201, 662, 0x0000, 0x8000, 0x0000, 0, -40, 1400, 0, -40, 1400, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_TRIFORCE_FLASH, 510, 611, 0x0000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(48, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_5, 1),
CS_ACTOR_CUE(0x0003, 160, 289, 0x0000, 0x0000, 0x0000, 0, 20, 1400, 0, 60, 1400, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x3E9EC27B, 0.31007752f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(48, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_5, 3),
CS_ACTOR_CUE(0x0004, 340, 420, 0x0000, 0x0000, 0x0000, 0, 120, 1335, 0, 40, 1335, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBF800000, -1.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 420, 465, 0x0000, 0x0000, 0x0000, 0, 40, 1335, 0, 16, 1335, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBF088889, -0.53333336f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 465, 519, 0x0000, 0x0000, 0x0000, 0, 16, 1335, 0, 16, 1335, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -132,6 +132,6 @@ CutsceneData D_80ABFB40[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 68, -2, 1424, 0xC9A5),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 68, -2, 1424, 0xA5A2),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x42700000, 60.0f), 68, -2, 1424, 0xA5BB),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
index 5329f4904b..caeb39279d 100644
--- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
+++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
@@ -147,7 +147,7 @@ void EnOkuta_Init(Actor* thisx, PlayState* play) {
} else {
ActorShape_Init(&thisx->shape, 1100.0f, ActorShadow_DrawCircle, 18.0f);
thisx->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- thisx->flags |= ACTOR_FLAG_4;
+ thisx->flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, thisx, &sProjectileColliderInit);
Actor_ChangeCategory(play, &play->actorCtx, thisx, ACTORCAT_PROP);
diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
index 11ac675e34..22d8bb572f 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -14,7 +14,7 @@
#include "assets/objects/object_masterzoora/object_masterzoora.h"
#include "assets/objects/object_masterkokirihead/object_masterkokirihead.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
#if !PLATFORM_GC
#define CURSOR_COLOR_R 0
@@ -877,18 +877,18 @@ void EnOssan_TryPaybackMask(EnOssan* this, PlayState* play) {
Rupees_ChangeBy(-price);
if (this->happyMaskShopState == OSSAN_HAPPY_STATE_REQUEST_PAYMENT_BUNNY_HOOD) {
- SET_EVENTCHKINF(EVENTCHKINF_8F);
+ SET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_BUNNY_HOOD);
Message_ContinueTextbox(play, 0x70A9);
this->happyMaskShopState = OSSAN_HAPPY_STATE_ALL_MASKS_SOLD;
return;
}
if (this->happyMaskShopState == OSSAN_HAPPY_STATE_REQUEST_PAYMENT_KEATON_MASK) {
- SET_EVENTCHKINF(EVENTCHKINF_8C);
+ SET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_KEATON_MASK);
} else if (this->happyMaskShopState == OSSAN_HAPPY_STATE_REQUEST_PAYMENT_SPOOKY_MASK) {
- SET_EVENTCHKINF(EVENTCHKINF_8E);
+ SET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_SPOOKY_MASK);
} else if (this->happyMaskShopState == OSSAN_HAPPY_STATE_REQUEST_PAYMENT_SKULL_MASK) {
- SET_EVENTCHKINF(EVENTCHKINF_8D);
+ SET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_SKULL_MASK);
}
Message_ContinueTextbox(play, 0x70A7);
@@ -2059,7 +2059,7 @@ u16 EnOssan_SetupHelloDialog(EnOssan* this) {
if (this->actor.params == OSSAN_TYPE_MASK) {
if (INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_SOLD_OUT) {
if (GET_ITEMGETINF(ITEMGETINF_3B)) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_8F)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_BUNNY_HOOD)) {
// Pay back Bunny Hood
this->happyMaskShopState = OSSAN_HAPPY_STATE_REQUEST_PAYMENT_BUNNY_HOOD;
return 0x70C6;
@@ -2068,7 +2068,7 @@ u16 EnOssan_SetupHelloDialog(EnOssan* this) {
}
}
if (GET_ITEMGETINF(ITEMGETINF_3A)) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_8E)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_SPOOKY_MASK)) {
// Pay back Spooky Mask
this->happyMaskShopState = OSSAN_HAPPY_STATE_REQUEST_PAYMENT_SPOOKY_MASK;
return 0x70C5;
@@ -2077,7 +2077,7 @@ u16 EnOssan_SetupHelloDialog(EnOssan* this) {
}
}
if (GET_ITEMGETINF(ITEMGETINF_39)) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_8D)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_SKULL_MASK)) {
// Pay back Skull Mask
this->happyMaskShopState = OSSAN_HAPPY_STATE_REQUEST_PAYMENT_SKULL_MASK;
return 0x70C4;
@@ -2086,7 +2086,7 @@ u16 EnOssan_SetupHelloDialog(EnOssan* this) {
}
}
if (GET_ITEMGETINF(ITEMGETINF_38)) {
- if (!GET_EVENTCHKINF(EVENTCHKINF_8C)) {
+ if (!GET_EVENTCHKINF(EVENTCHKINF_PAID_BACK_KEATON_MASK)) {
// Pay back Keaton Mask
this->happyMaskShopState = OSSAN_HAPPY_STATE_REQUEST_PAYMENT_KEATON_MASK;
return 0x70A5;
@@ -2120,7 +2120,7 @@ void EnOssan_InitActionFunc(EnOssan* this, PlayState* play) {
ShopItem* items;
if (EnOssan_AreShopkeeperObjectsLoaded(this, play)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.objectSlot = this->objectSlot1;
Actor_SetObjectDependency(play, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
index 78b170c63d..c5ed802b70 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -10,7 +10,7 @@
#include "assets/scenes/overworld/spot16/spot16_scene.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnOwl_Init(Actor* thisx, PlayState* play);
void EnOwl_Destroy(Actor* thisx, PlayState* play);
@@ -99,9 +99,9 @@ static ColliderCylinderInit sOwlCylinderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 25, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2400, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2400, ICHAIN_STOP),
};
void EnOwl_Init(Actor* thisx, PlayState* play) {
@@ -146,7 +146,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
switch (owlType) {
case OWL_DEFAULT:
this->actionFunc = EnOwl_WaitDefault;
- this->actor.uncullZoneForward = 4000.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
this->unk_40A = 0;
break;
case OWL_OUTSIDE_KOKIRI:
@@ -833,7 +833,7 @@ void func_80ACBAB8(EnOwl* this, PlayState* play) {
}
void func_80ACBC0C(EnOwl* this, PlayState* play) {
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
if (this->actor.xzDistToPlayer > 6000.0f && !(this->actionFlags & 0x80)) {
Actor_Kill(&this->actor);
diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c
index 9651575806..215442f52e 100644
--- a/src/overlays/actors/ovl_En_Part/z_en_part.c
+++ b/src/overlays/actors/ovl_En_Part/z_en_part.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_tite/object_tite.h"
#include "assets/objects/object_ik/object_ik.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnPart_Init(Actor* thisx, PlayState* play);
void EnPart_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
index 8761c568d0..6265f2c5f3 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
@@ -3,7 +3,9 @@
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_SFX_FOR_PLAYER_BODY_HIT)
#define GROUND_HOVER_HEIGHT 75.0f
#define MAX_LARVA 3
@@ -211,15 +213,15 @@ void EnPeehat_Init(Actor* thisx, PlayState* play) {
this->actor.naviEnemyId = NAVI_ENEMY_PEAHAT;
this->xzDistToRise = 740.0f;
this->xzDistMax = 1200.0f;
- this->actor.uncullZoneForward = 4000.0f;
- this->actor.uncullZoneScale = 800.0f;
- this->actor.uncullZoneDownward = 1800.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
+ this->actor.cullingVolumeScale = 800.0f;
+ this->actor.cullingVolumeDownward = 1800.0f;
switch (this->actor.params) {
case PEAHAT_TYPE_GROUNDED:
EnPeehat_Ground_SetStateGround(this);
break;
case PEAHAT_TYPE_FLYING:
- this->actor.uncullZoneForward = 4200.0f;
+ this->actor.cullingVolumeDistance = 4200.0f;
this->xzDistToRise = 2800.0f;
this->xzDistMax = 1400.0f;
EnPeehat_Flying_SetStateGround(this);
@@ -983,7 +985,7 @@ void EnPeehat_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colQuad.base);
}
// if PEAHAT_TYPE_GROUNDED
- if (thisx->params < 0 && (thisx->flags & ACTOR_FLAG_6)) {
+ if (thisx->params < 0 && (thisx->flags & ACTOR_FLAG_INSIDE_CULLING_VOLUME)) {
for (i = 1; i >= 0; i--) {
poly = NULL;
posB = &this->bladeTip[i];
diff --git a/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c b/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c
index d6c5348862..fefa80aecc 100644
--- a/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c
+++ b/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c
@@ -7,7 +7,7 @@
#include "z_en_po_desert.h"
#include "assets/objects/object_po_field/object_po_field.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_REACT_TO_LENS | ACTOR_FLAG_IGNORE_QUAKE)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_REACT_TO_LENS | ACTOR_FLAG_IGNORE_QUAKE)
void EnPoDesert_Init(Actor* thisx, PlayState* play);
void EnPoDesert_Destroy(Actor* thisx, PlayState* play);
@@ -53,7 +53,7 @@ static ColliderCylinderInit sColliderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_S8(naviEnemyId, NAVI_ENEMY_POE_WASTELAND, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
ICHAIN_F32(lockOnArrowOffset, 3200, ICHAIN_STOP),
};
diff --git a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
index 8c694c46fd..b4de777c72 100644
--- a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
+++ b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c
@@ -8,8 +8,9 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_po_field/object_po_field.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_IGNORE_QUAKE)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_IGNORE_QUAKE)
void EnPoField_Init(Actor* thisx, PlayState* play);
void EnPoField_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
index e79cec70c7..e515efabed 100644
--- a/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
+++ b/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
@@ -8,9 +8,9 @@
#include "overlays/actors/ovl_En_Honotrap/z_en_honotrap.h"
#include "assets/objects/object_tk/object_tk.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE | \
- ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED)
void EnPoRelay_Init(Actor* thisx, PlayState* play);
void EnPoRelay_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
index 71ab72ebb4..3af363a28f 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -8,9 +8,9 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_po_sisters/object_po_sisters.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR | \
- ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_ACTOR | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_CAN_ATTACH_TO_ARROW)
void EnPoSisters_Init(Actor* thisx, PlayState* play);
void EnPoSisters_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
index ceebba950c..2168c89e6b 100644
--- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c
+++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
@@ -8,7 +8,8 @@
#include "assets/objects/object_poh/object_poh.h"
#include "assets/objects/object_po_composer/object_po_composer.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_IGNORE_QUAKE)
void EnPoh_Init(Actor* thisx, PlayState* play);
void EnPoh_Destroy(Actor* thisx, PlayState* play);
@@ -372,7 +373,7 @@ void EnPoh_SetupDeath(EnPoh* this, PlayState* play) {
this->actor.draw = EnPoh_DrawSoul;
this->actor.shape.shadowDraw = NULL;
Actor_SetScale(&this->actor, 0.01f);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.gravity = -1.0f;
this->actor.shape.yOffset = 1500.0f;
this->actor.world.pos.y -= 15.0f;
@@ -924,7 +925,7 @@ void EnPoh_Update(Actor* thisx, PlayState* play) {
this->colliderCyl.dim.height = 55;
this->colliderCyl.dim.yShift = 15;
}
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
EnPoh_SetupInitialAction(this);
}
}
diff --git a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
index d9441d5506..495046f95d 100644
--- a/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
+++ b/src/overlays/actors/ovl_En_Pu_box/z_en_pu_box.c
@@ -7,7 +7,7 @@
#include "z_en_pu_box.h"
#include "assets/objects/object_pu_box/object_pu_box.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnPubox_Init(Actor* thisx, PlayState* play);
void EnPubox_Destroy(Actor* thisx, PlayState* play);
@@ -48,8 +48,8 @@ void EnPubox_Init(Actor* thisx, PlayState* play) {
this->unk_164 = 1;
thisx->colChkInfo.cylRadius = 20;
thisx->colChkInfo.cylHeight = 50;
- thisx->uncullZoneDownward = 1200.0f;
- thisx->uncullZoneScale = 720.0f;
+ thisx->cullingVolumeDownward = 1200.0f;
+ thisx->cullingVolumeScale = 720.0f;
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 6.0f);
this->dyna.interactFlags = 0;
this->dyna.transformFlags = 0;
diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
index 89c9e5ff6b..ee6734ea64 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
@@ -1,7 +1,9 @@
#include "z_en_rd.h"
#include "assets/objects/object_rd/object_rd.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
void EnRd_Init(Actor* thisx, PlayState* play);
void EnRd_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c b/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
index d37ffa8c02..685928db80 100644
--- a/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
+++ b/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c
@@ -10,7 +10,9 @@
#include "terminal.h"
#include "assets/objects/object_reeba/object_reeba.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_LOCK_ON_DISABLED)
void EnReeba_Init(Actor* thisx, PlayState* play);
void EnReeba_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
index 8aa760ecaf..a3861adec4 100644
--- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
+++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c
@@ -6,7 +6,7 @@
#include "z_en_river_sound.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnRiverSound_Init(Actor* thisx, PlayState* play);
void EnRiverSound_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Rl/z_en_rl.c b/src/overlays/actors/ovl_En_Rl/z_en_rl.c
index 8271dc4a6c..6d79ef6288 100644
--- a/src/overlays/actors/ovl_En_Rl/z_en_rl.c
+++ b/src/overlays/actors/ovl_En_Rl/z_en_rl.c
@@ -8,7 +8,7 @@
#include "terminal.h"
#include "assets/objects/object_rl/object_rl.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnRl_Init(Actor* thisx, PlayState* play);
void EnRl_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
index 0708af32ef..ff67d09329 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -9,8 +9,9 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
#define RR_MESSAGE_SHIELD (1 << 0)
#define RR_MESSAGE_TUNIC (1 << 1)
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
index 2ea4e87dd3..3586ed73d7 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
@@ -10,7 +10,7 @@
#include "versions.h"
#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4 | ACTOR_FLAG_CAN_PRESS_SWITCHES)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_CAN_PRESS_SWITCHES)
void EnRu1_Init(Actor* thisx, PlayState* play);
void EnRu1_Destroy(Actor* thisx, PlayState* play);
@@ -862,7 +862,7 @@ void func_80AEC780(EnRu1* this, PlayState* play) {
(!(player->stateFlags1 & (PLAYER_STATE1_13 | PLAYER_STATE1_14 | PLAYER_STATE1_21))) &&
(player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
- play->csCtx.script = D_80AF0880;
+ play->csCtx.script = gRutoFirstMeetingCs;
gSaveContext.cutsceneTrigger = 1;
player->speedXZ = 0.0f;
this->action = 8;
@@ -1552,7 +1552,7 @@ s32 func_80AEE394(EnRu1* this, PlayState* play) {
if (dynaPolyActor != NULL && dynaPolyActor->actor.id == ACTOR_BG_BDAN_OBJECTS &&
dynaPolyActor->actor.params == 0 && !Player_InCsMode(play) && play->msgCtx.msgLength == 0) {
func_80AEE02C(this);
- play->csCtx.script = D_80AF10A4;
+ play->csCtx.script = gRutoObtainingSapphireCs;
gSaveContext.cutsceneTrigger = 1;
this->action = 36;
this->drawConfig = 0;
@@ -1625,7 +1625,7 @@ s32 func_80AEE6D0(EnRu1* this, PlayState* play) {
func_80AED600(this);
this->action = 34;
this->unk_26C = 0.0f;
- play->csCtx.script = D_80AF1728;
+ play->csCtx.script = gRutoFoundSapphireCs;
gSaveContext.cutsceneTrigger = 1;
}
this->roomNum3 = curRoomNum;
@@ -2155,7 +2155,7 @@ void func_80AEFCE8(EnRu1* this, PlayState* play) {
void func_80AEFD38(EnRu1* this, PlayState* play) {
if (GET_EVENTCHKINF(EVENTCHKINF_37) && LINK_IS_CHILD) {
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->action = 44;
this->drawConfig = 1;
} else {
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1_cutscene_data.inc.c b/src/overlays/actors/ovl_En_Ru1/z_en_ru1_cutscene_data.inc.c
index 6e8c8f4d31..bce6bf6cac 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1_cutscene_data.inc.c
@@ -2,8 +2,8 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_80AF0880[] = {
- CS_BEGIN_CUTSCENE(15, 1306),
+static CutsceneData gRutoFirstMeetingCs[] = {
+ CS_HEADER(15, 1306),
CS_PLAYER_CUE_LIST(10),
CS_PLAYER_CUE(PLAYER_CUEID_39, 0, 50, 0x0000, 0x6C16, 0x0000, 12, -340, -2810, 12, -340, -2810, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_3, 50, 70, 0x0000, 0x6C16, 0x0000, 12, -340, -2810, 12, -340, -2810, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
@@ -15,7 +15,7 @@ static CutsceneData D_80AF0880[] = {
CS_PLAYER_CUE(PLAYER_CUEID_3, 259, 276, 0x0000, 0x6C16, 0x0000, 100, -340, -2991, 100, -340, -2991, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_2, 276, 297, 0x0000, 0x6C16, 0x0000, 100, -340, -2991, 182, -340, -3132, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 297, 843, 0x0000, 0x6C16, 0x0000, 182, -340, -3132, 182, -340, -3132, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(63, 4),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_3_5, 4),
CS_ACTOR_CUE(0x0002, 0, 178, 0x0000, 0xEC16, 0x0000, 127, -340, -3041, 127, -340, -3041, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_ACTOR_CUE(0x0003, 178, 245, 0x0000, 0x6C16, 0x0000, 127, -340, -3041, 127, -340, -3041, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_ACTOR_CUE(0x0004, 245, 260, 0x0000, 0x6C16, 0x0000, 127, -340, -3041, 127, -340, -3041, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
@@ -24,9 +24,9 @@ static CutsceneData D_80AF0880[] = {
CS_MISC(CS_MISC_STOP_CUTSCENE, 315, 345, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0x00000000, 0x00000000),
CS_TEXT_LIST(4),
CS_TEXT_NONE(0, 157),
- CS_TEXT(0x404B, 157, 175, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x404B, 157, 175, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(175, 252),
- CS_TEXT(0x401E, 252, 300, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x401E, 252, 300, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_CAM_EYE_SPLINE(0, 247),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4235998B, 45.399944f), 55, -290, -2749, 0x20BA),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x4235998B, 45.399944f), 55, -290, -2749, 0x44B8),
@@ -107,39 +107,39 @@ static CutsceneData D_80AF0880[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x423B3327, 46.799953f), 305, -272, -3274, 0x5B80),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_APPEAR, 74, 75, 0x0000, 0x00000000, 0xFFFFFFF1, 0x00000000, 0x0000004E, 0xFFFFFFF1, 0x00000000, 0x0000004E),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
static u32 D_80AF10A0 = 0;
-static CutsceneData D_80AF10A4[] = {
- CS_BEGIN_CUTSCENE(14, 1299),
+static CutsceneData gRutoObtainingSapphireCs[] = {
+ CS_HEADER(14, 1299),
CS_PLAYER_CUE_LIST(3),
CS_PLAYER_CUE(PLAYER_CUEID_5, 0, 272, 0x0000, 0xC000, 0x0000, -1085, -1025, -3347, -1085, -1025, -3347, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_3, 272, 292, 0x0000, 0xC000, 0x0000, -1085, -1025, -3347, -1085, -1025, -3347, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 292, 777, 0x0000, 0xC000, 0x0000, -1085, -1025, -3347, -1085, -1025, -3347, CS_FLOAT(0xF671408, 1.1393037e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 330, 627, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(66, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_3_7, 3),
CS_ACTOR_CUE(0x0001, 0, 40, 0x0000, 0x4000, 0x0000, -1352, -969, -3341, -1352, -969, -3341, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_ACTOR_CUE(0x0002, 40, 213, 0x0000, 0x4000, 0x0000, -1352, -969, -3341, -1360, -969, -3343, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_ACTOR_CUE(0x0003, 213, 1000, 0x0000, 0x4000, 0x0000, -1360, -969, -3343, -1360, -969, -3343, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(48, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_5, 1),
CS_ACTOR_CUE(0x0002, 0, 90, 0x0000, 0x0000, 0x0000, -1360, -963, -3343, -1360, -963, -3343, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(48, 2),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_5, 2),
CS_ACTOR_CUE(0x0002, 90, 211, 0x0000, 0x0000, 0x0000, -1352, -922, -3341, -1352, -922, -3341, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0006, 211, 311, 0x0000, 0x0000, 0x0000, -1352, -922, -3341, -1352, -922, -3341, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(62, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 3),
CS_ACTOR_CUE(0x0004, 0, 210, 0x0000, 0x0000, 0x0000, -1065, -972, -3305, -1065, -978, -3305, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBCEA0EA1, -0.028571429f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 210, 220, 0x8000, 0x0000, 0x0000, -1065, -978, -3305, -1065, -973, -3344, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x3F000000, 0.5f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 220, 410, 0x0000, 0x0000, 0x0000, -1065, -973, -3344, -1065, -976, -3344, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0xBC8158ED, -0.015789473f), CS_FLOAT(0x0, 0.0f)),
CS_TEXT_LIST(6),
CS_TEXT_NONE(0, 162),
- CS_TEXT(0x4050, 162, 211, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x4050, 162, 211, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(211, 232),
- CS_TEXT(0x4051, 232, 241, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x4051, 232, 241, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(241, 247),
- CS_TEXT(0x4052, 247, 299, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x4052, 247, 299, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_ITEM_GET, 112, 113, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC7, 0x000000B1, 0x00000000, 0xFFFFFFC7, 0x000000B1),
CS_CAM_EYE_SPLINE(0, 1176),
@@ -196,16 +196,16 @@ static CutsceneData D_80AF10A4[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x41F273D3, 30.306555f), -1426, -857, -3190, 0x00D7),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x41F273D3, 30.306555f), -1426, -857, -3190, 0x00E8),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x41F273D3, 30.306555f), -1426, -857, -3190, 0x00EA),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
static u32 D_80AF1724 = 0;
-static CutsceneData D_80AF1728[] = {
- CS_BEGIN_CUTSCENE(7, 1160),
+static CutsceneData gRutoFoundSapphireCs[] = {
+ CS_HEADER(7, 1160),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 75, 627, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0xFFFFFFC0, 0x00000032, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(48, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_5, 1),
CS_ACTOR_CUE(0x0002, 0, 90, 0x0000, 0x0000, 0x0000, -1360, -963, -3343, -1360, -963, -3343, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_CAM_EYE_SPLINE(0, 1091),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, CS_FLOAT(0x42226662, 40.599983f), -1381, -958, -3331, 0x8BC0),
@@ -233,7 +233,7 @@ static CutsceneData D_80AF1728[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x424B3339, 50.800022f), -35, 56, -93, 0x0000),
CS_TEXT_LIST(2),
CS_TEXT_NONE(0, 35),
- CS_TEXT(0x404F, 35, 70, 0x0000, 0xFFFF, 0xFFFF),
- CS_END(),
+ CS_TEXT(0x404F, 35, 70, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c b/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c
index 4e15ee767a..eff82bc1ec 100644
--- a/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c
+++ b/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c
@@ -9,39 +9,68 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnRu2_Init(Actor* thisx, PlayState* play);
void EnRu2_Destroy(Actor* thisx, PlayState* play);
void EnRu2_Update(Actor* thisx, PlayState* play);
void EnRu2_Draw(Actor* thisx, PlayState* play);
-void func_80AF2CB4(EnRu2* this, PlayState* play);
-void func_80AF2CD4(EnRu2* this, PlayState* play);
-void func_80AF2CF4(EnRu2* this, PlayState* play);
-void func_80AF2D2C(EnRu2* this, PlayState* play);
-void func_80AF2D6C(EnRu2* this, PlayState* play);
-void func_80AF2DAC(EnRu2* this, PlayState* play);
-void func_80AF2DEC(EnRu2* this, PlayState* play);
-void func_80AF3144(EnRu2* this, PlayState* play);
-void func_80AF3174(EnRu2* this, PlayState* play);
-void func_80AF31C8(EnRu2* this, PlayState* play);
-void func_80AF3604(EnRu2* this, PlayState* play);
-void func_80AF3624(EnRu2* this, PlayState* play);
-void func_80AF366C(EnRu2* this, PlayState* play);
-void func_80AF36AC(EnRu2* this, PlayState* play);
-void func_80AF3BC8(EnRu2* this, PlayState* play);
-void func_80AF3C04(EnRu2* this, PlayState* play);
-void func_80AF3C64(EnRu2* this, PlayState* play);
-void func_80AF3CB8(EnRu2* this, PlayState* play);
-void func_80AF3D0C(EnRu2* this, PlayState* play);
-void func_80AF3D60(EnRu2* this, PlayState* play);
-
-void func_80AF3F14(EnRu2* this, PlayState* play);
-void func_80AF3F20(EnRu2* this, PlayState* play);
-void func_80AF321C(EnRu2* this, PlayState* play);
-
-void func_80AF2AB4(EnRu2* this, PlayState* play);
+void EnRu2_SetupWaterMedallionCutscene(EnRu2* this, PlayState* play);
+void EnRu2_AwaitBlueWarp(EnRu2* this, PlayState* play);
+void EnRu2_RiseThroughBlueWarp(EnRu2* this, PlayState* play);
+void EnRu2_SageOfWaterDialog(EnRu2* this, PlayState* play);
+void EnRu2_RaiseArms(EnRu2* this, PlayState* play);
+void EnRu2_AwaitWaterMedallion(EnRu2* this, PlayState* play);
+void EnRu2_FinishWaterMedallionCutscene(EnRu2* this, PlayState* play);
+void EnRu2_WaterTrialInvisible(EnRu2* this, PlayState* play);
+void EnRu2_WaterTrialFade(EnRu2* this, PlayState* play);
+void EnRu2_AwaitSpawnLightBall(EnRu2* this, PlayState* play);
+void EnRu2_CreditsInvisible(EnRu2* this, PlayState* play);
+void EnRu2_CreditsFadeIn(EnRu2* this, PlayState* play);
+void EnRu2_CreditsVisible(EnRu2* this, PlayState* play);
+void EnRu2_CreditsTurnHeadDownLeft(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleEncounterRangeCheck(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleEncounterUnconditional(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleEncounterBegin(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleEncounterDialog(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleEncounterEnd(EnRu2* this, PlayState* play);
+void EnRu2_WaterTempleSwimmingUp(EnRu2* this, PlayState* play);
+
+void EnRu2_DrawNothing(EnRu2* this, PlayState* play);
+void EnRu2_DrawOpa(EnRu2* this, PlayState* play);
+void EnRu2_DrawXlu(EnRu2* this, PlayState* play);
+
+void EnRu2_CheckWaterMedallionCutscene(EnRu2* this, PlayState* play);
+
+typedef enum {
+ /* 00 */ ENRU2_SETUP_WATER_MEDALLION_CS,
+ /* 01 */ ENRU2_AWAIT_BLUE_WARP,
+ /* 02 */ ENRU2_RISE_THROUGH_BLUE_WARP,
+ /* 03 */ ENRU2_SAGE_OF_WATER_DIALOG,
+ /* 04 */ ENRU2_RAISE_ARMS,
+ /* 05 */ ENRU2_AWAIT_SPAWN_WATER_MEDALLION,
+ /* 06 */ ENRU2_FINISH_WATER_MEDALLION_CS,
+ /* 07 */ ENRU2_WATER_TRIAL_INVISIBLE,
+ /* 08 */ ENRU2_WATER_TRIAL_FADE,
+ /* 09 */ ENRU2_AWAIT_SPAWN_LIGHT_BALL,
+ /* 10 */ ENRU2_CREDITS_INVISIBLE,
+ /* 11 */ ENRU2_CREDITS_FADE_IN,
+ /* 12 */ ENRU2_CREDITS_VISIBLE,
+ /* 13 */ ENRU2_CREDITS_TURN_HEAD_DOWN_LEFT,
+ /* 14 */ ENRU2_WATER_TEMPLE_ENCOUNTER_RANGE_CHECK,
+ /* 15 */ ENRU2_WATER_TEMPLE_ENCOUNTER_UNCONDITIONAL, // unused
+ /* 16 */ ENRU2_WATER_TEMPLE_ENCOUNTER_BEGINNING,
+ /* 17 */ ENRU2_WATER_TEMPLE_ENCOUNTER_DIALOG,
+ /* 18 */ ENRU2_WATER_TEMPLE_ENCOUNTER_END,
+ /* 19 */ ENRU2_WATER_TEMPLE_SWIMMING_UP
+} EnRu2Action;
+
+typedef enum {
+ /* 00 */ ENRU2_DRAW_NOTHING,
+ /* 01 */ ENRU2_DRAW_OPA,
+ /* 02 */ ENRU2_DRAW_XLU
+} EnRu2DrawConfig;
static ColliderCylinderInitType1 sCylinderInit = {
{
@@ -68,15 +97,32 @@ static UNK_TYPE D_80AF4118 = 0;
#include "z_en_ru2_cutscene_data.inc.c"
static EnRu2ActionFunc sActionFuncs[] = {
- func_80AF2CB4, func_80AF2CD4, func_80AF2CF4, func_80AF2D2C, func_80AF2D6C, func_80AF2DAC, func_80AF2DEC,
- func_80AF3144, func_80AF3174, func_80AF31C8, func_80AF3604, func_80AF3624, func_80AF366C, func_80AF36AC,
- func_80AF3BC8, func_80AF3C04, func_80AF3C64, func_80AF3CB8, func_80AF3D0C, func_80AF3D60,
+ EnRu2_SetupWaterMedallionCutscene,
+ EnRu2_AwaitBlueWarp,
+ EnRu2_RiseThroughBlueWarp,
+ EnRu2_SageOfWaterDialog,
+ EnRu2_RaiseArms,
+ EnRu2_AwaitWaterMedallion,
+ EnRu2_FinishWaterMedallionCutscene,
+ EnRu2_WaterTrialInvisible,
+ EnRu2_WaterTrialFade,
+ EnRu2_AwaitSpawnLightBall,
+ EnRu2_CreditsInvisible,
+ EnRu2_CreditsFadeIn,
+ EnRu2_CreditsVisible,
+ EnRu2_CreditsTurnHeadDownLeft,
+ EnRu2_WaterTempleEncounterRangeCheck,
+ EnRu2_WaterTempleEncounterUnconditional,
+ EnRu2_WaterTempleEncounterBegin,
+ EnRu2_WaterTempleEncounterDialog,
+ EnRu2_WaterTempleEncounterEnd,
+ EnRu2_WaterTempleSwimmingUp,
};
static EnRu2DrawFunc sDrawFuncs[] = {
- func_80AF3F14,
- func_80AF3F20,
- func_80AF321C,
+ EnRu2_DrawNothing,
+ EnRu2_DrawOpa,
+ EnRu2_DrawXlu,
};
ActorProfile En_Ru2_Profile = {
@@ -91,14 +137,14 @@ ActorProfile En_Ru2_Profile = {
/**/ EnRu2_Draw,
};
-void func_80AF2550(Actor* thisx, PlayState* play) {
+void EnRu2_InitCollider(Actor* thisx, PlayState* play) {
EnRu2* this = (EnRu2*)thisx;
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit);
}
-void func_80AF259C(EnRu2* this, PlayState* play) {
+void EnRu2_UpdateCollider(EnRu2* this, PlayState* play) {
s32 pad[5];
Collider_UpdateCylinder(&this->actor, &this->collider);
@@ -111,41 +157,41 @@ void EnRu2_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AF2608(EnRu2* this) {
+void EnRu2_UpdateEyes(EnRu2* this) {
s32 pad[3];
- s16* unk_2A6 = &this->unk_2A6;
- s16* unk_2A4 = &this->unk_2A4;
+ s16* blinkTimer = &this->blinkTimer;
+ s16* eyeIndex = &this->eyeIndex;
- if (DECR(*unk_2A6) == 0) {
- *unk_2A6 = Rand_S16Offset(0x3C, 0x3C);
+ if (DECR(*blinkTimer) == 0) {
+ *blinkTimer = Rand_S16Offset(60, 60);
}
- *unk_2A4 = *unk_2A6;
- if (*unk_2A4 >= 3) {
- *unk_2A4 = 0;
+ *eyeIndex = *blinkTimer;
+ if (*eyeIndex >= 3) {
+ *eyeIndex = 0;
}
}
-s32 func_80AF2690(EnRu2* this) {
- s32 params_shift = PARAMS_GET_U(this->actor.params, 8, 8);
+s32 EnRu2_GetSwitchFlag(EnRu2* this) {
+ s32 switchFlag = ENRU2_GET_SWITCH_FLAG(this);
- return params_shift;
+ return switchFlag;
}
-s32 func_80AF26A0(EnRu2* this) {
- s32 params = PARAMS_GET_U(this->actor.params, 0, 8);
+s32 EnRu2_GetType(EnRu2* this) {
+ s32 type = ENRU2_GET_TYPE(this);
- return params;
+ return type;
}
#if DEBUG_FEATURES
void func_80AF26AC(EnRu2* this) {
- this->action = 7;
- this->drawConfig = 0;
+ this->action = ENRU2_WATER_TRIAL_INVISIBLE;
+ this->drawConfig = ENRU2_DRAW_NOTHING;
this->alpha = 0;
- this->unk_2B8 = 0;
+ this->isLightBall = false;
this->actor.shape.shadowAlpha = 0;
- this->unk_2B0 = 0.0f;
+ this->fadeTimer = 0.0f;
}
void func_80AF26D0(EnRu2* this, PlayState* play) {
@@ -168,7 +214,7 @@ void func_80AF26D0(EnRu2* this, PlayState* play) {
}
#endif
-void func_80AF2744(EnRu2* this, PlayState* play) {
+void EnRu2_UpdateBgCheckInfo(EnRu2* this, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_2);
}
@@ -186,7 +232,7 @@ CsCmdActorCue* EnRu2_GetCue(PlayState* play, s32 cueChannel) {
return NULL;
}
-s32 func_80AF27D0(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
+s32 EnRu2_CheckCueMatchingId(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
CsCmdActorCue* cue = EnRu2_GetCue(play, cueChannel);
if ((cue != NULL) && (cue->id == cueId)) {
@@ -195,7 +241,7 @@ s32 func_80AF27D0(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
return false;
}
-s32 func_80AF281C(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
+s32 EnRu2_CheckCueNotMatchingId(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
CsCmdActorCue* cue = EnRu2_GetCue(play, cueChannel);
if ((cue != NULL) && (cue->id != cueId)) {
@@ -204,7 +250,10 @@ s32 func_80AF281C(EnRu2* this, PlayState* play, u16 cueId, s32 cueChannel) {
return false;
}
-void func_80AF2868(EnRu2* this, PlayState* play, u32 cueChannel) {
+/**
+ * Checks cutscene data and, if applicable, configures Ruto's position accordingly.
+ */
+void EnRu2_InitPositionFromCue(EnRu2* this, PlayState* play, u32 cueChannel) {
CsCmdActorCue* cue = EnRu2_GetCue(play, cueChannel);
Actor* thisx = &this->actor;
@@ -217,35 +266,50 @@ void func_80AF2868(EnRu2* this, PlayState* play, u32 cueChannel) {
}
}
-void func_80AF28E8(EnRu2* this, AnimationHeader* animation, u8 arg2, f32 morphFrames, s32 arg4) {
+/**
+ * Changes the animation for Ruto's actor. The direction argument decides whether to play the animation
+ * forwards (if 0) or backwards (otherwise).
+ */
+void EnRu2_AnimationChange(EnRu2* this, AnimationHeader* animation, u8 mode, f32 morphFrames, s32 direction) {
f32 frameCount = Animation_GetLastFrame(animation);
f32 playbackSpeed;
- f32 unk0;
- f32 fc;
+ f32 startFrame;
+ f32 endFrame;
- if (arg4 == 0) {
- unk0 = 0.0f;
- fc = frameCount;
+ if (direction == 0) {
+ startFrame = 0.0f;
+ endFrame = frameCount;
playbackSpeed = 1.0f;
} else {
- unk0 = frameCount;
- fc = 0.0f;
+ startFrame = frameCount;
+ endFrame = 0.0f;
playbackSpeed = -1.0f;
}
- Animation_Change(&this->skelAnime, animation, playbackSpeed, unk0, fc, arg2, morphFrames);
+ Animation_Change(&this->skelAnime, animation, playbackSpeed, startFrame, endFrame, mode, morphFrames);
}
-void func_80AF2978(EnRu2* this, PlayState* play) {
+/**
+ * Gradually increases Ruto's model's Y-offset as she rises up through the blue warp in the Chamber of Sages.
+ */
+void EnRu2_Rise(EnRu2* this, PlayState* play) {
this->actor.shape.yOffset += 250.0f / 3.0f;
}
-void func_80AF2994(EnRu2* this, PlayState* play) {
- func_80AF28E8(this, &gAdultRutoIdleAnim, 0, 0.0f, 0);
+/**
+ * Sets up Ruto's actor in the Chamber of Sages.
+ * Note: All sages actors are present in the Chamber of Sages, regardless of which dungeon was just completed.
+ * This function runs unconditionally, even if it is not relevant for Ruto.
+ */
+void EnRu2_InitChamberOfSages(EnRu2* this, PlayState* play) {
+ EnRu2_AnimationChange(this, &gAdultRutoIdleAnim, 0, 0.0f, 0);
this->actor.shape.yOffset = -10000.0f;
}
-void func_80AF29DC(EnRu2* this, PlayState* play) {
+/**
+ * Spawns the blue warp for Ruto to rise up through in the Chamber of Sages.
+ */
+void EnRu2_SpawnBlueWarp(EnRu2* this, PlayState* play) {
Actor* thisx = &this->actor;
f32 posX = thisx->world.pos.x;
f32 posY = thisx->world.pos.y;
@@ -254,34 +318,43 @@ void func_80AF29DC(EnRu2* this, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, posX, posY, posZ, 0, 0, 0, WARP_SAGES);
}
-void func_80AF2A38(EnRu2* this, PlayState* play) {
+/**
+ * Spawns the Water Medallion.
+ */
+void EnRu2_SpawnWaterMedallion(EnRu2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 posX = player->actor.world.pos.x;
f32 posY = player->actor.world.pos.y + 50.0f;
f32 posZ = player->actor.world.pos.z;
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DEMO_EFFECT, posX, posY, posZ, 0, 0, 0, 10);
+ // Give the water medallion. This is redundant as it was already given in `EnRu2_CheckWaterMedallionCutscene`
Item_Give(play, ITEM_MEDALLION_WATER);
}
-void func_80AF2AB4(EnRu2* this, PlayState* play) {
+/**
+ * Sets up the Water Medallion Cutscene if coming from Water Temple.
+ * All sage actors are present in the Chamber of Sages regardless of which dungeon was just completed.
+ * This function will loop endlessly if the current sage cutscene is not for the Water Medallion.
+ */
+void EnRu2_CheckWaterMedallionCutscene(EnRu2* this, PlayState* play) {
s32 pad[2];
Player* player;
- s16 temp;
+ s16 yaw;
if ((gSaveContext.chamberCutsceneNum == CHAMBER_CS_WATER) && !IS_CUTSCENE_LAYER) {
player = GET_PLAYER(play);
- this->action = 1;
- play->csCtx.script = D_80AF411C;
+ this->action = ENRU2_AWAIT_BLUE_WARP;
+ play->csCtx.script = gWaterMedallionCs;
gSaveContext.cutsceneTrigger = 2;
Item_Give(play, ITEM_MEDALLION_WATER);
- temp = this->actor.world.rot.y + 0x8000;
- player->actor.shape.rot.y = temp;
- player->actor.world.rot.y = temp;
+ yaw = this->actor.world.rot.y + 0x8000;
+ player->actor.shape.rot.y = yaw;
+ player->actor.world.rot.y = yaw;
}
}
-void func_80AF2B44(EnRu2* this, PlayState* play) {
+void EnRu2_CheckIfBlueWarpShouldSpawn(EnRu2* this, PlayState* play) {
CutsceneContext* csCtx = &play->csCtx;
CsCmdActorCue* cue;
@@ -289,21 +362,27 @@ void func_80AF2B44(EnRu2* this, PlayState* play) {
cue = csCtx->actorCues[3];
if ((cue != NULL) && (cue->id == 2)) {
- this->action = 2;
- this->drawConfig = 1;
- func_80AF29DC(this, play);
+ this->action = ENRU2_RISE_THROUGH_BLUE_WARP;
+ this->drawConfig = ENRU2_DRAW_OPA;
+ EnRu2_SpawnBlueWarp(this, play);
}
}
}
-void func_80AF2B94(EnRu2* this) {
+/**
+ * Halts Ruto's rise up through the blue warp in the Chamber of Sages once finished.
+ */
+void EnRu2_EndRise(EnRu2* this) {
if (this->actor.shape.yOffset >= 0.0f) {
- this->action = 3;
+ this->action = ENRU2_SAGE_OF_WATER_DIALOG;
this->actor.shape.yOffset = 0.0f;
}
}
-void func_80AF2BC0(EnRu2* this, PlayState* play) {
+/**
+ * Sets up the animation for Ruto to raise her arms to give Link the Water Medallion.
+ */
+void EnRu2_CheckStartRaisingArms(EnRu2* this, PlayState* play) {
AnimationHeader* animation = &gAdultRutoRaisingArmsUpAnim;
CsCmdActorCue* cue;
@@ -313,175 +392,198 @@ void func_80AF2BC0(EnRu2* this, PlayState* play) {
if ((cue != NULL) && (cue->id == 3)) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_ONCE,
0.0f);
- this->action = 4;
+ this->action = ENRU2_RAISE_ARMS;
}
}
}
-void func_80AF2C54(EnRu2* this, s32 arg1) {
- if (arg1 != 0) {
- this->action = 5;
+/**
+ * At the end of Ruto's arms-raising animation, cues the next action: spawning the
+ * Water Medallion.
+ */
+void EnRu2_HoldArmsUp(EnRu2* this, s32 doneRaising) {
+ if (doneRaising != 0) {
+ this->action = ENRU2_AWAIT_SPAWN_WATER_MEDALLION;
}
}
-void func_80AF2C68(EnRu2* this, PlayState* play) {
+/**
+ * Checks to see if the Water Medallion should spawn.
+ */
+void EnRu2_CheckIfWaterMedallionShouldSpawn(EnRu2* this, PlayState* play) {
CsCmdActorCue* cue;
if (play->csCtx.state != CS_STATE_IDLE) {
cue = play->csCtx.actorCues[6];
if ((cue != NULL) && (cue->id == 2)) {
- this->action = 6;
- func_80AF2A38(this, play);
+ this->action = ENRU2_FINISH_WATER_MEDALLION_CS;
+ EnRu2_SpawnWaterMedallion(this, play);
}
}
}
-void func_80AF2CB4(EnRu2* this, PlayState* play) {
- func_80AF2AB4(this, play);
+void EnRu2_SetupWaterMedallionCutscene(EnRu2* this, PlayState* play) {
+ EnRu2_CheckWaterMedallionCutscene(this, play);
}
-void func_80AF2CD4(EnRu2* this, PlayState* play) {
- func_80AF2B44(this, play);
+void EnRu2_AwaitBlueWarp(EnRu2* this, PlayState* play) {
+ EnRu2_CheckIfBlueWarpShouldSpawn(this, play);
}
-void func_80AF2CF4(EnRu2* this, PlayState* play) {
- func_80AF2978(this, play);
+void EnRu2_RiseThroughBlueWarp(EnRu2* this, PlayState* play) {
+ EnRu2_Rise(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF2B94(this);
+ EnRu2_UpdateEyes(this);
+ EnRu2_EndRise(this);
}
-void func_80AF2D2C(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_SageOfWaterDialog(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF2BC0(this, play);
+ EnRu2_UpdateEyes(this);
+ EnRu2_CheckStartRaisingArms(this, play);
}
-void func_80AF2D6C(EnRu2* this, PlayState* play) {
- s32 something;
+void EnRu2_RaiseArms(EnRu2* this, PlayState* play) {
+ s32 animDone;
- func_80AF2744(this, play);
- something = EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF2C54(this, something);
+ EnRu2_UpdateBgCheckInfo(this, play);
+ animDone = EnRu2_UpdateSkelAnime(this);
+ EnRu2_UpdateEyes(this);
+ EnRu2_HoldArmsUp(this, animDone);
}
-void func_80AF2DAC(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_AwaitWaterMedallion(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF2C68(this, play);
+ EnRu2_UpdateEyes(this);
+ EnRu2_CheckIfWaterMedallionShouldSpawn(this, play);
}
-void func_80AF2DEC(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_FinishWaterMedallionCutscene(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
}
-void func_80AF2E1C(EnRu2* this, PlayState* play) {
- func_80AF28E8(this, &gAdultRutoCrossingArmsAnim, 2, 0.0f, 0);
- this->action = 7;
+/**
+ * Sets up Ruto in her arms-crossing pose. Used in the Water Trial in Ganon's Castle and in the
+ * Chamber of Sages during the "Sealing Ganon" cutscene.
+ */
+void EnRu2_InitWaterTrial(EnRu2* this, PlayState* play) {
+ EnRu2_AnimationChange(this, &gAdultRutoCrossingArmsAnim, 2, 0.0f, 0);
+ this->action = ENRU2_WATER_TRIAL_INVISIBLE;
this->actor.shape.shadowAlpha = 0;
}
-void func_80AF2E64(void) {
+void EnRu2_PlayWhiteOutSound(void) {
Sfx_PlaySfxCentered2(NA_SE_SY_WHITE_OUT_T);
}
-void func_80AF2E84(EnRu2* this, PlayState* play) {
+/**
+ * Spawns the ball of light that replaces Ruto's actor in the Water Trial.
+ */
+void EnRu2_SpawnLightBall(EnRu2* this, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DEMO_6K, this->actor.world.pos.x,
kREG(19) + 24.0f + this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 8);
}
-void func_80AF2F04(EnRu2* this, PlayState* play) {
- if (func_80AF27D0(this, play, 4, 3)) {
- this->action = 8;
- this->drawConfig = 2;
+/**
+ * Checks to see if it's time for Ruto to fade in while crossing her arms.
+ */
+void EnRu2_CheckFadeIn(EnRu2* this, PlayState* play) {
+ if (EnRu2_CheckCueMatchingId(this, play, 4, 3)) {
+ this->action = ENRU2_WATER_TRIAL_FADE;
+ this->drawConfig = ENRU2_DRAW_XLU;
this->alpha = 0;
this->actor.shape.shadowAlpha = 0;
- this->unk_2B0 = 0.0f;
- func_80AF2E64();
+ this->fadeTimer = 0.0f;
+ EnRu2_PlayWhiteOutSound();
}
}
-void func_80AF2F58(EnRu2* this, PlayState* play) {
- f32* unk_2B0 = &this->unk_2B0;
+/**
+ * Fades Ruto's actor in or out. Both happen during the Water Trial.
+ */
+void EnRu2_Fade(EnRu2* this, PlayState* play) {
+ f32* fadeTimer = &this->fadeTimer;
s32 alpha;
- if (func_80AF27D0(this, play, 4, 3)) {
- *unk_2B0 += 1.0f;
- if (*unk_2B0 >= kREG(5) + 10.0f) {
- this->action = 9;
- this->drawConfig = 1;
- *unk_2B0 = kREG(5) + 10.0f;
+ if (EnRu2_CheckCueMatchingId(this, play, 4, 3)) {
+ *fadeTimer += 1.0f;
+ if (*fadeTimer >= kREG(5) + 10.0f) {
+ this->action = ENRU2_AWAIT_SPAWN_LIGHT_BALL;
+ this->drawConfig = ENRU2_DRAW_OPA;
+ *fadeTimer = kREG(5) + 10.0f;
this->alpha = 255;
this->actor.shape.shadowAlpha = 0xFF;
return;
}
} else {
- *unk_2B0 -= 1.0f;
- if (*unk_2B0 <= 0.0f) {
- this->action = 7;
- this->drawConfig = 0;
- *unk_2B0 = 0.0f;
+ *fadeTimer -= 1.0f;
+ if (*fadeTimer <= 0.0f) {
+ this->action = ENRU2_WATER_TRIAL_INVISIBLE;
+ this->drawConfig = ENRU2_DRAW_NOTHING;
+ *fadeTimer = 0.0f;
this->alpha = 0;
this->actor.shape.shadowAlpha = 0;
return;
}
}
- alpha = (*unk_2B0 / (kREG(5) + 10.0f)) * 255.0f;
+ alpha = (*fadeTimer / (kREG(5) + 10.0f)) * 255.0f;
this->alpha = alpha;
this->actor.shape.shadowAlpha = alpha;
}
-void func_80AF30AC(EnRu2* this, PlayState* play) {
- if (func_80AF281C(this, play, 4, 3)) {
- this->action = 8;
- this->drawConfig = 2;
- this->unk_2B0 = kREG(5) + 10.0f;
+/**
+ * Checks to see if it's time for Ruto to fade out while her arms are crossed.
+ */
+void EnRu2_CheckFadeOut(EnRu2* this, PlayState* play) {
+ if (EnRu2_CheckCueNotMatchingId(this, play, 4, 3)) {
+ this->action = ENRU2_WATER_TRIAL_FADE;
+ this->drawConfig = ENRU2_DRAW_XLU;
+ this->fadeTimer = kREG(5) + 10.0f;
this->alpha = 255;
- if (this->unk_2B8 == 0) {
- func_80AF2E84(this, play);
- this->unk_2B8 = 1;
+ if (!this->isLightBall) {
+ EnRu2_SpawnLightBall(this, play);
+ this->isLightBall = true;
}
this->actor.shape.shadowAlpha = 0xFF;
}
}
-void func_80AF3144(EnRu2* this, PlayState* play) {
- func_80AF2F04(this, play);
+void EnRu2_WaterTrialInvisible(EnRu2* this, PlayState* play) {
+ EnRu2_CheckFadeIn(this, play);
#if DEBUG_FEATURES
func_80AF26D0(this, play);
#endif
}
-void func_80AF3174(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_WaterTrialFade(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF2F58(this, play);
+ EnRu2_UpdateEyes(this);
+ EnRu2_Fade(this, play);
#if DEBUG_FEATURES
func_80AF26D0(this, play);
#endif
}
-void func_80AF31C8(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_AwaitSpawnLightBall(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF30AC(this, play);
+ EnRu2_UpdateEyes(this);
+ EnRu2_CheckFadeOut(this, play);
#if DEBUG_FEATURES
func_80AF26D0(this, play);
#endif
}
-void func_80AF321C(EnRu2* this, PlayState* play) {
+void EnRu2_DrawXlu(EnRu2* this, PlayState* play) {
s32 pad[2];
- s16 temp = this->unk_2A4;
- void* tex = sEyeTextures[temp];
+ s16 eyeIndex = this->eyeIndex;
+ void* tex = sEyeTextures[eyeIndex];
SkelAnime* skelAnime = &this->skelAnime;
OPEN_DISPS(play->state.gfxCtx, "../z_en_ru2_inKenjyanomaDemo02.c", 264);
@@ -499,56 +601,74 @@ void func_80AF321C(EnRu2* this, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx, "../z_en_ru2_inKenjyanomaDemo02.c", 291);
}
-void func_80AF3394(EnRu2* this, PlayState* play) {
- func_80AF28E8(this, &gAdultRutoIdleHandsOnHipsAnim, 0, 0.0f, 0);
- this->action = 10;
- this->drawConfig = 0;
+/**
+ * Sets up Ruto's hands-on-hips pose during the credits sequence.
+ */
+void EnRu2_InitCredits(EnRu2* this, PlayState* play) {
+ EnRu2_AnimationChange(this, &gAdultRutoIdleHandsOnHipsAnim, 0, 0.0f, 0);
+ this->action = ENRU2_CREDITS_INVISIBLE;
+ this->drawConfig = ENRU2_DRAW_NOTHING;
this->actor.shape.shadowAlpha = 0;
}
-void func_80AF33E0(EnRu2* this) {
- f32* unk_2B0 = &this->unk_2B0;
- f32 temp_f0;
- s32 temp_f18;
+/**
+ * Fades in Ruto's actor during the credits sequence.
+ */
+void EnRu2_FadeInCredits(EnRu2* this) {
+ f32* fadeTimer = &this->fadeTimer;
+ f32 fadeDuration;
+ s32 alpha;
- *unk_2B0 += 1.0f;
+ *fadeTimer += 1.0f;
- temp_f0 = kREG(17) + 10.0f;
- if (temp_f0 <= *unk_2B0) {
+ fadeDuration = kREG(17) + 10.0f;
+ if (fadeDuration <= *fadeTimer) {
this->alpha = 255;
this->actor.shape.shadowAlpha = 0xFF;
} else {
- temp_f18 = (*unk_2B0 / temp_f0) * 255.0f;
- this->alpha = temp_f18;
- this->actor.shape.shadowAlpha = temp_f18;
+ alpha = (*fadeTimer / fadeDuration) * 255.0f;
+ this->alpha = alpha;
+ this->actor.shape.shadowAlpha = alpha;
}
}
-void func_80AF346C(EnRu2* this, PlayState* play) {
- func_80AF2868(this, play, 3);
- this->action = 11;
- this->drawConfig = 2;
+void EnRu2_InitCreditsPosition(EnRu2* this, PlayState* play) {
+ EnRu2_InitPositionFromCue(this, play, 3);
+ this->action = ENRU2_CREDITS_FADE_IN;
+ this->drawConfig = ENRU2_DRAW_XLU;
}
-void func_80AF34A4(EnRu2* this) {
- if (this->unk_2B0 >= kREG(17) + 10.0f) {
- this->action = 12;
- this->drawConfig = 1;
+/**
+ * Checks for the end of Ruto's fade-in during the credits sequence.
+ */
+void EnRu2_CheckVisibleInCredits(EnRu2* this) {
+ if (this->fadeTimer >= kREG(17) + 10.0f) {
+ this->action = ENRU2_CREDITS_VISIBLE;
+ this->drawConfig = ENRU2_DRAW_OPA;
}
}
-void func_80AF34F0(EnRu2* this) {
- func_80AF28E8(this, &gAdultRutoHeadTurnDownLeftAnim, 2, 0.0f, 0);
- this->action = 13;
+/**
+ * Starts Ruto's animation to look down towards Nabooru during the credits sequence.
+ */
+void EnRu2_SetupTurnHeadDownLeftAnimation(EnRu2* this) {
+ EnRu2_AnimationChange(this, &gAdultRutoHeadTurnDownLeftAnim, 2, 0.0f, 0);
+ this->action = ENRU2_CREDITS_TURN_HEAD_DOWN_LEFT;
}
-void func_80AF3530(EnRu2* this, s32 arg1) {
- if (arg1 != 0) {
- func_80AF28E8(this, &gAdultRutoLookingDownLeftAnim, 0, 0.0f, 0);
+/**
+ * Holds Ruto's pose looking down towards Nabooru during the credits sequence.
+ */
+void EnRu2_HoldLookingDownLeftPose(EnRu2* this, s32 isDoneTurning) {
+ if (isDoneTurning != 0) {
+ EnRu2_AnimationChange(this, &gAdultRutoLookingDownLeftAnim, 0, 0.0f, 0);
}
}
-void func_80AF3564(EnRu2* this, PlayState* play) {
+/**
+ * Advances Ruto's actions in two different places.
+ */
+void EnRu2_NextCreditsAction(EnRu2* this, PlayState* play) {
CsCmdActorCue* cue = EnRu2_GetCue(play, 3);
s32 nextCueId;
s32 currentCueId;
@@ -560,10 +680,10 @@ void func_80AF3564(EnRu2* this, PlayState* play) {
if (nextCueId != currentCueId) {
switch (nextCueId) {
case 7:
- func_80AF346C(this, play);
+ EnRu2_InitCreditsPosition(this, play);
break;
case 8:
- func_80AF34F0(this);
+ EnRu2_SetupTurnHeadDownLeftAnimation(this);
break;
default:
// "There is no such action!"
@@ -575,65 +695,71 @@ void func_80AF3564(EnRu2* this, PlayState* play) {
}
}
-void func_80AF3604(EnRu2* this, PlayState* play) {
- func_80AF3564(this, play);
+void EnRu2_CreditsInvisible(EnRu2* this, PlayState* play) {
+ EnRu2_NextCreditsAction(this, play);
}
-void func_80AF3624(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_CreditsFadeIn(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF33E0(this);
- func_80AF34A4(this);
+ EnRu2_UpdateEyes(this);
+ EnRu2_FadeInCredits(this);
+ EnRu2_CheckVisibleInCredits(this);
}
-void func_80AF366C(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_CreditsVisible(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF3564(this, play);
+ EnRu2_UpdateEyes(this);
+ EnRu2_NextCreditsAction(this, play);
}
-void func_80AF36AC(EnRu2* this, PlayState* play) {
- s32 something;
+void EnRu2_CreditsTurnHeadDownLeft(EnRu2* this, PlayState* play) {
+ s32 animDone;
- func_80AF2744(this, play);
- something = EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
- func_80AF3530(this, something);
+ EnRu2_UpdateBgCheckInfo(this, play);
+ animDone = EnRu2_UpdateSkelAnime(this);
+ EnRu2_UpdateEyes(this);
+ EnRu2_HoldLookingDownLeftPose(this, animDone);
}
-void func_80AF36EC(EnRu2* this, PlayState* play) {
- Flags_SetSwitch(play, func_80AF2690(this));
+void EnRu2_SetEncounterSwitchFlag(EnRu2* this, PlayState* play) {
+ Flags_SetSwitch(play, EnRu2_GetSwitchFlag(this));
}
-s32 func_80AF3718(EnRu2* this, PlayState* play) {
- return Flags_GetSwitch(play, func_80AF2690(this));
+s32 EnRu2_GetEncounterSwitchFlag(EnRu2* this, PlayState* play) {
+ return Flags_GetSwitch(play, EnRu2_GetSwitchFlag(this));
}
-void func_80AF3744(EnRu2* this, PlayState* play) {
- if (func_80AF3718(this, play)) {
+/**
+ * Initializes Ruto's actor in the Water Temple, or destroys it if the encounter already happened.
+ */
+void EnRu2_InitWaterTempleEncounter(EnRu2* this, PlayState* play) {
+ if (EnRu2_GetEncounterSwitchFlag(this, play)) {
Actor_Kill(&this->actor);
} else {
- func_80AF28E8(this, &gAdultRutoIdleAnim, 0, 0.0f, 0);
- this->action = 14;
- this->drawConfig = 1;
+ EnRu2_AnimationChange(this, &gAdultRutoIdleAnim, 0, 0.0f, 0);
+ this->action = ENRU2_WATER_TEMPLE_ENCOUNTER_RANGE_CHECK;
+ this->drawConfig = ENRU2_DRAW_OPA;
}
}
-void func_80AF37AC(void) {
+void EnRu2_PlayFanfare(void) {
Audio_PlayFanfare(NA_BGM_APPEAR);
}
-void func_80AF37CC(EnRu2* this) {
+/**
+ * Accelerates Ruto's actor upwards as she swims.
+ */
+void EnRu2_SwimUpProgress(EnRu2* this) {
f32 funcFloat;
- this->unk_2C0++;
- funcFloat = Environment_LerpWeightAccelDecel((kREG(2) + 0x96) & 0xFFFF, 0, this->unk_2C0, 8, 0);
+ this->swimmingUpFrame++;
+ funcFloat = Environment_LerpWeightAccelDecel((kREG(2) + 0x96) & 0xFFFF, 0, this->swimmingUpFrame, 8, 0);
this->actor.world.pos.y = this->actor.home.pos.y + (300.0f * funcFloat);
}
-s32 func_80AF383C(EnRu2* this, PlayState* play) {
+s32 EnRu2_IsPlayerInRangeForEncounter(EnRu2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 thisPosX = this->actor.world.pos.x;
f32 playerPosX = player->actor.world.pos.x;
@@ -644,32 +770,42 @@ s32 func_80AF383C(EnRu2* this, PlayState* play) {
return 0;
}
-void func_80AF3878(EnRu2* this, PlayState* play) {
- if (func_80AF383C(this, play) && !Play_InCsMode(play)) {
- this->action = 16;
+/**
+ * Checks if Link is close enough to Ruto and conditionally triggers the encounter cutscene in the Water Temple.
+ */
+void EnRu2_CheckRangeToStartEncounter(EnRu2* this, PlayState* play) {
+ if (EnRu2_IsPlayerInRangeForEncounter(this, play) && !Play_InCsMode(play)) {
+ this->action = ENRU2_WATER_TEMPLE_ENCOUNTER_BEGINNING;
OnePointCutscene_Init(play, 3130, -99, &this->actor, CAM_ID_MAIN);
}
}
-void func_80AF38D0(EnRu2* this, PlayState* play) {
- this->action = 16;
+/**
+ * Triggers the encounter cutscene in the Water Temple, unconditionally. Appears to be unused.
+ */
+void EnRu2_StartEncounter(EnRu2* this, PlayState* play) {
+ this->action = ENRU2_WATER_TEMPLE_ENCOUNTER_BEGINNING;
OnePointCutscene_Init(play, 3130, -99, &this->actor, CAM_ID_MAIN);
}
-void func_80AF390C(EnRu2* this, PlayState* play) {
- f32* unk_2C4 = &this->unk_2C4;
+/**
+ * Handles the starting moments of Ruto's encounter with Link at the Water Temple. Responds to a running timer to
+ * initiate, on cue, both the fanfare and Ruto's dialogue.
+ */
+void EnRu2_EncounterBeginningHandler(EnRu2* this, PlayState* play) {
+ f32* encounterTimer = &this->encounterTimer;
- *unk_2C4 += 1.0f;
- if (*unk_2C4 == kREG(6) + 40.0f) {
- func_80AF37AC();
- } else if (*unk_2C4 > kREG(4) + 50.0f) {
+ *encounterTimer += 1.0f;
+ if (*encounterTimer == kREG(6) + 40.0f) {
+ EnRu2_PlayFanfare();
+ } else if (*encounterTimer > kREG(4) + 50.0f) {
this->actor.textId = 0x403E;
Message_StartTextbox(play, this->actor.textId, NULL);
- this->action = 17;
+ this->action = ENRU2_WATER_TEMPLE_ENCOUNTER_DIALOG;
}
}
-void func_80AF39DC(EnRu2* this, PlayState* play) {
+void EnRu2_DialogCameraHandler(EnRu2* this, PlayState* play) {
s32 pad;
MessageContext* msgCtx;
s32 pad2;
@@ -681,11 +817,11 @@ void func_80AF39DC(EnRu2* this, PlayState* play) {
dialogState = Message_GetState(msgCtx);
if (dialogState == TEXT_STATE_DONE_FADING) {
- if (this->unk_2C3 != TEXT_STATE_DONE_FADING) {
+ if (this->lastDialogState != TEXT_STATE_DONE_FADING) {
// "I'm Komatsu!" (cinema scene dev)
PRINTF("おれが小松だ! \n");
- this->unk_2C2++;
- if (this->unk_2C2 % 6 == 3) {
+ this->textboxCount++;
+ if (this->textboxCount % 6 == 3) {
player = GET_PLAYER(play);
// "uorya-!" (screeming sound)
PRINTF("うおりゃー! \n");
@@ -697,74 +833,74 @@ void func_80AF39DC(EnRu2* this, PlayState* play) {
}
}
- this->unk_2C3 = dialogState;
+ this->lastDialogState = dialogState;
if (Message_GetState(msgCtx) == TEXT_STATE_CLOSING) {
- this->action = 18;
+ this->action = ENRU2_WATER_TEMPLE_ENCOUNTER_END;
Camera_SetFinishedFlag(GET_ACTIVE_CAM(play));
}
}
-void func_80AF3ADC(EnRu2* this, PlayState* play) {
- this->unk_2C4 += 1.0f;
- if (this->unk_2C4 > kREG(5) + 100.0f) {
- func_80AF28E8(this, &gAdultRutoSwimmingUpAnim, 0, -12.0f, 0);
- this->action = 19;
- func_80AF36EC(this, play);
+void EnRu2_StartSwimmingUp(EnRu2* this, PlayState* play) {
+ this->encounterTimer += 1.0f;
+ if (this->encounterTimer > kREG(5) + 100.0f) {
+ EnRu2_AnimationChange(this, &gAdultRutoSwimmingUpAnim, 0, -12.0f, 0);
+ this->action = ENRU2_WATER_TEMPLE_SWIMMING_UP;
+ EnRu2_SetEncounterSwitchFlag(this, play);
}
}
-void func_80AF3B74(EnRu2* this, PlayState* play) {
- if (this->unk_2C0 > ((((u16)(kREG(3) + 0x28)) + ((u16)(kREG(2) + 0x96))) & 0xFFFF)) {
+void EnRu2_EndSwimmingUp(EnRu2* this, PlayState* play) {
+ if (this->swimmingUpFrame > ((((u16)(kREG(3) + 0x28)) + ((u16)(kREG(2) + 0x96))) & 0xFFFF)) {
Actor_Kill(&this->actor);
}
}
-void func_80AF3BC8(EnRu2* this, PlayState* play) {
- func_80AF3878(this, play);
+void EnRu2_WaterTempleEncounterRangeCheck(EnRu2* this, PlayState* play) {
+ EnRu2_CheckRangeToStartEncounter(this, play);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF259C(this, play);
+ EnRu2_UpdateCollider(this, play);
}
-void func_80AF3C04(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
- func_80AF259C(this, play);
+void EnRu2_WaterTempleEncounterUnconditional(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
+ EnRu2_UpdateCollider(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF38D0(this, play);
+ EnRu2_StartEncounter(this, play);
}
-void func_80AF3C64(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_WaterTempleEncounterBegin(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF390C(this, play);
+ EnRu2_EncounterBeginningHandler(this, play);
}
-void func_80AF3CB8(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_WaterTempleEncounterDialog(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF39DC(this, play);
+ EnRu2_DialogCameraHandler(this, play);
}
-void func_80AF3D0C(EnRu2* this, PlayState* play) {
- func_80AF2744(this, play);
+void EnRu2_WaterTempleEncounterEnd(EnRu2* this, PlayState* play) {
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF3ADC(this, play);
+ EnRu2_StartSwimmingUp(this, play);
}
-void func_80AF3D60(EnRu2* this, PlayState* play) {
- func_80AF37CC(this);
- func_80AF2744(this, play);
+void EnRu2_WaterTempleSwimmingUp(EnRu2* this, PlayState* play) {
+ EnRu2_SwimUpProgress(this);
+ EnRu2_UpdateBgCheckInfo(this, play);
EnRu2_UpdateSkelAnime(this);
- func_80AF2608(this);
+ EnRu2_UpdateEyes(this);
Actor_SetFocus(&this->actor, 50.0f);
- func_80AF3B74(this, play);
+ EnRu2_EndSwimmingUp(this, play);
}
void EnRu2_Update(Actor* thisx, PlayState* play) {
@@ -782,35 +918,35 @@ void EnRu2_Init(Actor* thisx, PlayState* play) {
EnRu2* this = (EnRu2*)thisx;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- func_80AF2550(thisx, play);
+ EnRu2_InitCollider(thisx, play);
SkelAnime_InitFlex(play, &this->skelAnime, &gAdultRutoSkel, NULL, this->jointTable, this->morphTable, 23);
- switch (func_80AF26A0(this)) {
+ switch (EnRu2_GetType(this)) {
case 2:
- func_80AF2E1C(this, play);
+ EnRu2_InitWaterTrial(this, play);
break;
case 3:
- func_80AF3394(this, play);
+ EnRu2_InitCredits(this, play);
break;
case 4:
- func_80AF3744(this, play);
+ EnRu2_InitWaterTempleEncounter(this, play);
break;
default:
- func_80AF2994(this, play);
+ EnRu2_InitChamberOfSages(this, play);
break;
}
- this->unk_2C2 = 0;
- this->unk_2C3 = TEXT_STATE_DONE_FADING;
+ this->textboxCount = 0;
+ this->lastDialogState = TEXT_STATE_DONE_FADING;
}
-void func_80AF3F14(EnRu2* this, PlayState* play) {
+void EnRu2_DrawNothing(EnRu2* this, PlayState* play) {
}
-void func_80AF3F20(EnRu2* this, PlayState* play) {
+void EnRu2_DrawOpa(EnRu2* this, PlayState* play) {
s32 pad[2];
- s16 temp = this->unk_2A4;
- void* tex = sEyeTextures[temp];
+ s16 eyeIndex = this->eyeIndex;
+ void* tex = sEyeTextures[eyeIndex];
SkelAnime* skelAnime = &this->skelAnime;
OPEN_DISPS(play->state.gfxCtx, "../z_en_ru2.c", 642);
diff --git a/src/overlays/actors/ovl_En_Ru2/z_en_ru2.h b/src/overlays/actors/ovl_En_Ru2/z_en_ru2.h
index 530f0c4a57..12333051b6 100644
--- a/src/overlays/actors/ovl_En_Ru2/z_en_ru2.h
+++ b/src/overlays/actors/ovl_En_Ru2/z_en_ru2.h
@@ -4,6 +4,9 @@
#include "ultra64.h"
#include "global.h"
+#define ENRU2_GET_SWITCH_FLAG(thisx) PARAMS_GET_U(thisx->actor.params, 8, 8)
+#define ENRU2_GET_TYPE(thisx) PARAMS_GET_U(thisx->actor.params, 0, 8)
+
struct EnRu2;
typedef void (*EnRu2ActionFunc)(struct EnRu2*, PlayState*);
@@ -14,18 +17,18 @@ typedef struct EnRu2 {
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ Vec3s jointTable[23];
/* 0x021A */ Vec3s morphTable[23];
- /* 0x02A4 */ s16 unk_2A4;
- /* 0x02A6 */ s16 unk_2A6;
+ /* 0x02A4 */ s16 eyeIndex;
+ /* 0x02A6 */ s16 blinkTimer;
/* 0x02A8 */ s32 action;
/* 0x02AC */ s32 drawConfig;
- /* 0x02B0 */ f32 unk_2B0;
+ /* 0x02B0 */ f32 fadeTimer;
/* 0x02B4 */ u32 alpha;
- /* 0x02B8 */ s32 unk_2B8;
+ /* 0x02B8 */ s32 isLightBall;
/* 0x02BC */ s32 cueId;
- /* 0x02C0 */ u16 unk_2C0;
- /* 0x02C2 */ u8 unk_2C2;
- /* 0x02C3 */ u8 unk_2C3;
- /* 0x02C4 */ f32 unk_2C4;
+ /* 0x02C0 */ u16 swimmingUpFrame;
+ /* 0x02C2 */ u8 textboxCount; // increments on advancement through dialogue in Water Temple
+ /* 0x02C3 */ u8 lastDialogState;
+ /* 0x02C4 */ f32 encounterTimer;
/* 0x02C8 */ ColliderCylinder collider;
} EnRu2; // size = 0x0314
diff --git a/src/overlays/actors/ovl_En_Ru2/z_en_ru2_cutscene_data.inc.c b/src/overlays/actors/ovl_En_Ru2/z_en_ru2_cutscene_data.inc.c
index 5a46e41014..4efe6fb390 100644
--- a/src/overlays/actors/ovl_En_Ru2/z_en_ru2_cutscene_data.inc.c
+++ b/src/overlays/actors/ovl_En_Ru2/z_en_ru2_cutscene_data.inc.c
@@ -2,11 +2,11 @@
#include "z64cutscene_commands.h"
// clang-format off
-static CutsceneData D_80AF411C[] = {
- CS_BEGIN_CUTSCENE(35, 3338),
+static CutsceneData gWaterMedallionCs[] = {
+ CS_HEADER(35, 3338),
CS_UNK_DATA_LIST(0x00000020, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0xFFFFFFFC, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(31, 5),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_6_0, 5),
CS_ACTOR_CUE(0x0001, 0, 829, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 829, 830, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 830, 898, 0x0000, 0x0000, 0x0000, 0, 216, 0, 0, 216, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -18,7 +18,7 @@ static CutsceneData D_80AF411C[] = {
CS_PLAYER_CUE(PLAYER_CUEID_3, 520, 550, 0x0000, 0x4000, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_5, 550, 801, 0x0000, 0x4000, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_PLAYER_CUE(PLAYER_CUEID_19, 801, 1956, 0x0000, 0xC000, 0x0000, 0, 6, 0, 0, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(49, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_7_0, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, -16, -121, 0, -16, -121, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_LIGHT_SETTING_LIST(5),
CS_LIGHT_SETTING(0x0004, 0, 384, 0x0000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000),
@@ -26,9 +26,9 @@ static CutsceneData D_80AF411C[] = {
CS_LIGHT_SETTING(0x0004, 454, 554, 0x0000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000),
CS_LIGHT_SETTING(0x0005, 554, 624, 0x0000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000),
CS_LIGHT_SETTING(0x0004, 624, 3001, 0x0000, 0x00000000, 0xFFFFFFA1, 0x00000000, 0x00000058, 0xFFFFFFA1, 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(39, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_5, 1),
CS_ACTOR_CUE(0x0001, 0, 3000, 0x0000, 0x0000, 0x0000, 0, 0, -2, 0, 0, -2, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
- CS_ACTOR_CUE_LIST(42, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_3_2, 3),
CS_ACTOR_CUE(0x0001, 0, 146, 0x0000, 0x0000, 0x0000, 195, 6, 0, 195, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0002, 146, 754, 0x0000, 0x0000, 0x0000, 195, 6, 0, 195, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0003, 754, 2628, 0x0000, 0x0000, 0x0000, 195, 6, 0, 195, 6, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
@@ -197,28 +197,28 @@ static CutsceneData D_80AF411C[] = {
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x0000),
CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x0000),
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x4289332C, 68.599945f), 0, 42, 16, 0x0164),
- CS_ACTOR_CUE_LIST(62, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_8_0, 1),
CS_ACTOR_CUE(0x0004, 0, 3000, 0xC10F, 0x0000, 0x0000, 77, 80, -2, 0, 80, 0, CS_FLOAT(0xBCD242E7, -0.025666667f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x3CD242E7, 0.025666667f)),
CS_TEXT_LIST(14),
CS_TEXT_NONE(0, 394),
- CS_TEXT(0x4041, 394, 444, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x4041, 394, 444, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(444, 464),
- CS_TEXT(0x4046, 464, 543, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x4046, 464, 543, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(543, 564),
- CS_TEXT(0x4049, 564, 613, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x4049, 564, 613, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(613, 634),
- CS_TEXT(0x4047, 634, 684, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x4047, 634, 684, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(684, 704),
- CS_TEXT(0x404A, 704, 750, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x404A, 704, 750, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(750, 1085),
- CS_TEXT(0x003D, 1085, 1090, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x003D, 1085, 1090, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_TEXT_NONE(1090, 1150),
- CS_TEXT(0x4042, 1150, 1160, 0x0000, 0x0000, 0x0000),
+ CS_TEXT(0x4042, 1150, 1160, CS_TEXT_NORMAL, 0x0000, 0x0000),
CS_DESTINATION(CS_DEST_LAKE_HYLIA_WATER_RESTORED, 1190, 1213),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_MEDALLION_GET, 900, 901, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC7, 0x00000034, 0x00000000, 0xFFFFFFC7, 0x00000034),
CS_FADE_OUT_SEQ_LIST(1),
CS_FADE_OUT_SEQ(CS_FADE_OUT_BGM_MAIN, 800, 850, 0x0000, 0x00000000, 0x00000000, 0xFFFFFFC6, 0x00000030, 0x00000000, 0xFFFFFFC6, 0x00000030),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Sa/z_en_sa.c b/src/overlays/actors/ovl_En_Sa/z_en_sa.c
index 72eba29b61..b2543c317e 100644
--- a/src/overlays/actors/ovl_En_Sa/z_en_sa.c
+++ b/src/overlays/actors/ovl_En_Sa/z_en_sa.c
@@ -4,7 +4,9 @@
#include "assets/scenes/overworld/spot04/spot04_scene.h"
#include "assets/scenes/overworld/spot05/spot05_scene.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnSa_Init(Actor* thisx, PlayState* play);
void EnSa_Destroy(Actor* thisx, PlayState* play);
@@ -155,7 +157,7 @@ u16 EnSa_GetTextId(PlayState* play, Actor* thisx) {
return 0x1047;
}
}
- if (GET_EVENTCHKINF(EVENTCHKINF_02)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_MIDO_DENIED_DEKU_TREE_ACCESS)) {
this->unk_208 = 0;
this->unk_209 = TEXT_STATE_NONE;
if (GET_INFTABLE(INFTABLE_03)) {
@@ -503,7 +505,7 @@ void EnSa_Init(Actor* thisx, PlayState* play) {
case 4:
this->unk_210 = 0;
this->actor.gravity = -1.0f;
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(gSpot04Cs_10E20);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gKokiriForestSariaGreetingCs);
gSaveContext.cutsceneTrigger = 1;
EnSa_ChangeAnim(this, ENSA_ANIM1_4);
this->actionFunc = func_80AF68E4;
@@ -625,7 +627,7 @@ void func_80AF683C(EnSa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (!(player->actor.world.pos.z >= -2220.0f) && !Play_InCsMode(play)) {
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(spot05_scene_Cs_005730);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gMeadowSariasSongCs);
gSaveContext.cutsceneTrigger = 1;
this->actionFunc = func_80AF68E4;
}
@@ -738,7 +740,7 @@ void EnSa_Update(Actor* thisx, PlayState* play) {
}
if (this->actionFunc != func_80AF68E4) {
- this->alpha = func_80034DD4(&this->actor, play, this->alpha, 400.0f);
+ this->alpha = Actor_UpdateAlphaByDistance(&this->actor, play, this->alpha, 400.0f);
} else {
this->alpha = 255;
}
diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c
index 4452c86610..62bd38cc11 100644
--- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c
+++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c
@@ -6,7 +6,7 @@
#include "z_en_sda.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnSda_Init(Actor* thisx, PlayState* play);
void EnSda_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c b/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c
index 20a655101a..1a1093f229 100644
--- a/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c
+++ b/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c
@@ -7,7 +7,7 @@
#include "z_en_siofuki.h"
#include "assets/objects/object_siofuki/object_siofuki.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnSiofuki_Init(Actor* thisx, PlayState* play);
void EnSiofuki_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
index da5b8bd4bc..1a61fcfb9d 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Encount1/z_en_encount1.h"
#include "assets/objects/object_skb/object_skb.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum StalchildBehavior {
SKB_BEHAVIOR_BURIED,
diff --git a/src/overlays/actors/ovl_En_Skj/z_en_skj.c b/src/overlays/actors/ovl_En_Skj/z_en_skj.c
index a05e400777..ec41b1e22d 100644
--- a/src/overlays/actors/ovl_En_Skj/z_en_skj.c
+++ b/src/overlays/actors/ovl_En_Skj/z_en_skj.c
@@ -2,7 +2,9 @@
#include "overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.h"
#include "assets/objects/object_skj/object_skj.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_UPDATE_DURING_OCARINA)
void EnSkj_Init(Actor* thisx, PlayState* play2);
void EnSkj_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
index 3d9c998742..09b9df91c1 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
@@ -1,7 +1,9 @@
#include "z_en_ssh.h"
#include "assets/objects/object_ssh/object_ssh.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
#define SSH_STATE_STUNNED (1 << 0)
#define SSH_STATE_GROUND_START (1 << 2)
diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c
index d1dd84467d..d7b6a20e50 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.c
+++ b/src/overlays/actors/ovl_En_St/z_en_st.c
@@ -7,7 +7,9 @@
#include "z_en_st.h"
#include "assets/objects/object_st/object_st.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnSt_Init(Actor* thisx, PlayState* play);
void EnSt_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
index 1d42d4c43c..ac10651812 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -9,7 +9,7 @@
#include "assets/objects/object_ahg/object_ahg.h"
#include "assets/objects/object_boj/object_boj.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnSth_Init(Actor* thisx, PlayState* play);
void EnSth_Destroy(Actor* thisx, PlayState* play);
@@ -74,19 +74,18 @@ static EnSthActionFunc sRewardObtainedWaitActions[6] = {
};
static u16 sEventFlags[6] = {
- 0, EVENTCHKINF_DA_MASK, EVENTCHKINF_DB_MASK, EVENTCHKINF_DC_MASK, EVENTCHKINF_DD_MASK, EVENTCHKINF_DE_MASK,
+ 0,
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_10),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_20),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_30),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_40),
+ EVENTCHKINF_MASK(EVENTCHKINF_SKULLTULA_REWARD_50),
};
static s16 sGetItemIds[6] = {
GI_RUPEE_GOLD, GI_WALLET_ADULT, GI_STONE_OF_AGONY, GI_WALLET_GIANT, GI_BOMBCHUS_10, GI_HEART_PIECE,
};
-static Vec3f D_80B0B49C = { 700.0f, 400.0f, 0.0f };
-
-static Color_RGB8 sTunicColors[6] = {
- { 190, 110, 0 }, { 0, 180, 110 }, { 0, 255, 80 }, { 255, 160, 60 }, { 190, 230, 250 }, { 240, 230, 120 },
-};
-
void EnSth_SetupAction(EnSth* this, EnSthActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
@@ -114,7 +113,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
}
objectId = sObjectIds[params];
- if (objectId != 1) {
+ if (objectId != OBJECT_GAMEPLAY_KEEP) {
objectSlot = Object_GetSlot(&play->objectCtx, objectId);
} else {
objectSlot = 0;
@@ -154,9 +153,9 @@ void EnSth_SetupAfterObjectLoaded(EnSth* this, PlayState* play) {
16);
Animation_PlayLoop(&this->skelAnime, sAnimations[this->actor.params]);
- this->eventFlag = sEventFlags[this->actor.params];
params = &this->actor.params;
- if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] & this->eventFlag) {
+ this->eventFlag = sEventFlags[*params];
+ if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SKULLTULA_REWARD] & this->eventFlag) {
EnSth_SetupAction(this, sRewardObtainedWaitActions[*params]);
} else {
EnSth_SetupAction(this, EnSth_RewardUnobtainedWait);
@@ -256,7 +255,7 @@ void EnSth_GiveReward(EnSth* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
EnSth_SetupAction(this, EnSth_RewardObtainedTalk);
- gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] |= this->eventFlag;
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_SKULLTULA_REWARD] |= this->eventFlag;
} else {
EnSth_GivePlayerItem(this, play);
}
@@ -358,6 +357,7 @@ s32 EnSth_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
}
void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ static Vec3f D_80B0B49C = { 700.0f, 400.0f, 0.0f };
EnSth* this = (EnSth*)thisx;
if (limbIndex == 15) {
@@ -383,6 +383,9 @@ Gfx* EnSth_AllocColorDList(GraphicsContext* play, u8 envR, u8 envG, u8 envB, u8
}
void EnSth_Draw(Actor* thisx, PlayState* play) {
+ static Color_RGB8 sShirtColors[6] = {
+ { 190, 110, 0 }, { 0, 180, 110 }, { 0, 255, 80 }, { 255, 160, 60 }, { 190, 230, 250 }, { 240, 230, 120 },
+ };
EnSth* this = (EnSth*)thisx;
Color_RGB8* envColor1;
@@ -392,8 +395,8 @@ void EnSth_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_37Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
- EnSth_AllocColorDList(play->state.gfxCtx, sTunicColors[this->actor.params].r,
- sTunicColors[this->actor.params].g, sTunicColors[this->actor.params].b, 255));
+ EnSth_AllocColorDList(play->state.gfxCtx, sShirtColors[this->actor.params].r,
+ sShirtColors[this->actor.params].g, sShirtColors[this->actor.params].b, 255));
if (this->actor.params == 0) {
gSPSegment(POLY_OPA_DISP++, 0x09, EnSth_AllocColorDList(play->state.gfxCtx, 190, 110, 0, 255));
diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c
index 57ff345d61..dc73048393 100644
--- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c
+++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c
@@ -7,7 +7,7 @@
#include "z_en_stream.h"
#include "assets/objects/object_stream/object_stream.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnStream_Init(Actor* thisx, PlayState* play);
void EnStream_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c
index 7f18de1528..b9b6b47c94 100644
--- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c
+++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c
@@ -1,7 +1,7 @@
#include "z_en_sw.h"
#include "assets/objects/object_st/object_st.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnSw_Init(Actor* thisx, PlayState* play);
void EnSw_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.c b/src/overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.c
index 9a7301f537..b20f817529 100644
--- a/src/overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.c
+++ b/src/overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.c
@@ -4,7 +4,7 @@
#include "overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.h"
#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum EnSyatekItemRound {
SYATEKI_ROUND_GREEN_APPEAR,
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
index e768c2cc14..5575182fe6 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
@@ -3,7 +3,9 @@
#include "overlays/actors/ovl_En_Syateki_Itm/z_en_syateki_itm.h"
#include "assets/objects/object_ossan/object_ossan.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_LOCK_ON_DISABLED)
typedef enum EnSyatekiManGameResult {
/* 0 */ SYATEKI_RESULT_NONE,
diff --git a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
index 566a866f9a..67d21f2311 100644
--- a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
+++ b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_niw/object_niw.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnSyatekiNiw_Init(Actor* thisx, PlayState* play);
void EnSyatekiNiw_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Ta/z_en_ta.c b/src/overlays/actors/ovl_En_Ta/z_en_ta.c
index c94f1acef9..bea60cf889 100644
--- a/src/overlays/actors/ovl_En_Ta/z_en_ta.c
+++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.c
@@ -219,7 +219,7 @@ void EnTa_Init(Actor* thisx, PlayState* play2) {
Actor_Kill(&this->actor);
} else {
if (IS_DAY) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->superCuccoTimers[0] = this->superCuccoTimers[1] = this->superCuccoTimers[2] = 7;
this->superCuccos[0] = (EnNiw*)Actor_Spawn(
&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x + 5.0f,
@@ -368,7 +368,7 @@ void EnTa_IdleAsleepInCastle(EnTa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- s32 exchangeItemId = func_8002F368(play);
+ s32 exchangeItemId = Actor_GetPlayerExchangeItemId(play);
switch (exchangeItemId) {
case EXCH_ITEM_CHICKEN:
@@ -403,7 +403,7 @@ void EnTa_IdleAsleepInKakariko(EnTa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- s32 exchangeItemId = func_8002F368(play);
+ s32 exchangeItemId = Actor_GetPlayerExchangeItemId(play);
switch (exchangeItemId) {
case EXCH_ITEM_POCKET_CUCCO:
@@ -501,7 +501,7 @@ void EnTa_RunAwayStart(EnTa* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_VO_TA_CRY_1);
EnTa_SetupAction(this, EnTa_RunAwayRunSouth, EnTa_AnimRepeatCurrent);
this->timer = 65;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
diff --git a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
index 87e2b836ea..bcc60b5f1a 100644
--- a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
+++ b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c
@@ -9,8 +9,9 @@
#include "versions.h"
#include "assets/objects/object_ts/object_ts.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_LOCK_ON_DISABLED)
void EnTakaraMan_Init(Actor* thisx, PlayState* play);
void EnTakaraMan_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c
index b3a7fc6ccf..13002ddc54 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -7,7 +7,7 @@
#include "z_en_test.h"
#include "assets/objects/object_sk2/object_sk2.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnTest_Init(Actor* thisx, PlayState* play);
void EnTest_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
index 2471e1e371..b253b7ea0b 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
@@ -10,7 +10,7 @@
#include "terminal.h"
#include "assets/objects/object_tite/object_tite.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
// EnTite_Idle
#define vIdleTimer actionVar1
@@ -364,7 +364,7 @@ void EnTite_Attack(EnTite* this, PlayState* play) {
func_800355B8(play, &this->backLeftFootPos);
}
}
- if (!(this->collider.base.atFlags & AT_HIT) && (this->actor.flags & ACTOR_FLAG_6)) {
+ if (!(this->collider.base.atFlags & AT_HIT) && (this->actor.flags & ACTOR_FLAG_INSIDE_CULLING_VOLUME)) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
} else {
Player* player = GET_PLAYER(play);
diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
index bef80ab310..53243d29a8 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
@@ -8,7 +8,9 @@
#include "assets/objects/object_torch2/object_torch2.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
+ ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum EnTorch2ActionStates {
/* 0 */ ENTORCH2_WAIT,
diff --git a/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c b/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
index 4b27209fca..5b31c32f84 100644
--- a/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
+++ b/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
@@ -258,7 +258,7 @@ s32 EnToryo_GetTextId(EnToryo* this, PlayState* play) {
if (textId == 0) {
if (this->stateFlags & 1) {
- if (GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
+ if (GET_EVENTCHKINF_CARPENTERS_ALL_RESCUED()) {
ret = 0x606C;
} else if (GET_INFTABLE(INFTABLE_170)) {
ret = 0x606B;
@@ -318,7 +318,7 @@ void EnToryo_HandleTalking(EnToryo* this, PlayState* play) {
if (this->messageState == 0) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
- this->exchangeItemId = func_8002F368(play);
+ this->exchangeItemId = Actor_GetPlayerExchangeItemId(play);
if (this->exchangeItemId != EXCH_ITEM_NONE) {
player->actor.textId = EnToryo_ReactToExchangeItem(this, play);
this->actor.textId = player->actor.textId;
diff --git a/src/overlays/actors/ovl_En_Tp/z_en_tp.c b/src/overlays/actors/ovl_En_Tp/z_en_tp.c
index cadc1f45da..79500059b5 100644
--- a/src/overlays/actors/ovl_En_Tp/z_en_tp.c
+++ b/src/overlays/actors/ovl_En_Tp/z_en_tp.c
@@ -154,7 +154,7 @@ void EnTp_Init(Actor* thisx, PlayState* play2) {
this->collider.elements[0].dim.modelSphere.radius = this->collider.elements[0].dim.worldSphere.radius = 8;
EnTp_Head_SetupWait(this);
this->actor.focus.pos = this->actor.world.pos;
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
Actor_SetScale(&this->actor, 1.5f);
for (i = 0; i <= 6; i++) {
@@ -171,7 +171,8 @@ void EnTp_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&next->actor, 0.3f);
if (i == 2) {
- next->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4;
+ next->actor.flags |=
+ ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
next->unk_150 = 1; // Why?
}
diff --git a/src/overlays/actors/ovl_En_Tr/z_en_tr.c b/src/overlays/actors/ovl_En_Tr/z_en_tr.c
index e2d612d61b..6cd63e00f8 100644
--- a/src/overlays/actors/ovl_En_Tr/z_en_tr.c
+++ b/src/overlays/actors/ovl_En_Tr/z_en_tr.c
@@ -7,7 +7,7 @@
#include "z_en_tr.h"
#include "assets/objects/object_tr/object_tr.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnTr_Init(Actor* thisx, PlayState* play);
void EnTr_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Trap/z_en_trap.c b/src/overlays/actors/ovl_En_Trap/z_en_trap.c
index 420e5a1ca1..640332ecba 100644
--- a/src/overlays/actors/ovl_En_Trap/z_en_trap.c
+++ b/src/overlays/actors/ovl_En_Trap/z_en_trap.c
@@ -7,7 +7,7 @@
#include "z_en_trap.h"
#include "assets/objects/object_trap/object_trap.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define BEGIN_MOVE_OUT 65535.0f
diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
index c122d39684..8db28db170 100644
--- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
+++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
@@ -9,7 +9,7 @@
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnTuboTrap_Init(Actor* thisx, PlayState* play);
void EnTuboTrap_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Vali/z_en_vali.c b/src/overlays/actors/ovl_En_Vali/z_en_vali.c
index be03eb1644..fa83618611 100644
--- a/src/overlays/actors/ovl_En_Vali/z_en_vali.c
+++ b/src/overlays/actors/ovl_En_Vali/z_en_vali.c
@@ -7,7 +7,8 @@
#include "z_en_vali.h"
#include "assets/objects/object_vali/object_vali.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_IGNORE_QUAKE)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_IGNORE_QUAKE)
void EnVali_Init(Actor* thisx, PlayState* play);
void EnVali_Destroy(Actor* thisx, PlayState* play);
@@ -197,7 +198,7 @@ void EnVali_SetupFloatIdle(EnVali* this) {
this->leftArmCollider.dim.quad[1].y = this->rightArmCollider.dim.quad[0].y =
this->rightArmCollider.dim.quad[1].y = this->actor.world.pos.y - 10.0f;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->bodyCollider.base.acFlags |= AC_ON;
this->slingshotReactionTimer = 0;
this->floatHomeHeight = this->actor.world.pos.y;
@@ -274,7 +275,7 @@ void EnVali_SetupFrozen(EnVali* this) {
void EnVali_SetupReturnToLurk(EnVali* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gBariLurkingAnim, 10.0f);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
this->actionFunc = EnVali_ReturnToLurk;
}
diff --git a/src/overlays/actors/ovl_En_Vase/z_en_vase.c b/src/overlays/actors/ovl_En_Vase/z_en_vase.c
index 065013bb52..9861413414 100644
--- a/src/overlays/actors/ovl_En_Vase/z_en_vase.c
+++ b/src/overlays/actors/ovl_En_Vase/z_en_vase.c
@@ -7,7 +7,7 @@
#include "z_en_vase.h"
#include "assets/objects/object_vase/object_vase.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnVase_Init(Actor* thisx, PlayState* play);
void EnVase_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c b/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
index 1a8f8d2275..e31e9ca9a7 100644
--- a/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
+++ b/src/overlays/actors/ovl_En_Vb_Ball/z_en_vb_ball.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "overlays/actors/ovl_Boss_Fd/z_boss_fd.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnVbBall_Init(Actor* thisx, PlayState* play);
void EnVbBall_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
index 0b0594ed86..c7a231c0a2 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -16,7 +16,7 @@
#include "assets/objects/object_ganon/object_ganon.h"
#include "assets/objects/object_opening_demo1/object_opening_demo1.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnViewer_Init(Actor* thisx, PlayState* play);
void EnViewer_Destroy(Actor* thisx, PlayState* play);
@@ -44,7 +44,7 @@ ActorProfile En_Viewer_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_STOP),
};
static EnViewerInitData sInitData[] = {
@@ -176,7 +176,7 @@ void EnViewer_InitImpl(EnViewer* this, PlayState* play) {
if (!Object_IsLoaded(&play->objectCtx, skelObjectSlot) ||
!Object_IsLoaded(&play->objectCtx, this->animObjectSlot)) {
- this->actor.flags &= ~ACTOR_FLAG_6;
+ this->actor.flags &= ~ACTOR_FLAG_INSIDE_CULLING_VOLUME;
return;
}
@@ -209,9 +209,9 @@ void EnViewer_UpdateImpl(EnViewer* this, PlayState* play) {
}
} else if (type == ENVIEWER_TYPE_7_GANONDORF) {
Actor_SetScale(&this->actor, 0.3f);
- this->actor.uncullZoneForward = 10000.0f;
- this->actor.uncullZoneScale = 10000.0f;
- this->actor.uncullZoneDownward = 10000.0f;
+ this->actor.cullingVolumeDistance = 10000.0f;
+ this->actor.cullingVolumeScale = 10000.0f;
+ this->actor.cullingVolumeDownward = 10000.0f;
} else if (type == ENVIEWER_TYPE_3_GANONDORF) {
if (gSaveContext.sceneLayer == 4) {
switch (play->csCtx.curFrame) {
diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
index 1fe315ae2f..9847d4fa8d 100644
--- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c
+++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
@@ -9,7 +9,7 @@
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnVm_Init(Actor* thisx, PlayState* play);
void EnVm_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Wall_Tubo/z_en_wall_tubo.c b/src/overlays/actors/ovl_En_Wall_Tubo/z_en_wall_tubo.c
index 81fa2cf06c..d24a1001c2 100644
--- a/src/overlays/actors/ovl_En_Wall_Tubo/z_en_wall_tubo.c
+++ b/src/overlays/actors/ovl_En_Wall_Tubo/z_en_wall_tubo.c
@@ -11,7 +11,7 @@
#include "overlays/actors/ovl_Bg_Bowl_Wall/z_bg_bowl_wall.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnWallTubo_Init(Actor* thisx, PlayState* play);
void EnWallTubo_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
index 7346278053..abbf3ecaa0 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_wallmaster/object_wallmaster.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
#define TIMER_SCALE ((f32)OS_CLOCK_RATE / 10000000000)
@@ -151,7 +151,7 @@ void EnWallmas_TimerInit(EnWallmas* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->timer = 0x82;
this->actor.velocity.y = 0.0f;
this->actor.world.pos.y = player->actor.world.pos.y;
@@ -172,7 +172,7 @@ void EnWallmas_SetupDrop(EnWallmas* this, PlayState* play) {
this->actor.world.rot.y = player->actor.shape.rot.y + 0x8000;
this->actor.floorHeight = player->actor.floorHeight;
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
- this->actor.flags &= ~ACTOR_FLAG_5;
+ this->actor.flags &= ~ACTOR_FLAG_DRAW_CULLING_DISABLED;
this->actionFunc = EnWallmas_Drop;
}
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
index 0e2dccc170..bd5b6613b3 100644
--- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
+++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
@@ -8,7 +8,7 @@
#include "terminal.h"
#include "versions.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnWeatherTag_Init(Actor* thisx, PlayState* play);
void EnWeatherTag_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
index acb8b32bbe..36aaac2344 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -9,7 +9,7 @@
#include "overlays/actors/ovl_En_Encount1/z_en_encount1.h"
#include "assets/objects/object_wf/object_wf.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnWf_Init(Actor* thisx, PlayState* play);
void EnWf_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.c b/src/overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.c
index 3ae525205c..d755e0ed0d 100644
--- a/src/overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.c
+++ b/src/overlays/actors/ovl_En_Wonder_Talk2/z_en_wonder_talk2.c
@@ -193,7 +193,7 @@ void func_80B3A3D4(EnWonderTalk2* this, PlayState* play) {
if (this->talkMode == 4) {
this->unk_15A = true;
}
- this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4);
+ this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED);
Player_SetCsActionWithHaltedActors(play, NULL, PLAYER_CSACTION_7);
this->unk_156 = true;
this->actionFunc = func_80B3A4F8;
@@ -256,7 +256,7 @@ void func_80B3A4F8(EnWonderTalk2* this, PlayState* play) {
if (!this->unk_156) {
Message_StartTextbox(play, this->actor.textId, NULL);
Player_SetCsActionWithHaltedActors(play, NULL, PLAYER_CSACTION_8);
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actionFunc = func_80B3A3D4;
}
diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
index f893a1b06c..c66a2232dd 100644
--- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
+++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
@@ -104,11 +104,11 @@ s32 EnWood02_SpawnZoneCheck(EnWood02* this, PlayState* play, Vec3f* pos) {
phi_f12 = ((this->actor.projectedW == 0.0f) ? 1000.0f : fabsf(1.0f / this->actor.projectedW));
- if ((-this->actor.uncullZoneScale < this->actor.projectedPos.z) &&
- (this->actor.projectedPos.z < (this->actor.uncullZoneForward + this->actor.uncullZoneScale)) &&
- (((fabsf(this->actor.projectedPos.x) - this->actor.uncullZoneScale) * phi_f12) < 1.0f) &&
- (((this->actor.projectedPos.y + this->actor.uncullZoneDownward) * phi_f12) > -1.0f) &&
- (((this->actor.projectedPos.y - this->actor.uncullZoneScale) * phi_f12) < 1.0f)) {
+ if ((-this->actor.cullingVolumeScale < this->actor.projectedPos.z) &&
+ (this->actor.projectedPos.z < (this->actor.cullingVolumeDistance + this->actor.cullingVolumeScale)) &&
+ (((fabsf(this->actor.projectedPos.x) - this->actor.cullingVolumeScale) * phi_f12) < 1.0f) &&
+ (((this->actor.projectedPos.y + this->actor.cullingVolumeDownward) * phi_f12) > -1.0f) &&
+ (((this->actor.projectedPos.y - this->actor.cullingVolumeScale) * phi_f12) < 1.0f)) {
return true;
}
return false;
@@ -200,9 +200,9 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
case WOOD_BUSH_GREEN_LARGE:
case WOOD_BUSH_BLACK_LARGE:
actorScale = 1.5f;
- this->actor.uncullZoneForward = 4000.0f;
- this->actor.uncullZoneScale = 2000.0f;
- this->actor.uncullZoneDownward = 2400.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
+ this->actor.cullingVolumeScale = 2000.0f;
+ this->actor.cullingVolumeDownward = 2400.0f;
break;
case WOOD_TREE_CONICAL_SPAWNER:
case WOOD_TREE_OVAL_YELLOW_SPAWNER:
@@ -223,15 +223,15 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
case WOOD_TREE_KAKARIKO_ADULT:
case WOOD_BUSH_GREEN_SMALL:
case WOOD_BUSH_BLACK_SMALL:
- this->actor.uncullZoneForward = 4000.0f;
- this->actor.uncullZoneScale = 800.0f;
- this->actor.uncullZoneDownward = 1800.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
+ this->actor.cullingVolumeScale = 800.0f;
+ this->actor.cullingVolumeDownward = 1800.0f;
break;
case WOOD_TREE_CONICAL_SMALL:
actorScale = 0.6f;
- this->actor.uncullZoneForward = 4000.0f;
- this->actor.uncullZoneScale = 400.0f;
- this->actor.uncullZoneDownward = 1000.0f;
+ this->actor.cullingVolumeDistance = 4000.0f;
+ this->actor.cullingVolumeScale = 400.0f;
+ this->actor.cullingVolumeDownward = 1000.0f;
break;
case WOOD_LEAF_GREEN:
case WOOD_LEAF_YELLOW:
@@ -275,7 +275,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
this->actor.world.pos.x += (sSpawnSin * sSpawnDistance[5]);
this->actor.world.pos.z += (sSpawnCos * sSpawnDistance[5]);
} else {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
// Snap to floor, or remove if over void
@@ -309,7 +309,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
// Despawn extra trees in a group if out of range
if ((this->spawnType == WOOD_SPAWN_SPAWNED) && (this->actor.parent != NULL)) {
- if (!(this->actor.flags & ACTOR_FLAG_6)) {
+ if (!(this->actor.flags & ACTOR_FLAG_INSIDE_CULLING_VOLUME)) {
u8 new_var = this->unk_14E[0];
u8 phi_v0 = 0;
s32 pad;
diff --git a/src/overlays/actors/ovl_En_Xc/z_en_xc.c b/src/overlays/actors/ovl_En_Xc/z_en_xc.c
index ccf9bf873f..b693f30709 100644
--- a/src/overlays/actors/ovl_En_Xc/z_en_xc.c
+++ b/src/overlays/actors/ovl_En_Xc/z_en_xc.c
@@ -17,7 +17,7 @@
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.0:0" \
"ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnXc_Init(Actor* thisx, PlayState* play);
void EnXc_Destroy(Actor* thisx, PlayState* play);
@@ -305,7 +305,7 @@ s32 EnXc_MinuetCS(EnXc* this, PlayState* play) {
if (!Play_InCsMode(play)) {
s32 pad;
- play->csCtx.script = SEGMENTED_TO_VIRTUAL(gMinuetCs);
+ play->csCtx.script = SEGMENTED_TO_VIRTUAL(gMeadowMinuetCs);
gSaveContext.cutsceneTrigger = 1;
SET_EVENTCHKINF(EVENTCHKINF_50);
Item_Give(play, ITEM_SONG_MINUET);
diff --git a/src/overlays/actors/ovl_En_Yabusame_Mark/z_en_yabusame_mark.c b/src/overlays/actors/ovl_En_Yabusame_Mark/z_en_yabusame_mark.c
index 02683593c9..c628bdc565 100644
--- a/src/overlays/actors/ovl_En_Yabusame_Mark/z_en_yabusame_mark.c
+++ b/src/overlays/actors/ovl_En_Yabusame_Mark/z_en_yabusame_mark.c
@@ -104,7 +104,7 @@ void EnYabusameMark_Init(Actor* thisx, PlayState* play) {
Collider_InitQuad(play, &this->collider);
Collider_SetQuad(play, &this->collider, &this->actor, &sQuadInit);
this->worldPos = this->actor.world.pos;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
if (gSaveContext.sceneLayer != 4) {
Actor_Kill(&this->actor);
return;
diff --git a/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c b/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c
index 4f739acac8..4a6d3bc397 100644
--- a/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c
+++ b/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c
@@ -7,7 +7,7 @@
#include "z_en_yukabyun.h"
#include "assets/objects/object_yukabyun/object_yukabyun.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnYukabyun_Init(Actor* thisx, PlayState* play);
void EnYukabyun_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Zf/z_en_zf.c b/src/overlays/actors/ovl_En_Zf/z_en_zf.c
index 9c50186329..70812e3f0f 100644
--- a/src/overlays/actors/ovl_En_Zf/z_en_zf.c
+++ b/src/overlays/actors/ovl_En_Zf/z_en_zf.c
@@ -7,7 +7,7 @@
#include "z_en_zf.h"
#include "assets/objects/object_zf/object_zf.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnZf_Init(Actor* thisx, PlayState* play);
void EnZf_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
index 7a9edb9c67..8a01936fff 100644
--- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
+++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
@@ -7,7 +7,7 @@
#include "z_en_zl1.h"
#include "assets/objects/object_zl1/object_zl1.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnZl1_Init(Actor* thisx, PlayState* play);
void EnZl1_Destroy(Actor* thisx, PlayState* play);
@@ -23,7 +23,7 @@ void func_80B4BBC4(EnZl1* this, PlayState* play);
void func_80B4BC78(EnZl1* this, PlayState* play);
void func_80B4BF2C(EnZl1* this, PlayState* play);
-extern CutsceneData D_80B4C5D0[];
+extern CutsceneData gTriforceCreationStartCs[];
#include "z_en_zl1_camera_data.inc.c"
@@ -318,7 +318,7 @@ void func_80B4B240(EnZl1* this, PlayState* play) {
if (this->skelAnime.curFrame == frameCount) {
animHeaderSeg = &gChildZelda1Anim_00438;
sp3C = 1;
- play->csCtx.script = D_80B4C5D0;
+ play->csCtx.script = gTriforceCreationStartCs;
gSaveContext.cutsceneTrigger = 1;
this->actionFunc = func_80B4B8B4;
this->unk_1E2++;
diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
index d0b011d454..6c268600ec 100644
--- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
+++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1_cutscene_data.c
@@ -2,23 +2,23 @@
#include "z64cutscene_commands.h"
// clang-format off
-CutsceneData D_80B4C5D0[] = {
- CS_BEGIN_CUTSCENE(28, 3000),
+CutsceneData gTriforceCreationStartCs[] = {
+ CS_HEADER(28, 3000),
CS_PLAYER_CUE_LIST(3),
CS_PLAYER_CUE(PLAYER_CUEID_5, 400, 1211, 0x0000, 0xC000, 0x0000, -422, 84, 1, -422, 84, 1, CS_FLOAT(0xF6484E4, 1.1266862e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_1, 1211, 1241, 0x0000, 0xC000, 0x0000, -422, 84, 1, -483, 84, 0, CS_FLOAT(0xF6484E4, 1.1266862e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
CS_PLAYER_CUE(PLAYER_CUEID_41, 1241, 1311, 0x0000, 0xC000, 0x0000, -483, 84, 0, -483, 84, 0, CS_FLOAT(0xF6484E4, 1.1266862e-29f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x1, 1e-45f)),
- CS_ACTOR_CUE_LIST(18, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_0_2, 1),
CS_ACTOR_CUE(0x0007, 1170, 1316, 0x7477, 0x0000, 0x0000, -485, 84, 0, -469, 85, -55, CS_FLOAT(0x3DE07038, 0.10958904f), CS_FLOAT(0x3BE07038, 0.006849315f), CS_FLOAT(0xBDE07038, -0.10958904f)),
CS_UNK_DATA_LIST(0x00000049, 1),
CS_UNK_DATA(0x00010000, 0x0BB80000, 0x00000000, 0x00000000, 0xFFFFFFE8, 0x00000003, 0x00000000, 0xFFFFFFE8, 0x00000003, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(16, 3),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_1_1, 3),
CS_ACTOR_CUE(0x0009, 1220, 1310, 0x8000, 0x0000, 0x0000, -890, 90, 150, -890, 90, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x000A, 1310, 1449, 0x0000, 0x0000, 0x0000, -890, 90, 0, -890, 90, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_ACTOR_CUE(0x0004, 1449, 1457, 0x0000, 0x0000, 0x0000, -890, 90, 0, -890, 90, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_MISC_LIST(1),
CS_MISC(CS_MISC_STOP_CUTSCENE, 1460, 1461, 0x0000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000002, 0xFFFFFFFF, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000),
- CS_ACTOR_CUE_LIST(29, 1),
+ CS_ACTOR_CUE_LIST(CS_CMD_ACTOR_CUE_3_0, 1),
CS_ACTOR_CUE(0x0002, 330, 763, 0x0000, 0x0000, 0x0000, -1250, 150, 0, -1250, 150, 0, CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f), CS_FLOAT(0x0, 0.0f)),
CS_TRANSITION(CS_TRANS_GRAY_FILL_IN, 200, 231),
CS_TRANSITION(CS_TRANS_GRAY_FILL_OUT, 230, 271),
@@ -228,21 +228,21 @@ CutsceneData D_80B4C5D0[] = {
CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, CS_FLOAT(0x412FFF56, 10.999838f), -1349, 124, -6, 0x392C),
CS_TEXT_LIST(10),
CS_TEXT_NONE(0, 50),
- CS_TEXT(0x7035, 50, 190, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x7035, 50, 190, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(190, 300),
- CS_TEXT(0x7036, 300, 800, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x7036, 300, 800, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_TEXT_NONE(800, 970),
- CS_TEXT(0x7037, 970, 1150, 0x0000, 0xFFFF, 0x7038),
+ CS_TEXT(0x7037, 970, 1150, CS_TEXT_NORMAL, 0xFFFF, 0x7038),
CS_TEXT_NONE(1150, 1190),
- CS_TEXT(0x7005, 1190, 1200, 0x0000, 0xFFFF, 0x700B),
+ CS_TEXT(0x7005, 1190, 1200, CS_TEXT_NORMAL, 0xFFFF, 0x700B),
CS_TEXT_NONE(1200, 1340),
- CS_TEXT(0x7009, 1340, 1420, 0x0000, 0xFFFF, 0xFFFF),
+ CS_TEXT(0x7009, 1340, 1420, CS_TEXT_NORMAL, 0xFFFF, 0xFFFF),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_HYRULE_CS, 230, 231, 0x0000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000),
CS_START_SEQ_LIST(1),
CS_START_SEQ(NA_BGM_ZELDA_THEME, 870, 871, 0x0000, 0x00000000, 0xFFFFFFFE, 0x00000000, 0xFFFFFFFD, 0xFFFFFFFE, 0x00000000, 0xFFFFFFFD),
CS_STOP_SEQ_LIST(1),
CS_STOP_SEQ(NA_BGM_GENERAL_SFX, 110, 111, 0x0000, 0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000001),
- CS_END(),
+ CS_END_OF_SCRIPT(),
};
// clang-format on
diff --git a/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c b/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c
index 5dfe62b79d..cab2a0eeb7 100644
--- a/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c
+++ b/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c
@@ -13,7 +13,7 @@
#include "assets/objects/object_zl2/object_zl2.h"
#include "assets/objects/object_zl2_anime1/object_zl2_anime1.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnZl2_Init(Actor* thisx, PlayState* play);
void EnZl2_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
index cca405790a..68e2e374ae 100644
--- a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
+++ b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
@@ -15,7 +15,7 @@
#include "assets/objects/object_zl2/object_zl2.h"
#include "assets/objects/object_zl2_anime2/object_zl2_anime2.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnZl3_Init(Actor* thisx, PlayState* play);
void EnZl3_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
index 22f558ea5f..e3b8a51af3 100644
--- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
@@ -8,7 +8,7 @@
#include "assets/objects/object_zl4/object_zl4.h"
#include "assets/scenes/indoors/nakaniwa/nakaniwa_scene.h"
-#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_4)
+#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
typedef enum EnZl4CutsceneState {
/* 0 */ ZL4_CS_WAIT,
diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c
index c3080986e1..6eb051e47a 100644
--- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c
+++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c
@@ -418,7 +418,7 @@ u16 EnZo_GetTextId(PlayState* play, Actor* thisx) {
return 0x402D;
}
- if (GET_EVENTCHKINF(EVENTCHKINF_33)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_GAVE_LETTER_TO_KING_ZORA)) {
return 0x4010;
}
if (GET_EVENTCHKINF(EVENTCHKINF_30)) {
diff --git a/src/overlays/actors/ovl_En_fHG/z_en_fhg.c b/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
index c6778bd104..bce528552b 100644
--- a/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
+++ b/src/overlays/actors/ovl_En_fHG/z_en_fhg.c
@@ -10,7 +10,7 @@
#include "overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.h"
#include "overlays/actors/ovl_En_Fhg_Fire/z_en_fhg_fire.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef struct EnfHGPainting {
/* 0x00 */ Vec3f pos;
@@ -65,7 +65,7 @@ static EnfHGPainting sPaintings[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_S8(naviEnemyId, NAVI_ENEMY_PHANTOM_GANON_PHASE_2, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeScale, 1200, ICHAIN_STOP),
};
void EnfHG_Init(Actor* thisx, PlayState* play2) {
@@ -128,13 +128,13 @@ void EnfHG_Intro(EnfHG* this, PlayState* play) {
if ((fabsf(player->actor.world.pos.x - (GND_BOSSROOM_CENTER_X + 0.0f)) < 100.0f) &&
(fabsf(player->actor.world.pos.z - (GND_BOSSROOM_CENTER_Z + 315.0f)) < 100.0f)) {
this->cutsceneState = INTRO_START;
- if (GET_EVENTCHKINF(EVENTCHKINF_72)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_PHANTOM_GANON_BATTLE)) {
this->timers[0] = 57;
}
}
break;
case INTRO_START:
- if (GET_EVENTCHKINF(EVENTCHKINF_72)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_BEGAN_PHANTOM_GANON_BATTLE)) {
if (this->timers[0] == 55) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_SHUTTER,
GND_BOSSROOM_CENTER_X + 0.0f, GND_BOSSROOM_CENTER_Y - 97.0f,
@@ -159,7 +159,7 @@ void EnfHG_Intro(EnfHG* this, PlayState* play) {
this->timers[0] = 60;
this->actor.world.pos.y = GND_BOSSROOM_CENTER_Y - 7.0f;
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
- SET_EVENTCHKINF(EVENTCHKINF_72);
+ SET_EVENTCHKINF(EVENTCHKINF_BEGAN_PHANTOM_GANON_BATTLE);
Flags_SetSwitch(play, 0x23);
FALLTHROUGH;
case INTRO_FENCE:
diff --git a/src/overlays/actors/ovl_End_Title/z_end_title.c b/src/overlays/actors/ovl_End_Title/z_end_title.c
index 6772d76810..79ea3b8bcd 100644
--- a/src/overlays/actors/ovl_End_Title/z_end_title.c
+++ b/src/overlays/actors/ovl_End_Title/z_end_title.c
@@ -7,7 +7,7 @@
#include "z_end_title.h"
#include "versions.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EndTitle_Init(Actor* thisx, PlayState* play);
void EndTitle_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c
index 4c5e2ab731..02bbf1656d 100644
--- a/src/overlays/actors/ovl_Fishing/z_fishing.c
+++ b/src/overlays/actors/ovl_Fishing/z_fishing.c
@@ -35,10 +35,10 @@
#include "cic6105.h"
#endif
-#pragma increment_block_number "gc-eu:177 gc-eu-mq:177 gc-jp:177 gc-jp-ce:177 gc-jp-mq:177 gc-us:177 gc-us-mq:177" \
- "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:167 gc-eu-mq:167 gc-jp:167 gc-jp-ce:167 gc-jp-mq:167 gc-us:167 gc-us-mq:167" \
+ "ntsc-1.0:121 ntsc-1.1:121 ntsc-1.2:121 pal-1.0:121 pal-1.1:121"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define WATER_SURFACE_Y(play) play->colCtx.colHeader->waterBoxes->ySurface
@@ -2962,8 +2962,8 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) {
f32 temp;
f32 rumbleStrength;
- this->actor.uncullZoneForward = 700.0f;
- this->actor.uncullZoneScale = 50.0f;
+ this->actor.cullingVolumeDistance = 700.0f;
+ this->actor.cullingVolumeScale = 50.0f;
if (this->isLoach == 0) {
playerSpeedMod = (player->actor.speed * 0.15f) + 0.25f;
@@ -3082,8 +3082,8 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) {
case 100:
Fishing_HandleAquariumDialog(this, play);
- this->actor.uncullZoneForward = 500.0f;
- this->actor.uncullZoneScale = 300.0f;
+ this->actor.cullingVolumeDistance = 500.0f;
+ this->actor.cullingVolumeScale = 300.0f;
Lights_PointNoGlowSetInfo(&this->lightInfo, (s16)this->actor.world.pos.x,
(s16)this->actor.world.pos.y + 20.0f, (s16)this->actor.world.pos.z - 50.0f, 255,
@@ -3629,8 +3629,8 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) {
break;
case 5:
- this->actor.uncullZoneForward = 1200.0f;
- this->actor.uncullZoneScale = 200.0f;
+ this->actor.cullingVolumeDistance = 1200.0f;
+ this->actor.cullingVolumeScale = 200.0f;
sFishFightTime++;
PRINTF("HIT FISH %dcm\n", (u8)this->fishLength);
@@ -5195,7 +5195,7 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
if ((sOwnerTheftTimer != 0) || (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE)) {
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
} else {
- this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED;
}
if ((this->actor.xzDistToPlayer < 120.0f) || (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE)) {
diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
index bd581b2aa1..da8ddad524 100644
--- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
+++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c
@@ -30,9 +30,9 @@ ActorProfile Item_B_Heart_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
void ItemBHeart_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
index 83f282da0d..5527cef6df 100644
--- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
+++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
@@ -6,7 +6,7 @@
#include "z_item_etcetera.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ItemEtcetera_Init(Actor* thisx, PlayState* play);
void ItemEtcetera_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c b/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c
index 00d7eab43e..89d807318b 100644
--- a/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c
+++ b/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c
@@ -7,7 +7,7 @@
#include "z_item_ocarina.h"
#include "assets/scenes/overworld/spot00/spot00_scene.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ItemOcarina_Init(Actor* thisx, PlayState* play);
void ItemOcarina_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Item_Shield/z_item_shield.c b/src/overlays/actors/ovl_Item_Shield/z_item_shield.c
index 22c18b7713..560314ce2f 100644
--- a/src/overlays/actors/ovl_Item_Shield/z_item_shield.c
+++ b/src/overlays/actors/ovl_Item_Shield/z_item_shield.c
@@ -8,7 +8,7 @@
#include "z_item_shield.h"
#include "assets/objects/object_link_child/object_link_child.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ItemShield_Init(Actor* thisx, PlayState* play);
void ItemShield_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
index fc298fca8b..d809a82ebe 100644
--- a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
+++ b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
@@ -7,7 +7,7 @@
#include "z_magic_dark.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void MagicDark_Init(Actor* thisx, PlayState* play);
void MagicDark_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c b/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c
index e36a673c95..ede5f3691c 100644
--- a/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c
+++ b/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c
@@ -6,7 +6,7 @@
#include "z_magic_fire.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void MagicFire_Init(Actor* thisx, PlayState* play);
void MagicFire_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c b/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c
index 1126ae5b0a..0694e07128 100644
--- a/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c
+++ b/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c
@@ -6,7 +6,7 @@
#include "z_magic_wind.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void MagicWind_Init(Actor* thisx, PlayState* play);
void MagicWind_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
index 4bb8ce0cf6..1915999df6 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
@@ -7,7 +7,7 @@
#include "z_mir_ray.h"
#include "assets/objects/object_mir_ray/object_mir_ray.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void MirRay_Init(Actor* thisx, PlayState* play);
void MirRay_Destroy(Actor* thisx, PlayState* play);
@@ -106,9 +106,9 @@ static MirRayDataEntry sMirRayData[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void MirRay_SetupCollider(MirRay* this) {
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
index 570c645a24..1e34d1c586 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -120,9 +120,9 @@ static Gfx* sBreakDlists[] = { gCuttableShrubStalkDL, gCuttableShrubTipDL };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1600, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1600, ICHAIN_STOP),
};
void ObjBean_InitCollider(Actor* thisx, PlayState* play) {
@@ -537,7 +537,7 @@ void ObjBean_SetupWaitForBean(ObjBean* this) {
void ObjBean_WaitForBean(ObjBean* this, PlayState* play) {
if (Actor_TalkOfferAccepted(&this->dyna.actor, play)) {
- if (func_8002F368(play) == EXCH_ITEM_MAGIC_BEAN) {
+ if (Actor_GetPlayerExchangeItemId(play) == EXCH_ITEM_MAGIC_BEAN) {
func_80B8FE00(this);
Flags_SetSwitch(play, PARAMS_GET_U(this->dyna.actor.params, 0, 6));
}
@@ -636,7 +636,7 @@ void ObjBean_WaitForWater(ObjBean* this, PlayState* play) {
ObjBean_SetupGrowWaterPhase1(this);
D_80B90E30 = this;
OnePointCutscene_Init(play, 2210, -99, &this->dyna.actor, CAM_ID_MAIN);
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
return;
}
@@ -739,7 +739,7 @@ void ObjBean_GrowWaterPhase5(ObjBean* this, PlayState* play) {
this->transformFunc(this);
if (this->timer <= 0) {
func_80B8FF50(this);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
@@ -764,7 +764,7 @@ void ObjBean_SetupFly(ObjBean* this) {
this->actionFunc = ObjBean_Fly;
ObjBean_SetDrawMode(this, BEAN_STATE_DRAW_PLANT);
this->dyna.actor.speed = 0.0f;
- this->dyna.actor.flags |= ACTOR_FLAG_4; // Never stop updating
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED; // Never stop updating
}
void ObjBean_Fly(ObjBean* this, PlayState* play) {
@@ -776,7 +776,7 @@ void ObjBean_Fly(ObjBean* this, PlayState* play) {
ObjBean_SetupPath(this, play);
ObjBean_SetupWaitForStepOff(this);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4; // Never stop updating (disable)
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED; // Never stop updating (disable)
mainCam = play->cameraPtrs[CAM_ID_MAIN];
if ((mainCam->setting == CAM_SET_BEAN_LOST_WOODS) || (mainCam->setting == CAM_SET_BEAN_GENERIC)) {
diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
index bf6a5ebf4f..68e1687aa8 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
@@ -54,9 +54,9 @@ static CollisionCheckInfoInit sColChkInfoInit = { 0, 12, 60, MASS_IMMOVABLE };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 350, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 350, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
static s16 sEffectScales[] = {
diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
index 0198ddfc8f..6f86b829a4 100644
--- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
+++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
@@ -61,9 +61,9 @@ static ColliderJntSphInit sJntSphInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 900, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 900, ICHAIN_STOP),
};
void ObjComb_Break(ObjComb* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c b/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c
index fac468a29c..411d3e2ad9 100644
--- a/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c
+++ b/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c
@@ -32,9 +32,9 @@ ActorProfile Obj_Elevator_Profile = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 600, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 600, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2000, ICHAIN_STOP),
};
static f32 sScales[] = { 0.1f, 0.05f };
diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
index ba43d40a46..3f45341e30 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
@@ -54,9 +54,9 @@ static s16 sEffectScales[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 250, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 250, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 500, ICHAIN_STOP),
};
void ObjHamishi_InitCollision(Actor* thisx, PlayState* play) {
@@ -140,7 +140,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
if (play->csCtx.state != CS_STATE_IDLE) {
- this->actor.uncullZoneForward += 1000.0f;
+ this->actor.cullingVolumeDistance += 1000.0f;
}
if (this->actor.shape.rot.y == 0) {
this->actor.shape.rot.y = this->actor.world.rot.y = this->actor.home.rot.y = Rand_ZeroFloat(65536.0f);
diff --git a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
index 11b671c4b4..badd99186d 100644
--- a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
+++ b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
@@ -64,9 +64,9 @@ static HanaParams sHanaParams[] = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 10, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 900, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 60, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 900, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 60, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
void ObjHana_Init(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
index 75163663e9..d946077670 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
@@ -37,9 +37,9 @@ static f32 D_80B940C0[] = { 85.0f, 85.0f, 0.0f };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2000, ICHAIN_STOP),
};
static CollisionHeader* sCollisionHeaders[] = { &gHookshotPostCol, &gHookshotPostCol, &gHookshotTargetCol };
@@ -116,7 +116,7 @@ void func_80B93D90(ObjHsblock* this) {
}
void func_80B93DB0(ObjHsblock* this) {
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 105.0f;
ObjHsblock_SetupAction(this, func_80B93DF4);
}
@@ -137,7 +137,7 @@ void func_80B93E5C(ObjHsblock* this, PlayState* play) {
this->dyna.actor.velocity.y, 0.3f)) < 0.001f) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
func_80B93D90(this);
- this->dyna.actor.flags &= ~ACTOR_FLAG_4;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
index 18b90b5584..23b1728fcc 100644
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
+++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
@@ -7,7 +7,7 @@
#include "z_obj_ice_poly.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjIcePoly_Init(Actor* thisx, PlayState* play);
void ObjIcePoly_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
index 0e41cff338..0f26d40611 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
@@ -8,7 +8,7 @@
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_CAN_PRESS_SWITCHES)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_CAN_PRESS_SWITCHES)
void ObjKibako_Init(Actor* thisx, PlayState* play);
void ObjKibako_Destroy(Actor* thisx, PlayState* play2);
@@ -58,9 +58,9 @@ static CollisionCheckInfoInit sCCInfoInit = { 0, 12, 60, MASS_HEAVY };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 60, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 60, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void ObjKibako_SpawnCollectible(ObjKibako* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
index 58e578c059..035dbb9b09 100644
--- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
+++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
@@ -51,9 +51,9 @@ static ColliderCylinderInit sCylinderInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 3000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void ObjKibako2_InitCollider(Actor* thisx, PlayState* play) {
@@ -147,7 +147,7 @@ void ObjKibako2_Idle(ObjKibako2* this, PlayState* play) {
func_80033684(play, &this->dyna.actor) != NULL) {
ObjKibako2_Break(this, play);
SfxSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
- this->dyna.actor.flags |= ACTOR_FLAG_4;
+ this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
this->actionFunc = ObjKibako2_Kill;
diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
index 3c63e0af1f..e13352a5a3 100644
--- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
+++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
@@ -9,7 +9,7 @@
#include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h"
#include "quake.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjLift_Init(Actor* thisx, PlayState* play);
void ObjLift_Destroy(Actor* thisx, PlayState* play);
@@ -49,9 +49,9 @@ static ObjLiftFramgentScale sFragmentScales[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32_DIV1000(gravity, -600, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2000, ICHAIN_STOP),
+ ICHAIN_F32_DIV1000(gravity, -600, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2000, ICHAIN_STOP),
};
static f32 sScales[] = { 0.1f, 0.05f };
diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
index 6f723d292a..a2d8dbbb12 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
@@ -9,7 +9,7 @@
#include "overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h"
#include "assets/objects/object_lightswitch/object_lightswitch.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum FaceTextureIndex {
/* 0x00 */ FACE_EYES_CLOSED,
@@ -83,9 +83,9 @@ static Vec3f D_80B97F74 = { 0.0f, 0.0f, 0.0f };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1000, ICHAIN_STOP),
};
void ObjLightswitch_InitCollider(ObjLightswitch* this, PlayState* play) {
@@ -184,7 +184,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.z = 0;
this->actor.world.rot.x = this->actor.home.rot.x = this->actor.shape.rot.x;
this->actor.world.rot.z = this->actor.home.rot.z = this->actor.shape.rot.z;
- this->actor.flags |= ACTOR_FLAG_5;
+ this->actor.flags |= ACTOR_FLAG_DRAW_CULLING_DISABLED;
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_OSHIHIKI, this->actor.home.pos.x,
this->actor.home.pos.y, this->actor.home.pos.z, 0, this->actor.home.rot.y, 0,
(0xFF << 8) | PUSHBLOCK_SMALL_START_ON) == NULL) {
diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
index e909134128..82e10d0f23 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
@@ -8,7 +8,7 @@
#include "global.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjMakekinsuta_Init(Actor* thisx, PlayState* play);
void ObjMakekinsuta_Update(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
index eeaf2bdd60..1cc2161196 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_5
+#define FLAGS ACTOR_FLAG_DRAW_CULLING_DISABLED
void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play);
void ObjMakeoshihiki_Draw(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
index 7b52356690..90e1b5dda7 100644
--- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
+++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
@@ -54,9 +54,9 @@ static s16 sSpawnActorIds[] = { ACTOR_EN_KUSA, 0, ACTOR_EN_FISH, ACTOR_EN_INSECT
static s16 sSpawnParams[] = { 0, 2, -1, INSECT_TYPE_PERMANENT, -1 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1200, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 200, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1200, ICHAIN_STOP),
};
s32 ObjMure_SetCullingImpl(Actor* thisx, PlayState* play) {
@@ -284,7 +284,7 @@ void ObjMure_InitialAction(ObjMure* this, PlayState* play) {
void ObjMure_CulledState(ObjMure* this, PlayState* play) {
if (fabsf(this->actor.projectedPos.z) < sZClip[this->type]) {
this->actionFunc = ObjMure_ActiveState;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
ObjMure_SpawnActors(this, play);
}
}
@@ -407,7 +407,7 @@ void ObjMure_ActiveState(ObjMure* this, PlayState* play) {
ObjMure_CheckChildren(this, play);
if (sZClip[this->type] + 40.0f <= fabsf(this->actor.projectedPos.z)) {
this->actionFunc = ObjMure_CulledState;
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
ObjMure_KillActors(this, play);
} else if (sTypeGroupBehaviorFunc[this->type] != NULL) {
sTypeGroupBehaviorFunc[this->type](this, play);
diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
index 7539520b3d..bcdb0558e7 100644
--- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
+++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
@@ -159,9 +159,9 @@ void func_80B9A534(ObjMure2* this) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 2100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 2100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 100, ICHAIN_STOP),
};
void ObjMure2_Init(Actor* thisx, PlayState* play) {
@@ -169,7 +169,7 @@ void ObjMure2_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
if (play->csCtx.state != CS_STATE_IDLE) {
- this->actor.uncullZoneForward += 1200.0f;
+ this->actor.cullingVolumeDistance += 1200.0f;
}
ObjMure2_SetupWait(this);
}
@@ -189,7 +189,7 @@ void func_80B9A658(ObjMure2* this) {
void func_80B9A668(ObjMure2* this, PlayState* play) {
if (Math3D_Dist1DSq(this->actor.projectedPos.x, this->actor.projectedPos.z) <
(sDistSquared1[PARAMS_GET_U(this->actor.params, 0, 2)] * this->unk_184)) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
ObjMure2_SpawnActors(this, play);
func_80B9A6E8(this);
}
@@ -203,7 +203,7 @@ void func_80B9A6F8(ObjMure2* this, PlayState* play) {
func_80B9A534(this);
if ((sDistSquared2[PARAMS_GET_U(this->actor.params, 0, 2)] * this->unk_184) <=
Math3D_Dist1DSq(this->actor.projectedPos.x, this->actor.projectedPos.z)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
ObjMure2_CleanupAndDie(this, play);
func_80B9A658(this);
}
diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
index 1ed11535ca..c9ed01e3c9 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
@@ -34,9 +34,9 @@ ActorProfile Obj_Mure3_Profile = {
static s16 sRupeeCounts[] = { 5, 5, 7, 0 };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 100, ICHAIN_STOP),
};
void func_80B9A9D0(ObjMure3* this, PlayState* play) {
@@ -172,7 +172,7 @@ void func_80B9AF64(ObjMure3* this, PlayState* play) {
static ObjMure3SpawnFunc spawnFuncs[] = { func_80B9A9D0, func_80B9AA90, func_80B9ABA0 };
if (Math3D_Dist1DSq(this->actor.projectedPos.x, this->actor.projectedPos.z) < SQ(1150.0f)) {
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
spawnFuncs[PARAMS_GET_U(this->actor.params, 13, 3)](this, play);
func_80B9AFEC(this);
}
@@ -185,7 +185,7 @@ void func_80B9AFEC(ObjMure3* this) {
void func_80B9AFFC(ObjMure3* this, PlayState* play) {
func_80B9ADCC(this, play);
if (Math3D_Dist1DSq(this->actor.projectedPos.x, this->actor.projectedPos.z) >= SQ(1450.0f)) {
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
func_80B9ACE4(this, play);
func_80B9AF54(this);
}
diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
index f6bb63bbb3..ed9d39e3da 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjOshihiki_Init(Actor* thisx, PlayState* play2);
void ObjOshihiki_Destroy(Actor* thisx, PlayState* play);
@@ -59,9 +59,9 @@ static s16 sSceneIds[] = {
};
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 500, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 500, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
// The vertices and center of the bottom face
diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
index 5648c809ca..8ed5e8558e 100644
--- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
+++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
@@ -6,7 +6,7 @@
#include "z_obj_roomtimer.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void ObjRoomtimer_Init(Actor* thisx, PlayState* play);
void ObjRoomtimer_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
index ef4f34f9e4..4ebd98a2fe 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -8,7 +8,7 @@
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "terminal.h"
-#define FLAGS ACTOR_FLAG_4
+#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define OBJSWITCH_TYPE(thisx) PARAMS_GET_U((thisx)->params, 0, 3)
#define OBJSWITCH_SUBTYPE(thisx) PARAMS_GET_U((thisx)->params, 4, 3)
@@ -176,9 +176,9 @@ static ColliderJntSphInit sCrystalJntSphInit = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 2000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 2000, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 400, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 2000, ICHAIN_STOP),
};
void ObjSwitch_RotateY(Vec3f* dest, Vec3f* src, s16 rotY) {
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
index d68f3d3c46..7c221da0b8 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_syokudai/object_syokudai.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
void ObjSyokudai_Init(Actor* thisx, PlayState* play);
void ObjSyokudai_Destroy(Actor* thisx, PlayState* play);
@@ -70,9 +70,9 @@ static ColliderCylinderInit sCylInitFlame = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 4000, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
static s32 sLitTorchCount;
diff --git a/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c b/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c
index 0235a0513c..bc231076ce 100644
--- a/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c
+++ b/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c
@@ -7,8 +7,9 @@
#include "z_obj_timeblock.h"
#include "assets/objects/object_timeblock/object_timeblock.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA | \
+ ACTOR_FLAG_LOCK_ON_DISABLED)
void ObjTimeblock_Init(Actor* thisx, PlayState* play);
void ObjTimeblock_Destroy(Actor* thisx, PlayState* play);
@@ -53,9 +54,9 @@ static f32 sRanges[] = { 60.0, 100.0, 140.0, 180.0, 220.0, 260.0, 300.0, 300.0 }
static InitChainEntry sInitChain[] = {
ICHAIN_U8(attentionRangeType, ATTENTION_RANGE_2, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
static Color_RGB8 sPrimColors[] = {
diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
index d88f5c7142..a5911678e4 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "assets/objects/object_tsubo/object_tsubo.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_THROW_ONLY)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_THROW_ONLY)
void ObjTsubo_Init(Actor* thisx, PlayState* play);
void ObjTsubo_Destroy(Actor* thisx, PlayState* play2);
@@ -77,9 +77,9 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit[] = { 0, 12, 60, MASS_IMMOVABLE };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32_DIV1000(gravity, -1200, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -20000, ICHAIN_CONTINUE),
- ICHAIN_VEC3F_DIV1000(scale, 150, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 900, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
+ ICHAIN_F32_DIV1000(gravity, -1200, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -20000, ICHAIN_CONTINUE),
+ ICHAIN_VEC3F_DIV1000(scale, 150, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDistance, 900, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 100, ICHAIN_CONTINUE), ICHAIN_F32(cullingVolumeDownward, 800, ICHAIN_STOP),
};
void ObjTsubo_SpawnCollectible(ObjTsubo* this, PlayState* play) {
@@ -227,7 +227,7 @@ void ObjTsubo_WaitForObject(ObjTsubo* this, PlayState* play) {
this->actor.draw = ObjTsubo_Draw;
this->actor.objectSlot = this->requiredObjectSlot;
ObjTsubo_SetupIdle(this);
- this->actor.flags &= ~ACTOR_FLAG_4;
+ this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
}
@@ -279,7 +279,7 @@ void ObjTsubo_SetupLiftedUp(ObjTsubo* this) {
this->actor.room = -1;
//! @bug: This is an unsafe cast, although the sound effect will still play
Player_PlaySfx((Player*)&this->actor, NA_SE_PL_PULL_UP_POT);
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
}
void ObjTsubo_LiftedUp(ObjTsubo* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c b/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
index 7877b148a7..ac422c63e8 100644
--- a/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
+++ b/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c
@@ -8,8 +8,9 @@
#include "assets/objects/object_timeblock/object_timeblock.h"
#include "terminal.h"
-#define FLAGS \
- (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA | ACTOR_FLAG_LOCK_ON_DISABLED)
+#define FLAGS \
+ (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA | \
+ ACTOR_FLAG_LOCK_ON_DISABLED)
void ObjWarp2block_Init(Actor* thisx, PlayState* play2);
void ObjWarp2block_Destroy(Actor* thisx, PlayState* play);
@@ -55,9 +56,9 @@ static Warp2BlockSpawnData sSpawnData[] = {
static f32 sDistances[] = { 60.0f, 100.0f, 140.0f, 180.0f, 220.0f, 260.0f, 300.0f, 300.0f };
static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 1800, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1800, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeScale, 300, ICHAIN_CONTINUE),
+ ICHAIN_F32(cullingVolumeDownward, 1500, ICHAIN_STOP),
};
static Color_RGB8 sColors[] = {
diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
index c18ca9f44d..d3f126b1e7 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -9,7 +9,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "assets/objects/object_spot02_objects/object_spot02_objects.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void ObjectKankyo_Init(Actor* thisx, PlayState* play);
void ObjectKankyo_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
index 0c229ebb12..7953afe1f8 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -7,7 +7,7 @@
#include "z_oceff_spot.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffSpot_Init(Actor* thisx, PlayState* play);
void OceffSpot_Destroy(Actor* thisx, PlayState* play);
@@ -32,7 +32,7 @@ ActorProfile Oceff_Spot_Profile = {
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_STOP),
+ ICHAIN_F32(cullingVolumeDistance, 1500, ICHAIN_STOP),
};
void OceffSpot_SetupAction(OceffSpot* this, OceffSpotActionFunc actionFunc) {
@@ -81,7 +81,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) {
} else {
Actor_Kill(&this->actor);
if (gTimeSpeed != 400 && !play->msgCtx.disableSunsSong &&
- GET_EVENTINF_HORSES_STATE() != EVENTINF_HORSES_STATE_1) {
+ GET_EVENTINF_INGO_RACE_STATE() != INGO_RACE_STATE_HORSE_RENTAL_PERIOD) {
if (play->msgCtx.ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE ||
play->msgCtx.ocarinaMode != OCARINA_MODE_08) {
gSaveContext.sunsSongState = SUNSSONG_START;
diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
index 3d95b4651e..c7c63690b7 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
@@ -6,7 +6,7 @@
#include "z_oceff_storm.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffStorm_Init(Actor* thisx, PlayState* play);
void OceffStorm_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
index 4235b1c004..f9b14bc7de 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
@@ -7,7 +7,7 @@
#include "z_oceff_wipe.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffWipe_Init(Actor* thisx, PlayState* play);
void OceffWipe_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
index d613381f81..9e3b03a8f9 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
@@ -7,7 +7,7 @@
#include "z_oceff_wipe2.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffWipe2_Init(Actor* thisx, PlayState* play);
void OceffWipe2_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
index ea5c7eddcd..757e9b116d 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
@@ -7,7 +7,7 @@
#include "z_oceff_wipe3.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffWipe3_Init(Actor* thisx, PlayState* play);
void OceffWipe3_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
index 0aaee51d08..9ad0dbf68e 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
@@ -7,7 +7,7 @@
#include "z_oceff_wipe4.h"
#include "terminal.h"
-#define FLAGS (ACTOR_FLAG_4 | ACTOR_FLAG_UPDATE_DURING_OCARINA)
+#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffWipe4_Init(Actor* thisx, PlayState* play);
void OceffWipe4_Destroy(Actor* thisx, PlayState* play);
diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
index 4d581a4448..a91fb67154 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -68,7 +68,7 @@ void ShotSun_Init(Actor* thisx, PlayState* play) {
params = PARAMS_GET_U(this->actor.params, 0, 8);
if (params == 0x40 || params == 0x41) {
this->fairySpawnerState = SPAWNER_OUT_OF_RANGE;
- this->actor.flags |= ACTOR_FLAG_4;
+ this->actor.flags |= ACTOR_FLAG_UPDATE_CULLING_DISABLED;
this->actor.flags |= ACTOR_FLAG_UPDATE_DURING_OCARINA;
this->actionFunc = ShotSun_UpdateFairySpawner;
this->actor.flags |= ACTOR_FLAG_LOCK_ON_DISABLED;
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 28b66bcb35..8f84f379e6 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -335,21 +335,21 @@ void Player_Action_CsAction(Player* this, PlayState* play);
// .bss part 1
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ntsc-1.0:64 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+ "ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:128 pal-1.1:128"
static s32 D_80858AA0;
// TODO: There's probably a way to match BSS ordering with less padding by spreading the variables out and moving
// data around. It would be easier if we had more options for controlling BSS ordering in debug.
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ntsc-1.0:192 ntsc-1.1:128 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
+ "ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192"
static s32 sSavedCurrentMask;
static Vec3f sInteractWallCheckResult;
static Input* sControlInput;
-#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
- "ntsc-1.0:128 ntsc-1.1:192 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+#pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \
+ "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data
@@ -4817,7 +4817,8 @@ s32 func_808382DC(Player* this, PlayState* play) {
respawnInfo = &fallingSpikeTrapRespawn;
}
- Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0xDFF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN,
+ PLAYER_PARAMS(PLAYER_START_MODE_IDLE, PLAYER_START_BG_CAM_DEFAULT));
gSaveContext.respawn[RESPAWN_MODE_DOWN].pos = respawnInfo->pos;
gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw = respawnInfo->yaw;
}
@@ -10191,7 +10192,8 @@ s32 func_80845BA0(PlayState* play, Player* this, f32* arg2, s32 arg3) {
s32 func_80845C68(PlayState* play, s32 arg1) {
if (arg1 == 0) {
- Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0xDFF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN,
+ PLAYER_PARAMS(PLAYER_START_MODE_IDLE, PLAYER_START_BG_CAM_DEFAULT));
}
gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 0;
return arg1;
@@ -10277,7 +10279,8 @@ void Player_Action_80845EF8(Player* this, PlayState* play) {
Room_FinishRoomChange(play, &play->roomCtx);
}
Camera_SetFinishedFlag(Play_GetCamera(play, CAM_ID_MAIN));
- Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0xDFF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN,
+ PLAYER_PARAMS(PLAYER_START_MODE_IDLE, PLAYER_START_BG_CAM_DEFAULT));
}
return;
}
@@ -10786,13 +10789,14 @@ void Player_Init(Actor* thisx, PlayState* play2) {
}
if (func_80845C68(play, (respawnFlag == 2) ? 1 : 0) == 0) {
- gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = PARAMS_GET_S(thisx->params, 0, 8) | 0xD00;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams =
+ PLAYER_PARAMS(PLAYER_START_MODE_IDLE, PLAYER_GET_START_BG_CAM_INDEX(thisx));
}
gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1;
if (play->sceneId <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) {
- gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] |= gBitFlags[play->sceneId];
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1AX] |= gBitFlags[play->sceneId];
}
startMode = PLAYER_GET_START_MODE(thisx);
@@ -11920,7 +11924,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
if (DREG(25) != 0) {
DREG(25) = 0;
} else {
- AREG(6) = 1;
+ R_EXITED_SCENE_RIDING_HORSE = true;
}
}
}
@@ -13296,7 +13300,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
}
if (LinkAnimation_OnFrame(&this->skelAnime, arr[1])) {
- func_8002DE74(play, this);
+ Actor_RequestHorseCameraSetting(play, this);
Player_PlaySfx(this, NA_SE_PL_SIT_ON_HORSE);
return;
}
@@ -13304,7 +13308,7 @@ void Player_Action_8084CC98(Player* this, PlayState* play) {
return;
}
- func_8002DE74(play, this);
+ Actor_RequestHorseCameraSetting(play, this);
this->skelAnime.prevTransl = D_8085499C;
if ((rideActor->animationIdx != this->av2.actionVar2) &&
@@ -13463,9 +13467,9 @@ void Player_Action_8084D3E4(Player* this, PlayState* play) {
func_8083C0E8(this, play);
this->stateFlags1 &= ~PLAYER_STATE1_23;
this->actor.parent = NULL;
- AREG(6) = 0;
+ R_EXITED_SCENE_RIDING_HORSE = false;
- if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
+ if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || R_DEBUG_FORCE_EPONA_OBTAINED) {
gSaveContext.save.info.horseData.pos.x = rideActor->actor.world.pos.x;
gSaveContext.save.info.horseData.pos.y = rideActor->actor.world.pos.y;
gSaveContext.save.info.horseData.pos.z = rideActor->actor.world.pos.z;
@@ -13869,7 +13873,8 @@ void Player_Action_8084E3C4(Player* this, PlayState* play) {
s32 pad;
gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex = sWarpSongEntrances[play->msgCtx.lastPlayedSong];
- gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams = 0x5FF;
+ gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams =
+ PLAYER_PARAMS(PLAYER_START_MODE_WARP_SONG, PLAYER_START_BG_CAM_DEFAULT);
gSaveContext.respawn[RESPAWN_MODE_RETURN].data = play->msgCtx.lastPlayedSong;
this->csAction = PLAYER_CSACTION_NONE;
@@ -14972,13 +14977,15 @@ void Player_Action_808507F4(Player* this, PlayState* play) {
if (this->av2.actionVar2 == 0) {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 1;
- Play_SetupRespawnPoint(play, RESPAWN_MODE_TOP, 0x6FF);
+ Play_SetupRespawnPoint(play, RESPAWN_MODE_TOP,
+ PLAYER_PARAMS(PLAYER_START_MODE_FARORES_WIND, PLAYER_START_BG_CAM_DEFAULT));
gSaveContext.save.info.fwMain.set = 1;
gSaveContext.save.info.fwMain.pos.x = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.x;
gSaveContext.save.info.fwMain.pos.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.y;
gSaveContext.save.info.fwMain.pos.z = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.z;
gSaveContext.save.info.fwMain.yaw = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw;
- gSaveContext.save.info.fwMain.playerParams = 0x6FF;
+ gSaveContext.save.info.fwMain.playerParams =
+ PLAYER_PARAMS(PLAYER_START_MODE_FARORES_WIND, PLAYER_START_BG_CAM_DEFAULT);
gSaveContext.save.info.fwMain.entranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex;
gSaveContext.save.info.fwMain.roomIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex;
gSaveContext.save.info.fwMain.tempSwchFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags;
@@ -16158,7 +16165,7 @@ void func_80852C50(PlayState* play, Player* this, CsCmdActorCue* cueUnused) {
}
if (cue == NULL) {
- this->actor.flags &= ~ACTOR_FLAG_6;
+ this->actor.flags &= ~ACTOR_FLAG_INSIDE_CULLING_VOLUME;
} else {
s32 csAction;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
index a839900ec9..a79893c392 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c
@@ -6,6 +6,7 @@
#include "z_eff_ss_kakera.h"
#include "versions.h"
+#include "line_numbers.h"
#define rReg0 regs[0]
#define rGravity regs[1]
@@ -55,11 +56,7 @@ u32 EffectSsKakera_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
} else {
PRINTF("shape_modelがNULL\n");
-#if OOT_VERSION < NTSC_1_1
- LogUtils_HungupThread("../z_eff_kakera.c", 175);
-#else
- LogUtils_HungupThread("../z_eff_kakera.c", 178);
-#endif
+ LogUtils_HungupThread("../z_eff_kakera.c", LN1(175, 178));
}
this->draw = EffectSsKakera_Draw;
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
index 33c98159c9..e633b06e2e 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c
@@ -466,7 +466,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]);
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
- gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 0;
+ gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 0;
gSaveContext.save.info.equips.buttonItems[0] = cursorItem;
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
index a34f324102..dfcccb33f4 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -3902,7 +3902,7 @@ void KaleidoScope_Update(PlayState* play) {
if (CHECK_QUEST_ITEM(QUEST_SONG_STORMS)) {
pauseCtx->worldMapPoints[WORLD_MAP_POINT_KAKARIKO_VILLAGE] = WORLD_MAP_POINT_STATE_HIGHLIGHT;
}
- if (GET_EVENTCHKINF(EVENTCHKINF_67)) {
+ if (GET_EVENTCHKINF(EVENTCHKINF_DRAINED_WELL)) {
pauseCtx->worldMapPoints[WORLD_MAP_POINT_KAKARIKO_VILLAGE] = WORLD_MAP_POINT_STATE_SHOW;
}
if (GET_EVENTCHKINF(EVENTCHKINF_AA)) {
diff --git a/tools/.gitignore b/tools/.gitignore
index c5ae45dacd..dfde978af6 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -13,4 +13,5 @@ gzinject/obj/*
z64compress/z64compress
z64compress/o/*
-graphovl/
+ido_recomp/
+egcs/
diff --git a/tools/Makefile b/tools/Makefile
index 30d9114aaf..c591fa583f 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -1,6 +1,23 @@
CFLAGS := -Wall -Wextra -pedantic -std=c99 -g -O2
PROGRAMS := elf2rom makeromfs mkdmadata mkldscript preprocess_pragmas reloc_prereq
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Linux)
+ DETECTED_OS=linux
+else ifeq ($(UNAME_S),Darwin)
+ DETECTED_OS=macos
+else
+ $(error Unsupported OS: $(UNAME_S))
+endif
+
+IDO_RECOMP_VERSION := v1.2
+IDO_RECOMP_5_3_DIR := ido_recomp/$(DETECTED_OS)/5.3
+IDO_RECOMP_7_1_DIR := ido_recomp/$(DETECTED_OS)/7.1
+
+EGCS_BINUTILS_VERSION := 0.6
+EGCS_GCC_VERSION := 0.7
+EGCS_DIR := egcs/$(DETECTED_OS)
+
ifeq ($(shell command -v clang >/dev/null 2>&1; echo $$?),0)
CC := clang
else
@@ -17,7 +34,7 @@ ifneq ($(LLD),0)
CFLAGS += -fuse-ld=lld
endif
-all: $(PROGRAMS)
+all: $(PROGRAMS) $(IDO_RECOMP_5_3_DIR) $(IDO_RECOMP_7_1_DIR) $(EGCS_DIR)
$(MAKE) -C ZAPD
$(MAKE) -C fado
ifeq ($(wildcard ./gzinject/Makefile),)
@@ -30,6 +47,7 @@ endif
clean:
$(RM) $(PROGRAMS) $(addsuffix .exe,$(PROGRAMS))
+ $(RM) -r ido_recomp egcs
$(MAKE) -C ZAPD clean
$(MAKE) -C fado clean
ifneq ($(wildcard ./gzinject/Makefile),)
@@ -59,3 +77,16 @@ $(1): $($1_SOURCES)
endef
$(foreach p,$(PROGRAMS),$(eval $(call COMPILE,$(p))))
+
+$(IDO_RECOMP_5_3_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/ido-static-recomp/releases/download/$(IDO_RECOMP_VERSION)/ido-5.3-recomp-$(DETECTED_OS).tar.gz | tar xz -C $@
+
+$(IDO_RECOMP_7_1_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/ido-static-recomp/releases/download/$(IDO_RECOMP_VERSION)/ido-7.1-recomp-$(DETECTED_OS).tar.gz | tar xz -C $@
+
+$(EGCS_DIR):
+ mkdir -p $@
+ curl -sL https://github.com/decompals/mips-binutils-egcs-2.9.5/releases/download/$(EGCS_BINUTILS_VERSION)/mips-binutils-egcs-2.9.5-$(DETECTED_OS).tar.gz | tar xz -C $@
+ curl -sL https://github.com/decompals/mips-gcc-egcs-2.91.66/releases/download/$(EGCS_GCC_VERSION)/mips-gcc-egcs-2.91.66-$(DETECTED_OS).tar.gz | tar xz -C $@
diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo
index 35d0134910..bb5ac2efe1 100644
--- a/tools/ZAPD/.gitrepo
+++ b/tools/ZAPD/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/zeldaret/ZAPD.git
branch = master
- commit = 0285e11f0a5937f60db023bfe5db273f2223fcf4
- parent = afd82230e1bd6e043eabe613f5b31f6e96f0f88c
+ commit = c04562d30aae565e98d538fd4c1e5c08699c8d48
+ parent = cfe1e4db6e1a4b561ac1ed0e87f250c83b5a3c69
method = merge
- cmdver = 0.4.6
+ cmdver = 0.4.9
diff --git a/tools/ZAPD/ZAPD/ZCKeyFrame.cpp b/tools/ZAPD/ZAPD/ZCKeyFrame.cpp
index 387f8ad2f2..3893394f5c 100644
--- a/tools/ZAPD/ZAPD/ZCKeyFrame.cpp
+++ b/tools/ZAPD/ZAPD/ZCKeyFrame.cpp
@@ -130,7 +130,17 @@ size_t ZKeyFrameSkel::GetRawDataSize() const
std::string ZKeyFrameSkel::GetSourceTypeName() const
{
- return "KeyFrameSkeleton";
+ switch (limbType)
+ {
+ case ZKeyframeSkelType::Normal:
+ return "KeyFrameSkeleton";
+
+ case ZKeyframeSkelType::Flex:
+ return "KeyFrameFlexSkeleton";
+
+ default:
+ return "KeyFrameSkeleton";
+ }
}
ZResourceType ZKeyFrameSkel::GetResourceType() const
diff --git a/tools/ZAPD/ZAPD/ZCutscene.cpp b/tools/ZAPD/ZAPD/ZCutscene.cpp
index 7ae431ebab..636a7d4c73 100644
--- a/tools/ZAPD/ZAPD/ZCutscene.cpp
+++ b/tools/ZAPD/ZAPD/ZCutscene.cpp
@@ -24,7 +24,7 @@ std::string ZCutscene::GetBodySourceCode() const
{
std::string output = "";
- output += StringHelper::Sprintf(" CS_BEGIN_CUTSCENE(%i, %i),\n", numCommands, endFrame);
+ output += StringHelper::Sprintf(" CS_HEADER(%i, %i),\n", numCommands, endFrame);
for (size_t i = 0; i < commands.size(); i++)
{
@@ -32,7 +32,7 @@ std::string ZCutscene::GetBodySourceCode() const
output += " " + cmd->GenerateSourceCode();
}
- output += StringHelper::Sprintf(" CS_END(),");
+ output += StringHelper::Sprintf(" CS_END_OF_SCRIPT(),");
return output;
}
diff --git a/tools/ZAPDConfigs/EnumData.xml b/tools/ZAPDConfigs/EnumData.xml
index 4b86308b63..bbe0b2d07a 100644
--- a/tools/ZAPDConfigs/EnumData.xml
+++ b/tools/ZAPDConfigs/EnumData.xml
@@ -148,7 +148,7 @@
-
+
@@ -172,8 +172,8 @@
-
-
+
+
@@ -297,8 +297,8 @@
-
-
+
+
diff --git a/tools/ZAPDConfigs/ique-cn/Config.xml b/tools/ZAPDConfigs/ique-cn/Config.xml
new file mode 100644
index 0000000000..b2f4e3e4d3
--- /dev/null
+++ b/tools/ZAPDConfigs/ique-cn/Config.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/ZAPDConfigs/ique-cn/SymbolMap.txt b/tools/ZAPDConfigs/ique-cn/SymbolMap.txt
new file mode 100644
index 0000000000..52ff547fde
--- /dev/null
+++ b/tools/ZAPDConfigs/ique-cn/SymbolMap.txt
@@ -0,0 +1,2 @@
+80106980 gMtxClear
+80AE0B10 sShadowTex
diff --git a/tools/audio/.gitignore b/tools/audio/.gitignore
index f0d3c612fd..5864deaf3c 100644
--- a/tools/audio/.gitignore
+++ b/tools/audio/.gitignore
@@ -1,5 +1,6 @@
__pycache__/
+afile_sizes
atblgen
sfpatch
sbc
diff --git a/tools/audio/Makefile b/tools/audio/Makefile
index e93bb158c1..fa74b8c8a9 100644
--- a/tools/audio/Makefile
+++ b/tools/audio/Makefile
@@ -1,4 +1,4 @@
-PROGRAMS := atblgen sfpatch sbc sfc
+PROGRAMS := afile_sizes atblgen sbc sfc sfpatch
ifeq ($(shell which xml2-config),)
$(error xml2-config not found. Did you install libxml2-dev?)
@@ -9,7 +9,7 @@ FORMAT_ARGS := -i -style=file
CC := gcc
CFLAGS := -Wall -Wextra -pedantic
-OPTFLAGS := -Og -g3
+OPTFLAGS := -O2
XML_CFLAGS := $(shell xml2-config --cflags)
XML_LDFLAGS := $(shell xml2-config --libs)
@@ -30,10 +30,11 @@ format:
$(CLANG_FORMAT) $(FORMAT_ARGS) $(shell find . -maxdepth 1 -type f -name "*.[ch]")
$(MAKE) -C sampleconv format
-atblgen_SOURCES := audio_tablegen.c samplebank.c soundfont.c xml.c util.c
-sfpatch_SOURCES := sfpatch.c util.c
-sbc_SOURCES := samplebank_compiler.c samplebank.c aifc.c xml.c util.c
-sfc_SOURCES := soundfont_compiler.c samplebank.c soundfont.c aifc.c xml.c util.c
+afile_sizes_SOURCES := afile_sizes.c util.c
+atblgen_SOURCES := audio_tablegen.c samplebank.c soundfont.c xml.c util.c
+sbc_SOURCES := samplebank_compiler.c samplebank.c aifc.c xml.c util.c
+sfc_SOURCES := soundfont_compiler.c samplebank.c soundfont.c aifc.c xml.c util.c
+sfpatch_SOURCES := sfpatch.c util.c
atblgen_CFLAGS := $(XML_CFLAGS)
sbc_CFLAGS := $(XML_CFLAGS)
diff --git a/tools/audio/README.md b/tools/audio/README.md
new file mode 100644
index 0000000000..95998dd944
--- /dev/null
+++ b/tools/audio/README.md
@@ -0,0 +1,59 @@
+# Z64 Audio Tools
+
+The Z64 Audio Tools work together to implement the full audio asset pipeline
+
+![](../../docs/audio/build_flowchart.png)
+
+**Licensing Information**
+* The programs `atblgen`, `sampleconv`, `sbc` and `sfc` are (mostly) distributed under MPL-2.0. The VADPCM encoding and decoding portions of `sampleconv` are under CC0-1.0.
+* The programs `sfpatch` and `afile_sizes` are distributed under CC0-1.0.
+* The extraction tool is distributed under CC0-1.0.
+
+## sampleconv
+
+Converts aifc <-> aiff / wav
+
+Used in extraction and build to convert audio sample data between uncompressed mono 16-bit PCM and the compressed formats used by the audio driver.
+
+## SampleBank Compiler (sbc)
+
+Converts samplebank xml + aifc -> asm
+
+Samplebanks are converted to assembly files for building as it is easier to define the necessary absolute symbols, and they are pure unstructured data.
+
+## SoundFont Compiler (sfc)
+
+Converts soundfont & samplebank xml + aifc -> C
+
+Soundfonts are converted to C rather than assembly as it shares data structures with the audio driver code. Modifying the structures used by the driver without updating `sfc` to write them should error at compile-time rather than crash at runtime.
+
+## sfpatch
+
+`Usage: sfpatch in.elf out.elf`
+
+This tool patches the symbol table of an ELF file (`in.elf`) to make every defined symbol in the file an absolute symbol. This is a required step for building soundfonts from C source as all pointers internal to a soundfont are offset from the start of the soundfont file and not the audiobank segment as a whole. Making all defined symbols ABS symbols prevents the linker from updating their values later, ensuring they remain file-relative.
+
+## atblgen
+
+Generates various audio code tables.
+
+- Samplebank table: Specifies where in the `Audiotable` file each samplebank begins and how large it is.
+- Soundfont table: Specifies where in the `Audiobank` files each soundfont begins, how large it is, which samplebanks it uses, and how many instruments/drums/sfx it contains.
+- Sequence font table: Contains information on what soundfonts each sequence uses. Generated from the sequence object files that embed a `.note.fonts` section that holds this information.
+
+The sequence table is not generated as some things in that table are better left manually specified, such as sequence enum names and flags. This also lets us have the sequence table before assembling any sequence files which is nice for some sequence commands like `runseq`.
+
+## afile_sizes
+
+Produces header files containing binary file sizes for a given set of object files. Used to produce headers containing soundfont and sequence files and the number of each for use in code files.
+
+## extraction
+
+This collection of python files implements the extraction of audio data from a base ROM.
+
+Files that are designed to be used externally include:
+- `audio_extract.py` is the main file for audio extraction, it expects an external script to call `extract_audio_for_version` with the necessary inputs.
+- `disassemble_sequence.py` is runnable but is not used in this way in either extraction or building. It may be used to manually disassemble a sequence binary.
+- `tuning.py` is runnable but is not used that way in either extraction or building. It may be used to manually determine alternative matches for the samplerate and basenote of a sample as the extraction procedure cannot always determine these uniquely.
+
+See individual python source files for further details on their purposes.
diff --git a/tools/audio/afile_sizes.c b/tools/audio/afile_sizes.c
new file mode 100644
index 0000000000..1bd87ef483
--- /dev/null
+++ b/tools/audio/afile_sizes.c
@@ -0,0 +1,120 @@
+/* SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET */
+/* SPDX-License-Identifier: CC0-1.0 */
+#include
+#include
+#include
+#include
+
+#include "elf32.h"
+#include "util.h"
+
+static int
+usage(const char *progname)
+{
+ fprintf(stderr,
+ // clang-format off
+ "Generates a header containing definitions for the sizes of all the input object files and a" "\n"
+ "definition for the number of input files." "\n"
+ "Usage: %s