diff --git a/.gitignore b/.gitignore index f10e23510e..3b1e6398ab 100644 --- a/.gitignore +++ b/.gitignore @@ -7,54 +7,24 @@ __pycache__/ .vscode/ .vs/ .idea/ -CMakeLists.txt -cmake-build-debug -venv/ -.venv/ # Project-specific ignores +.make_options.mk +extracted/ build/ expected/ -notes/ -baserom/ -baseroms/*/segments/ docs/doxygen/ -*.elf -*.sra *.z64 *.n64 *.v64 -*.map -*.dump -out.txt -*.ram -# Tool artifacts -tools/mipspro7.2_compiler/ -tools/overlayhelpers/batchdisasm/output/* -tools/overlayhelpers/batchdisasm/output2/* -tools/overlayhelpers/batchdisasm/mipsdisasm/* -tools/disasm/output/* -tools/asmsplitter/asm/* -tools/asmsplitter/c/* +# Tools +.venv/ ctx.c tools/*dSYM/ graphs/ -# Assets -*.png -*.jpg -*.mdli -*.anmi -*.obj -*.mtl -*.fbx -!*_custom* -.extracted-assets.json -extracted/ - -# Docs -!docs/tutorial/ - # Per-user configuration -.python-version +# If you want to use your own gitignore rules without modifying this file: +# - use `git config core.excludesFile path/to/my_gitignore_file` +# - or edit `.git/info/exclude` diff --git a/Jenkinsfile b/Jenkinsfile index f05c0808c2..2566f13e3d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -30,20 +30,7 @@ pipeline { sh 'make -j setup' } } - stage('Build gc-eu-mq-dbg (qemu-irix)') { - when { - branch 'main' - } - steps { - sh 'make -j ORIG_COMPILER=1' - } - } stage('Build gc-eu-mq-dbg') { - when { - not { - branch 'main' - } - } steps { sh 'make -j RUN_CC_CHECK=0' } @@ -54,20 +41,7 @@ pipeline { sh 'make -j setup VERSION=gc-eu-mq' } } - stage('Build gc-eu-mq (qemu-irix)') { - when { - branch 'main' - } - steps { - sh 'make -j VERSION=gc-eu-mq ORIG_COMPILER=1' - } - } stage('Build gc-eu-mq') { - when { - not { - branch 'main' - } - } steps { sh 'make -j VERSION=gc-eu-mq RUN_CC_CHECK=0' } diff --git a/Makefile b/Makefile index 11a960949e..4a7ec5ac8b 100644 --- a/Makefile +++ b/Makefile @@ -5,31 +5,106 @@ SHELL = /bin/bash .SHELLFLAGS = -o pipefail -c # Build options can either be changed by modifying the makefile, or by building with 'make SETTING=value' +# It is also possible to override default settings in a file called .make_options.mk with 'SETTING=value'. + +-include .make_options.mk # If COMPARE is 1, check the output md5sum after building -COMPARE := 1 +COMPARE ?= 1 # If NON_MATCHING is 1, define the NON_MATCHING C flag when building -NON_MATCHING := 0 +NON_MATCHING ?= 0 # If ORIG_COMPILER is 1, compile with QEMU_IRIX and the original compiler -ORIG_COMPILER := 0 +ORIG_COMPILER ?= 0 # If COMPILER is "gcc", compile with GCC instead of IDO. -COMPILER := ido +COMPILER ?= ido # Target game version. Currently the following versions are supported: +# gc-jp GameCube Japan +# gc-jp-mq GameCube Japan Master Quest +# gc-jp-ce GameCube Japan (Collector's Edition disc) +# gc-us GameCube US +# gc-us-mq GameCube US # gc-eu GameCube Europe/PAL # gc-eu-mq GameCube Europe/PAL Master Quest # gc-eu-mq-dbg GameCube Europe/PAL Master Quest Debug (default) # The following versions are work-in-progress and not yet matching: -# gc-us GameCube US -VERSION := gc-eu-mq-dbg +# ntsc-1.2 N64 NTSC 1.2 (Japan) +VERSION ?= gc-eu-mq-dbg # Number of threads to extract and compress with -N_THREADS := $(shell nproc) +N_THREADS ?= $(shell nproc) # Check code syntax with host compiler -RUN_CC_CHECK := 1 +RUN_CC_CHECK ?= 1 +# 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 is indicative of missing dependencies +MIPS_BINUTILS_PREFIX ?= mips-linux-gnu- +# Emulator w/ flags +N64_EMULATOR ?= +# Set to override game region in the ROM header. Options: JP, US, EU +# REGION ?= US CFLAGS ?= CPPFLAGS ?= CPP_DEFINES ?= +# Version-specific settings +ifeq ($(VERSION),ntsc-1.2) + REGION ?= JP + PLATFORM := N64 + PAL := 0 + MQ := 0 + DEBUG := 0 + COMPARE := 0 +else ifeq ($(VERSION),gc-jp) + REGION ?= JP + PLATFORM := GC + PAL := 0 + MQ := 0 + DEBUG := 0 +else ifeq ($(VERSION),gc-jp-mq) + REGION ?= JP + PLATFORM := GC + PAL := 0 + MQ := 1 + DEBUG := 0 +else ifeq ($(VERSION),gc-jp-ce) + REGION ?= JP + PLATFORM := GC + PAL := 0 + MQ := 0 + DEBUG := 0 +else ifeq ($(VERSION),gc-us) + REGION ?= US + PLATFORM := GC + PAL := 0 + MQ := 0 + DEBUG := 0 +else ifeq ($(VERSION),gc-us-mq) + REGION ?= US + PLATFORM := GC + PAL := 0 + MQ := 1 + DEBUG := 0 +else ifeq ($(VERSION),gc-eu) + REGION ?= EU + PLATFORM := GC + PAL := 1 + MQ := 0 + DEBUG := 0 +else ifeq ($(VERSION),gc-eu-mq) + REGION ?= EU + PLATFORM := GC + PAL := 1 + MQ := 1 + DEBUG := 0 +else ifeq ($(VERSION),gc-eu-mq-dbg) + REGION ?= EU + PLATFORM := GC + PAL := 1 + MQ := 1 + DEBUG := 1 +else +$(error Unsupported version $(VERSION)) +endif + # ORIG_COMPILER cannot be combined with a non-IDO compiler. Check for this case and error out if found. ifneq ($(COMPILER),ido) ifeq ($(ORIG_COMPILER),1) @@ -42,40 +117,11 @@ ifeq ($(COMPILER),gcc) NON_MATCHING := 1 endif -# 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 is indicative of missing dependencies -MIPS_BINUTILS_PREFIX := mips-linux-gnu- - ifeq ($(NON_MATCHING),1) CPP_DEFINES += -DNON_MATCHING -DAVOID_UB COMPARE := 0 endif -# Version-specific settings -ifeq ($(VERSION),gc-us) - REGION := US - PAL := 0 - MQ := 0 - DEBUG := 0 -else ifeq ($(VERSION),gc-eu) - REGION := EU - PAL := 1 - MQ := 0 - DEBUG := 0 -else ifeq ($(VERSION),gc-eu-mq) - REGION := EU - PAL := 1 - MQ := 1 - DEBUG := 0 -else ifeq ($(VERSION),gc-eu-mq-dbg) - REGION := EU - PAL := 1 - MQ := 1 - DEBUG := 1 -else -$(error Unsupported version $(VERSION)) -endif - PROJECT_DIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) BUILD_DIR := build/$(VERSION) EXPECTED_DIR := expected/$(BUILD_DIR) @@ -91,6 +137,14 @@ VERSION_MACRO := OOT_$(shell echo $(VERSION) | tr a-z-. A-Z__) CPP_DEFINES += -DOOT_VERSION=$(VERSION_MACRO) 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)) +endif + ifeq ($(PAL),0) CPP_DEFINES += -DOOT_NTSC=1 else @@ -157,8 +211,6 @@ OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump NM := $(MIPS_BINUTILS_PREFIX)nm -N64_EMULATOR ?= - INC := -Iinclude -Iinclude/libc -Isrc -I$(BUILD_DIR) -I. -I$(EXTRACTED_DIR) # Check code syntax with host compiler @@ -179,6 +231,10 @@ PYTHON ?= $(VENV)/bin/python3 # preprocessor for this because it won't substitute inside string literals. SPEC_REPLACE_VARS := sed -e 's|$$(BUILD_DIR)|$(BUILD_DIR)|g' +# Audio tools +AUDIO_EXTRACT := $(PYTHON) tools/audio_extraction.py +SAMPLECONV := tools/audio/sampleconv/sampleconv + CFLAGS += $(CPP_DEFINES) CPPFLAGS += $(CPP_DEFINES) @@ -186,8 +242,10 @@ ifeq ($(COMPILER),gcc) OPTFLAGS := -Os -ffast-math -fno-unsafe-math-optimizations endif -# TODO PL and DOWHILE should be disabled for non-gamecube -GBI_DEFINES := -DF3DEX_GBI_2 -DF3DEX_GBI_PL -DGBI_DOWHILE +GBI_DEFINES := -DF3DEX_GBI_2 +ifeq ($(PLATFORM),GC) + GBI_DEFINES += -DF3DEX_GBI_PL -DGBI_DOWHILE +endif ifeq ($(DEBUG),1) GBI_DEFINES += -DGBI_DEBUG endif @@ -241,6 +299,22 @@ else SRC_DIRS := $(shell find src -type d) endif +ifneq ($(wildcard $(EXTRACTED_DIR)/assets/audio),) + SAMPLE_EXTRACT_DIRS := $(shell find $(EXTRACTED_DIR)/assets/audio/samples -type d) +else + SAMPLE_EXTRACT_DIRS := +endif + +ifneq ($(wildcard assets/audio/samples),) + SAMPLE_DIRS := $(shell find assets/audio/samples -type d) +else + SAMPLE_DIRS := +endif + +SAMPLE_FILES := $(foreach dir,$(SAMPLE_DIRS),$(wildcard $(dir)/*.wav)) +SAMPLE_EXTRACT_FILES := $(foreach dir,$(SAMPLE_EXTRACT_DIRS),$(wildcard $(dir)/*.wav)) +AIFC_FILES := $(foreach f,$(SAMPLE_FILES),$(BUILD_DIR)/$(f:.wav=.aifc)) $(foreach f,$(SAMPLE_EXTRACT_FILES:.wav=.aifc),$(f:$(EXTRACTED_DIR)/%=$(BUILD_DIR)/%)) + # create extracted directories $(shell mkdir -p $(EXTRACTED_DIR) $(EXTRACTED_DIR)/assets $(EXTRACTED_DIR)/text) @@ -378,7 +452,7 @@ $(BUILD_DIR)/src/code/jpegdecoder.o: CC := $(CC_OLD) ifeq ($(PERMUTER),) # permuter + preprocess.py misbehaves, permuter doesn't care about rodata diffs or bss ordering so just don't use it in that case # Handle encoding (UTF-8 -> EUC-JP) and custom pragmas -$(BUILD_DIR)/src/%.o: CC := $(PYTHON) tools/preprocess.py $(CC) +$(BUILD_DIR)/src/%.o: CC := $(PYTHON) tools/preprocess.py -v $(VERSION) -- $(CC) endif else @@ -423,6 +497,10 @@ venv: $(PYTHON) -m pip install -U pip $(PYTHON) -m pip install -U -r requirements.txt +# 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 $(MAKE) -C tools $(PYTHON) tools/decompress_baserom.py $(VERSION) @@ -430,6 +508,7 @@ setup: venv $(PYTHON) tools/extract_incbins.py $(EXTRACTED_DIR)/baserom --oot-version $(VERSION) -o $(EXTRACTED_DIR)/incbin $(PYTHON) tools/msgdis.py $(VERSION) $(PYTHON) extract_assets.py -v $(VERSION) -j$(N_THREADS) + $(AUDIO_EXTRACT) -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml disasm: $(RM) -r $(EXPECTED_DIR) @@ -582,6 +661,30 @@ $(BUILD_DIR)/assets/%.jpg.inc.c: assets/%.jpg $(BUILD_DIR)/assets/%.jpg.inc.c: $(EXTRACTED_DIR)/assets/%.jpg $(ZAPD) bren -eh -i $< -o $@ +# Audio + +AUDIO_BUILD_DEBUG ?= 0 + +# first build samples... + +$(BUILD_DIR)/assets/audio/samples/%.half.aifc: assets/audio/samples/%.half.wav + $(SAMPLECONV) vadpcm-half $< $@ + +$(BUILD_DIR)/assets/audio/samples/%.half.aifc: $(EXTRACTED_DIR)/assets/audio/samples/%.half.wav + $(SAMPLECONV) vadpcm-half $< $@ +ifeq ($(AUDIO_BUILD_DEBUG),1) + @(cmp $( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/samplebanks/SampleBank_2.xml b/assets/xml/audio/samplebanks/SampleBank_2.xml new file mode 100644 index 0000000000..21e76424e2 --- /dev/null +++ b/assets/xml/audio/samplebanks/SampleBank_2.xml @@ -0,0 +1,4 @@ + + + + diff --git a/assets/xml/audio/samplebanks/SampleBank_3.xml b/assets/xml/audio/samplebanks/SampleBank_3.xml new file mode 100644 index 0000000000..e6738f8b39 --- /dev/null +++ b/assets/xml/audio/samplebanks/SampleBank_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/xml/audio/samplebanks/SampleBank_4.xml b/assets/xml/audio/samplebanks/SampleBank_4.xml new file mode 100644 index 0000000000..8d68e285ff --- /dev/null +++ b/assets/xml/audio/samplebanks/SampleBank_4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/xml/audio/samplebanks/SampleBank_5.xml b/assets/xml/audio/samplebanks/SampleBank_5.xml new file mode 100644 index 0000000000..6eb7356935 --- /dev/null +++ b/assets/xml/audio/samplebanks/SampleBank_5.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/xml/audio/samplebanks/SampleBank_6.xml b/assets/xml/audio/samplebanks/SampleBank_6.xml new file mode 100644 index 0000000000..e6971659b0 --- /dev/null +++ b/assets/xml/audio/samplebanks/SampleBank_6.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_0.xml b/assets/xml/audio/soundfonts/Soundfont_0.xml new file mode 100644 index 0000000000..02f75704f0 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_0.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_1.xml b/assets/xml/audio/soundfonts/Soundfont_1.xml new file mode 100644 index 0000000000..6376f6d115 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_1.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_10.xml b/assets/xml/audio/soundfonts/Soundfont_10.xml new file mode 100644 index 0000000000..578101fd4d --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_10.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_11.xml b/assets/xml/audio/soundfonts/Soundfont_11.xml new file mode 100644 index 0000000000..72b4f77fd4 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_12.xml b/assets/xml/audio/soundfonts/Soundfont_12.xml new file mode 100644 index 0000000000..4800fecedf --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_13.xml b/assets/xml/audio/soundfonts/Soundfont_13.xml new file mode 100644 index 0000000000..b399905de8 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_13.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_14.xml b/assets/xml/audio/soundfonts/Soundfont_14.xml new file mode 100644 index 0000000000..2345061c9b --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_14.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_15.xml b/assets/xml/audio/soundfonts/Soundfont_15.xml new file mode 100644 index 0000000000..bf32ecd437 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_15.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_16.xml b/assets/xml/audio/soundfonts/Soundfont_16.xml new file mode 100644 index 0000000000..c1c6d1d2b0 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_16.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_17.xml b/assets/xml/audio/soundfonts/Soundfont_17.xml new file mode 100644 index 0000000000..a16e9752f8 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_17.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_18.xml b/assets/xml/audio/soundfonts/Soundfont_18.xml new file mode 100644 index 0000000000..76807539ad --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_18.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_19.xml b/assets/xml/audio/soundfonts/Soundfont_19.xml new file mode 100644 index 0000000000..9f2ba9286e --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_19.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_2.xml b/assets/xml/audio/soundfonts/Soundfont_2.xml new file mode 100644 index 0000000000..a297ce8505 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_2.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_20.xml b/assets/xml/audio/soundfonts/Soundfont_20.xml new file mode 100644 index 0000000000..5ce632d47c --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_20.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_21.xml b/assets/xml/audio/soundfonts/Soundfont_21.xml new file mode 100644 index 0000000000..a1bc07be8f --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_21.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_22.xml b/assets/xml/audio/soundfonts/Soundfont_22.xml new file mode 100644 index 0000000000..fe0099beb0 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_22.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_23.xml b/assets/xml/audio/soundfonts/Soundfont_23.xml new file mode 100644 index 0000000000..582c638a2d --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_23.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_24.xml b/assets/xml/audio/soundfonts/Soundfont_24.xml new file mode 100644 index 0000000000..aee3907f99 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_24.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_25.xml b/assets/xml/audio/soundfonts/Soundfont_25.xml new file mode 100644 index 0000000000..5ad7d22f22 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_25.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_26.xml b/assets/xml/audio/soundfonts/Soundfont_26.xml new file mode 100644 index 0000000000..ec20f4f56f --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_26.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_27.xml b/assets/xml/audio/soundfonts/Soundfont_27.xml new file mode 100644 index 0000000000..1bc1c9d886 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_27.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_28.xml b/assets/xml/audio/soundfonts/Soundfont_28.xml new file mode 100644 index 0000000000..c0292b0d7b --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_28.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_29.xml b/assets/xml/audio/soundfonts/Soundfont_29.xml new file mode 100644 index 0000000000..39e03a9a23 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_29.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_3.xml b/assets/xml/audio/soundfonts/Soundfont_3.xml new file mode 100644 index 0000000000..bb510aaef1 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_3.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_30.xml b/assets/xml/audio/soundfonts/Soundfont_30.xml new file mode 100644 index 0000000000..e9a1d093e7 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_31.xml b/assets/xml/audio/soundfonts/Soundfont_31.xml new file mode 100644 index 0000000000..d246fff00f --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_31.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_32.xml b/assets/xml/audio/soundfonts/Soundfont_32.xml new file mode 100644 index 0000000000..7508ee8b5e --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_32.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_33.xml b/assets/xml/audio/soundfonts/Soundfont_33.xml new file mode 100644 index 0000000000..93116ad1cd --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_33.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_34.xml b/assets/xml/audio/soundfonts/Soundfont_34.xml new file mode 100644 index 0000000000..20437b048a --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_34.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_35.xml b/assets/xml/audio/soundfonts/Soundfont_35.xml new file mode 100644 index 0000000000..fa9209a72f --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_35.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_36.xml b/assets/xml/audio/soundfonts/Soundfont_36.xml new file mode 100644 index 0000000000..fe49eda57b --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_36.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_37.xml b/assets/xml/audio/soundfonts/Soundfont_37.xml new file mode 100644 index 0000000000..67fa255b2c --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_37.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_4.xml b/assets/xml/audio/soundfonts/Soundfont_4.xml new file mode 100644 index 0000000000..4e023974e1 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_5.xml b/assets/xml/audio/soundfonts/Soundfont_5.xml new file mode 100644 index 0000000000..465b554eeb --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_5.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_6.xml b/assets/xml/audio/soundfonts/Soundfont_6.xml new file mode 100644 index 0000000000..f4c239da8e --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_6.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_7.xml b/assets/xml/audio/soundfonts/Soundfont_7.xml new file mode 100644 index 0000000000..aa61f7d253 --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_7.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_8.xml b/assets/xml/audio/soundfonts/Soundfont_8.xml new file mode 100644 index 0000000000..06cc14a1ca --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_8.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/audio/soundfonts/Soundfont_9.xml b/assets/xml/audio/soundfonts/Soundfont_9.xml new file mode 100644 index 0000000000..97384ba3cd --- /dev/null +++ b/assets/xml/audio/soundfonts/Soundfont_9.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mag.xml b/assets/xml/objects/object_mag.xml index 66874b0c07..1a59b4092b 100644 --- a/assets/xml/objects/object_mag.xml +++ b/assets/xml/objects/object_mag.xml @@ -1,21 +1,20 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mag_v2.xml b/assets/xml/objects/object_mag_v2.xml new file mode 100644 index 0000000000..69ce890a7a --- /dev/null +++ b/assets/xml/objects/object_mag_v2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mag_v2_mq.xml b/assets/xml/objects/object_mag_v2_mq.xml new file mode 100644 index 0000000000..9f0543ea8a --- /dev/null +++ b/assets/xml/objects/object_mag_v2_mq.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mag_v3.xml b/assets/xml/objects/object_mag_v3.xml new file mode 100644 index 0000000000..66874b0c07 --- /dev/null +++ b/assets/xml/objects/object_mag_v3.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mag_mq.xml b/assets/xml/objects/object_mag_v3_mq.xml similarity index 100% rename from assets/xml/objects/object_mag_mq.xml rename to assets/xml/objects/object_mag_v3_mq.xml diff --git a/assets/xml/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml index aa9dcbb84b..a97188b446 100644 --- a/assets/xml/overlays/ovl_file_choose.xml +++ b/assets/xml/overlays/ovl_file_choose.xml @@ -3,25 +3,31 @@ - + + + + + + + + + + + + + - + - + - + - - - - - - - + diff --git a/assets/xml/overlays/ovl_file_choose_pal.xml b/assets/xml/overlays/ovl_file_choose_pal.xml new file mode 100644 index 0000000000..9721f7e0de --- /dev/null +++ b/assets/xml/overlays/ovl_file_choose_pal.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/textures/icon_item_jpn_static.xml b/assets/xml/textures/icon_item_jpn_static.xml index 95e1ea0552..f2fe854b8e 100644 --- a/assets/xml/textures/icon_item_jpn_static.xml +++ b/assets/xml/textures/icon_item_jpn_static.xml @@ -11,8 +11,8 @@ - - + + diff --git a/assets/xml/textures/nes_font_static.xml b/assets/xml/textures/nes_font_static.xml index b01646cb54..f1b80ee045 100644 --- a/assets/xml/textures/nes_font_static.xml +++ b/assets/xml/textures/nes_font_static.xml @@ -140,6 +140,5 @@ - diff --git a/assets/xml/textures/nes_font_static_v2.xml b/assets/xml/textures/nes_font_static_v2.xml new file mode 100644 index 0000000000..b01646cb54 --- /dev/null +++ b/assets/xml/textures/nes_font_static_v2.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml index c5e301afad..512337ac0b 100644 --- a/baseroms/gc-eu-mq-dbg/config.yml +++ b/baseroms/gc-eu-mq-dbg/config.yml @@ -71,6 +71,10 @@ variables: sGerMessageEntryTable: 0x8014F548 sFraMessageEntryTable: 0x80151658 sStaffMessageEntryTable: 0x80153768 + gSoundFontTable: 0x801550D0 + gSequenceFontTable: 0x80155340 + gSequenceTable: 0x80155500 + gSampleBankTable: 0x80155BF0 sShadowTex: 0x80A8E610 assets: - name: code/fbdemo_circle @@ -534,7 +538,7 @@ assets: - name: objects/object_ma2 xml_path: assets/xml/objects/object_ma2.xml - name: objects/object_mag - xml_path: assets/xml/objects/object_mag_mq.xml + xml_path: assets/xml/objects/object_mag_v3_mq.xml - name: objects/object_mamenoki xml_path: assets/xml/objects/object_mamenoki.xml - name: objects/object_mastergolon @@ -952,9 +956,9 @@ assets: start_offset: 0x780 end_offset: 0x4128 - name: overlays/ovl_file_choose - xml_path: assets/xml/overlays/ovl_file_choose.xml + xml_path: assets/xml/overlays/ovl_file_choose_pal.xml start_offset: 0xDE70 - end_offset: 0xE6B0 + end_offset: 0xE740 - name: overlays/ovl_Magic_Dark xml_path: assets/xml/overlays/ovl_Magic_Dark.xml start_offset: 0xD10 @@ -1246,7 +1250,7 @@ assets: - 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.xml + xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static xml_path: assets/xml/textures/nintendo_rogo_static.xml - name: textures/parameter_static diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml index 34c5cbe9c0..ad493eab93 100644 --- a/baseroms/gc-eu-mq/config.yml +++ b/baseroms/gc-eu-mq/config.yml @@ -63,6 +63,10 @@ variables: sGerMessageEntryTable: 0x8010BA18 sFraMessageEntryTable: 0x8010DB28 sStaffMessageEntryTable: 0x8010FC38 + gSoundFontTable: 0x80110470 + gSequenceFontTable: 0x801106E0 + gSequenceTable: 0x801108A0 + gSampleBankTable: 0x80110F90 sShadowTex: 0x80A72FA0 assets: - name: code/fbdemo_circle @@ -526,7 +530,7 @@ assets: - name: objects/object_ma2 xml_path: assets/xml/objects/object_ma2.xml - name: objects/object_mag - xml_path: assets/xml/objects/object_mag_mq.xml + xml_path: assets/xml/objects/object_mag_v3_mq.xml - name: objects/object_mamenoki xml_path: assets/xml/objects/object_mamenoki.xml - name: objects/object_mastergolon @@ -936,9 +940,9 @@ assets: start_offset: 0x6E0 end_offset: 0x4088 - name: overlays/ovl_file_choose - xml_path: assets/xml/overlays/ovl_file_choose.xml + xml_path: assets/xml/overlays/ovl_file_choose_pal.xml start_offset: 0xD740 - end_offset: 0xDF80 + end_offset: 0xE010 - name: overlays/ovl_Magic_Dark xml_path: assets/xml/overlays/ovl_Magic_Dark.xml start_offset: 0xC90 @@ -1212,7 +1216,7 @@ assets: - 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.xml + xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static xml_path: assets/xml/textures/nintendo_rogo_static.xml - name: textures/parameter_static diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml index 90712dc3f1..0773143f50 100644 --- a/baseroms/gc-eu/config.yml +++ b/baseroms/gc-eu/config.yml @@ -63,6 +63,10 @@ variables: sGerMessageEntryTable: 0x8010BA38 sFraMessageEntryTable: 0x8010DB48 sStaffMessageEntryTable: 0x8010FC58 + gSoundFontTable: 0x80110490 + gSequenceFontTable: 0x80110700 + gSequenceTable: 0x801108C0 + gSampleBankTable: 0x80110FB0 sShadowTex: 0x80A73020 assets: - name: code/fbdemo_circle @@ -526,7 +530,7 @@ assets: - name: objects/object_ma2 xml_path: assets/xml/objects/object_ma2.xml - name: objects/object_mag - xml_path: assets/xml/objects/object_mag.xml + xml_path: assets/xml/objects/object_mag_v3.xml - name: objects/object_mamenoki xml_path: assets/xml/objects/object_mamenoki.xml - name: objects/object_mastergolon @@ -936,9 +940,9 @@ assets: start_offset: 0x6E0 end_offset: 0x4088 - name: overlays/ovl_file_choose - xml_path: assets/xml/overlays/ovl_file_choose.xml + xml_path: assets/xml/overlays/ovl_file_choose_pal.xml start_offset: 0xD740 - end_offset: 0xDF80 + end_offset: 0xE010 - name: overlays/ovl_Magic_Dark xml_path: assets/xml/overlays/ovl_Magic_Dark.xml start_offset: 0xC90 @@ -1212,7 +1216,7 @@ assets: - 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.xml + xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static xml_path: assets/xml/textures/nintendo_rogo_static.xml - name: textures/parameter_static diff --git a/baseroms/gc-jp-ce/checksum-compressed.md5 b/baseroms/gc-jp-ce/checksum-compressed.md5 new file mode 100644 index 0000000000..64f7a5219b --- /dev/null +++ b/baseroms/gc-jp-ce/checksum-compressed.md5 @@ -0,0 +1 @@ +0c13e0449a28ea5b925cdb8af8d29768 build/gc-jp-ce/oot-gc-jp-ce-compressed.z64 diff --git a/baseroms/gc-jp-ce/checksum.md5 b/baseroms/gc-jp-ce/checksum.md5 new file mode 100644 index 0000000000..2959de97b2 --- /dev/null +++ b/baseroms/gc-jp-ce/checksum.md5 @@ -0,0 +1 @@ +fe2f22c16e03762513b5af5449d453aa build/gc-jp-ce/oot-gc-jp-ce.z64 diff --git a/baseroms/gc-jp-ce/config.yml b/baseroms/gc-jp-ce/config.yml new file mode 100644 index 0000000000..40488a239b --- /dev/null +++ b/baseroms/gc-jp-ce/config.yml @@ -0,0 +1,1228 @@ +dmadata_start: 0x7170 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x80005FC0 + size: 0xD0 + - name: aspMainText + segment: code + vram: 0x800E3840 + size: 0xFB0 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E47F0 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E60B0 + size: 0xAF0 + - name: gSoundFontTable + segment: code + vram: 0x80112C80 + size: 0x270 + - name: gSequenceFontTable + segment: code + vram: 0x80112EF0 + size: 0x1C0 + - name: gSequenceTable + segment: code + vram: 0x801130B0 + size: 0x6F0 + - name: gSampleBankTable + segment: code + vram: 0x801137A0 + size: 0x80 + - name: aspMainData + segment: code + vram: 0x80113820 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x80113B00 + size: 0x1630 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x80115130 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x80115550 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x801158E0 + size: 0x60 +variables: + gMtxClear: 0x800FE2A0 + sJpnMessageEntryTable: 0x80109E8C + sNesMessageEntryTable: 0x8010DFCC + sStaffMessageEntryTable: 0x801121EC + gSoundFontTable: 0x80112C80 + gSequenceFontTable: 0x80112EF0 + gSequenceTable: 0x801130B0 + gSampleBankTable: 0x801137A0 + sShadowTex: 0x80A74120 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEB768 + end_offset: 0xEC988 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEABF0 + end_offset: 0xEACC0 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEACC0 + end_offset: 0xEB650 +- 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_v3.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.xml + start_offset: 0x6E0 + end_offset: 0x4088 +- 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.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.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.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_v2.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.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/gc-jp-ce/segments.csv b/baseroms/gc-jp-ce/segments.csv new file mode 100644 index 0000000000..38b7d2916a --- /dev/null +++ b/baseroms/gc-jp-ce/segments.csv @@ -0,0 +1,1510 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +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,80010EE0 +ovl_title,80800000 +ovl_select,80800850 +ovl_opening,808034D0 +ovl_file_choose,80803630 +ovl_kaleido_scope,808135A0 +ovl_player_actor,8082FD90 +ovl_map_mark_data,80856570 +ovl_En_Test,8085D0D0 +ovl_Arms_Hook,80862980 +ovl_Arrow_Fire,808636F0 +ovl_Arrow_Ice,808655D0 +ovl_Arrow_Light,808674D0 +ovl_Bg_Bdan_Objects,808693E0 +ovl_Bg_Bdan_Switch,8086A6B0 +ovl_Bg_Bom_Guard,8086BAE0 +ovl_Bg_Bombwall,8086BD00 +ovl_Bg_Bowl_Wall,8086C5C0 +ovl_Bg_Breakwall,8086CF40 +ovl_Bg_Ddan_Jd,8086DDB0 +ovl_Bg_Ddan_Kd,8086E400 +ovl_Bg_Dodoago,8086ECF0 +ovl_Bg_Dy_Yoseizo,8086FAA0 +ovl_Bg_Ganon_Otyuka,80872890 +ovl_Bg_Gate_Shutter,80874ED0 +ovl_Bg_Gjyo_Bridge,80875360 +ovl_Bg_Gnd_Darkmeiro,80875850 +ovl_Bg_Gnd_Firemeiro,80876010 +ovl_Bg_Gnd_Iceblock,80876560 +ovl_Bg_Gnd_Nisekabe,80877660 +ovl_Bg_Gnd_Soulmeiro,808777D0 +ovl_Bg_Haka,80878030 +ovl_Bg_Haka_Gate,808786F0 +ovl_Bg_Haka_Huta,80879790 +ovl_Bg_Haka_Megane,8087A230 +ovl_Bg_Haka_MeganeBG,8087A630 +ovl_Bg_Haka_Sgami,8087ACF0 +ovl_Bg_Haka_Ship,8087B910 +ovl_Bg_Haka_Trap,8087C360 +ovl_Bg_Haka_Tubo,8087D930 +ovl_Bg_Haka_Water,8087E350 +ovl_Bg_Haka_Zou,8087EB50 +ovl_Bg_Heavy_Block,8087FD40 +ovl_Bg_Hidan_Curtain,80881630 +ovl_Bg_Hidan_Dalm,808820D0 +ovl_Bg_Hidan_Firewall,80882920 +ovl_Bg_Hidan_Fslift,80883080 +ovl_Bg_Hidan_Fwbig,80883550 +ovl_Bg_Hidan_Hamstep,80884230 +ovl_Bg_Hidan_Hrock,808850E0 +ovl_Bg_Hidan_Kousi,80885910 +ovl_Bg_Hidan_Kowarerukabe,80885EA0 +ovl_Bg_Hidan_Rock,80886D80 +ovl_Bg_Hidan_Rsekizou,80887E80 +ovl_Bg_Hidan_Sekizou,80888A60 +ovl_Bg_Hidan_Sima,80889EB0 +ovl_Bg_Hidan_Syoku,8088ADB0 +ovl_Bg_Ice_Objects,8088B210 +ovl_Bg_Ice_Shelter,8088C150 +ovl_Bg_Ice_Shutter,8088D390 +ovl_Bg_Ice_Turara,8088D800 +ovl_Bg_Ingate,8088E030 +ovl_Bg_Jya_1flift,8088E3C0 +ovl_Bg_Jya_Amishutter,8088EA50 +ovl_Bg_Jya_Bigmirror,8088EDE0 +ovl_Bg_Jya_Block,8088F630 +ovl_Bg_Jya_Bombchuiwa,8088F8A0 +ovl_Bg_Jya_Bombiwa,808903E0 +ovl_Bg_Jya_Cobra,808909A0 +ovl_Bg_Jya_Goroiwa,808926E0 +ovl_Bg_Jya_Haheniron,80892E60 +ovl_Bg_Jya_Ironobj,80893650 +ovl_Bg_Jya_Kanaami,80894400 +ovl_Bg_Jya_Lift,808947B0 +ovl_Bg_Jya_Megami,80894D00 +ovl_Bg_Jya_Zurerukabe,80895EF0 +ovl_Bg_Menkuri_Eye,808965A0 +ovl_Bg_Menkuri_Kaiten,80896A40 +ovl_Bg_Menkuri_Nisekabe,80896BD0 +ovl_Bg_Mizu_Bwall,80896D20 +ovl_Bg_Mizu_Movebg,808981F0 +ovl_Bg_Mizu_Shutter,80899380 +ovl_Bg_Mizu_Uzu,80899B80 +ovl_Bg_Mizu_Water,80899D50 +ovl_Bg_Mjin,8089AA20 +ovl_Bg_Mori_Bigst,8089AE10 +ovl_Bg_Mori_Elevator,8089B740 +ovl_Bg_Mori_Hashigo,8089C230 +ovl_Bg_Mori_Hashira4,8089CAF0 +ovl_Bg_Mori_Hineri,8089D080 +ovl_Bg_Mori_Idomizu,8089DDD0 +ovl_Bg_Mori_Kaitenkabe,8089E410 +ovl_Bg_Mori_Rakkatenjo,8089EA80 +ovl_Bg_Po_Event,8089F400 +ovl_Bg_Po_Syokudai,808A1240 +ovl_Bg_Pushbox,808A1BB0 +ovl_Bg_Relay_Objects,808A1EB0 +ovl_Bg_Spot00_Break,808A2660 +ovl_Bg_Spot00_Hanebasi,808A2800 +ovl_Bg_Spot01_Fusya,808A3910 +ovl_Bg_Spot01_Idohashira,808A3BB0 +ovl_Bg_Spot01_Idomizu,808A47B0 +ovl_Bg_Spot01_Idosoko,808A4AD0 +ovl_Bg_Spot01_Objects2,808A4CE0 +ovl_Bg_Spot02_Objects,808A51A0 +ovl_Bg_Spot03_Taki,808A6500 +ovl_Bg_Spot05_Soko,808A6E20 +ovl_Bg_Spot06_Objects,808A7140 +ovl_Bg_Spot07_Taki,808A8540 +ovl_Bg_Spot08_Bakudankabe,808A8B30 +ovl_Bg_Spot08_Iceblock,808A91D0 +ovl_Bg_Spot09_Obj,808AA210 +ovl_Bg_Spot11_Bakudankabe,808AA730 +ovl_Bg_Spot11_Oasis,808AAD70 +ovl_Bg_Spot12_Gate,808AB4A0 +ovl_Bg_Spot12_Saku,808AB8B0 +ovl_Bg_Spot15_Rrbox,808ABD70 +ovl_Bg_Spot15_Saku,808ACB50 +ovl_Bg_Spot16_Bombstone,808ACE90 +ovl_Bg_Spot16_Doughnut,808AE3E0 +ovl_Bg_Spot17_Bakudankabe,808AE9A0 +ovl_Bg_Spot17_Funen,808AF090 +ovl_Bg_Spot18_Basket,808AF2E0 +ovl_Bg_Spot18_Futa,808B02D0 +ovl_Bg_Spot18_Obj,808B0470 +ovl_Bg_Spot18_Shutter,808B0D40 +ovl_Bg_Sst_Floor,808B1290 +ovl_Bg_Toki_Hikari,808B17F0 +ovl_Bg_Toki_Swd,808B2590 +ovl_Bg_Treemouth,808B3BE0 +ovl_Bg_Umajump,808B5240 +ovl_Bg_Vb_Sima,808B53D0 +ovl_Bg_Ydan_Hasi,808B5AF0 +ovl_Bg_Ydan_Maruta,808B62A0 +ovl_Bg_Ydan_Sp,808B6980 +ovl_Bg_Zg,808B80A0 +ovl_Boss_Dodongo,808B84F0 +ovl_Boss_Fd,808C1FF0 +ovl_Boss_Fd2,808C9350 +ovl_Boss_Ganon,808CD080 +ovl_Boss_Ganon2,808F2EB0 +ovl_Boss_Ganondrof,80905D20 +ovl_Boss_Goma,8090AAB0 +ovl_Boss_Mo,80910A50 +ovl_Boss_Sst,80921030 +ovl_Boss_Tw,8092D600 +ovl_Boss_Va,809431D0 +ovl_Demo_6K,8095A460 +ovl_Demo_Du,8095D1C0 +ovl_Demo_Ec,809609A0 +ovl_Demo_Effect,80964200 +ovl_Demo_Ext,80969DA0 +ovl_Demo_Geff,8096A6F0 +ovl_Demo_Gj,8096AF10 +ovl_Demo_Go,8096EBC0 +ovl_Demo_Gt,8096F910 +ovl_Demo_Ik,80974F20 +ovl_Demo_Im,80976430 +ovl_Demo_Kankyo,8097A3A0 +ovl_Demo_Kekkai,8097E090 +ovl_Demo_Sa,8097F380 +ovl_Demo_Shd,80981EA0 +ovl_Demo_Tre_Lgt,809842B0 +ovl_Door_Ana,809849C0 +ovl_Door_Gerudo,80985030 +ovl_Door_Killer,80985620 +ovl_Door_Shutter,80986B90 +ovl_Door_Toki,80988E50 +ovl_Door_Warp1,80988FB0 +ovl_Efc_Erupc,8098D2C0 +ovl_Eff_Dust,8098DDB0 +ovl_Effect_Ss_Blast,8098F180 +ovl_Effect_Ss_Bomb,8098F510 +ovl_Effect_Ss_Bomb2,8098F940 +ovl_Effect_Ss_Bubble,80990240 +ovl_Effect_Ss_D_Fire,809906C0 +ovl_Effect_Ss_Dead_Db,80990BB0 +ovl_Effect_Ss_Dead_Dd,80991090 +ovl_Effect_Ss_Dead_Ds,80991620 +ovl_Effect_Ss_Dead_Sound,80991AA0 +ovl_Effect_Ss_Dt_Bubble,80991BE0 +ovl_Effect_Ss_Dust,80992170 +ovl_Effect_Ss_En_Fire,809929B0 +ovl_Effect_Ss_En_Ice,80993100 +ovl_Effect_Ss_Extra,809939C0 +ovl_Effect_Ss_Fcircle,80993D80 +ovl_Effect_Ss_Fhg_Flash,80994230 +ovl_Effect_Ss_Fire_Tail,809951B0 +ovl_Effect_Ss_G_Fire,809958B0 +ovl_Effect_Ss_G_Magma,80995B40 +ovl_Effect_Ss_G_Magma2,80995DA0 +ovl_Effect_Ss_G_Ripple,809962B0 +ovl_Effect_Ss_G_Spk,80996810 +ovl_Effect_Ss_G_Splash,80996DC0 +ovl_Effect_Ss_Hahen,80997270 +ovl_Effect_Ss_HitMark,809978B0 +ovl_Effect_Ss_Ice_Piece,80997E00 +ovl_Effect_Ss_Ice_Smoke,80998240 +ovl_Effect_Ss_K_Fire,80998720 +ovl_Effect_Ss_Kakera,80998B60 +ovl_Effect_Ss_KiraKira,80999BF0 +ovl_Effect_Ss_Lightning,8099A260 +ovl_Effect_Ss_Sibuki,8099A930 +ovl_Effect_Ss_Sibuki2,8099B000 +ovl_Effect_Ss_Solder_Srch_Ball,8099B330 +ovl_Effect_Ss_Stick,8099B4E0 +ovl_Effect_Ss_Stone1,8099B880 +ovl_Elf_Msg,8099BC00 +ovl_Elf_Msg2,8099C1F0 +ovl_En_Am,8099C660 +ovl_En_Ani,8099EA60 +ovl_En_Anubice,8099F7D0 +ovl_En_Anubice_Fire,809A0A80 +ovl_En_Anubice_Tag,809A1840 +ovl_En_Arow_Trap,809A1B10 +ovl_En_Arrow,809A1C60 +ovl_En_Attack_Niw,809A3360 +ovl_En_Ba,809A45C0 +ovl_En_Bb,809A6490 +ovl_En_Bdfire,809AA170 +ovl_En_Bigokuta,809AAD10 +ovl_En_Bili,809AD810 +ovl_En_Bird,809AFAE0 +ovl_En_Blkobj,809AFFA0 +ovl_En_Bom,809B0500 +ovl_En_Bom_Bowl_Man,809B13D0 +ovl_En_Bom_Bowl_Pit,809B2910 +ovl_En_Bom_Chu,809B3280 +ovl_En_Bombf,809B4920 +ovl_En_Boom,809B5DB0 +ovl_En_Box,809B6680 +ovl_En_Brob,809B81E0 +ovl_En_Bubble,809B92D0 +ovl_En_Butte,809BA6F0 +ovl_En_Bw,809BBCC0 +ovl_En_Bx,809BF050 +ovl_En_Changer,809BFB50 +ovl_En_Clear_Tag,809C0530 +ovl_En_Cow,809CBAD0 +ovl_En_Crow,809CCF30 +ovl_En_Cs,809CE5D0 +ovl_En_Daiku,809CF800 +ovl_En_Daiku_Kakariko,809D0F40 +ovl_En_Dekubaba,809D2300 +ovl_En_Dekunuts,809D5DB0 +ovl_En_Dh,809D75B0 +ovl_En_Dha,809D9090 +ovl_En_Diving_Game,809DA090 +ovl_En_Dns,809DBA40 +ovl_En_Dnt_Demo,809DCDD0 +ovl_En_Dnt_Jiji,809DDAF0 +ovl_En_Dnt_Nomal,809DF010 +ovl_En_Dodojr,809E1E10 +ovl_En_Dodongo,809E3CB0 +ovl_En_Dog,809E6A50 +ovl_En_Door,809E7C00 +ovl_En_Ds,809E8A40 +ovl_En_Du,809E9660 +ovl_En_Dy_Extra,809EB0F0 +ovl_En_Eg,809EB690 +ovl_En_Eiyer,809EB840 +ovl_En_Elf,809ED4A0 +ovl_En_Encount1,809F1E60 +ovl_En_Encount2,809F29C0 +ovl_En_Ex_Item,809F3BF0 +ovl_En_Ex_Ruppy,809F4D70 +ovl_En_Fd,809F5E30 +ovl_En_Fd_Fire,809F8AD0 +ovl_En_Fhg_Fire,809F97E0 +ovl_En_Fire_Rock,809FBE80 +ovl_En_Firefly,809FCF90 +ovl_En_Fish,809FF100 +ovl_En_Floormas,80A01210 +ovl_En_Fr,80A045F0 +ovl_En_Fu,80A07080 +ovl_En_Fw,80A07DD0 +ovl_En_Fz,80A09590 +ovl_En_G_Switch,80A0B5A0 +ovl_En_Ganon_Mant,80A0CDC0 +ovl_En_Ganon_Organ,80A10FF0 +ovl_En_Gb,80A18030 +ovl_En_Ge1,80A19760 +ovl_En_Ge2,80A1B790 +ovl_En_Ge3,80A1D130 +ovl_En_GeldB,80A1DD70 +ovl_En_GirlA,80A23120 +ovl_En_Gm,80A25A40 +ovl_En_Go,80A26770 +ovl_En_Go2,80A2ADB0 +ovl_En_Goma,80A30DF0 +ovl_En_Goroiwa,80A33AA0 +ovl_En_Gs,80A35E60 +ovl_En_Guest,80A37CD0 +ovl_En_Hata,80A38670 +ovl_En_Heishi1,80A38C00 +ovl_En_Heishi2,80A3A110 +ovl_En_Heishi3,80A3C310 +ovl_En_Heishi4,80A3CCE0 +ovl_En_Hintnuts,80A3DBE0 +ovl_En_Holl,80A3F610 +ovl_En_Honotrap,80A405E0 +ovl_En_Horse,80A41B40 +ovl_En_Horse_Game_Check,80A4DDA0 +ovl_En_Horse_Ganon,80A4EE70 +ovl_En_Horse_Link_Child,80A4FBF0 +ovl_En_Horse_Normal,80A519F0 +ovl_En_Horse_Zelda,80A54010 +ovl_En_Hs,80A54B00 +ovl_En_Hs2,80A556A0 +ovl_En_Hy,80A55C80 +ovl_En_Ice_Hono,80A595C0 +ovl_En_Ik,80A5A7B0 +ovl_En_In,80A5EE10 +ovl_En_Insect,80A61BB0 +ovl_En_Ishi,80A640D0 +ovl_En_It,80A6D220 +ovl_En_Jj,80A6D3B0 +ovl_En_Js,80A6E980 +ovl_En_Jsjutan,80A6F350 +ovl_En_Kakasi,80A74C80 +ovl_En_Kakasi2,80A759C0 +ovl_En_Kakasi3,80A760E0 +ovl_En_Kanban,80A771C0 +ovl_En_Karebaba,80A7A310 +ovl_En_Ko,80A7BC00 +ovl_En_Kusa,80A7FD40 +ovl_En_Kz,80A81220 +ovl_En_Light,80A827C0 +ovl_En_Lightbox,80A835C0 +ovl_En_M_Fire1,80A83A40 +ovl_En_M_Thunder,80A83BE0 +ovl_En_Ma1,80A851E0 +ovl_En_Ma2,80A864C0 +ovl_En_Ma3,80A87520 +ovl_En_Mag,80A884D0 +ovl_En_Mb,80A8AE00 +ovl_En_Md,80A8F030 +ovl_En_Mk,80A916A0 +ovl_En_Mm,80A92530 +ovl_En_Mm2,80A93B90 +ovl_En_Ms,80A94950 +ovl_En_Mu,80A95040 +ovl_En_Nb,80A95960 +ovl_En_Niw,80A99F30 +ovl_En_Niw_Girl,80A9D260 +ovl_En_Niw_Lady,80A9DD30 +ovl_En_Nutsball,80A9F630 +ovl_En_Nwc,80A9FC50 +ovl_En_Ny,80AA0670 +ovl_En_OE2,80AA1FB0 +ovl_En_Okarina_Effect,80AA2090 +ovl_En_Okarina_Tag,80AA2450 +ovl_En_Okuta,80AA3950 +ovl_En_Ossan,80AA5F30 +ovl_En_Owl,80AAC510 +ovl_En_Part,80AB00B0 +ovl_En_Peehat,80AB1710 +ovl_En_Po_Desert,80AB4E10 +ovl_En_Po_Field,80AB5BD0 +ovl_En_Po_Relay,80AB9660 +ovl_En_Po_Sisters,80ABAD70 +ovl_En_Poh,80ABFA60 +ovl_En_Pu_box,80AC3C50 +ovl_En_Rd,80AC3F90 +ovl_En_Reeba,80AC6850 +ovl_En_River_Sound,80AC82C0 +ovl_En_Rl,80AC8C50 +ovl_En_Rr,80AC9B30 +ovl_En_Ru1,80ACC060 +ovl_En_Ru2,80AD3700 +ovl_En_Sa,80AD6480 +ovl_En_Sb,80AD86F0 +ovl_En_Scene_Change,80AD9B30 +ovl_En_Sda,80AD9C60 +ovl_En_Shopnuts,80ADB350 +ovl_En_Si,80ADC260 +ovl_En_Siofuki,80ADC760 +ovl_En_Skb,80ADD510 +ovl_En_Skj,80ADEE00 +ovl_En_Skjneedle,80AE2750 +ovl_En_Ssh,80AE2A60 +ovl_En_St,80AE5050 +ovl_En_Sth,80AE7CC0 +ovl_En_Stream,80AEBD80 +ovl_En_Sw,80AEC310 +ovl_En_Syateki_Itm,80AEFB00 +ovl_En_Syateki_Man,80AF08A0 +ovl_En_Syateki_Niw,80AF1660 +ovl_En_Ta,80AF36F0 +ovl_En_Takara_Man,80AF70B0 +ovl_En_Tana,80AF7970 +ovl_En_Tg,80AF7C20 +ovl_En_Tite,80AF8300 +ovl_En_Tk,80AFB0A0 +ovl_En_Torch,80AFCED0 +ovl_En_Torch2,80AFCFC0 +ovl_En_Toryo,80AFF760 +ovl_En_Tp,80B003F0 +ovl_En_Tr,80B02260 +ovl_En_Trap,80B03B60 +ovl_En_Tubo_Trap,80B04E00 +ovl_En_Vali,80B05AA0 +ovl_En_Vase,80B08160 +ovl_En_Vb_Ball,80B08260 +ovl_En_Viewer,80B09410 +ovl_En_Vm,80B0C2D0 +ovl_En_Wall_Tubo,80B0DB90 +ovl_En_Wallmas,80B0E080 +ovl_En_Weather_Tag,80B0FA90 +ovl_En_Weiyer,80B10980 +ovl_En_Wf,80B12380 +ovl_En_Wonder_Item,80B16690 +ovl_En_Wonder_Talk,80B173C0 +ovl_En_Wonder_Talk2,80B17A50 +ovl_En_Wood02,80B180F0 +ovl_En_Xc,80B192D0 +ovl_En_Yabusame_Mark,80B1FA60 +ovl_En_Yukabyun,80B20130 +ovl_En_Zf,80B20740 +ovl_En_Zl1,80B27230 +ovl_En_Zl2,80B2B040 +ovl_En_Zl3,80B2F740 +ovl_En_Zl4,80B37590 +ovl_En_Zo,80B3BFC0 +ovl_En_fHG,80B3E580 +ovl_End_Title,80B40EB0 +ovl_Fishing,80B44FD0 +ovl_Item_B_Heart,80B5FB70 +ovl_Item_Etcetera,80B5FF80 +ovl_Item_Inbox,80B60850 +ovl_Item_Ocarina,80B609B0 +ovl_Item_Shield,80B61180 +ovl_Magic_Dark,80B61B90 +ovl_Magic_Fire,80B633E0 +ovl_Magic_Wind,80B656E0 +ovl_Mir_Ray,80B673E0 +ovl_Obj_Bean,80B68C90 +ovl_Obj_Blockstop,80B6B420 +ovl_Obj_Bombiwa,80B6B5C0 +ovl_Obj_Comb,80B6BB30 +ovl_Obj_Dekujr,80B6C390 +ovl_Obj_Elevator,80B6C9D0 +ovl_Obj_Hamishi,80B6CD90 +ovl_Obj_Hana,80B6D5E0 +ovl_Obj_Hsblock,80B6D8F0 +ovl_Obj_Ice_Poly,80B6DEC0 +ovl_Obj_Kibako,80B6E870 +ovl_Obj_Kibako2,80B6F570 +ovl_Obj_Lift,80B6FC30 +ovl_Obj_Lightswitch,80B70650 +ovl_Obj_Makekinsuta,80B71A80 +ovl_Obj_Makeoshihiki,80B71BD0 +ovl_Obj_Mure,80B72060 +ovl_Obj_Mure2,80B73070 +ovl_Obj_Mure3,80B73A90 +ovl_Obj_Oshihiki,80B74260 +ovl_Obj_Roomtimer,80B75D10 +ovl_Obj_Switch,80B75F60 +ovl_Obj_Syokudai,80B77D40 +ovl_Obj_Timeblock,80B78990 +ovl_Obj_Tsubo,80B795E0 +ovl_Obj_Warp2block,80B7A5D0 +ovl_Object_Kankyo,80B7B100 +ovl_Oceff_Spot,80B7E380 +ovl_Oceff_Storm,80B7F2B0 +ovl_Oceff_Wipe,80B80E60 +ovl_Oceff_Wipe2,80B81BE0 +ovl_Oceff_Wipe3,80B83350 +ovl_Oceff_Wipe4,80B84AA0 +ovl_Shot_Sun,80B85A80 +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/gc-jp-mq/checksum-compressed.md5 b/baseroms/gc-jp-mq/checksum-compressed.md5 new file mode 100644 index 0000000000..8a583aa524 --- /dev/null +++ b/baseroms/gc-jp-mq/checksum-compressed.md5 @@ -0,0 +1 @@ +69895c5c78442260f6eafb2506dc482a build/gc-jp-mq/oot-gc-jp-mq-compressed.z64 diff --git a/baseroms/gc-jp-mq/checksum.md5 b/baseroms/gc-jp-mq/checksum.md5 new file mode 100644 index 0000000000..69819ce2c2 --- /dev/null +++ b/baseroms/gc-jp-mq/checksum.md5 @@ -0,0 +1 @@ +f70cf137eb8f783cb5d79756190728ce build/gc-jp-mq/oot-gc-jp-mq.z64 diff --git a/baseroms/gc-jp-mq/config.yml b/baseroms/gc-jp-mq/config.yml new file mode 100644 index 0000000000..d1726da23a --- /dev/null +++ b/baseroms/gc-jp-mq/config.yml @@ -0,0 +1,1228 @@ +dmadata_start: 0x7170 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x80005FC0 + size: 0xD0 + - name: aspMainText + segment: code + vram: 0x800E3840 + size: 0xFB0 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E47F0 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E60B0 + size: 0xAF0 + - name: gSoundFontTable + segment: code + vram: 0x80112C80 + size: 0x270 + - name: gSequenceFontTable + segment: code + vram: 0x80112EF0 + size: 0x1C0 + - name: gSequenceTable + segment: code + vram: 0x801130B0 + size: 0x6F0 + - name: gSampleBankTable + segment: code + vram: 0x801137A0 + size: 0x80 + - name: aspMainData + segment: code + vram: 0x80113820 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x80113B00 + size: 0x1630 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x80115130 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x80115550 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x801158E0 + size: 0x60 +variables: + gMtxClear: 0x800FE2A0 + sJpnMessageEntryTable: 0x80109E8C + sNesMessageEntryTable: 0x8010DFCC + sStaffMessageEntryTable: 0x801121EC + gSoundFontTable: 0x80112C80 + gSequenceFontTable: 0x80112EF0 + gSequenceTable: 0x801130B0 + gSampleBankTable: 0x801137A0 + sShadowTex: 0x80A740D0 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEB768 + end_offset: 0xEC988 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEABF0 + end_offset: 0xEACC0 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEACC0 + end_offset: 0xEB650 +- 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_v2_mq.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.xml + start_offset: 0x6E0 + end_offset: 0x4088 +- 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_mq.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_mq.xml +- name: scenes/dungeons/ddan + xml_path: assets/xml/scenes/dungeons/ddan_mq.xml +- name: scenes/dungeons/ddan_boss + xml_path: assets/xml/scenes/dungeons/ddan_boss.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_mq.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_mq.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_mq.xml +- name: scenes/dungeons/HIDAN + xml_path: assets/xml/scenes/dungeons/HIDAN_mq.xml +- name: scenes/dungeons/ice_doukutu + xml_path: assets/xml/scenes/dungeons/ice_doukutu_mq.xml +- name: scenes/dungeons/jyasinboss + xml_path: assets/xml/scenes/dungeons/jyasinboss.xml +- name: scenes/dungeons/jyasinzou + xml_path: assets/xml/scenes/dungeons/jyasinzou_mq.xml +- name: scenes/dungeons/men + xml_path: assets/xml/scenes/dungeons/men_mq.xml +- name: scenes/dungeons/MIZUsin + xml_path: assets/xml/scenes/dungeons/MIZUsin_mq.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_mq.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.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.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.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/gc-jp-mq/segments.csv b/baseroms/gc-jp-mq/segments.csv new file mode 100644 index 0000000000..bb61147317 --- /dev/null +++ b/baseroms/gc-jp-mq/segments.csv @@ -0,0 +1,1510 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +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,80010EE0 +ovl_title,80800000 +ovl_select,80800870 +ovl_opening,808034F0 +ovl_file_choose,80803650 +ovl_kaleido_scope,808135D0 +ovl_player_actor,8082FDC0 +ovl_map_mark_data,808565A0 +ovl_En_Test,8085D080 +ovl_Arms_Hook,80862930 +ovl_Arrow_Fire,808636A0 +ovl_Arrow_Ice,80865580 +ovl_Arrow_Light,80867480 +ovl_Bg_Bdan_Objects,80869390 +ovl_Bg_Bdan_Switch,8086A660 +ovl_Bg_Bom_Guard,8086BA90 +ovl_Bg_Bombwall,8086BCB0 +ovl_Bg_Bowl_Wall,8086C570 +ovl_Bg_Breakwall,8086CEF0 +ovl_Bg_Ddan_Jd,8086DD60 +ovl_Bg_Ddan_Kd,8086E3B0 +ovl_Bg_Dodoago,8086ECA0 +ovl_Bg_Dy_Yoseizo,8086FA50 +ovl_Bg_Ganon_Otyuka,80872840 +ovl_Bg_Gate_Shutter,80874E80 +ovl_Bg_Gjyo_Bridge,80875310 +ovl_Bg_Gnd_Darkmeiro,80875800 +ovl_Bg_Gnd_Firemeiro,80875FC0 +ovl_Bg_Gnd_Iceblock,80876510 +ovl_Bg_Gnd_Nisekabe,80877610 +ovl_Bg_Gnd_Soulmeiro,80877780 +ovl_Bg_Haka,80877FE0 +ovl_Bg_Haka_Gate,808786A0 +ovl_Bg_Haka_Huta,80879740 +ovl_Bg_Haka_Megane,8087A1E0 +ovl_Bg_Haka_MeganeBG,8087A5E0 +ovl_Bg_Haka_Sgami,8087ACA0 +ovl_Bg_Haka_Ship,8087B8C0 +ovl_Bg_Haka_Trap,8087C310 +ovl_Bg_Haka_Tubo,8087D8E0 +ovl_Bg_Haka_Water,8087E300 +ovl_Bg_Haka_Zou,8087EB00 +ovl_Bg_Heavy_Block,8087FCF0 +ovl_Bg_Hidan_Curtain,808815E0 +ovl_Bg_Hidan_Dalm,80882080 +ovl_Bg_Hidan_Firewall,808828D0 +ovl_Bg_Hidan_Fslift,80883030 +ovl_Bg_Hidan_Fwbig,80883500 +ovl_Bg_Hidan_Hamstep,808841E0 +ovl_Bg_Hidan_Hrock,80885090 +ovl_Bg_Hidan_Kousi,808858C0 +ovl_Bg_Hidan_Kowarerukabe,80885E50 +ovl_Bg_Hidan_Rock,80886D30 +ovl_Bg_Hidan_Rsekizou,80887E30 +ovl_Bg_Hidan_Sekizou,80888A10 +ovl_Bg_Hidan_Sima,80889E60 +ovl_Bg_Hidan_Syoku,8088AD60 +ovl_Bg_Ice_Objects,8088B1C0 +ovl_Bg_Ice_Shelter,8088C100 +ovl_Bg_Ice_Shutter,8088D340 +ovl_Bg_Ice_Turara,8088D7B0 +ovl_Bg_Ingate,8088DFE0 +ovl_Bg_Jya_1flift,8088E370 +ovl_Bg_Jya_Amishutter,8088EA00 +ovl_Bg_Jya_Bigmirror,8088ED90 +ovl_Bg_Jya_Block,8088F5E0 +ovl_Bg_Jya_Bombchuiwa,8088F850 +ovl_Bg_Jya_Bombiwa,80890390 +ovl_Bg_Jya_Cobra,80890950 +ovl_Bg_Jya_Goroiwa,80892690 +ovl_Bg_Jya_Haheniron,80892E10 +ovl_Bg_Jya_Ironobj,80893600 +ovl_Bg_Jya_Kanaami,808943B0 +ovl_Bg_Jya_Lift,80894760 +ovl_Bg_Jya_Megami,80894CB0 +ovl_Bg_Jya_Zurerukabe,80895EA0 +ovl_Bg_Menkuri_Eye,80896550 +ovl_Bg_Menkuri_Kaiten,808969F0 +ovl_Bg_Menkuri_Nisekabe,80896B80 +ovl_Bg_Mizu_Bwall,80896CD0 +ovl_Bg_Mizu_Movebg,808981A0 +ovl_Bg_Mizu_Shutter,80899330 +ovl_Bg_Mizu_Uzu,80899B30 +ovl_Bg_Mizu_Water,80899D00 +ovl_Bg_Mjin,8089A9D0 +ovl_Bg_Mori_Bigst,8089ADC0 +ovl_Bg_Mori_Elevator,8089B6F0 +ovl_Bg_Mori_Hashigo,8089C1E0 +ovl_Bg_Mori_Hashira4,8089CAA0 +ovl_Bg_Mori_Hineri,8089D030 +ovl_Bg_Mori_Idomizu,8089DD80 +ovl_Bg_Mori_Kaitenkabe,8089E3C0 +ovl_Bg_Mori_Rakkatenjo,8089EA30 +ovl_Bg_Po_Event,8089F3B0 +ovl_Bg_Po_Syokudai,808A11F0 +ovl_Bg_Pushbox,808A1B60 +ovl_Bg_Relay_Objects,808A1E60 +ovl_Bg_Spot00_Break,808A2610 +ovl_Bg_Spot00_Hanebasi,808A27B0 +ovl_Bg_Spot01_Fusya,808A38C0 +ovl_Bg_Spot01_Idohashira,808A3B60 +ovl_Bg_Spot01_Idomizu,808A4760 +ovl_Bg_Spot01_Idosoko,808A4A80 +ovl_Bg_Spot01_Objects2,808A4C90 +ovl_Bg_Spot02_Objects,808A5150 +ovl_Bg_Spot03_Taki,808A64B0 +ovl_Bg_Spot05_Soko,808A6DD0 +ovl_Bg_Spot06_Objects,808A70F0 +ovl_Bg_Spot07_Taki,808A84F0 +ovl_Bg_Spot08_Bakudankabe,808A8AE0 +ovl_Bg_Spot08_Iceblock,808A9180 +ovl_Bg_Spot09_Obj,808AA1C0 +ovl_Bg_Spot11_Bakudankabe,808AA6E0 +ovl_Bg_Spot11_Oasis,808AAD20 +ovl_Bg_Spot12_Gate,808AB450 +ovl_Bg_Spot12_Saku,808AB860 +ovl_Bg_Spot15_Rrbox,808ABD20 +ovl_Bg_Spot15_Saku,808ACB00 +ovl_Bg_Spot16_Bombstone,808ACE40 +ovl_Bg_Spot16_Doughnut,808AE390 +ovl_Bg_Spot17_Bakudankabe,808AE950 +ovl_Bg_Spot17_Funen,808AF040 +ovl_Bg_Spot18_Basket,808AF290 +ovl_Bg_Spot18_Futa,808B0280 +ovl_Bg_Spot18_Obj,808B0420 +ovl_Bg_Spot18_Shutter,808B0CF0 +ovl_Bg_Sst_Floor,808B1240 +ovl_Bg_Toki_Hikari,808B17A0 +ovl_Bg_Toki_Swd,808B2540 +ovl_Bg_Treemouth,808B3B90 +ovl_Bg_Umajump,808B51F0 +ovl_Bg_Vb_Sima,808B5380 +ovl_Bg_Ydan_Hasi,808B5AA0 +ovl_Bg_Ydan_Maruta,808B6250 +ovl_Bg_Ydan_Sp,808B6930 +ovl_Bg_Zg,808B8050 +ovl_Boss_Dodongo,808B84A0 +ovl_Boss_Fd,808C1FA0 +ovl_Boss_Fd2,808C9300 +ovl_Boss_Ganon,808CD030 +ovl_Boss_Ganon2,808F2E60 +ovl_Boss_Ganondrof,80905CD0 +ovl_Boss_Goma,8090AA60 +ovl_Boss_Mo,80910A00 +ovl_Boss_Sst,80920FE0 +ovl_Boss_Tw,8092D5B0 +ovl_Boss_Va,80943180 +ovl_Demo_6K,8095A410 +ovl_Demo_Du,8095D170 +ovl_Demo_Ec,80960950 +ovl_Demo_Effect,809641B0 +ovl_Demo_Ext,80969D50 +ovl_Demo_Geff,8096A6A0 +ovl_Demo_Gj,8096AEC0 +ovl_Demo_Go,8096EB70 +ovl_Demo_Gt,8096F8C0 +ovl_Demo_Ik,80974ED0 +ovl_Demo_Im,809763E0 +ovl_Demo_Kankyo,8097A350 +ovl_Demo_Kekkai,8097E040 +ovl_Demo_Sa,8097F330 +ovl_Demo_Shd,80981E50 +ovl_Demo_Tre_Lgt,80984260 +ovl_Door_Ana,80984970 +ovl_Door_Gerudo,80984FE0 +ovl_Door_Killer,809855D0 +ovl_Door_Shutter,80986B40 +ovl_Door_Toki,80988E00 +ovl_Door_Warp1,80988F60 +ovl_Efc_Erupc,8098D270 +ovl_Eff_Dust,8098DD60 +ovl_Effect_Ss_Blast,8098F130 +ovl_Effect_Ss_Bomb,8098F4C0 +ovl_Effect_Ss_Bomb2,8098F8F0 +ovl_Effect_Ss_Bubble,809901F0 +ovl_Effect_Ss_D_Fire,80990670 +ovl_Effect_Ss_Dead_Db,80990B60 +ovl_Effect_Ss_Dead_Dd,80991040 +ovl_Effect_Ss_Dead_Ds,809915D0 +ovl_Effect_Ss_Dead_Sound,80991A50 +ovl_Effect_Ss_Dt_Bubble,80991B90 +ovl_Effect_Ss_Dust,80992120 +ovl_Effect_Ss_En_Fire,80992960 +ovl_Effect_Ss_En_Ice,809930B0 +ovl_Effect_Ss_Extra,80993970 +ovl_Effect_Ss_Fcircle,80993D30 +ovl_Effect_Ss_Fhg_Flash,809941E0 +ovl_Effect_Ss_Fire_Tail,80995160 +ovl_Effect_Ss_G_Fire,80995860 +ovl_Effect_Ss_G_Magma,80995AF0 +ovl_Effect_Ss_G_Magma2,80995D50 +ovl_Effect_Ss_G_Ripple,80996260 +ovl_Effect_Ss_G_Spk,809967C0 +ovl_Effect_Ss_G_Splash,80996D70 +ovl_Effect_Ss_Hahen,80997220 +ovl_Effect_Ss_HitMark,80997860 +ovl_Effect_Ss_Ice_Piece,80997DB0 +ovl_Effect_Ss_Ice_Smoke,809981F0 +ovl_Effect_Ss_K_Fire,809986D0 +ovl_Effect_Ss_Kakera,80998B10 +ovl_Effect_Ss_KiraKira,80999BA0 +ovl_Effect_Ss_Lightning,8099A210 +ovl_Effect_Ss_Sibuki,8099A8E0 +ovl_Effect_Ss_Sibuki2,8099AFB0 +ovl_Effect_Ss_Solder_Srch_Ball,8099B2E0 +ovl_Effect_Ss_Stick,8099B490 +ovl_Effect_Ss_Stone1,8099B830 +ovl_Elf_Msg,8099BBB0 +ovl_Elf_Msg2,8099C1A0 +ovl_En_Am,8099C610 +ovl_En_Ani,8099EA10 +ovl_En_Anubice,8099F780 +ovl_En_Anubice_Fire,809A0A30 +ovl_En_Anubice_Tag,809A17F0 +ovl_En_Arow_Trap,809A1AC0 +ovl_En_Arrow,809A1C10 +ovl_En_Attack_Niw,809A3310 +ovl_En_Ba,809A4570 +ovl_En_Bb,809A6440 +ovl_En_Bdfire,809AA120 +ovl_En_Bigokuta,809AACC0 +ovl_En_Bili,809AD7C0 +ovl_En_Bird,809AFA90 +ovl_En_Blkobj,809AFF50 +ovl_En_Bom,809B04B0 +ovl_En_Bom_Bowl_Man,809B1380 +ovl_En_Bom_Bowl_Pit,809B28C0 +ovl_En_Bom_Chu,809B3230 +ovl_En_Bombf,809B48D0 +ovl_En_Boom,809B5D60 +ovl_En_Box,809B6630 +ovl_En_Brob,809B8190 +ovl_En_Bubble,809B9280 +ovl_En_Butte,809BA6A0 +ovl_En_Bw,809BBC70 +ovl_En_Bx,809BF000 +ovl_En_Changer,809BFB00 +ovl_En_Clear_Tag,809C04E0 +ovl_En_Cow,809CBA80 +ovl_En_Crow,809CCEE0 +ovl_En_Cs,809CE580 +ovl_En_Daiku,809CF7B0 +ovl_En_Daiku_Kakariko,809D0EF0 +ovl_En_Dekubaba,809D22B0 +ovl_En_Dekunuts,809D5D60 +ovl_En_Dh,809D7560 +ovl_En_Dha,809D9040 +ovl_En_Diving_Game,809DA040 +ovl_En_Dns,809DB9F0 +ovl_En_Dnt_Demo,809DCD80 +ovl_En_Dnt_Jiji,809DDAA0 +ovl_En_Dnt_Nomal,809DEFC0 +ovl_En_Dodojr,809E1DC0 +ovl_En_Dodongo,809E3C60 +ovl_En_Dog,809E6A00 +ovl_En_Door,809E7BB0 +ovl_En_Ds,809E89F0 +ovl_En_Du,809E9610 +ovl_En_Dy_Extra,809EB0A0 +ovl_En_Eg,809EB640 +ovl_En_Eiyer,809EB7F0 +ovl_En_Elf,809ED450 +ovl_En_Encount1,809F1E10 +ovl_En_Encount2,809F2970 +ovl_En_Ex_Item,809F3BA0 +ovl_En_Ex_Ruppy,809F4D20 +ovl_En_Fd,809F5DE0 +ovl_En_Fd_Fire,809F8A80 +ovl_En_Fhg_Fire,809F9790 +ovl_En_Fire_Rock,809FBE30 +ovl_En_Firefly,809FCF40 +ovl_En_Fish,809FF0B0 +ovl_En_Floormas,80A011C0 +ovl_En_Fr,80A045A0 +ovl_En_Fu,80A07030 +ovl_En_Fw,80A07D80 +ovl_En_Fz,80A09540 +ovl_En_G_Switch,80A0B550 +ovl_En_Ganon_Mant,80A0CD70 +ovl_En_Ganon_Organ,80A10FA0 +ovl_En_Gb,80A17FE0 +ovl_En_Ge1,80A19710 +ovl_En_Ge2,80A1B740 +ovl_En_Ge3,80A1D0E0 +ovl_En_GeldB,80A1DD20 +ovl_En_GirlA,80A230D0 +ovl_En_Gm,80A259F0 +ovl_En_Go,80A26720 +ovl_En_Go2,80A2AD60 +ovl_En_Goma,80A30DA0 +ovl_En_Goroiwa,80A33A50 +ovl_En_Gs,80A35E10 +ovl_En_Guest,80A37C80 +ovl_En_Hata,80A38620 +ovl_En_Heishi1,80A38BB0 +ovl_En_Heishi2,80A3A0C0 +ovl_En_Heishi3,80A3C2C0 +ovl_En_Heishi4,80A3CC90 +ovl_En_Hintnuts,80A3DB90 +ovl_En_Holl,80A3F5C0 +ovl_En_Honotrap,80A40590 +ovl_En_Horse,80A41AF0 +ovl_En_Horse_Game_Check,80A4DD50 +ovl_En_Horse_Ganon,80A4EE20 +ovl_En_Horse_Link_Child,80A4FBA0 +ovl_En_Horse_Normal,80A519A0 +ovl_En_Horse_Zelda,80A53FC0 +ovl_En_Hs,80A54AB0 +ovl_En_Hs2,80A55650 +ovl_En_Hy,80A55C30 +ovl_En_Ice_Hono,80A59570 +ovl_En_Ik,80A5A760 +ovl_En_In,80A5EDC0 +ovl_En_Insect,80A61B60 +ovl_En_Ishi,80A64080 +ovl_En_It,80A6D1D0 +ovl_En_Jj,80A6D360 +ovl_En_Js,80A6E930 +ovl_En_Jsjutan,80A6F300 +ovl_En_Kakasi,80A74C30 +ovl_En_Kakasi2,80A75970 +ovl_En_Kakasi3,80A76090 +ovl_En_Kanban,80A77170 +ovl_En_Karebaba,80A7A2C0 +ovl_En_Ko,80A7BBB0 +ovl_En_Kusa,80A7FCF0 +ovl_En_Kz,80A811D0 +ovl_En_Light,80A82770 +ovl_En_Lightbox,80A83570 +ovl_En_M_Fire1,80A839F0 +ovl_En_M_Thunder,80A83B90 +ovl_En_Ma1,80A85190 +ovl_En_Ma2,80A86470 +ovl_En_Ma3,80A874D0 +ovl_En_Mag,80A88480 +ovl_En_Mb,80A8D110 +ovl_En_Md,80A91340 +ovl_En_Mk,80A939B0 +ovl_En_Mm,80A94840 +ovl_En_Mm2,80A95EA0 +ovl_En_Ms,80A96C60 +ovl_En_Mu,80A97350 +ovl_En_Nb,80A97C70 +ovl_En_Niw,80A9C240 +ovl_En_Niw_Girl,80A9F570 +ovl_En_Niw_Lady,80AA0040 +ovl_En_Nutsball,80AA1940 +ovl_En_Nwc,80AA1F60 +ovl_En_Ny,80AA2980 +ovl_En_OE2,80AA42C0 +ovl_En_Okarina_Effect,80AA43A0 +ovl_En_Okarina_Tag,80AA4760 +ovl_En_Okuta,80AA5C60 +ovl_En_Ossan,80AA8240 +ovl_En_Owl,80AAE820 +ovl_En_Part,80AB23C0 +ovl_En_Peehat,80AB3A20 +ovl_En_Po_Desert,80AB7120 +ovl_En_Po_Field,80AB7EE0 +ovl_En_Po_Relay,80ABB970 +ovl_En_Po_Sisters,80ABD080 +ovl_En_Poh,80AC1D70 +ovl_En_Pu_box,80AC5F60 +ovl_En_Rd,80AC62A0 +ovl_En_Reeba,80AC8B60 +ovl_En_River_Sound,80ACA5D0 +ovl_En_Rl,80ACAF60 +ovl_En_Rr,80ACBE40 +ovl_En_Ru1,80ACE370 +ovl_En_Ru2,80AD5A10 +ovl_En_Sa,80AD8790 +ovl_En_Sb,80ADAA00 +ovl_En_Scene_Change,80ADBE40 +ovl_En_Sda,80ADBF70 +ovl_En_Shopnuts,80ADD660 +ovl_En_Si,80ADE570 +ovl_En_Siofuki,80ADEA70 +ovl_En_Skb,80ADF820 +ovl_En_Skj,80AE1110 +ovl_En_Skjneedle,80AE4A60 +ovl_En_Ssh,80AE4D70 +ovl_En_St,80AE7360 +ovl_En_Sth,80AE9FD0 +ovl_En_Stream,80AEE090 +ovl_En_Sw,80AEE620 +ovl_En_Syateki_Itm,80AF1E10 +ovl_En_Syateki_Man,80AF2BB0 +ovl_En_Syateki_Niw,80AF3970 +ovl_En_Ta,80AF5A00 +ovl_En_Takara_Man,80AF93C0 +ovl_En_Tana,80AF9C80 +ovl_En_Tg,80AF9F30 +ovl_En_Tite,80AFA610 +ovl_En_Tk,80AFD3B0 +ovl_En_Torch,80AFF1E0 +ovl_En_Torch2,80AFF2D0 +ovl_En_Toryo,80B01A70 +ovl_En_Tp,80B02700 +ovl_En_Tr,80B04570 +ovl_En_Trap,80B05E70 +ovl_En_Tubo_Trap,80B07110 +ovl_En_Vali,80B07DB0 +ovl_En_Vase,80B0A470 +ovl_En_Vb_Ball,80B0A570 +ovl_En_Viewer,80B0B720 +ovl_En_Vm,80B0E5E0 +ovl_En_Wall_Tubo,80B0FEA0 +ovl_En_Wallmas,80B10390 +ovl_En_Weather_Tag,80B11DA0 +ovl_En_Weiyer,80B12C90 +ovl_En_Wf,80B14690 +ovl_En_Wonder_Item,80B189A0 +ovl_En_Wonder_Talk,80B196D0 +ovl_En_Wonder_Talk2,80B19D60 +ovl_En_Wood02,80B1A400 +ovl_En_Xc,80B1B5E0 +ovl_En_Yabusame_Mark,80B21D70 +ovl_En_Yukabyun,80B22440 +ovl_En_Zf,80B22A50 +ovl_En_Zl1,80B29540 +ovl_En_Zl2,80B2D350 +ovl_En_Zl3,80B31A50 +ovl_En_Zl4,80B398A0 +ovl_En_Zo,80B3E2D0 +ovl_En_fHG,80B40890 +ovl_End_Title,80B431C0 +ovl_Fishing,80B472E0 +ovl_Item_B_Heart,80B61E80 +ovl_Item_Etcetera,80B62290 +ovl_Item_Inbox,80B62B60 +ovl_Item_Ocarina,80B62CC0 +ovl_Item_Shield,80B63490 +ovl_Magic_Dark,80B63EA0 +ovl_Magic_Fire,80B656F0 +ovl_Magic_Wind,80B679F0 +ovl_Mir_Ray,80B696F0 +ovl_Obj_Bean,80B6AFA0 +ovl_Obj_Blockstop,80B6D730 +ovl_Obj_Bombiwa,80B6D8D0 +ovl_Obj_Comb,80B6DE40 +ovl_Obj_Dekujr,80B6E6A0 +ovl_Obj_Elevator,80B6ECE0 +ovl_Obj_Hamishi,80B6F0A0 +ovl_Obj_Hana,80B6F8F0 +ovl_Obj_Hsblock,80B6FC00 +ovl_Obj_Ice_Poly,80B701D0 +ovl_Obj_Kibako,80B70B80 +ovl_Obj_Kibako2,80B71880 +ovl_Obj_Lift,80B71F40 +ovl_Obj_Lightswitch,80B72960 +ovl_Obj_Makekinsuta,80B73D90 +ovl_Obj_Makeoshihiki,80B73EE0 +ovl_Obj_Mure,80B74370 +ovl_Obj_Mure2,80B75380 +ovl_Obj_Mure3,80B75DA0 +ovl_Obj_Oshihiki,80B76570 +ovl_Obj_Roomtimer,80B78020 +ovl_Obj_Switch,80B78270 +ovl_Obj_Syokudai,80B7A050 +ovl_Obj_Timeblock,80B7ACA0 +ovl_Obj_Tsubo,80B7B8F0 +ovl_Obj_Warp2block,80B7C8E0 +ovl_Object_Kankyo,80B7D410 +ovl_Oceff_Spot,80B80690 +ovl_Oceff_Storm,80B815C0 +ovl_Oceff_Wipe,80B83170 +ovl_Oceff_Wipe2,80B83EF0 +ovl_Oceff_Wipe3,80B85660 +ovl_Oceff_Wipe4,80B86DB0 +ovl_Shot_Sun,80B87D90 +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/gc-jp/checksum-compressed.md5 b/baseroms/gc-jp/checksum-compressed.md5 new file mode 100644 index 0000000000..8234b5cc8c --- /dev/null +++ b/baseroms/gc-jp/checksum-compressed.md5 @@ -0,0 +1 @@ +33fb7852c180b18ea0b9620b630f413f build/gc-jp/oot-gc-jp-compressed.z64 diff --git a/baseroms/gc-jp/checksum.md5 b/baseroms/gc-jp/checksum.md5 new file mode 100644 index 0000000000..e94a930369 --- /dev/null +++ b/baseroms/gc-jp/checksum.md5 @@ -0,0 +1 @@ +c72746a38cee7b25e6bbecde8db7e2d1 build/gc-jp/oot-gc-jp.z64 diff --git a/baseroms/gc-jp/config.yml b/baseroms/gc-jp/config.yml new file mode 100644 index 0000000000..e3d01b9350 --- /dev/null +++ b/baseroms/gc-jp/config.yml @@ -0,0 +1,1228 @@ +dmadata_start: 0x7170 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x80005FC0 + size: 0xD0 + - name: aspMainText + segment: code + vram: 0x800E3860 + size: 0xFB0 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E4810 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E60D0 + size: 0xAF0 + - name: gSoundFontTable + segment: code + vram: 0x80112CA0 + size: 0x270 + - name: gSequenceFontTable + segment: code + vram: 0x80112F10 + size: 0x1C0 + - name: gSequenceTable + segment: code + vram: 0x801130D0 + size: 0x6F0 + - name: gSampleBankTable + segment: code + vram: 0x801137C0 + size: 0x80 + - name: aspMainData + segment: code + vram: 0x80113840 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x80113B20 + size: 0x1630 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x80115150 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x80115570 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x80115900 + size: 0x60 +variables: + gMtxClear: 0x800FE2C0 + sJpnMessageEntryTable: 0x80109EAC + sNesMessageEntryTable: 0x8010DFEC + sStaffMessageEntryTable: 0x8011220C + gSoundFontTable: 0x80112CA0 + gSequenceFontTable: 0x80112F10 + gSequenceTable: 0x801130D0 + gSampleBankTable: 0x801137C0 + sShadowTex: 0x80A74150 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEB788 + end_offset: 0xEC9A8 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEAC10 + end_offset: 0xEACE0 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEACE0 + end_offset: 0xEB670 +- 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_v2.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.xml + start_offset: 0x6E0 + end_offset: 0x4088 +- 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.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.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.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.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.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/gc-jp/segments.csv b/baseroms/gc-jp/segments.csv new file mode 100644 index 0000000000..09c91ec49e --- /dev/null +++ b/baseroms/gc-jp/segments.csv @@ -0,0 +1,1510 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +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,80010EE0 +ovl_title,80800000 +ovl_select,80800870 +ovl_opening,808034F0 +ovl_file_choose,80803650 +ovl_kaleido_scope,808135D0 +ovl_player_actor,8082FDC0 +ovl_map_mark_data,808565A0 +ovl_En_Test,8085D100 +ovl_Arms_Hook,808629B0 +ovl_Arrow_Fire,80863720 +ovl_Arrow_Ice,80865600 +ovl_Arrow_Light,80867500 +ovl_Bg_Bdan_Objects,80869410 +ovl_Bg_Bdan_Switch,8086A6E0 +ovl_Bg_Bom_Guard,8086BB10 +ovl_Bg_Bombwall,8086BD30 +ovl_Bg_Bowl_Wall,8086C5F0 +ovl_Bg_Breakwall,8086CF70 +ovl_Bg_Ddan_Jd,8086DDE0 +ovl_Bg_Ddan_Kd,8086E430 +ovl_Bg_Dodoago,8086ED20 +ovl_Bg_Dy_Yoseizo,8086FAD0 +ovl_Bg_Ganon_Otyuka,808728C0 +ovl_Bg_Gate_Shutter,80874F00 +ovl_Bg_Gjyo_Bridge,80875390 +ovl_Bg_Gnd_Darkmeiro,80875880 +ovl_Bg_Gnd_Firemeiro,80876040 +ovl_Bg_Gnd_Iceblock,80876590 +ovl_Bg_Gnd_Nisekabe,80877690 +ovl_Bg_Gnd_Soulmeiro,80877800 +ovl_Bg_Haka,80878060 +ovl_Bg_Haka_Gate,80878720 +ovl_Bg_Haka_Huta,808797C0 +ovl_Bg_Haka_Megane,8087A260 +ovl_Bg_Haka_MeganeBG,8087A660 +ovl_Bg_Haka_Sgami,8087AD20 +ovl_Bg_Haka_Ship,8087B940 +ovl_Bg_Haka_Trap,8087C390 +ovl_Bg_Haka_Tubo,8087D960 +ovl_Bg_Haka_Water,8087E380 +ovl_Bg_Haka_Zou,8087EB80 +ovl_Bg_Heavy_Block,8087FD70 +ovl_Bg_Hidan_Curtain,80881660 +ovl_Bg_Hidan_Dalm,80882100 +ovl_Bg_Hidan_Firewall,80882950 +ovl_Bg_Hidan_Fslift,808830B0 +ovl_Bg_Hidan_Fwbig,80883580 +ovl_Bg_Hidan_Hamstep,80884260 +ovl_Bg_Hidan_Hrock,80885110 +ovl_Bg_Hidan_Kousi,80885940 +ovl_Bg_Hidan_Kowarerukabe,80885ED0 +ovl_Bg_Hidan_Rock,80886DB0 +ovl_Bg_Hidan_Rsekizou,80887EB0 +ovl_Bg_Hidan_Sekizou,80888A90 +ovl_Bg_Hidan_Sima,80889EE0 +ovl_Bg_Hidan_Syoku,8088ADE0 +ovl_Bg_Ice_Objects,8088B240 +ovl_Bg_Ice_Shelter,8088C180 +ovl_Bg_Ice_Shutter,8088D3C0 +ovl_Bg_Ice_Turara,8088D830 +ovl_Bg_Ingate,8088E060 +ovl_Bg_Jya_1flift,8088E3F0 +ovl_Bg_Jya_Amishutter,8088EA80 +ovl_Bg_Jya_Bigmirror,8088EE10 +ovl_Bg_Jya_Block,8088F660 +ovl_Bg_Jya_Bombchuiwa,8088F8D0 +ovl_Bg_Jya_Bombiwa,80890410 +ovl_Bg_Jya_Cobra,808909D0 +ovl_Bg_Jya_Goroiwa,80892710 +ovl_Bg_Jya_Haheniron,80892E90 +ovl_Bg_Jya_Ironobj,80893680 +ovl_Bg_Jya_Kanaami,80894430 +ovl_Bg_Jya_Lift,808947E0 +ovl_Bg_Jya_Megami,80894D30 +ovl_Bg_Jya_Zurerukabe,80895F20 +ovl_Bg_Menkuri_Eye,808965D0 +ovl_Bg_Menkuri_Kaiten,80896A70 +ovl_Bg_Menkuri_Nisekabe,80896C00 +ovl_Bg_Mizu_Bwall,80896D50 +ovl_Bg_Mizu_Movebg,80898220 +ovl_Bg_Mizu_Shutter,808993B0 +ovl_Bg_Mizu_Uzu,80899BB0 +ovl_Bg_Mizu_Water,80899D80 +ovl_Bg_Mjin,8089AA50 +ovl_Bg_Mori_Bigst,8089AE40 +ovl_Bg_Mori_Elevator,8089B770 +ovl_Bg_Mori_Hashigo,8089C260 +ovl_Bg_Mori_Hashira4,8089CB20 +ovl_Bg_Mori_Hineri,8089D0B0 +ovl_Bg_Mori_Idomizu,8089DE00 +ovl_Bg_Mori_Kaitenkabe,8089E440 +ovl_Bg_Mori_Rakkatenjo,8089EAB0 +ovl_Bg_Po_Event,8089F430 +ovl_Bg_Po_Syokudai,808A1270 +ovl_Bg_Pushbox,808A1BE0 +ovl_Bg_Relay_Objects,808A1EE0 +ovl_Bg_Spot00_Break,808A2690 +ovl_Bg_Spot00_Hanebasi,808A2830 +ovl_Bg_Spot01_Fusya,808A3940 +ovl_Bg_Spot01_Idohashira,808A3BE0 +ovl_Bg_Spot01_Idomizu,808A47E0 +ovl_Bg_Spot01_Idosoko,808A4B00 +ovl_Bg_Spot01_Objects2,808A4D10 +ovl_Bg_Spot02_Objects,808A51D0 +ovl_Bg_Spot03_Taki,808A6530 +ovl_Bg_Spot05_Soko,808A6E50 +ovl_Bg_Spot06_Objects,808A7170 +ovl_Bg_Spot07_Taki,808A8570 +ovl_Bg_Spot08_Bakudankabe,808A8B60 +ovl_Bg_Spot08_Iceblock,808A9200 +ovl_Bg_Spot09_Obj,808AA240 +ovl_Bg_Spot11_Bakudankabe,808AA760 +ovl_Bg_Spot11_Oasis,808AADA0 +ovl_Bg_Spot12_Gate,808AB4D0 +ovl_Bg_Spot12_Saku,808AB8E0 +ovl_Bg_Spot15_Rrbox,808ABDA0 +ovl_Bg_Spot15_Saku,808ACB80 +ovl_Bg_Spot16_Bombstone,808ACEC0 +ovl_Bg_Spot16_Doughnut,808AE410 +ovl_Bg_Spot17_Bakudankabe,808AE9D0 +ovl_Bg_Spot17_Funen,808AF0C0 +ovl_Bg_Spot18_Basket,808AF310 +ovl_Bg_Spot18_Futa,808B0300 +ovl_Bg_Spot18_Obj,808B04A0 +ovl_Bg_Spot18_Shutter,808B0D70 +ovl_Bg_Sst_Floor,808B12C0 +ovl_Bg_Toki_Hikari,808B1820 +ovl_Bg_Toki_Swd,808B25C0 +ovl_Bg_Treemouth,808B3C10 +ovl_Bg_Umajump,808B5270 +ovl_Bg_Vb_Sima,808B5400 +ovl_Bg_Ydan_Hasi,808B5B20 +ovl_Bg_Ydan_Maruta,808B62D0 +ovl_Bg_Ydan_Sp,808B69B0 +ovl_Bg_Zg,808B80D0 +ovl_Boss_Dodongo,808B8520 +ovl_Boss_Fd,808C2020 +ovl_Boss_Fd2,808C9380 +ovl_Boss_Ganon,808CD0B0 +ovl_Boss_Ganon2,808F2EE0 +ovl_Boss_Ganondrof,80905D50 +ovl_Boss_Goma,8090AAE0 +ovl_Boss_Mo,80910A80 +ovl_Boss_Sst,80921060 +ovl_Boss_Tw,8092D630 +ovl_Boss_Va,80943200 +ovl_Demo_6K,8095A490 +ovl_Demo_Du,8095D1F0 +ovl_Demo_Ec,809609D0 +ovl_Demo_Effect,80964230 +ovl_Demo_Ext,80969DD0 +ovl_Demo_Geff,8096A720 +ovl_Demo_Gj,8096AF40 +ovl_Demo_Go,8096EBF0 +ovl_Demo_Gt,8096F940 +ovl_Demo_Ik,80974F50 +ovl_Demo_Im,80976460 +ovl_Demo_Kankyo,8097A3D0 +ovl_Demo_Kekkai,8097E0C0 +ovl_Demo_Sa,8097F3B0 +ovl_Demo_Shd,80981ED0 +ovl_Demo_Tre_Lgt,809842E0 +ovl_Door_Ana,809849F0 +ovl_Door_Gerudo,80985060 +ovl_Door_Killer,80985650 +ovl_Door_Shutter,80986BC0 +ovl_Door_Toki,80988E80 +ovl_Door_Warp1,80988FE0 +ovl_Efc_Erupc,8098D2F0 +ovl_Eff_Dust,8098DDE0 +ovl_Effect_Ss_Blast,8098F1B0 +ovl_Effect_Ss_Bomb,8098F540 +ovl_Effect_Ss_Bomb2,8098F970 +ovl_Effect_Ss_Bubble,80990270 +ovl_Effect_Ss_D_Fire,809906F0 +ovl_Effect_Ss_Dead_Db,80990BE0 +ovl_Effect_Ss_Dead_Dd,809910C0 +ovl_Effect_Ss_Dead_Ds,80991650 +ovl_Effect_Ss_Dead_Sound,80991AD0 +ovl_Effect_Ss_Dt_Bubble,80991C10 +ovl_Effect_Ss_Dust,809921A0 +ovl_Effect_Ss_En_Fire,809929E0 +ovl_Effect_Ss_En_Ice,80993130 +ovl_Effect_Ss_Extra,809939F0 +ovl_Effect_Ss_Fcircle,80993DB0 +ovl_Effect_Ss_Fhg_Flash,80994260 +ovl_Effect_Ss_Fire_Tail,809951E0 +ovl_Effect_Ss_G_Fire,809958E0 +ovl_Effect_Ss_G_Magma,80995B70 +ovl_Effect_Ss_G_Magma2,80995DD0 +ovl_Effect_Ss_G_Ripple,809962E0 +ovl_Effect_Ss_G_Spk,80996840 +ovl_Effect_Ss_G_Splash,80996DF0 +ovl_Effect_Ss_Hahen,809972A0 +ovl_Effect_Ss_HitMark,809978E0 +ovl_Effect_Ss_Ice_Piece,80997E30 +ovl_Effect_Ss_Ice_Smoke,80998270 +ovl_Effect_Ss_K_Fire,80998750 +ovl_Effect_Ss_Kakera,80998B90 +ovl_Effect_Ss_KiraKira,80999C20 +ovl_Effect_Ss_Lightning,8099A290 +ovl_Effect_Ss_Sibuki,8099A960 +ovl_Effect_Ss_Sibuki2,8099B030 +ovl_Effect_Ss_Solder_Srch_Ball,8099B360 +ovl_Effect_Ss_Stick,8099B510 +ovl_Effect_Ss_Stone1,8099B8B0 +ovl_Elf_Msg,8099BC30 +ovl_Elf_Msg2,8099C220 +ovl_En_Am,8099C690 +ovl_En_Ani,8099EA90 +ovl_En_Anubice,8099F800 +ovl_En_Anubice_Fire,809A0AB0 +ovl_En_Anubice_Tag,809A1870 +ovl_En_Arow_Trap,809A1B40 +ovl_En_Arrow,809A1C90 +ovl_En_Attack_Niw,809A3390 +ovl_En_Ba,809A45F0 +ovl_En_Bb,809A64C0 +ovl_En_Bdfire,809AA1A0 +ovl_En_Bigokuta,809AAD40 +ovl_En_Bili,809AD840 +ovl_En_Bird,809AFB10 +ovl_En_Blkobj,809AFFD0 +ovl_En_Bom,809B0530 +ovl_En_Bom_Bowl_Man,809B1400 +ovl_En_Bom_Bowl_Pit,809B2940 +ovl_En_Bom_Chu,809B32B0 +ovl_En_Bombf,809B4950 +ovl_En_Boom,809B5DE0 +ovl_En_Box,809B66B0 +ovl_En_Brob,809B8210 +ovl_En_Bubble,809B9300 +ovl_En_Butte,809BA720 +ovl_En_Bw,809BBCF0 +ovl_En_Bx,809BF080 +ovl_En_Changer,809BFB80 +ovl_En_Clear_Tag,809C0560 +ovl_En_Cow,809CBB00 +ovl_En_Crow,809CCF60 +ovl_En_Cs,809CE600 +ovl_En_Daiku,809CF830 +ovl_En_Daiku_Kakariko,809D0F70 +ovl_En_Dekubaba,809D2330 +ovl_En_Dekunuts,809D5DE0 +ovl_En_Dh,809D75E0 +ovl_En_Dha,809D90C0 +ovl_En_Diving_Game,809DA0C0 +ovl_En_Dns,809DBA70 +ovl_En_Dnt_Demo,809DCE00 +ovl_En_Dnt_Jiji,809DDB20 +ovl_En_Dnt_Nomal,809DF040 +ovl_En_Dodojr,809E1E40 +ovl_En_Dodongo,809E3CE0 +ovl_En_Dog,809E6A80 +ovl_En_Door,809E7C30 +ovl_En_Ds,809E8A70 +ovl_En_Du,809E9690 +ovl_En_Dy_Extra,809EB120 +ovl_En_Eg,809EB6C0 +ovl_En_Eiyer,809EB870 +ovl_En_Elf,809ED4D0 +ovl_En_Encount1,809F1E90 +ovl_En_Encount2,809F29F0 +ovl_En_Ex_Item,809F3C20 +ovl_En_Ex_Ruppy,809F4DA0 +ovl_En_Fd,809F5E60 +ovl_En_Fd_Fire,809F8B00 +ovl_En_Fhg_Fire,809F9810 +ovl_En_Fire_Rock,809FBEB0 +ovl_En_Firefly,809FCFC0 +ovl_En_Fish,809FF130 +ovl_En_Floormas,80A01240 +ovl_En_Fr,80A04620 +ovl_En_Fu,80A070B0 +ovl_En_Fw,80A07E00 +ovl_En_Fz,80A095C0 +ovl_En_G_Switch,80A0B5D0 +ovl_En_Ganon_Mant,80A0CDF0 +ovl_En_Ganon_Organ,80A11020 +ovl_En_Gb,80A18060 +ovl_En_Ge1,80A19790 +ovl_En_Ge2,80A1B7C0 +ovl_En_Ge3,80A1D160 +ovl_En_GeldB,80A1DDA0 +ovl_En_GirlA,80A23150 +ovl_En_Gm,80A25A70 +ovl_En_Go,80A267A0 +ovl_En_Go2,80A2ADE0 +ovl_En_Goma,80A30E20 +ovl_En_Goroiwa,80A33AD0 +ovl_En_Gs,80A35E90 +ovl_En_Guest,80A37D00 +ovl_En_Hata,80A386A0 +ovl_En_Heishi1,80A38C30 +ovl_En_Heishi2,80A3A140 +ovl_En_Heishi3,80A3C340 +ovl_En_Heishi4,80A3CD10 +ovl_En_Hintnuts,80A3DC10 +ovl_En_Holl,80A3F640 +ovl_En_Honotrap,80A40610 +ovl_En_Horse,80A41B70 +ovl_En_Horse_Game_Check,80A4DDD0 +ovl_En_Horse_Ganon,80A4EEA0 +ovl_En_Horse_Link_Child,80A4FC20 +ovl_En_Horse_Normal,80A51A20 +ovl_En_Horse_Zelda,80A54040 +ovl_En_Hs,80A54B30 +ovl_En_Hs2,80A556D0 +ovl_En_Hy,80A55CB0 +ovl_En_Ice_Hono,80A595F0 +ovl_En_Ik,80A5A7E0 +ovl_En_In,80A5EE40 +ovl_En_Insect,80A61BE0 +ovl_En_Ishi,80A64100 +ovl_En_It,80A6D250 +ovl_En_Jj,80A6D3E0 +ovl_En_Js,80A6E9B0 +ovl_En_Jsjutan,80A6F380 +ovl_En_Kakasi,80A74CB0 +ovl_En_Kakasi2,80A759F0 +ovl_En_Kakasi3,80A76110 +ovl_En_Kanban,80A771F0 +ovl_En_Karebaba,80A7A340 +ovl_En_Ko,80A7BC30 +ovl_En_Kusa,80A7FD70 +ovl_En_Kz,80A81250 +ovl_En_Light,80A827F0 +ovl_En_Lightbox,80A835F0 +ovl_En_M_Fire1,80A83A70 +ovl_En_M_Thunder,80A83C10 +ovl_En_Ma1,80A85210 +ovl_En_Ma2,80A864F0 +ovl_En_Ma3,80A87550 +ovl_En_Mag,80A88500 +ovl_En_Mb,80A8D0B0 +ovl_En_Md,80A912E0 +ovl_En_Mk,80A93950 +ovl_En_Mm,80A947E0 +ovl_En_Mm2,80A95E40 +ovl_En_Ms,80A96C00 +ovl_En_Mu,80A972F0 +ovl_En_Nb,80A97C10 +ovl_En_Niw,80A9C1E0 +ovl_En_Niw_Girl,80A9F510 +ovl_En_Niw_Lady,80A9FFE0 +ovl_En_Nutsball,80AA18E0 +ovl_En_Nwc,80AA1F00 +ovl_En_Ny,80AA2920 +ovl_En_OE2,80AA4260 +ovl_En_Okarina_Effect,80AA4340 +ovl_En_Okarina_Tag,80AA4700 +ovl_En_Okuta,80AA5C00 +ovl_En_Ossan,80AA81E0 +ovl_En_Owl,80AAE7C0 +ovl_En_Part,80AB2360 +ovl_En_Peehat,80AB39C0 +ovl_En_Po_Desert,80AB70C0 +ovl_En_Po_Field,80AB7E80 +ovl_En_Po_Relay,80ABB910 +ovl_En_Po_Sisters,80ABD020 +ovl_En_Poh,80AC1D10 +ovl_En_Pu_box,80AC5F00 +ovl_En_Rd,80AC6240 +ovl_En_Reeba,80AC8B00 +ovl_En_River_Sound,80ACA570 +ovl_En_Rl,80ACAF00 +ovl_En_Rr,80ACBDE0 +ovl_En_Ru1,80ACE310 +ovl_En_Ru2,80AD59B0 +ovl_En_Sa,80AD8730 +ovl_En_Sb,80ADA9A0 +ovl_En_Scene_Change,80ADBDE0 +ovl_En_Sda,80ADBF10 +ovl_En_Shopnuts,80ADD600 +ovl_En_Si,80ADE510 +ovl_En_Siofuki,80ADEA10 +ovl_En_Skb,80ADF7C0 +ovl_En_Skj,80AE10B0 +ovl_En_Skjneedle,80AE4A00 +ovl_En_Ssh,80AE4D10 +ovl_En_St,80AE7300 +ovl_En_Sth,80AE9F70 +ovl_En_Stream,80AEE030 +ovl_En_Sw,80AEE5C0 +ovl_En_Syateki_Itm,80AF1DB0 +ovl_En_Syateki_Man,80AF2B50 +ovl_En_Syateki_Niw,80AF3910 +ovl_En_Ta,80AF59A0 +ovl_En_Takara_Man,80AF9360 +ovl_En_Tana,80AF9C20 +ovl_En_Tg,80AF9ED0 +ovl_En_Tite,80AFA5B0 +ovl_En_Tk,80AFD350 +ovl_En_Torch,80AFF180 +ovl_En_Torch2,80AFF270 +ovl_En_Toryo,80B01A10 +ovl_En_Tp,80B026A0 +ovl_En_Tr,80B04510 +ovl_En_Trap,80B05E10 +ovl_En_Tubo_Trap,80B070B0 +ovl_En_Vali,80B07D50 +ovl_En_Vase,80B0A410 +ovl_En_Vb_Ball,80B0A510 +ovl_En_Viewer,80B0B6C0 +ovl_En_Vm,80B0E580 +ovl_En_Wall_Tubo,80B0FE40 +ovl_En_Wallmas,80B10330 +ovl_En_Weather_Tag,80B11D40 +ovl_En_Weiyer,80B12C30 +ovl_En_Wf,80B14630 +ovl_En_Wonder_Item,80B18940 +ovl_En_Wonder_Talk,80B19670 +ovl_En_Wonder_Talk2,80B19D00 +ovl_En_Wood02,80B1A3A0 +ovl_En_Xc,80B1B580 +ovl_En_Yabusame_Mark,80B21D10 +ovl_En_Yukabyun,80B223E0 +ovl_En_Zf,80B229F0 +ovl_En_Zl1,80B294E0 +ovl_En_Zl2,80B2D2F0 +ovl_En_Zl3,80B319F0 +ovl_En_Zl4,80B39840 +ovl_En_Zo,80B3E270 +ovl_En_fHG,80B40830 +ovl_End_Title,80B43160 +ovl_Fishing,80B47280 +ovl_Item_B_Heart,80B61E20 +ovl_Item_Etcetera,80B62230 +ovl_Item_Inbox,80B62B00 +ovl_Item_Ocarina,80B62C60 +ovl_Item_Shield,80B63430 +ovl_Magic_Dark,80B63E40 +ovl_Magic_Fire,80B65690 +ovl_Magic_Wind,80B67990 +ovl_Mir_Ray,80B69690 +ovl_Obj_Bean,80B6AF40 +ovl_Obj_Blockstop,80B6D6D0 +ovl_Obj_Bombiwa,80B6D870 +ovl_Obj_Comb,80B6DDE0 +ovl_Obj_Dekujr,80B6E640 +ovl_Obj_Elevator,80B6EC80 +ovl_Obj_Hamishi,80B6F040 +ovl_Obj_Hana,80B6F890 +ovl_Obj_Hsblock,80B6FBA0 +ovl_Obj_Ice_Poly,80B70170 +ovl_Obj_Kibako,80B70B20 +ovl_Obj_Kibako2,80B71820 +ovl_Obj_Lift,80B71EE0 +ovl_Obj_Lightswitch,80B72900 +ovl_Obj_Makekinsuta,80B73D30 +ovl_Obj_Makeoshihiki,80B73E80 +ovl_Obj_Mure,80B74310 +ovl_Obj_Mure2,80B75320 +ovl_Obj_Mure3,80B75D40 +ovl_Obj_Oshihiki,80B76510 +ovl_Obj_Roomtimer,80B77FC0 +ovl_Obj_Switch,80B78210 +ovl_Obj_Syokudai,80B79FF0 +ovl_Obj_Timeblock,80B7AC40 +ovl_Obj_Tsubo,80B7B890 +ovl_Obj_Warp2block,80B7C880 +ovl_Object_Kankyo,80B7D3B0 +ovl_Oceff_Spot,80B80630 +ovl_Oceff_Storm,80B81560 +ovl_Oceff_Wipe,80B83110 +ovl_Oceff_Wipe2,80B83E90 +ovl_Oceff_Wipe3,80B85600 +ovl_Oceff_Wipe4,80B86D50 +ovl_Shot_Sun,80B87D30 +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/gc-us-mq/checksum-compressed.md5 b/baseroms/gc-us-mq/checksum-compressed.md5 new file mode 100644 index 0000000000..9288d12116 --- /dev/null +++ b/baseroms/gc-us-mq/checksum-compressed.md5 @@ -0,0 +1 @@ +da35577fe54579f6a266931cc75f512d build/gc-us-mq/oot-gc-us-mq-compressed.z64 diff --git a/baseroms/gc-us-mq/checksum.md5 b/baseroms/gc-us-mq/checksum.md5 new file mode 100644 index 0000000000..5d07400cc5 --- /dev/null +++ b/baseroms/gc-us-mq/checksum.md5 @@ -0,0 +1 @@ +3f0d68ac5b8a9dc3898655025db474dd build/gc-us-mq/oot-gc-us-mq.z64 diff --git a/baseroms/gc-us-mq/config.yml b/baseroms/gc-us-mq/config.yml new file mode 100644 index 0000000000..74b989ff1e --- /dev/null +++ b/baseroms/gc-us-mq/config.yml @@ -0,0 +1,1228 @@ +dmadata_start: 0x7170 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x80005FC0 + size: 0xD0 + - name: aspMainText + segment: code + vram: 0x800E3820 + size: 0xFB0 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E47D0 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E6090 + size: 0xAF0 + - name: gSoundFontTable + segment: code + vram: 0x80112C60 + size: 0x270 + - name: gSequenceFontTable + segment: code + vram: 0x80112ED0 + size: 0x1C0 + - name: gSequenceTable + segment: code + vram: 0x80113090 + size: 0x6F0 + - name: gSampleBankTable + segment: code + vram: 0x80113780 + size: 0x80 + - name: aspMainData + segment: code + vram: 0x80113800 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x80113AE0 + size: 0x1630 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x80115110 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x80115530 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x801158C0 + size: 0x60 +variables: + gMtxClear: 0x800FE280 + sJpnMessageEntryTable: 0x80109E6C + sNesMessageEntryTable: 0x8010DFAC + sStaffMessageEntryTable: 0x801121CC + gSoundFontTable: 0x80112C60 + gSequenceFontTable: 0x80112ED0 + gSequenceTable: 0x80113090 + gSampleBankTable: 0x80113780 + sShadowTex: 0x80A740B0 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEB748 + end_offset: 0xEC968 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEABD0 + end_offset: 0xEACA0 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEACA0 + end_offset: 0xEB630 +- 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_v3_mq.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.xml + start_offset: 0x6E0 + end_offset: 0x4088 +- 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_mq.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_mq.xml +- name: scenes/dungeons/ddan + xml_path: assets/xml/scenes/dungeons/ddan_mq.xml +- name: scenes/dungeons/ddan_boss + xml_path: assets/xml/scenes/dungeons/ddan_boss.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_mq.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_mq.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_mq.xml +- name: scenes/dungeons/HIDAN + xml_path: assets/xml/scenes/dungeons/HIDAN_mq.xml +- name: scenes/dungeons/ice_doukutu + xml_path: assets/xml/scenes/dungeons/ice_doukutu_mq.xml +- name: scenes/dungeons/jyasinboss + xml_path: assets/xml/scenes/dungeons/jyasinboss.xml +- name: scenes/dungeons/jyasinzou + xml_path: assets/xml/scenes/dungeons/jyasinzou_mq.xml +- name: scenes/dungeons/men + xml_path: assets/xml/scenes/dungeons/men_mq.xml +- name: scenes/dungeons/MIZUsin + xml_path: assets/xml/scenes/dungeons/MIZUsin_mq.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_mq.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.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_v2.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.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/gc-us-mq/segments.csv b/baseroms/gc-us-mq/segments.csv new file mode 100644 index 0000000000..0d2cfff4bc --- /dev/null +++ b/baseroms/gc-us-mq/segments.csv @@ -0,0 +1,1510 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +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,80010EE0 +ovl_title,80800000 +ovl_select,80800850 +ovl_opening,808034D0 +ovl_file_choose,80803630 +ovl_kaleido_scope,808135B0 +ovl_player_actor,8082FDA0 +ovl_map_mark_data,80856580 +ovl_En_Test,8085D060 +ovl_Arms_Hook,80862910 +ovl_Arrow_Fire,80863680 +ovl_Arrow_Ice,80865560 +ovl_Arrow_Light,80867460 +ovl_Bg_Bdan_Objects,80869370 +ovl_Bg_Bdan_Switch,8086A640 +ovl_Bg_Bom_Guard,8086BA70 +ovl_Bg_Bombwall,8086BC90 +ovl_Bg_Bowl_Wall,8086C550 +ovl_Bg_Breakwall,8086CED0 +ovl_Bg_Ddan_Jd,8086DD40 +ovl_Bg_Ddan_Kd,8086E390 +ovl_Bg_Dodoago,8086EC80 +ovl_Bg_Dy_Yoseizo,8086FA30 +ovl_Bg_Ganon_Otyuka,80872820 +ovl_Bg_Gate_Shutter,80874E60 +ovl_Bg_Gjyo_Bridge,808752F0 +ovl_Bg_Gnd_Darkmeiro,808757E0 +ovl_Bg_Gnd_Firemeiro,80875FA0 +ovl_Bg_Gnd_Iceblock,808764F0 +ovl_Bg_Gnd_Nisekabe,808775F0 +ovl_Bg_Gnd_Soulmeiro,80877760 +ovl_Bg_Haka,80877FC0 +ovl_Bg_Haka_Gate,80878680 +ovl_Bg_Haka_Huta,80879720 +ovl_Bg_Haka_Megane,8087A1C0 +ovl_Bg_Haka_MeganeBG,8087A5C0 +ovl_Bg_Haka_Sgami,8087AC80 +ovl_Bg_Haka_Ship,8087B8A0 +ovl_Bg_Haka_Trap,8087C2F0 +ovl_Bg_Haka_Tubo,8087D8C0 +ovl_Bg_Haka_Water,8087E2E0 +ovl_Bg_Haka_Zou,8087EAE0 +ovl_Bg_Heavy_Block,8087FCD0 +ovl_Bg_Hidan_Curtain,808815C0 +ovl_Bg_Hidan_Dalm,80882060 +ovl_Bg_Hidan_Firewall,808828B0 +ovl_Bg_Hidan_Fslift,80883010 +ovl_Bg_Hidan_Fwbig,808834E0 +ovl_Bg_Hidan_Hamstep,808841C0 +ovl_Bg_Hidan_Hrock,80885070 +ovl_Bg_Hidan_Kousi,808858A0 +ovl_Bg_Hidan_Kowarerukabe,80885E30 +ovl_Bg_Hidan_Rock,80886D10 +ovl_Bg_Hidan_Rsekizou,80887E10 +ovl_Bg_Hidan_Sekizou,808889F0 +ovl_Bg_Hidan_Sima,80889E40 +ovl_Bg_Hidan_Syoku,8088AD40 +ovl_Bg_Ice_Objects,8088B1A0 +ovl_Bg_Ice_Shelter,8088C0E0 +ovl_Bg_Ice_Shutter,8088D320 +ovl_Bg_Ice_Turara,8088D790 +ovl_Bg_Ingate,8088DFC0 +ovl_Bg_Jya_1flift,8088E350 +ovl_Bg_Jya_Amishutter,8088E9E0 +ovl_Bg_Jya_Bigmirror,8088ED70 +ovl_Bg_Jya_Block,8088F5C0 +ovl_Bg_Jya_Bombchuiwa,8088F830 +ovl_Bg_Jya_Bombiwa,80890370 +ovl_Bg_Jya_Cobra,80890930 +ovl_Bg_Jya_Goroiwa,80892670 +ovl_Bg_Jya_Haheniron,80892DF0 +ovl_Bg_Jya_Ironobj,808935E0 +ovl_Bg_Jya_Kanaami,80894390 +ovl_Bg_Jya_Lift,80894740 +ovl_Bg_Jya_Megami,80894C90 +ovl_Bg_Jya_Zurerukabe,80895E80 +ovl_Bg_Menkuri_Eye,80896530 +ovl_Bg_Menkuri_Kaiten,808969D0 +ovl_Bg_Menkuri_Nisekabe,80896B60 +ovl_Bg_Mizu_Bwall,80896CB0 +ovl_Bg_Mizu_Movebg,80898180 +ovl_Bg_Mizu_Shutter,80899310 +ovl_Bg_Mizu_Uzu,80899B10 +ovl_Bg_Mizu_Water,80899CE0 +ovl_Bg_Mjin,8089A9B0 +ovl_Bg_Mori_Bigst,8089ADA0 +ovl_Bg_Mori_Elevator,8089B6D0 +ovl_Bg_Mori_Hashigo,8089C1C0 +ovl_Bg_Mori_Hashira4,8089CA80 +ovl_Bg_Mori_Hineri,8089D010 +ovl_Bg_Mori_Idomizu,8089DD60 +ovl_Bg_Mori_Kaitenkabe,8089E3A0 +ovl_Bg_Mori_Rakkatenjo,8089EA10 +ovl_Bg_Po_Event,8089F390 +ovl_Bg_Po_Syokudai,808A11D0 +ovl_Bg_Pushbox,808A1B40 +ovl_Bg_Relay_Objects,808A1E40 +ovl_Bg_Spot00_Break,808A25F0 +ovl_Bg_Spot00_Hanebasi,808A2790 +ovl_Bg_Spot01_Fusya,808A38A0 +ovl_Bg_Spot01_Idohashira,808A3B40 +ovl_Bg_Spot01_Idomizu,808A4740 +ovl_Bg_Spot01_Idosoko,808A4A60 +ovl_Bg_Spot01_Objects2,808A4C70 +ovl_Bg_Spot02_Objects,808A5130 +ovl_Bg_Spot03_Taki,808A6490 +ovl_Bg_Spot05_Soko,808A6DB0 +ovl_Bg_Spot06_Objects,808A70D0 +ovl_Bg_Spot07_Taki,808A84D0 +ovl_Bg_Spot08_Bakudankabe,808A8AC0 +ovl_Bg_Spot08_Iceblock,808A9160 +ovl_Bg_Spot09_Obj,808AA1A0 +ovl_Bg_Spot11_Bakudankabe,808AA6C0 +ovl_Bg_Spot11_Oasis,808AAD00 +ovl_Bg_Spot12_Gate,808AB430 +ovl_Bg_Spot12_Saku,808AB840 +ovl_Bg_Spot15_Rrbox,808ABD00 +ovl_Bg_Spot15_Saku,808ACAE0 +ovl_Bg_Spot16_Bombstone,808ACE20 +ovl_Bg_Spot16_Doughnut,808AE370 +ovl_Bg_Spot17_Bakudankabe,808AE930 +ovl_Bg_Spot17_Funen,808AF020 +ovl_Bg_Spot18_Basket,808AF270 +ovl_Bg_Spot18_Futa,808B0260 +ovl_Bg_Spot18_Obj,808B0400 +ovl_Bg_Spot18_Shutter,808B0CD0 +ovl_Bg_Sst_Floor,808B1220 +ovl_Bg_Toki_Hikari,808B1780 +ovl_Bg_Toki_Swd,808B2520 +ovl_Bg_Treemouth,808B3B70 +ovl_Bg_Umajump,808B51D0 +ovl_Bg_Vb_Sima,808B5360 +ovl_Bg_Ydan_Hasi,808B5A80 +ovl_Bg_Ydan_Maruta,808B6230 +ovl_Bg_Ydan_Sp,808B6910 +ovl_Bg_Zg,808B8030 +ovl_Boss_Dodongo,808B8480 +ovl_Boss_Fd,808C1F80 +ovl_Boss_Fd2,808C92E0 +ovl_Boss_Ganon,808CD010 +ovl_Boss_Ganon2,808F2E40 +ovl_Boss_Ganondrof,80905CB0 +ovl_Boss_Goma,8090AA40 +ovl_Boss_Mo,809109E0 +ovl_Boss_Sst,80920FC0 +ovl_Boss_Tw,8092D590 +ovl_Boss_Va,80943160 +ovl_Demo_6K,8095A3F0 +ovl_Demo_Du,8095D150 +ovl_Demo_Ec,80960930 +ovl_Demo_Effect,80964190 +ovl_Demo_Ext,80969D30 +ovl_Demo_Geff,8096A680 +ovl_Demo_Gj,8096AEA0 +ovl_Demo_Go,8096EB50 +ovl_Demo_Gt,8096F8A0 +ovl_Demo_Ik,80974EB0 +ovl_Demo_Im,809763C0 +ovl_Demo_Kankyo,8097A330 +ovl_Demo_Kekkai,8097E020 +ovl_Demo_Sa,8097F310 +ovl_Demo_Shd,80981E30 +ovl_Demo_Tre_Lgt,80984240 +ovl_Door_Ana,80984950 +ovl_Door_Gerudo,80984FC0 +ovl_Door_Killer,809855B0 +ovl_Door_Shutter,80986B20 +ovl_Door_Toki,80988DE0 +ovl_Door_Warp1,80988F40 +ovl_Efc_Erupc,8098D250 +ovl_Eff_Dust,8098DD40 +ovl_Effect_Ss_Blast,8098F110 +ovl_Effect_Ss_Bomb,8098F4A0 +ovl_Effect_Ss_Bomb2,8098F8D0 +ovl_Effect_Ss_Bubble,809901D0 +ovl_Effect_Ss_D_Fire,80990650 +ovl_Effect_Ss_Dead_Db,80990B40 +ovl_Effect_Ss_Dead_Dd,80991020 +ovl_Effect_Ss_Dead_Ds,809915B0 +ovl_Effect_Ss_Dead_Sound,80991A30 +ovl_Effect_Ss_Dt_Bubble,80991B70 +ovl_Effect_Ss_Dust,80992100 +ovl_Effect_Ss_En_Fire,80992940 +ovl_Effect_Ss_En_Ice,80993090 +ovl_Effect_Ss_Extra,80993950 +ovl_Effect_Ss_Fcircle,80993D10 +ovl_Effect_Ss_Fhg_Flash,809941C0 +ovl_Effect_Ss_Fire_Tail,80995140 +ovl_Effect_Ss_G_Fire,80995840 +ovl_Effect_Ss_G_Magma,80995AD0 +ovl_Effect_Ss_G_Magma2,80995D30 +ovl_Effect_Ss_G_Ripple,80996240 +ovl_Effect_Ss_G_Spk,809967A0 +ovl_Effect_Ss_G_Splash,80996D50 +ovl_Effect_Ss_Hahen,80997200 +ovl_Effect_Ss_HitMark,80997840 +ovl_Effect_Ss_Ice_Piece,80997D90 +ovl_Effect_Ss_Ice_Smoke,809981D0 +ovl_Effect_Ss_K_Fire,809986B0 +ovl_Effect_Ss_Kakera,80998AF0 +ovl_Effect_Ss_KiraKira,80999B80 +ovl_Effect_Ss_Lightning,8099A1F0 +ovl_Effect_Ss_Sibuki,8099A8C0 +ovl_Effect_Ss_Sibuki2,8099AF90 +ovl_Effect_Ss_Solder_Srch_Ball,8099B2C0 +ovl_Effect_Ss_Stick,8099B470 +ovl_Effect_Ss_Stone1,8099B810 +ovl_Elf_Msg,8099BB90 +ovl_Elf_Msg2,8099C180 +ovl_En_Am,8099C5F0 +ovl_En_Ani,8099E9F0 +ovl_En_Anubice,8099F760 +ovl_En_Anubice_Fire,809A0A10 +ovl_En_Anubice_Tag,809A17D0 +ovl_En_Arow_Trap,809A1AA0 +ovl_En_Arrow,809A1BF0 +ovl_En_Attack_Niw,809A32F0 +ovl_En_Ba,809A4550 +ovl_En_Bb,809A6420 +ovl_En_Bdfire,809AA100 +ovl_En_Bigokuta,809AACA0 +ovl_En_Bili,809AD7A0 +ovl_En_Bird,809AFA70 +ovl_En_Blkobj,809AFF30 +ovl_En_Bom,809B0490 +ovl_En_Bom_Bowl_Man,809B1360 +ovl_En_Bom_Bowl_Pit,809B28A0 +ovl_En_Bom_Chu,809B3210 +ovl_En_Bombf,809B48B0 +ovl_En_Boom,809B5D40 +ovl_En_Box,809B6610 +ovl_En_Brob,809B8170 +ovl_En_Bubble,809B9260 +ovl_En_Butte,809BA680 +ovl_En_Bw,809BBC50 +ovl_En_Bx,809BEFE0 +ovl_En_Changer,809BFAE0 +ovl_En_Clear_Tag,809C04C0 +ovl_En_Cow,809CBA60 +ovl_En_Crow,809CCEC0 +ovl_En_Cs,809CE560 +ovl_En_Daiku,809CF790 +ovl_En_Daiku_Kakariko,809D0ED0 +ovl_En_Dekubaba,809D2290 +ovl_En_Dekunuts,809D5D40 +ovl_En_Dh,809D7540 +ovl_En_Dha,809D9020 +ovl_En_Diving_Game,809DA020 +ovl_En_Dns,809DB9D0 +ovl_En_Dnt_Demo,809DCD60 +ovl_En_Dnt_Jiji,809DDA80 +ovl_En_Dnt_Nomal,809DEFA0 +ovl_En_Dodojr,809E1DA0 +ovl_En_Dodongo,809E3C40 +ovl_En_Dog,809E69E0 +ovl_En_Door,809E7B90 +ovl_En_Ds,809E89D0 +ovl_En_Du,809E95F0 +ovl_En_Dy_Extra,809EB080 +ovl_En_Eg,809EB620 +ovl_En_Eiyer,809EB7D0 +ovl_En_Elf,809ED430 +ovl_En_Encount1,809F1DF0 +ovl_En_Encount2,809F2950 +ovl_En_Ex_Item,809F3B80 +ovl_En_Ex_Ruppy,809F4D00 +ovl_En_Fd,809F5DC0 +ovl_En_Fd_Fire,809F8A60 +ovl_En_Fhg_Fire,809F9770 +ovl_En_Fire_Rock,809FBE10 +ovl_En_Firefly,809FCF20 +ovl_En_Fish,809FF090 +ovl_En_Floormas,80A011A0 +ovl_En_Fr,80A04580 +ovl_En_Fu,80A07010 +ovl_En_Fw,80A07D60 +ovl_En_Fz,80A09520 +ovl_En_G_Switch,80A0B530 +ovl_En_Ganon_Mant,80A0CD50 +ovl_En_Ganon_Organ,80A10F80 +ovl_En_Gb,80A17FC0 +ovl_En_Ge1,80A196F0 +ovl_En_Ge2,80A1B720 +ovl_En_Ge3,80A1D0C0 +ovl_En_GeldB,80A1DD00 +ovl_En_GirlA,80A230B0 +ovl_En_Gm,80A259D0 +ovl_En_Go,80A26700 +ovl_En_Go2,80A2AD40 +ovl_En_Goma,80A30D80 +ovl_En_Goroiwa,80A33A30 +ovl_En_Gs,80A35DF0 +ovl_En_Guest,80A37C60 +ovl_En_Hata,80A38600 +ovl_En_Heishi1,80A38B90 +ovl_En_Heishi2,80A3A0A0 +ovl_En_Heishi3,80A3C2A0 +ovl_En_Heishi4,80A3CC70 +ovl_En_Hintnuts,80A3DB70 +ovl_En_Holl,80A3F5A0 +ovl_En_Honotrap,80A40570 +ovl_En_Horse,80A41AD0 +ovl_En_Horse_Game_Check,80A4DD30 +ovl_En_Horse_Ganon,80A4EE00 +ovl_En_Horse_Link_Child,80A4FB80 +ovl_En_Horse_Normal,80A51980 +ovl_En_Horse_Zelda,80A53FA0 +ovl_En_Hs,80A54A90 +ovl_En_Hs2,80A55630 +ovl_En_Hy,80A55C10 +ovl_En_Ice_Hono,80A59550 +ovl_En_Ik,80A5A740 +ovl_En_In,80A5EDA0 +ovl_En_Insect,80A61B40 +ovl_En_Ishi,80A64060 +ovl_En_It,80A6D1B0 +ovl_En_Jj,80A6D340 +ovl_En_Js,80A6E910 +ovl_En_Jsjutan,80A6F2E0 +ovl_En_Kakasi,80A74C10 +ovl_En_Kakasi2,80A75950 +ovl_En_Kakasi3,80A76070 +ovl_En_Kanban,80A77150 +ovl_En_Karebaba,80A7A2A0 +ovl_En_Ko,80A7BB90 +ovl_En_Kusa,80A7FCD0 +ovl_En_Kz,80A811B0 +ovl_En_Light,80A82750 +ovl_En_Lightbox,80A83550 +ovl_En_M_Fire1,80A839D0 +ovl_En_M_Thunder,80A83B70 +ovl_En_Ma1,80A85170 +ovl_En_Ma2,80A86450 +ovl_En_Ma3,80A874B0 +ovl_En_Mag,80A88460 +ovl_En_Mb,80A8AEB0 +ovl_En_Md,80A8F0E0 +ovl_En_Mk,80A91750 +ovl_En_Mm,80A925E0 +ovl_En_Mm2,80A93C40 +ovl_En_Ms,80A94A00 +ovl_En_Mu,80A950F0 +ovl_En_Nb,80A95A10 +ovl_En_Niw,80A99FE0 +ovl_En_Niw_Girl,80A9D310 +ovl_En_Niw_Lady,80A9DDE0 +ovl_En_Nutsball,80A9F6E0 +ovl_En_Nwc,80A9FD00 +ovl_En_Ny,80AA0720 +ovl_En_OE2,80AA2060 +ovl_En_Okarina_Effect,80AA2140 +ovl_En_Okarina_Tag,80AA2500 +ovl_En_Okuta,80AA3A00 +ovl_En_Ossan,80AA5FE0 +ovl_En_Owl,80AAC5C0 +ovl_En_Part,80AB0160 +ovl_En_Peehat,80AB17C0 +ovl_En_Po_Desert,80AB4EC0 +ovl_En_Po_Field,80AB5C80 +ovl_En_Po_Relay,80AB9710 +ovl_En_Po_Sisters,80ABAE20 +ovl_En_Poh,80ABFB10 +ovl_En_Pu_box,80AC3D00 +ovl_En_Rd,80AC4040 +ovl_En_Reeba,80AC6900 +ovl_En_River_Sound,80AC8370 +ovl_En_Rl,80AC8D00 +ovl_En_Rr,80AC9BE0 +ovl_En_Ru1,80ACC110 +ovl_En_Ru2,80AD37B0 +ovl_En_Sa,80AD6530 +ovl_En_Sb,80AD87A0 +ovl_En_Scene_Change,80AD9BE0 +ovl_En_Sda,80AD9D10 +ovl_En_Shopnuts,80ADB400 +ovl_En_Si,80ADC310 +ovl_En_Siofuki,80ADC810 +ovl_En_Skb,80ADD5C0 +ovl_En_Skj,80ADEEB0 +ovl_En_Skjneedle,80AE2800 +ovl_En_Ssh,80AE2B10 +ovl_En_St,80AE5100 +ovl_En_Sth,80AE7D70 +ovl_En_Stream,80AEBE30 +ovl_En_Sw,80AEC3C0 +ovl_En_Syateki_Itm,80AEFBB0 +ovl_En_Syateki_Man,80AF0950 +ovl_En_Syateki_Niw,80AF1710 +ovl_En_Ta,80AF37A0 +ovl_En_Takara_Man,80AF7160 +ovl_En_Tana,80AF7A20 +ovl_En_Tg,80AF7CD0 +ovl_En_Tite,80AF83B0 +ovl_En_Tk,80AFB150 +ovl_En_Torch,80AFCF80 +ovl_En_Torch2,80AFD070 +ovl_En_Toryo,80AFF810 +ovl_En_Tp,80B004A0 +ovl_En_Tr,80B02310 +ovl_En_Trap,80B03C10 +ovl_En_Tubo_Trap,80B04EB0 +ovl_En_Vali,80B05B50 +ovl_En_Vase,80B08210 +ovl_En_Vb_Ball,80B08310 +ovl_En_Viewer,80B094C0 +ovl_En_Vm,80B0C380 +ovl_En_Wall_Tubo,80B0DC40 +ovl_En_Wallmas,80B0E130 +ovl_En_Weather_Tag,80B0FB40 +ovl_En_Weiyer,80B10A30 +ovl_En_Wf,80B12430 +ovl_En_Wonder_Item,80B16740 +ovl_En_Wonder_Talk,80B17470 +ovl_En_Wonder_Talk2,80B17B00 +ovl_En_Wood02,80B181A0 +ovl_En_Xc,80B19380 +ovl_En_Yabusame_Mark,80B1FB10 +ovl_En_Yukabyun,80B201E0 +ovl_En_Zf,80B207F0 +ovl_En_Zl1,80B272E0 +ovl_En_Zl2,80B2B0F0 +ovl_En_Zl3,80B2F7F0 +ovl_En_Zl4,80B37640 +ovl_En_Zo,80B3C070 +ovl_En_fHG,80B3E630 +ovl_End_Title,80B40F60 +ovl_Fishing,80B45080 +ovl_Item_B_Heart,80B5FC20 +ovl_Item_Etcetera,80B60030 +ovl_Item_Inbox,80B60900 +ovl_Item_Ocarina,80B60A60 +ovl_Item_Shield,80B61230 +ovl_Magic_Dark,80B61C40 +ovl_Magic_Fire,80B63490 +ovl_Magic_Wind,80B65790 +ovl_Mir_Ray,80B67490 +ovl_Obj_Bean,80B68D40 +ovl_Obj_Blockstop,80B6B4D0 +ovl_Obj_Bombiwa,80B6B670 +ovl_Obj_Comb,80B6BBE0 +ovl_Obj_Dekujr,80B6C440 +ovl_Obj_Elevator,80B6CA80 +ovl_Obj_Hamishi,80B6CE40 +ovl_Obj_Hana,80B6D690 +ovl_Obj_Hsblock,80B6D9A0 +ovl_Obj_Ice_Poly,80B6DF70 +ovl_Obj_Kibako,80B6E920 +ovl_Obj_Kibako2,80B6F620 +ovl_Obj_Lift,80B6FCE0 +ovl_Obj_Lightswitch,80B70700 +ovl_Obj_Makekinsuta,80B71B30 +ovl_Obj_Makeoshihiki,80B71C80 +ovl_Obj_Mure,80B72110 +ovl_Obj_Mure2,80B73120 +ovl_Obj_Mure3,80B73B40 +ovl_Obj_Oshihiki,80B74310 +ovl_Obj_Roomtimer,80B75DC0 +ovl_Obj_Switch,80B76010 +ovl_Obj_Syokudai,80B77DF0 +ovl_Obj_Timeblock,80B78A40 +ovl_Obj_Tsubo,80B79690 +ovl_Obj_Warp2block,80B7A680 +ovl_Object_Kankyo,80B7B1B0 +ovl_Oceff_Spot,80B7E430 +ovl_Oceff_Storm,80B7F360 +ovl_Oceff_Wipe,80B80F10 +ovl_Oceff_Wipe2,80B81C90 +ovl_Oceff_Wipe3,80B83400 +ovl_Oceff_Wipe4,80B84B50 +ovl_Shot_Sun,80B85B30 +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/gc-us/config.yml b/baseroms/gc-us/config.yml index 54498f9a20..d4102a9208 100644 --- a/baseroms/gc-us/config.yml +++ b/baseroms/gc-us/config.yml @@ -62,6 +62,10 @@ variables: sJpnMessageEntryTable: 0x80109E8C sNesMessageEntryTable: 0x8010DFCC sStaffMessageEntryTable: 0x801121EC + gSoundFontTable: 0x80112C80 + gSequenceFontTable: 0x80112EF0 + gSequenceTable: 0x801130B0 + gSampleBankTable: 0x801137A0 sShadowTex: 0x80A74130 assets: - name: code/fbdemo_circle @@ -525,7 +529,7 @@ assets: - name: objects/object_ma2 xml_path: assets/xml/objects/object_ma2.xml - name: objects/object_mag - xml_path: assets/xml/objects/object_mag.xml + xml_path: assets/xml/objects/object_mag_v3.xml - name: objects/object_mamenoki xml_path: assets/xml/objects/object_mamenoki.xml - name: objects/object_mastergolon @@ -936,8 +940,8 @@ assets: end_offset: 0x4088 - name: overlays/ovl_file_choose xml_path: assets/xml/overlays/ovl_file_choose.xml - start_offset: 0xD740 - end_offset: 0xDF80 + start_offset: 0xEC40 + end_offset: 0xF320 - name: overlays/ovl_Magic_Dark xml_path: assets/xml/overlays/ovl_Magic_Dark.xml start_offset: 0xC90 @@ -1211,7 +1215,7 @@ assets: - 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.xml + xml_path: assets/xml/textures/nes_font_static_v2.xml - name: textures/nintendo_rogo_static xml_path: assets/xml/textures/nintendo_rogo_static.xml - name: textures/parameter_static diff --git a/baseroms/ntsc-1.2/checksum-compressed.md5 b/baseroms/ntsc-1.2/checksum-compressed.md5 new file mode 100644 index 0000000000..66fb4932a4 --- /dev/null +++ b/baseroms/ntsc-1.2/checksum-compressed.md5 @@ -0,0 +1 @@ +2258052847bdd056c8406a9ef6427f13 build/ntsc-1.2/oot-ntsc-1.2-compressed.z64 diff --git a/baseroms/ntsc-1.2/checksum.md5 b/baseroms/ntsc-1.2/checksum.md5 new file mode 100644 index 0000000000..8dec1a19ac --- /dev/null +++ b/baseroms/ntsc-1.2/checksum.md5 @@ -0,0 +1 @@ +48b3e547359f21bb7e123fb362c1dd4e build/ntsc-1.2/oot-ntsc-1.2.z64 diff --git a/baseroms/ntsc-1.2/config.yml b/baseroms/ntsc-1.2/config.yml new file mode 100644 index 0000000000..5a0765a700 --- /dev/null +++ b/baseroms/ntsc-1.2/config.yml @@ -0,0 +1,1228 @@ +dmadata_start: 0x7960 +text_lang_pal: false +incbins: + - name: ipl3 + segment: makerom + vram: 0x80000040 + size: 0xFC0 + - name: rspbootText + segment: boot + vram: 0x800065C0 + size: 0xD0 + - name: aspMainText + segment: code + vram: 0x800E3600 + size: 0xFB0 + - name: gspS2DEX2d_fifoText + segment: code + vram: 0x800E45B0 + size: 0x18C0 + - name: njpgdspMainText + segment: code + vram: 0x800E5E70 + size: 0xAF0 + - name: gSoundFontTable + segment: code + vram: 0x80113DF0 + size: 0x270 + - name: gSequenceFontTable + segment: code + vram: 0x80114060 + size: 0x1C0 + - name: gSequenceTable + segment: code + vram: 0x80114220 + size: 0x6F0 + - name: gSampleBankTable + segment: code + vram: 0x80114910 + size: 0x80 + - name: aspMainData + segment: code + vram: 0x80114990 + size: 0x2E0 + - name: gspF3DZEX2_NoN_PosLight_fifoText + segment: code + vram: 0x80114C70 + size: 0x1630 + - name: gspF3DZEX2_NoN_PosLight_fifoData + segment: code + vram: 0x801162A0 + size: 0x420 + - name: gspS2DEX2d_fifoData + segment: code + vram: 0x801166C0 + size: 0x390 + - name: njpgdspMainData + segment: code + vram: 0x80116A50 + size: 0x60 +variables: + gMtxClear: 0x800FF3F0 + sJpnMessageEntryTable: 0x8010AFFC + sNesMessageEntryTable: 0x8010F13C + sStaffMessageEntryTable: 0x8011335C + gSoundFontTable: 0x80113DF0 + gSequenceFontTable: 0x80114060 + gSequenceTable: 0x80114220 + gSampleBankTable: 0x80114910 + sShadowTex: 0x80AE0FE0 +assets: +- name: code/fbdemo_circle + xml_path: assets/xml/code/fbdemo_circle.xml + start_offset: 0xEC0B8 + end_offset: 0xED2D8 +- name: code/fbdemo_triforce + xml_path: assets/xml/code/fbdemo_triforce.xml + start_offset: 0xEB540 + end_offset: 0xEB610 +- name: code/fbdemo_wipe1 + xml_path: assets/xml/code/fbdemo_wipe1.xml + start_offset: 0xEB610 + end_offset: 0xEBFA0 +- 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.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: 0x960 + end_offset: 0x1D80 +- name: overlays/ovl_Arrow_Ice + xml_path: assets/xml/overlays/ovl_Arrow_Ice.xml + start_offset: 0x980 + end_offset: 0x1DA0 +- name: overlays/ovl_Arrow_Light + xml_path: assets/xml/overlays/ovl_Arrow_Light.xml + start_offset: 0x990 + end_offset: 0x1DB0 +- name: overlays/ovl_Bg_Ganon_Otyuka + xml_path: assets/xml/overlays/ovl_Bg_Ganon_Otyuka.xml + start_offset: 0x1110 + end_offset: 0x24EC +- name: overlays/ovl_Bg_Jya_Cobra + xml_path: assets/xml/overlays/ovl_Bg_Jya_Cobra.xml + start_offset: 0x1830 + end_offset: 0x18A8 +- name: overlays/ovl_Boss_Dodongo + xml_path: assets/xml/overlays/ovl_Boss_Dodongo.xml + start_offset: 0x61C8 + end_offset: 0x91C8 +- name: overlays/ovl_Boss_Ganon + xml_path: assets/xml/overlays/ovl_Boss_Ganon.xml + start_offset: 0xE388 + end_offset: 0x20EA8 +- name: overlays/ovl_Boss_Ganon2 + xml_path: assets/xml/overlays/ovl_Boss_Ganon2.xml + start_offset: 0x9F38 + end_offset: 0x103E8 +- name: overlays/ovl_Boss_Sst + xml_path: assets/xml/overlays/ovl_Boss_Sst.xml + start_offset: 0xA370 + end_offset: 0xAD20 +- 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: 0x11E8 + end_offset: 0x40E8 +- name: overlays/ovl_En_Ganon_Organ + xml_path: assets/xml/overlays/ovl_En_Ganon_Organ.xml + start_offset: 0x328 + end_offset: 0x6EB0 +- 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: 0x12B8 + end_offset: 0x4C50 +- 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: 0x14A8 + end_offset: 0x1538 +- 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: 0xE60 + end_offset: 0x3E34 +- name: overlays/ovl_End_Title + xml_path: assets/xml/overlays/ovl_End_Title.xml + start_offset: 0x6F0 + end_offset: 0x4098 +- name: overlays/ovl_file_choose + xml_path: assets/xml/overlays/ovl_file_choose.xml + start_offset: 0xEC50 + end_offset: 0xF330 +- 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: 0xB20 + end_offset: 0x2170 +- 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: 0x740 + end_offset: 0x1AD0 +- name: overlays/ovl_Oceff_Wipe + xml_path: assets/xml/overlays/ovl_Oceff_Wipe.xml + start_offset: 0x4F0 + end_offset: 0xCB0 +- 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.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.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.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.xml +- name: textures/nintendo_rogo_static + xml_path: assets/xml/textures/nintendo_rogo_static.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/ntsc-1.2/segments.csv b/baseroms/ntsc-1.2/segments.csv new file mode 100644 index 0000000000..7bee5f379c --- /dev/null +++ b/baseroms/ntsc-1.2/segments.csv @@ -0,0 +1,1511 @@ +Name,VRAM start +makerom,80000000 +boot,80000460 +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_i_static, +map_48x85_static, +code,800116E0 +n64dd,801C7740 +ovl_title,80800000 +ovl_select,808009C0 +ovl_opening,80803720 +ovl_file_choose,80803880 +ovl_kaleido_scope,808137C0 +ovl_player_actor,808301C0 +ovl_map_mark_data,80856900 +ovl_En_Test,8085D460 +ovl_En_GirlA,80862D10 +ovl_En_Part,80865630 +ovl_En_Light,80866C40 +ovl_En_Door,80867A30 +ovl_En_Box,80868870 +ovl_En_Poh,8086A3B0 +ovl_En_Okuta,8086E540 +ovl_En_Bom,80870B20 +ovl_En_Wallmas,808719F0 +ovl_En_Dodongo,80873400 +ovl_En_Firefly,808761A0 +ovl_En_Horse,80878310 +ovl_En_Arrow,80884570 +ovl_En_Elf,80885C60 +ovl_En_Niw,8088A620 +ovl_En_Tite,8088D950 +ovl_En_Reeba,808906F0 +ovl_En_Peehat,80892160 +ovl_En_Holl,80895860 +ovl_En_Scene_Change,80896830 +ovl_En_Zf,80896960 +ovl_En_Hata,8089D460 +ovl_Boss_Dodongo,8089D9F0 +ovl_Boss_Goma,808A74D0 +ovl_En_Zl1,808AD450 +ovl_En_Viewer,808B1250 +ovl_En_Goma,808B4120 +ovl_Bg_Pushbox,808B6DB0 +ovl_En_Bubble,808B70B0 +ovl_Door_Shutter,808B84D0 +ovl_En_Dodojr,808BA750 +ovl_En_Bdfire,808BC5F0 +ovl_En_Boom,808BD180 +ovl_En_Torch2,808BDA40 +ovl_En_Bili,808C01E0 +ovl_En_Tp,808C24B0 +ovl_En_St,808C4300 +ovl_En_Bw,808C6F70 +ovl_En_Eiyer,808CA2E0 +ovl_En_River_Sound,808CBF40 +ovl_En_Horse_Normal,808CC8D0 +ovl_En_Ossan,808CEEF0 +ovl_Bg_Treemouth,808D54D0 +ovl_Bg_Dodoago,808D6B30 +ovl_Bg_Hidan_Dalm,808D78E0 +ovl_Bg_Hidan_Hrock,808D8130 +ovl_En_Horse_Ganon,808D8960 +ovl_Bg_Hidan_Rock,808D96E0 +ovl_Bg_Hidan_Rsekizou,808DA7D0 +ovl_Bg_Hidan_Sekizou,808DB3B0 +ovl_Bg_Hidan_Sima,808DC800 +ovl_Bg_Hidan_Syoku,808DD720 +ovl_En_Xc,808DDB80 +ovl_Bg_Hidan_Curtain,808E4310 +ovl_Bg_Spot00_Hanebasi,808E4DB0 +ovl_En_Mb,808E5EC0 +ovl_En_Bombf,808EA0F0 +ovl_Bg_Hidan_Firewall,808EB560 +ovl_Bg_Dy_Yoseizo,808EBCC0 +ovl_En_Zl2,808EEAC0 +ovl_Bg_Hidan_Fslift,808F31F0 +ovl_En_OE2,808F36C0 +ovl_Bg_Ydan_Hasi,808F37A0 +ovl_Bg_Ydan_Maruta,808F3F50 +ovl_Boss_Ganondrof,808F4630 +ovl_En_Am,808F93A0 +ovl_En_Dekubaba,808FB7A0 +ovl_En_M_Fire1,808FF240 +ovl_En_M_Thunder,808FF3E0 +ovl_Bg_Ddan_Jd,809009D0 +ovl_Bg_Breakwall,80901020 +ovl_En_Jj,80901E90 +ovl_En_Horse_Zelda,80903460 +ovl_Bg_Ddan_Kd,80903F50 +ovl_Door_Warp1,80904840 +ovl_Obj_Syokudai,80908AF0 +ovl_Item_B_Heart,80909730 +ovl_En_Dekunuts,80909B20 +ovl_Bg_Menkuri_Kaiten,8090B320 +ovl_Bg_Menkuri_Eye,8090B4B0 +ovl_En_Vali,8090B950 +ovl_Bg_Mizu_Movebg,8090DFF0 +ovl_Bg_Mizu_Water,8090F190 +ovl_Arms_Hook,8090FE60 +ovl_En_fHG,80910BC0 +ovl_Bg_Mori_Hineri,809134F0 +ovl_En_Bb,809141F0 +ovl_Bg_Toki_Hikari,80917EC0 +ovl_En_Yukabyun,80918C60 +ovl_Bg_Toki_Swd,80919270 +ovl_En_Fhg_Fire,8091A8C0 +ovl_Bg_Mjin,8091CEE0 +ovl_Bg_Hidan_Kousi,8091D2C0 +ovl_Door_Toki,8091D840 +ovl_Bg_Hidan_Hamstep,8091D9A0 +ovl_En_Bird,8091E850 +ovl_En_Wood02,8091ED10 +ovl_En_Lightbox,8091FEF0 +ovl_En_Pu_box,80920370 +ovl_En_Trap,809206B0 +ovl_En_Arow_Trap,80921950 +ovl_En_Vase,80921AA0 +ovl_En_Ta,80921BA0 +ovl_En_Tk,80925560 +ovl_Bg_Mori_Bigst,80927390 +ovl_Bg_Mori_Elevator,80927CC0 +ovl_Bg_Mori_Kaitenkabe,809287B0 +ovl_Bg_Mori_Rakkatenjo,80928E10 +ovl_En_Vm,80929780 +ovl_Demo_Effect,8092B030 +ovl_Demo_Kankyo,80930B20 +ovl_Bg_Hidan_Fwbig,80934820 +ovl_En_Floormas,80935500 +ovl_En_Heishi1,809388E0 +ovl_En_Rd,80939DF0 +ovl_En_Po_Sisters,8093C6A0 +ovl_Bg_Heavy_Block,80941390 +ovl_Bg_Po_Event,80942C80 +ovl_Obj_Mure,80944AC0 +ovl_En_Sw,80945AD0 +ovl_Boss_Fd,809492C0 +ovl_Object_Kankyo,809505F0 +ovl_En_Du,80953810 +ovl_En_Fd,809552B0 +ovl_En_Horse_Link_Child,80957F70 +ovl_Door_Ana,80959D70 +ovl_Bg_Spot02_Objects,8095A3E0 +ovl_Bg_Haka,8095B730 +ovl_Magic_Wind,8095BDF0 +ovl_Magic_Fire,8095DAF0 +ovl_En_Ru1,8095FDC0 +ovl_Boss_Fd2,80967460 +ovl_En_Fd_Fire,8096B190 +ovl_En_Dh,8096BEA0 +ovl_En_Dha,8096D970 +ovl_En_Rl,8096E970 +ovl_En_Encount1,8096F850 +ovl_Demo_Du,809703B0 +ovl_Demo_Im,80973B90 +ovl_Demo_Tre_Lgt,80977B00 +ovl_En_Fw,80978210 +ovl_Bg_Vb_Sima,809799C0 +ovl_En_Vb_Ball,8097A0D0 +ovl_Bg_Haka_Megane,8097B270 +ovl_Bg_Haka_MeganeBG,8097B670 +ovl_Bg_Haka_Ship,8097BD30 +ovl_Bg_Haka_Sgami,8097C770 +ovl_En_Heishi2,8097D390 +ovl_En_Encount2,8097F590 +ovl_En_Fire_Rock,809807C0 +ovl_En_Brob,809818D0 +ovl_Mir_Ray,809829C0 +ovl_Bg_Spot09_Obj,80984280 +ovl_Bg_Spot18_Obj,80984790 +ovl_Boss_Va,80985060 +ovl_Bg_Haka_Tubo,8099C250 +ovl_Bg_Haka_Trap,8099CC70 +ovl_Bg_Haka_Huta,8099E240 +ovl_Bg_Haka_Zou,8099ECE0 +ovl_Bg_Spot17_Funen,8099FED0 +ovl_En_Syateki_Itm,809A0120 +ovl_En_Syateki_Man,809A0EC0 +ovl_En_Tana,809A1C80 +ovl_En_Nb,809A1F20 +ovl_Boss_Mo,809A64F0 +ovl_En_Sb,809B65A0 +ovl_En_Bigokuta,809B79E0 +ovl_En_Karebaba,809BA4F0 +ovl_Bg_Bdan_Objects,809BBDE0 +ovl_Demo_Sa,809BD0B0 +ovl_Demo_Go,809BFBD0 +ovl_En_In,809C0930 +ovl_En_Tr,809C36D0 +ovl_Bg_Spot16_Bombstone,809C4FD0 +ovl_Bg_Hidan_Kowarerukabe,809C6510 +ovl_Bg_Bombwall,809C73E0 +ovl_En_Ru2,809C7CA0 +ovl_Obj_Dekujr,809CAA20 +ovl_Bg_Mizu_Uzu,809CB060 +ovl_Bg_Spot06_Objects,809CB230 +ovl_Bg_Ice_Objects,809CC640 +ovl_Bg_Haka_Water,809CD580 +ovl_En_Ma2,809CDD60 +ovl_En_Bom_Chu,809CEDC0 +ovl_En_Horse_Game_Check,809D0460 +ovl_Boss_Tw,809D1530 +ovl_En_Rr,809E7030 +ovl_En_Ba,809E9560 +ovl_En_Bx,809EB430 +ovl_En_Anubice,809EBF20 +ovl_En_Anubice_Fire,809ED1D0 +ovl_Bg_Mori_Hashigo,809EDF90 +ovl_Bg_Mori_Hashira4,809EE850 +ovl_Bg_Mori_Idomizu,809EEDE0 +ovl_Bg_Spot16_Doughnut,809EF420 +ovl_Bg_Bdan_Switch,809EF9D0 +ovl_En_Ma1,809F0E00 +ovl_Boss_Ganon,809F20E0 +ovl_Boss_Sst,80A17EC0 +ovl_En_Ny,80A24480 +ovl_En_Fr,80A25DB0 +ovl_Item_Shield,80A28840 +ovl_Bg_Ice_Shelter,80A29250 +ovl_En_Ice_Hono,80A2A480 +ovl_Item_Ocarina,80A2B670 +ovl_Magic_Dark,80A2BE40 +ovl_Demo_6K,80A2D690 +ovl_En_Anubice_Tag,80A303A0 +ovl_Bg_Haka_Gate,80A30670 +ovl_Bg_Spot15_Saku,80A31700 +ovl_Bg_Jya_Goroiwa,80A31A40 +ovl_Bg_Jya_Zurerukabe,80A321C0 +ovl_Bg_Jya_Cobra,80A32870 +ovl_Bg_Jya_Kanaami,80A34590 +ovl_Fishing,80A34940 +ovl_Obj_Oshihiki,80A4F3F0 +ovl_Bg_Gate_Shutter,80A50EA0 +ovl_Eff_Dust,80A51320 +ovl_Bg_Spot01_Fusya,80A52700 +ovl_Bg_Spot01_Idohashira,80A529A0 +ovl_Bg_Spot01_Idomizu,80A535A0 +ovl_Bg_Po_Syokudai,80A538B0 +ovl_Bg_Ganon_Otyuka,80A54200 +ovl_Bg_Spot15_Rrbox,80A56840 +ovl_Bg_Umajump,80A57620 +ovl_En_Insect,80A577B0 +ovl_En_Butte,80A59CD0 +ovl_En_Fish,80A5B2A0 +ovl_Bg_Spot08_Iceblock,80A5D3B0 +ovl_Item_Etcetera,80A5E3F0 +ovl_Arrow_Fire,80A5ECC0 +ovl_Arrow_Ice,80A60B80 +ovl_Arrow_Light,80A62A60 +ovl_Obj_Kibako,80A64950 +ovl_Obj_Tsubo,80A65650 +ovl_En_Wonder_Item,80A66640 +ovl_En_Ik,80A67370 +ovl_Demo_Ik,80A6B9B0 +ovl_En_Skj,80A6CEC0 +ovl_En_Skjneedle,80A70800 +ovl_En_G_Switch,80A70B10 +ovl_Demo_Ext,80A72340 +ovl_Demo_Shd,80A72C80 +ovl_En_Dns,80A75090 +ovl_Elf_Msg,80A76420 +ovl_En_Honotrap,80A76A10 +ovl_En_Tubo_Trap,80A77F60 +ovl_Obj_Ice_Poly,80A78C00 +ovl_Bg_Spot03_Taki,80A795B0 +ovl_Bg_Spot07_Taki,80A79EA0 +ovl_En_Fz,80A7A460 +ovl_En_Po_Relay,80A7C470 +ovl_Bg_Relay_Objects,80A7DB80 +ovl_En_Diving_Game,80A7E330 +ovl_En_Kusa,80A7FCE0 +ovl_Obj_Bean,80A811C0 +ovl_Obj_Bombiwa,80A83950 +ovl_Obj_Switch,80A83EC0 +ovl_Obj_Elevator,80A85C80 +ovl_Obj_Lift,80A86040 +ovl_Obj_Hsblock,80A86A60 +ovl_En_Okarina_Tag,80A87030 +ovl_En_Yabusame_Mark,80A88530 +ovl_En_Goroiwa,80A88C00 +ovl_En_Ex_Ruppy,80A8AFC0 +ovl_En_Toryo,80A8C080 +ovl_En_Daiku,80A8CD10 +ovl_En_Nwc,80A8E450 +ovl_En_Blkobj,80A8EE90 +ovl_Item_Inbox,80A8F3F0 +ovl_En_Ge1,80A8F550 +ovl_Obj_Blockstop,80A91580 +ovl_En_Sda,80A91720 +ovl_En_Clear_Tag,80A92E20 +ovl_En_Niw_Lady,80A9E3C0 +ovl_En_Gm,80A9FCC0 +ovl_En_Ms,80AA09F0 +ovl_En_Hs,80AA10E0 +ovl_Bg_Ingate,80AA1C80 +ovl_En_Kanban,80AA2010 +ovl_En_Heishi3,80AA5160 +ovl_En_Syateki_Niw,80AA5B30 +ovl_En_Attack_Niw,80AA7BC0 +ovl_Bg_Spot01_Idosoko,80AA8E20 +ovl_En_Sa,80AA9030 +ovl_En_Wonder_Talk,80AAB2A0 +ovl_Bg_Gjyo_Bridge,80AAB930 +ovl_En_Ds,80AABE30 +ovl_En_Mk,80AACA50 +ovl_En_Bom_Bowl_Man,80AAD8E0 +ovl_En_Bom_Bowl_Pit,80AAEE20 +ovl_En_Owl,80AAF790 +ovl_En_Ishi,80AB3330 +ovl_Obj_Hana,80ABC480 +ovl_Obj_Lightswitch,80ABC790 +ovl_Obj_Mure2,80ABDBC0 +ovl_En_Go,80ABE5E0 +ovl_En_Fu,80AC2C20 +ovl_En_Changer,80AC3970 +ovl_Bg_Jya_Megami,80AC4350 +ovl_Bg_Jya_Lift,80AC5530 +ovl_Bg_Jya_Bigmirror,80AC5A80 +ovl_Bg_Jya_Bombchuiwa,80AC62C0 +ovl_Bg_Jya_Amishutter,80AC6DF0 +ovl_Bg_Jya_Bombiwa,80AC7180 +ovl_Bg_Spot18_Basket,80AC7740 +ovl_En_Ganon_Organ,80AC8730 +ovl_En_Siofuki,80ACF730 +ovl_En_Stream,80AD04E0 +ovl_En_Mm,80AD0A70 +ovl_En_Ko,80AD2090 +ovl_En_Kz,80AD61D0 +ovl_En_Weather_Tag,80AD7770 +ovl_Bg_Sst_Floor,80AD8660 +ovl_En_Ani,80AD8BC0 +ovl_En_Ex_Item,80AD9930 +ovl_Bg_Jya_Ironobj,80ADAAA0 +ovl_En_Js,80ADB850 +ovl_En_Jsjutan,80ADC220 +ovl_En_Cs,80AE1B40 +ovl_En_Md,80AE2D70 +ovl_En_Hy,80AE53E0 +ovl_En_Ganon_Mant,80AE8D20 +ovl_En_Okarina_Effect,80AECF40 +ovl_En_Mag,80AED300 +ovl_Door_Gerudo,80AF2210 +ovl_Elf_Msg2,80AF2800 +ovl_Demo_Gt,80AF2C70 +ovl_En_Po_Field,80AF8270 +ovl_Efc_Erupc,80AFBCE0 +ovl_Bg_Zg,80AFC7C0 +ovl_En_Heishi4,80AFCC30 +ovl_En_Zl3,80AFDB30 +ovl_Boss_Ganon2,80B05980 +ovl_En_Kakasi,80B187A0 +ovl_En_Takara_Man,80B194E0 +ovl_Obj_Makeoshihiki,80B19DA0 +ovl_Oceff_Spot,80B1A230 +ovl_End_Title,80B1B160 +ovl_En_Torch,80B1F290 +ovl_Demo_Ec,80B1F380 +ovl_Shot_Sun,80B22BE0 +ovl_En_Dy_Extra,80B232A0 +ovl_En_Wonder_Talk2,80B23820 +ovl_En_Ge2,80B23EC0 +ovl_Obj_Roomtimer,80B25860 +ovl_En_Ssh,80B25AB0 +ovl_En_Sth,80B280A0 +ovl_Oceff_Wipe,80B2C150 +ovl_Effect_Ss_Dust,80B2CEA0 +ovl_Effect_Ss_KiraKira,80B2D6D0 +ovl_Effect_Ss_Bomb,80B2DD40 +ovl_Effect_Ss_Bomb2,80B2E160 +ovl_Effect_Ss_Blast,80B2EA90 +ovl_Effect_Ss_G_Spk,80B2EE20 +ovl_Effect_Ss_D_Fire,80B2F3D0 +ovl_Effect_Ss_Bubble,80B2F8C0 +ovl_Effect_Ss_G_Ripple,80B2FD40 +ovl_Effect_Ss_G_Splash,80B302A0 +ovl_Effect_Ss_G_Magma,80B30750 +ovl_Effect_Ss_G_Fire,80B309B0 +ovl_Effect_Ss_Lightning,80B30C40 +ovl_Effect_Ss_Dt_Bubble,80B31310 +ovl_Effect_Ss_Hahen,80B318A0 +ovl_Effect_Ss_Stick,80B31EE0 +ovl_Effect_Ss_Sibuki,80B32280 +ovl_Effect_Ss_Sibuki2,80B32950 +ovl_Effect_Ss_G_Magma2,80B32C80 +ovl_Effect_Ss_Stone1,80B33190 +ovl_Effect_Ss_HitMark,80B33520 +ovl_Effect_Ss_Fhg_Flash,80B33A70 +ovl_Effect_Ss_K_Fire,80B349F0 +ovl_Effect_Ss_Solder_Srch_Ball,80B34E20 +ovl_Effect_Ss_Kakera,80B34FD0 +ovl_Effect_Ss_Ice_Piece,80B36060 +ovl_Effect_Ss_En_Ice,80B364A0 +ovl_Effect_Ss_Fire_Tail,80B36D60 +ovl_Effect_Ss_En_Fire,80B37460 +ovl_Effect_Ss_Extra,80B37BA0 +ovl_Effect_Ss_Fcircle,80B37F60 +ovl_Effect_Ss_Dead_Db,80B38410 +ovl_Effect_Ss_Dead_Dd,80B388F0 +ovl_Effect_Ss_Dead_Ds,80B38E80 +ovl_Effect_Ss_Dead_Sound,80B39300 +ovl_Oceff_Storm,80B39440 +ovl_En_Weiyer,80B3AFE0 +ovl_Bg_Spot05_Soko,80B3C9E0 +ovl_Bg_Jya_1flift,80B3CD00 +ovl_Bg_Jya_Haheniron,80B3D390 +ovl_Bg_Spot12_Gate,80B3DB80 +ovl_Bg_Spot12_Saku,80B3DF90 +ovl_En_Hintnuts,80B3E450 +ovl_En_Nutsball,80B3FE80 +ovl_Bg_Spot00_Break,80B404A0 +ovl_En_Shopnuts,80B40640 +ovl_En_It,80B41550 +ovl_En_GeldB,80B416E0 +ovl_Oceff_Wipe2,80B46A90 +ovl_Oceff_Wipe3,80B48200 +ovl_En_Niw_Girl,80B49950 +ovl_En_Dog,80B4A420 +ovl_En_Si,80B4B5D0 +ovl_Bg_Spot01_Objects2,80B4BAD0 +ovl_Obj_Comb,80B4BF90 +ovl_Bg_Spot11_Bakudankabe,80B4C7F0 +ovl_Obj_Kibako2,80B4CE30 +ovl_En_Dnt_Demo,80B4D4F0 +ovl_En_Dnt_Jiji,80B4E210 +ovl_En_Dnt_Nomal,80B4F720 +ovl_En_Guest,80B52530 +ovl_Bg_Bom_Guard,80B52ED0 +ovl_En_Hs2,80B530F0 +ovl_Demo_Kekkai,80B536D0 +ovl_Bg_Spot08_Bakudankabe,80B549B0 +ovl_Bg_Spot17_Bakudankabe,80B55050 +ovl_Obj_Mure3,80B55730 +ovl_En_Tg,80B55F00 +ovl_En_Mu,80B565D0 +ovl_En_Go2,80B56EF0 +ovl_En_Wf,80B5CF10 +ovl_En_Skb,80B61220 +ovl_Demo_Gj,80B62B10 +ovl_Demo_Geff,80B667C0 +ovl_Bg_Gnd_Firemeiro,80B66FE0 +ovl_Bg_Gnd_Darkmeiro,80B67520 +ovl_Bg_Gnd_Soulmeiro,80B67CE0 +ovl_Bg_Gnd_Nisekabe,80B68540 +ovl_Bg_Gnd_Iceblock,80B686B0 +ovl_Bg_Ydan_Sp,80B697B0 +ovl_En_Gb,80B6AF20 +ovl_En_Gs,80B6C650 +ovl_Bg_Mizu_Bwall,80B6E4F0 +ovl_Bg_Mizu_Shutter,80B6F9C0 +ovl_En_Daiku_Kakariko,80B701C0 +ovl_Bg_Bowl_Wall,80B71580 +ovl_En_Wall_Tubo,80B71F00 +ovl_En_Po_Desert,80B723F0 +ovl_En_Crow,80B731B0 +ovl_Door_Killer,80B74850 +ovl_Bg_Spot11_Oasis,80B75DC0 +ovl_Bg_Spot18_Futa,80B764F0 +ovl_Bg_Spot18_Shutter,80B76690 +ovl_En_Ma3,80B76BE0 +ovl_En_Cow,80B77B90 +ovl_Bg_Ice_Turara,80B78FF0 +ovl_Bg_Ice_Shutter,80B79820 +ovl_En_Kakasi2,80B79C90 +ovl_En_Kakasi3,80B7A3B0 +ovl_Oceff_Wipe4,80B7B490 +ovl_En_Eg,80B7C470 +ovl_Bg_Menkuri_Nisekabe,80B7C620 +ovl_En_Zo,80B7C770 +ovl_Effect_Ss_Ice_Smoke,80B7ED20 +ovl_Obj_Makekinsuta,80B7F1E0 +ovl_En_Ge3,80B7F330 +ovl_Obj_Timeblock,80B7FE80 +ovl_Obj_Hamishi,80B80AC0 +ovl_En_Zl4,80B81310 +ovl_En_Mm2,80B85D40 +ovl_Bg_Jya_Block,80B86B00 +ovl_Obj_Warp2block,80B86D70 +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +moribossroom_scene, +moribossroom_room_0, +moribossroom_room_1, +syatekijyou_scene, +syatekijyou_room_0, +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, +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, +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, +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, +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, +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, +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, +HAKAdanCH_scene, +HAKAdanCH_room_0, +HAKAdanCH_room_1, +HAKAdanCH_room_2, +HAKAdanCH_room_3, +HAKAdanCH_room_4, +HAKAdanCH_room_5, +HAKAdanCH_room_6, +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/docs/c_cpp_properties.json b/docs/c_cpp_properties.json new file mode 100644 index 0000000000..ed8c0feaae --- /dev/null +++ b/docs/c_cpp_properties.json @@ -0,0 +1,113 @@ +{ + "configurations": [ + { + "name": "oot-gc-us", + "compilerArgs": [ + "-m32" + ], + "includePath": [ + "include", + "include/libc", + "src", + "build/gc-us", + ".", + "extracted/gc-us" + ], + "defines": [ + "_LANGUAGE_C", + "OOT_VERSION=OOT_GC_US", + "OOT_REGION=REGION_US", + "OOT_NTSC=1", + "OOT_MQ=0", + "OOT_DEBUG=0", + "NDEBUG", + "F3DEX_GBI_2", + "F3DEX_GBI_PL", + "GBI_DOWHILE" + ], + "cStandard": "gnu89" + }, + { + "name": "oot-gc-eu", + "compilerArgs": [ + "-m32" + ], + "includePath": [ + "include", + "include/libc", + "src", + "build/gc-eu", + ".", + "extracted/gc-eu" + ], + "defines": [ + "_LANGUAGE_C", + "OOT_VERSION=OOT_GC_EU", + "OOT_REGION=REGION_EU", + "OOT_PAL=1", + "OOT_MQ=0", + "OOT_DEBUG=0", + "NDEBUG", + "F3DEX_GBI_2", + "F3DEX_GBI_PL", + "GBI_DOWHILE" + ], + "cStandard": "gnu89" + }, + { + "name": "oot-gc-eu-mq", + "compilerArgs": [ + "-m32" + ], + "includePath": [ + "include", + "include/libc", + "src", + "build/gc-eu-mq", + ".", + "extracted/gc-eu-mq" + ], + "defines": [ + "_LANGUAGE_C", + "OOT_VERSION=OOT_GC_EU_MQ", + "OOT_REGION=REGION_EU", + "OOT_PAL=1", + "OOT_MQ=1", + "OOT_DEBUG=0", + "NDEBUG", + "F3DEX_GBI_2", + "F3DEX_GBI_PL", + "GBI_DOWHILE" + ], + "cStandard": "gnu89" + }, + { + "name": "oot-gc-eu-mq-dbg", + "compilerArgs": [ + "-m32" + ], + "includePath": [ + "include", + "include/libc", + "src", + "build/gc-eu-mq-dbg", + ".", + "extracted/gc-eu-mq-dbg" + ], + "defines": [ + "_LANGUAGE_C", + "OOT_VERSION=OOT_GC_EU_MQ_DBG", + "OOT_REGION=REGION_EU", + "OOT_PAL=1", + "OOT_MQ=1", + "OOT_DEBUG=1", + "F3DEX_GBI_2", + "F3DEX_GBI_PL", + "GBI_DOWHILE", + "GBI_DEBUG" + ], + "cStandard": "gnu89" + } + ], + "version": 4 +} diff --git a/docs/decompiling_tutorial.md b/docs/decompiling_tutorial.md new file mode 100644 index 0000000000..a77fb1bb8b --- /dev/null +++ b/docs/decompiling_tutorial.md @@ -0,0 +1,10 @@ +This repository used to contain a tutorial for how to do +decompilation work in the repo. + +It has been less useful as more and more was decompiled, +and also more of a chore to keep up-to-date, so it has been +removed from the repo. + +It is still interesting for historical purposes or for +curiosity, you can find the last version of it in revision +[9963e7f5d5fa8caee329f6b40e393d8a2c45390b](https://github.com/zeldaret/oot/blob/9963e7f5d5fa8caee329f6b40e393d8a2c45390b/docs/tutorial/contents.md). diff --git a/docs/retail_versions.md b/docs/retail_versions.md index 535238fd9e..b2f790b267 100644 --- a/docs/retail_versions.md +++ b/docs/retail_versions.md @@ -1,18 +1,17 @@ # Decompiling retail versions -The next decompilation target for OOT is the PAL GameCube Master Quest ROM -(`gc-eu-mq`), because it is the retail version that is most similar to the Debug -ROM. Unfortunately there are still a lot of differences, many of which are -register or stack allocation differences because retail ROMs were built with -different compiler flags. However, once this version is done, future -retail versions should be much easier, as the changes between retail versions are +The next decompilation target for OOT is NTSC version 1.2 +(`ntsc-1.2`), because it is the N64 version that is most similar to the GC +versions. Unfortunately there are still a lot of differences, +but once this version is done, future +N64 versions should be much easier, as the changes between N64 versions are small in comparison. Instead of `cp`ing a matching build into `expected/`, the target ROM is disassembled as `.s` files then -reassembled as `.o` files directly into `expected/build/gc-eu-mq` for diff tools. +reassembled as `.o` files directly into `expected/build/ntsc-1.2` for diff tools. This allows us to make progress matching code in parallel with solving other problems (such as the build system, ROM organization, and BSS ordering). The -files in `tools/disasm/gc-eu-mq` say how to split the source files and where the +files in `tools/disasm/ntsc-1.2` say how to split the source files and where the functions and variables are in the target ROM, and these may need to be updated if there are mistakes or if function names change due to documentation work. @@ -21,55 +20,44 @@ still show diffs with data symbols. We might improve this later, but these data diffs are fine to ignore for now. For register and stack allocation differences, often the code can be tweaked so -that it matches both the retail ROM while continuing to match the Debug ROM (for +that it matches both the retail ROM while continuing to match GC versions and the Debug ROM (for example, by reordering assignments or moving a local variable declaration inside -an `if` block). Since retail MM versions use the same compiler flags as retail -OOT, checking MM decomp for similar code can help. +an `if` block). Since retail MM versions currently target N64, checking MM decomp for similar code can help. -We can disable code that was removed in retail builds by adding -`#if OOT_DEBUG ... #endif` or `if (OOT_DEBUG) { ... }` around these parts of the +We can handle code that is different between versions by adding +`#if PLATFORM_N64 ... #endif` or `#if PLATFORM_GC ... #endif` around these parts of the code. In order to keep the code readable, we should try to minimize the amount of `#if` noise whenever possible. ## Setup -1. Copy your target PAL GameCube Master Quest ROM (non-debug) to - `baseroms/gc-eu-mq/baserom.z64` - -1. Extract assets and ROM files **from the Debug ROM** by running - - ```sh - make setup -jN - ``` - - if necessary, where `N` is the number of cores on your machine. +1. Copy your target JP NTSC 1.2 ROM to `baseroms/ntsc-1.2/baserom.z64` 1. Build the non-matching test ROM by running ```sh - make setup -jN VERSION=gc-eu-mq - make -jN VERSION=gc-eu-mq + make setup -jN VERSION=ntsc-1.2 + make -jN VERSION=ntsc-1.2 ``` where `N` is the number of cores on your machine. This will build into - `build/gc-eu-mq` and produce `build/gc-eu-mq/oot-gc-eu-mq.z64`. + `build/ntsc-1.2` and produce `build/ntsc-1.2/oot-ntsc-1.2.z64`. If you later want to delete all output files, run ```sh - make clean VERSION=gc-eu-mq + make clean VERSION=ntsc-1.2 ``` 1. Disassemble the target ROM by running ```sh - make disasm -jN VERSION=gc-eu-mq + make disasm VERSION=ntsc-1.2 ``` - where `N` is the number of cores on your machine. The outputs will be written to - `expected/build/gc-eu-mq`. + The outputs will be written to `expected/build/ntsc-1.2`. - Note that if you need to copy a matching build for the Debug ROM, you can use + Note that if you need to copy a matching build for another version, you can use e.g. ```sh mkdir -p expected/build @@ -90,37 +78,32 @@ source .venv/bin/activate ### retail_progress.py Running `./retail_progress.py path/to/file.c` will attempt to figure out which functions -in a file still need to match for `gc-eu-mq`. To get an overview of diffs for +in a file still need to match for `ntsc-1.2`. To get an overview of diffs for all files, run `./retail_progress.py` with no arguments. ### asm-differ / diff.py -To diff assembly for a single function in `gc-eu-mq`, run e.g. +To diff assembly for a single function in `ntsc-1.2`, run e.g. ```sh -./diff.py -mwo3 -v gc-eu-mq Math3D_CylTriVsIntersect +./diff.py -mwo3 -v ntsc-1.2 Math3D_CylTriVsIntersect ``` -The `-v` flag tells `diff.py` to compare between `build/gc-eu-mq` and -`expected/build/gc-eu-mq`, and to use `make VERSION=gc-eu-mq` when rebuilding. - -You may also want to diff the Debug ROM in another terminal with - -```sh -./diff.py -mwo3 Math3D_CylTriVsIntersect -``` +The `-v` flag tells `diff.py` to compare between `build/ntsc-1.2` and +`expected/build/ntsc-1.2`, and to use `make VERSION=ntsc-1.2` when rebuilding. +You may also want to diff versions `gc-eu-mq` and/or `gc-eu-mq-dbg` in another terminal to ensure any changes still match there. ### Permuter and decomp.me Disassembly for individual functions is written to -`expected/build/gc-eu-mq/functions`, so to get a [decomp.me](https://decomp.me/) scratch you can run +`expected/build/ntsc-1.2/functions`, so to get a [decomp.me](https://decomp.me/) scratch you can run e.g. ```sh decomp-permuter/import.py \ src/code/sys_math3d.c \ - expected/build/gc-eu-mq/functions/src/code/sys_math3d/Math3D_CylTriVsIntersect.s \ - VERSION=gc-eu-mq --decompme + expected/build/ntsc-1.2/functions/src/code/sys_math3d/Math3D_CylTriVsIntersect.s \ + VERSION=ntsc-1.2 --decompme ``` diff --git a/docs/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md deleted file mode 100644 index 149753d43b..0000000000 --- a/docs/tutorial/beginning_decomp.md +++ /dev/null @@ -1,926 +0,0 @@ -# Beginning decompilation: the Init function and the Actor struct - -Up: [Contents](contents.md) - -Open the C file and the H file with your actor's name from the appropriate directory in `src/overlays/actors/`. These will be the main files we work with. We will be using EnJj (Lord Jabu Jabu) as our example: despite being a fairly small actor, it has a number of interesting features. - -Each actor has associated to it a data file and one assembly file per function. During the process, we will transfer the contents of all or most of these into the main C file. VSCode's search feature usually makes it quite easy to find the appropriate files without troubling the directory tree. - -## Anatomy of the C file - -The actor file starts off looking like: - -![Fresh actor file annotated](images/fresh_actor_file_annotated.png) - -It is currently divided into six sections as follows: - -1. Preliminary description of the actor. This is not present for all actors, but gives a short description based on what we know about the actor already. It may be inaccurate, so feel free to correct it after you understand the actor better. - -2. Specific `include`s and `define`s for the actor. You may need to add more header files, but otherwise this section is unlikely to change. - -3. These are prototypes for the "main four" functions that almost every actor has. You add more functions here if they need to be declared above their first use. - -4. A set of `extern`s. These refer to data that comes from other files, usually in the actor's corresponding object file. They point to addresses in the ROM where assets are stored (usually collision data, animations or display lists). Once the corresponding object files have been decompiled, these will simply be replaced by including the object file (see [Object Decompilation](object_decomp.md) for how this process works). For now, you can put them between blocks 5 and 6 to conform with how the rest of our files are structured. These symbols have been automatically extracted from the MIPS code. There may turn out to be some that were not caught by the script, in which case they need to be placed in the file called `undefined_syms.txt` in the root directory of the project. Ask in Discord for how to do this: it is simple, but rare enough to not be worth covering here. - -5. Commented-out section containing the `InitVars`. This can be ignored until we import the data: it is a section of the actor data that has been imported automatically since, unlike most of the data, it has the same format in every actor. (This image is out of date: actors now also have their ColliderInits in here) - -6. List of functions. Each `#pragma` is letting the compiler use the corresponding assembly file while we do not have decompiled C code for that function. The majority of the decompilation work is converting these functions into C that it looks like a human wrote. - -## Header file - -The header file looks like this at the moment: - -![Fresh actor header](images/fresh_actor_header.png) - -The struct currently contains a variable that is the `Actor` struct, which all actors use one way or another, plus other items. Currently we don't know what those items are, so we have an array of chars as padding instead, just so the struct is the right size. As we understand the actor better, we will be able to gradually replace this padding with the actual variables that the actor uses. - -The header file is also used to declare structs and other information about the actor that is needed globally (e.g. by other actors). - -## Order of decompilation - -The general rule for order of decompilation is -- Start with `Init`, because it usually contains the most information about the structure of the actor. -- Next, decompile any other functions from the actor you have found in `Init`. You generally start with the action functions, because they return nothing and all take the same arguments, - -```C -void func_80whatever(EnJj* this, PlayState* play); -``` - -- Decompile each action function in turn until you run out. Along the way, do any other functions in the actor for which you have discovered the argument types. (You are probably better doing depth-first on action functions than breadth-first: it's normally easier to follow along one branch of the actions than ) - -- After you've run out, do `Update`. This usually provides the rest of the function tree, apart from posibly some Draw functions. - -- Finally, do the draw functions. - -The above is a rough ordering for the beginner. As you become more experienced, you can deviate from this scheme, but the general principle remains that you should work on functions that you already know something about. - -## Data - -![Fresh actor data](images/fresh_actor_data.png) - -Associated to each actor is a `.data` file, containing data that the actor uses. This ranges from spawn positions, to display lists, to even some cutscene data. Since the structure of the data is very inconsistent between actors, automatic importing has been very limited, so the vast majority must be done manually. - -There are two ways of transfering the data into an actor: we can either -- import it all naively as words (`s32`s), which will still allow it to compile, and sort out the actual types later, or -- we can extern each piece of data as we come across it, and come back to it later when we have a better idea of what it is. - -We will concentrate on the second here; the other is covered in [the document about data](data.md). Thankfully this means we essentially don't have to do anything to the data yet. Nevertheless, it is often quite helpful to copy over at least some of the data and leave it commented out for later replacement. *Data must go in the same order as in the data file, and data is "all or nothing": you cannot only import some of it*. - -![Data copied in and commented out](images/data_inserted_commented_out.png) - -**WARNING** The way in which the data was extracted from the ROM means that there are sometimes "fake symbols" in the data, which have to be removed to avoid confusing the compiler. Thankfully it will turn out that this is not the case here, although there will be other data issues. - -(Sometimes it is useful to import the data in the middle of doing functions: you just have to choose an appropriate moment.) - - -Some actors also have a `.bss` file. This is just data that is initialised to 0, and can be imported immediately once you know what type it is, by declaring it without giving it a value. - -## Init - -The Init function sets up the various components of the actor when it is first loaded. It is hence usually very useful for finding out what is in the actor struct, and so we usually start with it. (Some people like starting with Destroy, which is usually shorter and simpler, but gives some basic information about the actor, but Init is probably best for beginners.) - -### mips2c - -The first stage of decompilation is done by a program called mips2c or mips_to_c, which constructs a C interpretation of the assembly code based on reading it very literally. This means that considerable cleanup will be required to turn it into something that firstly compiles at all, and secondly looks like a human wrote it, let alone a Zelda developer from the late '90s. - -The web version of mips2c can be found [here](https://simonsoftware.se/other/mips_to_c.py). There is also a downloadable version, but let's just use the online one for now. - -Since the actor depends on the rest of the codebase, we can't expect to get much intelligible out of mips2c without giving it some context. We make this using a Python script in the `tools` directory called `m2ctx.py`, so run -``` -$ ./tools/m2ctx.py -``` -from the main directory of the repository. In this case, the C file is `src/overlays/actors/ovl_En_Jj/z_en_jj.c`. This generates a file called `ctx.c` in the main directory of the repository. Open this file in a text editor (Notepad will do) and copy the whole contents into the "Existing C source, preprocessed" box. - -![Copying the context](images/ctx.png) - -Now, open the file containing the assembly for `EnJj_Init`. - -![Copying the Init asm](images/init_asm.png) - -Copy the entire contents of this file into the upper box, labelled "MIPS assembly". Now, for Init (and also the other "main 4" functions `Destroy`, `Update` and `Draw`), the function's first argument is `Actor* thisx`. But we would like mips2c to use the fields in the actual actor struct; we can make it do this by deliberately changing the prototype of the `EnJj_Init` in the pasted context to have first argument `EnJj* this` instead. - -![Changing init prototype](images/changing_init_prototype.png) - -Now press "Decompile". This should produce C code: -```C -void EnJj_Init(EnJj *this, PlayState *play) { - CollisionHeader *sp4C; - DynaCollisionContext *sp44; - DynaCollisionContext *temp_a1; - DynaCollisionContext *temp_a1_2; - DynaCollisionContext *temp_a1_3; - char *temp_v0_2; - s16 temp_v0; - - sp4C = NULL; - Actor_ProcessInitChain((Actor *) this, &D_80A88CE0); - ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - temp_v0 = this->actor.params; - temp_a1 = this + 0x164; - [...] -``` - -Typically for all buth the simplest functions, there is a lot that needs fixing before we are anywhere near seeing how close we are to the original code. You will notice that mips2c creates a lot of temporary variables. Usually most of these will turn out to not be real, and we need to remove the right ones to get the code to match. - -First, change the first argument back to `Actor* thisx` so that the function matches its prototype above. To allow the function to find the variables, we need another correction. Half of this has already been done at the top of the function, where we have - -```C -#define THIS ((EnJj*)thisx) -``` - -To do the other half, write the following at the beginning of the function, before any declarations: - -```C -EnJj* this = THIS; -``` - -Now everything points to the right place, even though the argument of the function seems inconsistent with the contents. - -(This step is only necessary for the "main 4" functions, and sometimes functions that are used by these: it relates to how such functions are used outside the actor.) - -While we are carrying out initial changes, you can also find-and-replace any instances of `(Actor *) this` by `&this->actor`. The function now looks like this: - -
- - Large code block, click to show. - - -```C -void EnJj_Init(Actor *thisx, PlayState *play) { - EnJj* this = THIS; - - CollisionHeader *sp4C; - DynaCollisionContext *sp44; - DynaCollisionContext *temp_a1; - DynaCollisionContext *temp_a1_2; - DynaCollisionContext *temp_a1_3; - char *temp_v0_2; - s16 temp_v0; - - sp4C = NULL; - Actor_ProcessInitChain(&this->actor, &D_80A88CE0); - ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); - temp_v0 = this->actor.params; - temp_a1 = this + 0x164; - if (temp_v0 == -1) { - sp44 = temp_a1; - SkelAnime_InitFlex(play, (SkelAnime *) temp_a1, (FlexSkeletonHeader *) &D_0600B9A8, (AnimationHeader *) &D_06001F4C, this + 0x1A8, this + 0x22C, 0x16); - Animation_PlayLoop((SkelAnime *) sp44, (AnimationHeader *) &D_06001F4C); - this->unk30A = (u16)0; - this->unk30E = (u8)0; - this->unk30F = (u8)0; - this->unk310 = (u8)0; - this->unk311 = (u8)0; - if ((*(&gSaveContext + 0xEDA) & 0x400) != 0) { - func_80A87800(this, &func_80A87BEC); - } else { - func_80A87800(this, &func_80A87C30); - } - this->unk300 = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, (u16)0x5A, this->actor.world.pos.x - 10.0f, this->actor.world.pos.y, this->actor.world.pos.z, 0, (?32) this->actor.world.rot.y, 0, 0); - DynaPolyActor_Init((DynaPolyActor *) this, 0); - CollisionHeader_GetVirtual((void *) &D_06000A1C, &sp4C); - this->unk_14C = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->actor, sp4C); - temp_a1_3 = this + 0x2B0; - sp44 = temp_a1_3; - Collider_InitCylinder(play, (ColliderCylinder *) temp_a1_3); - Collider_SetCylinder(play, (ColliderCylinder *) temp_a1_3, &this->actor, &D_80A88CB4); - this->actor.colChkInfo.mass = 0xFF; - return; - } - if (temp_v0 == 0) { - DynaPolyActor_Init((DynaPolyActor *) this, 0); - CollisionHeader_GetVirtual((void *) &D_06001830, &sp4C); - temp_a1_2 = &play->colCtx.dyna; - sp44 = temp_a1_2; - temp_v0_2 = DynaPoly_SetBgActor(play, temp_a1_2, &this->actor, sp4C); - this->unk_14C = temp_v0_2; - func_8003ECA8(play, temp_a1_2, (s32) temp_v0_2); - this->actor.update = &func_80A87F44; - this->actor.draw = NULL; - Actor_SetScale(&this->actor, 0.087f); - return; - } - if (temp_v0 != 1) { - return; - } - DynaPolyActor_Init((DynaPolyActor *) this, 0); - CollisionHeader_GetVirtual((void *) &D_0600BA8C, &sp4C); - this->unk_14C = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->actor, sp4C); - this->actor.update = &func_80A87F44; - this->actor.draw = NULL; - Actor_SetScale(&this->actor, 0.087f); -} -``` - -
- -In the next sections, we shall sort out the various initialisation functions that occur in Init. There are several types, and one of the reasons we are using EnJj as the example is that it has several of the most common ones. A disadvantage of this actor is that it has an unusually complicated Init: we can see that it does three different things depending on the value of its params. - -### Init chains - -Almost always, one of the first items in `Init` is a function that looks like - -```C -Actor_ProcessInitChain(&this->actor, &D_80A88CE0); -``` - -which initialises common properties of actor using an InitChain, which is usually somewhere near the top of the data, in this case in the variable `D_80A88CE0`. Although we don't need to do this now since we we will extern the data, we might as well work out what it is now. Fortunately, we have a script to do this. - -The InitChain script is also in the tools directory, and is called `ichaindis.py`. Simply passing it the ROM address will spit out the entire contents of the InitChain, in this case: - -``` -$ ./tools/ichaindis.py baseroms/gc-eu-mq-dbg/baserom-decompressed.z64 80A88CE0 -static InitChainEntry sInitChain[] = { - ICHAIN_VEC3F_DIV1000(unk_50, 87, ICHAIN_CONTINUE), - ICHAIN_F32(unk_F4, 4000, ICHAIN_CONTINUE), - ICHAIN_F32(unk_F8, 3300, ICHAIN_CONTINUE), - ICHAIN_F32(unk_FC, 1100, ICHAIN_STOP), -}; -``` - -However, some of these variables have now been given names in the Actor struct. Pass it `--names` to fill these in automatically: -``` -$ ./tools/ichaindis.py --names baseroms/gc-eu-mq-dbg/baserom-decompressed.z64 80A88CE0 -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), -}; -``` - -Replace the commented-out .words for the `glabel D_80A88CE0` with this, and comment it out, instead adding -```C -extern InitChainEntry D_80A88CE0[]; - -``` -above it: - -```C -extern InitChainEntry D_80A88CE0[]; -// 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), -// }; -``` - -(We will come back and actually import it after doing the rest of the actor.) - -Since this is an array, we do not need the `&` in the function any more, which leaves us with -```C -Actor_ProcessInitChain(&this->actor, D_80A88CE0); -``` - -in `EnJj_Init`. - -### DynaPoly - -Glancing through the rest of `EnJj_Init`, we notice some references to DynaPoly, for example -```C -DynaPolyActor_Init((DynaPolyActor *) this, 0); -CollisionHeader_GetVirtual((void *) &D_06000A1C, &sp4C); -this->unk_14C = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->actor, sp4C); -``` - -This means that EnJj is not an ordinary actor: it is instead a DynaPoly actor. In-game this is to do with how the actor interacts with Link and the environment (a good rule of thumb is that Link can often stand on DynaPoly actors as if they were ground). For decompilation purposes, it means that the actor struct is wrong: the first element of a DynaPoly actor's struct is not an `Actor` struct, but a `DynaPolyActor`, usually called `dyna`. We should fix this immediately to avoid confusion later. (Some actors have this correctly identified already; we were unlucky with this one.) - -Since there's basically nothing in the struct at present, the change is easy to make: replace `Actor actor` with `DynaPolyActor dyna`. Now, `DynaPolyActor` is a different size to `Actor`, so we need to account for that. To find out what size it is, you need to find the definition. In VSCode you can usually Ctrl+Left Click on things to go to where they are defined. Doing so takes us to `z64actor.h`, where most actor-related structs are defined: we find -```C -typedef struct { - /* 0x000 */ Actor actor; - /* 0x14C */ u32 bgId; - /* 0x150 */ f32 unk_150; - /* 0x154 */ f32 unk_154; - /* 0x158 */ s16 unk_158; - /* 0x15A */ u16 unk_15A; - /* 0x15C */ u32 unk_15C; - /* 0x160 */ u8 unk_160; - /* 0x162 */ s16 unk_162; -} DynaPolyActor; // size = 0x164 -``` - -so a `DynaPolyActor` struct is an `Actor` with various other things after it. For now all we care about is the size, i.e. `0x164`. This tells us that the next thing after the `DynaPolyActor` struct in the `EnJj` struct begins at `0x164`, not `0x14C` as it does for `Actor`s. - -So rename the variable to `unk_164` and change the comment to say `0x0164` (the comments don't do anything, they just make it easier to keep track of where everything is when it's named). - -Next we need to adjust the size of the array so that the struct is still the right size. In this case, we just subtract the address of the padding variable from the total size of the struct: -```0x314 - 0x164 = 1B0```. Hence the struct is now -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ char unk_164[0x1B0]; -} EnJj; // size = 0x0314 -``` - -Now that we know this, it is worth remaking the context file and running mips2c again, since we have changed the struct significantly. Doing so, and replacing `(Actor*) this` with `&this->dyna.actor` this time, we find that the block we quoted above has become -```C -DynaPolyActor_Init((DynaPolyActor *) this, 0); -CollisionHeader_GetVirtual((void *) &D_06000A1C, &sp4C); -this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); -``` - -Next, replace `(DynaPolyActor *) this` by `&this->dyna`. There's not a lot more we can do to the DynaPoly stuff right now, so just remove the casts to void and move on. - -### Colliders - -The next common thing that actors have is colliders. Not every actor has these, but most do, even if they don't just use them for collision system purposes. - -The relevant functions in this actor are -```C -temp_a1_3 = this + 0x2B0; -sp44 = temp_a1_3; -Collider_InitCylinder(play, (ColliderCylinder *) temp_a1_3); -Collider_SetCylinder(play, (ColliderCylinder *) temp_a1_3, &this->dyna.actor, &D_80A88CB4); -``` - -Notice that `sp44` is set, but actually not used anywhere in the actor. This is a good indication that it is fake. We'll get back to that. Similarly, `temp_a1_3` is only used in these functions, so is likely to be fake as well: it's simply trying to get the pointer into the `a1` register. - -Since mips2c doesn't know about the collider, it has just told us where it is, namely `this + 0x2B0`. So insert a `ColliderCylinder collider` variable in the actor struct, look up its size, and redo the padding. This should give -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ char unk_164[0x14C]; - /* 0x02B0 */ ColliderCylinder collider; - /* 0x02FC */ char unk_2FC[0x18]; -} EnJj; // size = 0x0314 -``` - -Now replace the temps, so we have -```C -Collider_InitCylinder(play, &this->collider); -Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &D_80A88CB4); -``` - -(You may prefer to just comment out temps initially, to keep track of where they were.) - -The last thing we need to deal with is the last variable of `Collider_SetCylinder`, which is again data. - - - -This is already in the actor file in the correct format, all you need to do is add an extern for it underneath: -```C -/* -[...] -*/ -extern ColliderCylinderInit D_80A88CB4; -``` - -Unlike the InitChain, this is not an array, so keep the `&` in the function. - -### SkelAnime - -This is the combined system that handles actors' skeletons and their animations. It is the other significant part of most actor structs. We see its initialisation in this part of the code: -```C -temp_a1 = this->unk_164; -... -sp44 = (DynaCollisionContext *) temp_a1; -SkelAnime_InitFlex(play, (SkelAnime *) temp_a1, (FlexSkeletonHeader *) &D_0600B9A8, (AnimationHeader *) &D_06001F4C, this + 0x1A8, this + 0x22C, 0x16); -Animation_PlayLoop((SkelAnime *) sp44, (AnimationHeader *) &D_06001F4C); -``` - -(Both of the temps are likely to be fake.) - -An actor with SkelAnime has three structs in the Actor struct that handle it: one called SkelAnime, and two arrays of `Vec3s`, called `jointTable` and `overrideDrawTable` (for now). Usually, although not always, they are next to one another. - -There are two different sorts of SkelAnime, although for decompilation purposes there is not much difference between them. From `SkelAnime_InitFlex` we can read off that - -- The `SkelAnime` struct is at `this + 0x164` -- The `jointTable` is at `this + 0x1A8` -- The `overrideDrawTable` is at `this + 0x22C` -- The number of limbs is `0x16 = 22` -- Hence the `jointTable` and `overrideDrawTable` both have `22` elements - -Looking in `z64animation.h`, we find that `SkelAnime` has size `0x44`, and looking in `z64math.h`, that `Vec3s` has size `0x6`. Since ` 0x164 + 0x44 = 0x1A8 `, `jointTable` is immediately after the `SkelAnime`, and since `0x1A8 + 0x6 * 0x16 = 0x22C`, `overrideDrawTable` is immediately after the `jointTable`. Finally, `0x22C + 0x6 * 0x16 = 2B0`, and we have filled all the space between the `dyna` and `collider`. Therefore the struct now looks like -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ SkelAnime skelAnime; - /* 0x01A8 */ Vec3s jointTable[22]; - /* 0x022C */ Vec3s overrideDrawTable[22]; - /* 0x02B0 */ ColliderCylinder collider; - /* 0x02FC */ char unk_2FC[0x18]; -} EnJj; // size = 0x0314 -``` - -The last information we get from the SkelAnime functions is the types of two of the externed symbols: `D_0600B9A8` is a `FlexSkeletonHeader`, and `D_06001F4C` is an `AnimationHeader`. So we can change these in the C file: - -```C -extern UNK_TYPE D_06000A1C; -extern UNK_TYPE D_06001830; -extern AnimationHeader D_06001F4C; -extern FlexSkeletonHeader D_0600B9A8; -extern UNK_TYPE D_0600BA8C; -``` - -and removing the temps, -```C -SkelAnime_InitFlex(play, &this->skelAnime, &D_0600B9A8, &D_06001F4C, this->jointTable, this->morphTable, 22); -Animation_PlayLoop(&this->skelAnime, &D_06001F4C); -``` - -### More struct variables - -This function also gives us information about other things in the struct. One obvious thing that sticks out is -```C -this->unk300 = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, (u16)0x5A, this->dyna.actor.world.pos.x - 10.0f, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, (?32) this->dyna.actor.world.rot.y, 0, 0); -``` -Hovering over this function tells us it outputs a pointer to the spawned actor, so `this->unk_300` is an `Actor*`. We may or may not care what this actor actually is, depending on how it is used later on, so let's just add `/* 0x0300 */ Actor* childActor` to the struct for now. - -We can look up what the actor with ID 0x5A is in `z64actor.h`: we find it is `ACTOR_EN_JJ`. So some Jabus spawn another Jabu. Filling this in and removing the spurious cast, we have -```C -this->childActor = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_JJ, this->dyna.actor.world.pos.x - 10.0f, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, this->dyna.actor.world.rot.y, 0, 0); -``` - -Finally, we have this block: -```C -this->unk30A = (u16)0; -this->unk30E = (u8)0; -this->unk30F = (u8)0; -this->unk310 = (u8)0; -this->unk311 = (u8)0; -``` -This is not quite as helpful as you might think: it tells us the size of these variables, but despite mips2c's assertion that they are all unsigned, they may actually be signed: you can't tell from the MIPS unless they are loaded: there is only `sh`, but there are both `lh` and `lhu`, for example. There's not much to choose between them when guessing, but generally signed is a better guess with no other context. For unnamed struct variables, our convention is `unk_30A` etc. Adding them to the struct, we end up with -
- - Large code block, click to show. - - -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ SkelAnime skelAnime; - /* 0x01A8 */ Vec3s jointTable[22]; - /* 0x022C */ Vec3s morphTable[22]; - /* 0x02B0 */ ColliderCylinder collider; - /* 0x02FC */ char unk_2FC[0x4]; - /* 0x0300 */ Actor* childActor; - /* 0x0304 */ char unk_304[0x6]; - /* 0x030A */ s16 unk_30A; - /* 0x030C */ char unk_30C[0x2]; - /* 0x030E */ s8 unk_30E; - /* 0x030F */ s8 unk_30F; - /* 0x0310 */ s8 unk_310; - /* 0x0311 */ s8 unk_311; - /* 0x0312 */ char unk_312[0x2]; -} EnJj; // size = 0x0314 -``` - -We can remove a few more temps that don't look real, and end up with -```C -void EnJj_Init(Actor *thisx, PlayState *play) { - EnJj* this = THIS; - - CollisionHeader *sp4C; - // DynaCollisionContext *sp44; - // DynaCollisionContext *temp_a1_2; - // DynaCollisionContext *temp_a1_3; - // char *temp_a1; - s16 temp_v0; - // u32 temp_v0_2; - - sp4C = NULL; - Actor_ProcessInitChain(&this->dyna.actor, D_80A88CE0); - ActorShape_Init(&this->dyna.actor.shape, 0.0f, NULL, 0.0f); - temp_v0 = this->dyna.actor.params; - // temp_a1 = this->unk_164; - if (temp_v0 == -1) { - // sp44 = (DynaCollisionContext *) temp_a1; - SkelAnime_InitFlex(play, &this->skelAnime, &D_0600B9A8, &D_06001F4C, this->jointTable, this->morphTable, 22); - Animation_PlayLoop(&this->skelAnime, &D_06001F4C); - this->unk_30A = 0; - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 0; - this->unk_311 = 0; - if ((*(&gSaveContext + 0xEDA) & 0x400) != 0) { - func_80A87800(this, &func_80A87BEC); - } else { - func_80A87800(this, &func_80A87C30); - } - this->childActor = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_JJ, this->dyna.actor.world.pos.x - 10.0f, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, this->dyna.actor.world.rot.y, 0, 0); - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06000A1C, &sp4C); - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - // temp_a1_3 = this + 0x2B0; - // sp44 = temp_a1_3; - Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &D_80A88CB4); - this->dyna.actor.colChkInfo.mass = 0xFF; - return; - } - if (temp_v0 == 0) { - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06001830, &sp4C); - // temp_a1_2 = &play->colCtx.dyna; - // sp44 = temp_a1_2; - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - func_8003ECA8(play, &play->colCtx.dyna, this->dyna.bgId); - this->dyna.actor.update = &func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); - return; - } - if (temp_v0 != 1) { - return; - } - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_0600BA8C, &sp4C); - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - this->dyna.actor.update = &func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); -} -``` -
- -This will still not compile without errors: we need to know what the functions it calls are. - -### Functions called - -Function pointers do not need `&`, so remove all those. There are three functions that are called in this actor. Firstly, `this->dyna.actor.update = func_80A87F44;` tells us that `func_80A87F44` is an alternative update function for this actor. We therefore give it a prototype similar to the original Update: -```C -void EnJj_Init(Actor* thisx, PlayState* play); -void EnJj_Destroy(Actor* thisx, PlayState* play); -void EnJj_Update(Actor* thisx, PlayState* play); -void EnJj_Draw(Actor* thisx, PlayState* play); - -void func_80A87F44(Actor* thisx, PlayState* play); -``` - -Unfortunately the others are not so easy to deal with. In order to find out what type the functions called by `func_80A87800`, we have to look at `func_80A87800` itself. But fortunately, this is the entire MIPS for `func_80A87800`: - -```MIPS -glabel func_80A87800 -/* 00000 80A87800 03E00008 */ jr $ra -/* 00004 80A87804 AC8502FC */ sw $a1, 0x02FC($a0) ## 000002FC -``` - -This is simple enough to read that we don't even need to appeal to mips2c: it saves its second argument into its first argument `+ 0x2FC`. Many actors use this type of function, which we call `SetupAction`: it simply changes the action function. - -*Action functions* are the main other kind of function in most actors: they are usually run by Update every frame, and carry out the main actions that the actor does (hence the name). They all have the same arguments, and so we have a typedef for such things: it is -```C -typedef void (*EnJjActionFunc)(struct EnJj*, PlayState*); -``` -Put this between `struct EnJj;` and the actor struct in the header file. This also gives us another bit of the struct, conveniently plugging the gap at `0x2FC`: -```C -/* 0x02FC */ EnJjActionFunc actionFunc; -``` - -We have actually learnt three useful pieces of information from this, the other two being that the function above Init is simply -```C -void func_80A87800(EnJj* this, EnJjActionFunc actionFunc) { - this->actionFunc = actionFunc; -} -``` - -and that `func_80A87BEC` and `func_80A87C30`, passed to it in `EnJj_Init`, are action functions. Since they are first used above where they are defined, we prototype them at the top as well, -```C -void EnJj_Init(Actor* thisx, PlayState* play); -void EnJj_Destroy(Actor* thisx, PlayState* play); -void EnJj_Update(Actor* thisx, PlayState* play); -void EnJj_Draw(Actor* thisx, PlayState* play); - -void func_80A87F44(Actor* thisx, PlayState* play); -void func_80A87BEC(EnJj* this, PlayState* play); -void func_80A87C30(EnJj* this, PlayState* play); -``` - - -### Other pointer issues - -Mips2c is bad at arrays. We see this in the `(*(&gSaveContext + 0xEDA) & 0x400) != 0`, which will actually stop the compiler working. We need to go and look up what this is actually pointing to, and replace it in the code. Following the trail, we find that: - -1. `gSaveContext` is of type `SaveContext` -2. The struct `SaveContext` is defined in `z64save.h` -3. The entry in `SaveContext` that contains `0xEDA` is `/* 0x0ED4 */ u16 eventChkInf[14];` -4. Since `0xEDA - 0xED4 = 0x6`, and `u16`s take up 2 bytes each, we conclude that it is `eventChkInf[3]` that is being referenced. - -Therefore, the condition should be `(gSaveContext.save.info.eventChkInf[3] & 0x400) != 0`. This is a flag comparison, so we can also leave off the `!= 0`. - -With all of this implemented, the function should now compile without errors. The parts of the file that we have changed now look like - -
- - Large code block, click to show. - - -```C -void EnJj_Init(Actor* thisx, PlayState* play); -void EnJj_Destroy(Actor* thisx, PlayState* play); -void EnJj_Update(Actor* thisx, PlayState* play); -void EnJj_Draw(Actor* thisx, PlayState* play); - -void func_80A87F44(Actor* thisx, PlayState* play); -void func_80A87BEC(EnJj* this, PlayState* play); -void func_80A87C30(EnJj* this, PlayState* play); - -#if 0 -ActorInit En_Jj_InitVars = { - /**/ ACTOR_EN_JJ, - /**/ ACTORTYPE_ITEMACTION, - /**/ FLAGS, - /**/ OBJECT_JJ, - /**/ sizeof(EnJj), - /**/ EnJj_Init, - /**/ EnJj_Destroy, - /**/ EnJj_Update, - /**/ EnJj_Draw, -}; -#endif - -extern ColliderCylinderInit D_80A88CB4; -// static ColliderCylinderInit sCylinderInit = { -// { -// COLTYPE_NONE, -// AT_NONE, -// AC_ON | AC_TYPE_PLAYER, -// OC1_ON | OC1_TYPE_ALL, -// OC2_TYPE_1, -// COLSHAPE_CYLINDER, -// }, -// { -// ELEMTYPE_UNK0, -// { 0x00000000, 0x00, 0x00 }, -// { 0x00000004, 0x00, 0x00 }, -// ATELEM_NONE, -// ACELEM_ON, -// OCELEM_ON, -// }, -// { 170, 150, 0, { 0, 0, 0 } }, -// }; - -extern InitChainEntry D_80A88CE0[]; -// 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), -// }; - -// glabel D_80A88CF0 -// .word 0xC4C6A000, 0x42540000, 0xC22C0000 -// glabel D_80A88CFC -// .word 0x06007698, 0x06007A98, 0x06007E98, 0x00000000, 0x00000000 - - -extern UNK_TYPE D_06000A1C; -extern UNK_TYPE D_06001830; -extern AnimationHeader D_06001F4C; -extern FlexSkeletonHeader D_0600B9A8; -extern UNK_TYPE D_0600BA8C; - -// #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87800.s") -void func_80A87800(EnJj* this, EnJjActionFunc actionFunc) { - this->actionFunc = actionFunc; -} - -// #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/EnJj_Init.s") -void EnJj_Init(Actor *thisx, PlayState *play) { - EnJj* this = THIS; - - CollisionHeader *sp4C; - // DynaCollisionContext *sp44; - // DynaCollisionContext *temp_a1_2; - // DynaCollisionContext *temp_a1_3; - // char *temp_a1; - s16 temp_v0; - // u32 temp_v0_2; - - sp4C = NULL; - Actor_ProcessInitChain(&this->dyna.actor, D_80A88CE0); - ActorShape_Init(&this->dyna.actor.shape, 0.0f, NULL, 0.0f); - temp_v0 = this->dyna.actor.params; - // temp_a1 = this->unk_164; - if (temp_v0 == -1) { - // sp44 = (DynaCollisionContext *) temp_a1; - SkelAnime_InitFlex(play, &this->skelAnime, &D_0600B9A8, &D_06001F4C, this->jointTable, this->morphTable, 22); - Animation_PlayLoop(&this->skelAnime, &D_06001F4C); - this->unk_30A = 0; - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 0; - this->unk_311 = 0; - if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) { - func_80A87800(this, func_80A87BEC); - } else { - func_80A87800(this, func_80A87C30); - } - this->childActor = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_JJ, this->dyna.actor.world.pos.x - 10.0f, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, this->dyna.actor.world.rot.y, 0, 0); - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06000A1C, &sp4C); - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - // temp_a1_3 = this + 0x2B0; - // sp44 = temp_a1_3; - Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &D_80A88CB4); - this->dyna.actor.colChkInfo.mass = 0xFF; - return; - } - if (temp_v0 == 0) { - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06001830, &sp4C); - // temp_a1_2 = &play->colCtx.dyna; - // sp44 = temp_a1_2; - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - func_8003ECA8(play, &play->colCtx.dyna, this->dyna.bgId); - this->dyna.actor.update = func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); - return; - } - if (temp_v0 != 1) { - return; - } - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_0600BA8C, &sp4C); - this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - this->dyna.actor.update = func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); -} -``` -
- -## Diff - -Once preliminary cleanup and struct filling is done, most time spent matching functions is done by comparing the original code with the code you have compiled. This is aided by a program called `diff.py`. - -In order to use `diff.py` with the symbol names, we need a copy of the code to compare against. This is done by copying the `build` directory into a directory called `expected`. Copying in Windows on WSL is very slow, so run -``` -$ mkdir expected -cp -r build expected/ -``` -from the main directory of the repository. You should end up with the directory structure `expected/build/...`. - -You may want to do this again when you start renaming functions. *Make sure that you copy an OK build, or you are going to get very confused.* You should also do this again after needing to do a `make clean`. - -Now, we run diff on the function name: in the main directory, -``` -$ ./diff.py -mwo3 EnJj_Init -``` - -(To see what these arguments do, run it with `./diff.py -h` or look in the scripts documentation.) - -This gives the following: - -
- - Large image, click to show. - - -![Init diff 1](images/init_diff1.png) -
- -The code we want is on the left, current code on the right. To spot where the function ends, either look for where stuff is added and subtracted from the stack pointer in successive lines, or for a -```MIPS -jr ra -nop -``` - -The colours mean the following: - -- White/gray is matching lines -- Red is lines missing -- Green is extra lines -- Blue denotes significant differences in instructions, be they just numerical ones, or whole instructions -- Yellow/Gold denotes that instructions are correct but register usage is wrong -- Other colors are used to distinguish incorrectly used registers or stack variables, to make it easy to follow where they are used. -- The colored arrows denote branching. An arrow of one color on the right leads to the arrow of the same color on the left. - -Obviously we want to make the whole thing white. This is the tricky bit: you have to have the imagination to try different things until you get the diff to match. You learn these with experience. - -Generally, the order of what to fix should be: - -1. Control flow (conditionals, where branches go) -2. Instruction ordering and type (functions cannot change order, which is a useful indicator) -3. Regalloc (register allocation) differences -4. Stack differences - -(It is this order because the things that happen earlier can influence the things that happen later.) - -You can keep the diff open in the terminal, and it will refresh when the C file (but not the H file) is changed with these settings. - -In this case, we see that various branches are happening in the wrong place. Here I fear experience is necessary: notice that the function has three blocks that look quite similar, and three separate conditionals that depend on the same variable. This is a good indicator of a switch. Changing the function to use a switch, - -```C -void EnJj_Init(Actor* thisx, PlayState* play) { - EnJj* this = THIS; - - s32 sp4C; - s16 temp_v0; - - sp4C = 0; - Actor_ProcessInitChain(&this->dyna.actor, D_80A88CE0); - ActorShape_Init(&this->dyna.actor.shape, 0.0f, NULL, 0.0f); - temp_v0 = this->dyna.actor.params; - - switch (temp_v0) { - case -1: - SkelAnime_InitFlex(play, &this->skelAnime, &D_0600B9A8, &D_06001F4C, this->jointTable, - this->morphTable, 22); - Animation_PlayLoop(&this->skelAnime, &D_06001F4C); - this->unk_30A = 0; - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 0; - this->unk_311 = 0; - if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) { - func_80A87800(this, func_80A87BEC); - } else { - func_80A87800(this, func_80A87C30); - } - this->childActor = Actor_SpawnAsChild( - &play->actorCtx, &this->dyna.actor, play, ACTOR_EN_JJ, this->dyna.actor.world.pos.x - 10.0f, - this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, this->dyna.actor.world.rot.y, 0, 0); - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06000A1C, &sp4C); - this->dyna.bgId = - DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &D_80A88CB4); - this->dyna.actor.colChkInfo.mass = 0xFF; - break; - case 0: - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_06001830, &sp4C); - // temp_a1_2 = &play->colCtx.dyna; - // sp44 = temp_a1_2; - this->dyna.bgId = - DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - func_8003ECA8(play, &play->colCtx.dyna, this->dyna.bgId); - this->dyna.actor.update = func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); - break; - case 1: - DynaPolyActor_Init(&this->dyna, 0); - CollisionHeader_GetVirtual(&D_0600BA8C, &sp4C); - this->dyna.bgId = - DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp4C); - this->dyna.actor.update = func_80A87F44; - this->dyna.actor.draw = NULL; - Actor_SetScale(&this->dyna.actor, 0.087f); - break; - } -} -``` - -we see that the diff is nearly correct (note that `-3` lets you compare current with previous): - -
- - Large image, click to show. - - -![Init diff 2](images/init_diff2.png) -
- -except we still have some stack issues. Now that `temp_v0` is only used once, it looks fake. Eliminating it actually seems to make the stack worse. To fix this, we employ something that we have evidence that the developers did: namely, we make a copy of `play` (the theory is that they actually used `gameState` as an argument of the main 4 functions, just like we used `Actor* thisx` as the first argument.) The quick way to do this is to change the top of the function to -```C -void EnJj_Init(Actor* thisx, PlayState* play2) { - PlayState* play = play2; - EnJj* this = THIS; - ... -``` - -It turns out that this is enough to completely fix the diff: - -![Init diff 2](images/init_diff3top.png) -(last two edits, only top shown for brevity) - -Everything *looks* fine, but we only know for sure when we run `make`. Thankfully doing so gives -``` -oot-gc-eu-mq-dbg.z64: OK -``` - -which is either a sense of triumph or relief depending on how long you've spent on a function. - -And with that, we have successfully matched our first function. (Or first two counting `func_80A87800`) - -**N.B** Notice that we don't yet have much idea of what this code actually does: this should be clarified by going through the rest of the actor's functions, which is discussed in the next document. - -Next: [Other functions in the actor](other_functions.md) diff --git a/docs/tutorial/contents.md b/docs/tutorial/contents.md deleted file mode 100644 index c3279a437a..0000000000 --- a/docs/tutorial/contents.md +++ /dev/null @@ -1,62 +0,0 @@ -# Getting started - -## [Introduction to decomp](introduction.md) -- What we are doing -- Structure of the code - -## Pre-decompilation -- Building the repo (follow the instructions in the README.md) -- Most of us use VSCode. (You can watch Fig's video to get an idea of how this can be used). Some useful information is [here](../vscode.md). -- Choosing a first actor (You want something small that has simple interactions with the environment. But OoT is far enough in that there are basically no unreserved actors left anyway now.) - -## Decompilation - -- [Begining decompilation: order, Init and the actor struct](beginning_decomp.md) - - Order of decompilation - - Init and common actor features - - Initchains - - Actors and dynapoly actors - - Colliders - - Skelanime - - - Matching - - Using diff - - control flow (branches) -> instruction ordering -> register allocation -> stack - -- [The rest of the functions in the actor](other_functions.md) - - Order of decompilation - - Action Functions and other functions - - - More on matching: the permuter - -- [Draw functions](draw_functions.md) - -- [Data, migration and non-migration](data.md) - - Importing the data: early and late - - Fake symbols - - Inlining - -## [Object Decompilation](object_decomp.md) -- Object files -- How we decompile objects -- [Example](object_decomp_example.md) - - -## After Decompilation - -- [Preparing to merge](merging.md) - - Preliminary documentation - - Preparing to PR - - Pull Requests - - Trello - -## Appendices -- [Types, Structs and Padding](types_structs_padding.md) (a miscellany of useful stuff) -- [Helper scripts](helper_scripts.md) - -To be written, maybe - -- How we use git and GitHub -- Some notes on the basic structure of N64 MIPS -- Glossary -- Conventions diff --git a/docs/tutorial/data.md b/docs/tutorial/data.md deleted file mode 100644 index bc3bf07659..0000000000 --- a/docs/tutorial/data.md +++ /dev/null @@ -1,648 +0,0 @@ -# Data - -## Table of Contents - -- [Data first](#data-first) - * [Example: `EnTg`](#example-entg) -- [Extern and data last](#extern-and-data-last) -- [Fake symbols](#fake-symbols) -- [Inlining](#inlining) - -Each actor's data is stored in a separate file. EnJj's data is in `data/overlays/actors/z_en_jj.data.s`, for example. At some point in the decompilation process we need to convert this raw data into recognisable information for the C to use. - -There are two main ways to do this: either -1. import the data first and type it later, or -2. wait until the data appears in functions, extern it, then import it at the end - -Sometimes something between these two is appropriate: wait until the largest or strangest bits of data appear in functions, get some typing information out of that, and then import it, but for now, let's stick to both of these. - -Both approaches have their advantages and disadvantages. - -## Data first - - -This way is good for smaller actors with little data. It is not really suitable for EnJj, for example, because of the enormous section of data labelled as `D_80A88164`. - -### Example: `EnTg` - -We give a simple example of this approach with a small NPC actor, EnTg, that is, the spinning couple. - -The data file looks like - -
- -Large code block, click to show - - -``` -.include "macro.inc" - - /* assembler directives */ - .set noat /* allow manual use of $at */ - .set noreorder /* don't insert nops after branches */ - .set gp=64 /* allow use of 64-bit general purpose registers */ - -.section .data - -.balign 16 - -glabel D_80B18910 - .word 0x0A000039, 0x20010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00140040, 0x00000000, 0x00000000 -glabel D_80B1893C - .word 0x00000000, 0x00000000, 0xFF000000 -glabel En_Tg_InitVars - .word 0x01AC0400, 0x00000009, 0x01820000, 0x0000020C -.word EnTg_Init -.word EnTg_Destroy -.word EnTg_Update -.word EnTg_Draw -glabel D_80B18968 - .word 0x00000000, 0x44480000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 - - -``` - -
- -We transfer this data into the actor file by pretending it is an array of words. The InitVars have already been processed and inserted into the C file, so just need to be uncommented. Data cannot change order, so the two pieces above the InitVars must stay there. At the end of this process, the top of the file will look like - -
- -Large code block, click to show - - -```C -/* - * File: z_en_tg.c - * Overlay: ovl_En_Tg - * Description: Honey & Darling - */ - -#include "z_en_tg.h" - -#define FLAGS 0x00000009 - -#define THIS ((EnTg*)thisx) - -void EnTg_Init(Actor* thisx, PlayState* play); -void EnTg_Destroy(Actor* thisx, PlayState* play); -void EnTg_Update(Actor* thisx, PlayState* play); -void EnTg_Draw(Actor* thisx, PlayState* play); - -s32 D_80B18910[] = { 0x0A000039, 0x20010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00140040, 0x00000000, 0x00000000 }; - -s32 D_80B1893C[] = { 0x00000000, 0x00000000, 0xFF000000 }; - -ActorInit En_Tg_InitVars = { - /**/ ACTOR_EN_TG, - /**/ ACTORTYPE_NPC, - /**/ FLAGS, - /**/ OBJECT_MU, - /**/ sizeof(EnTg), - /**/ EnTg_Init, - /**/ EnTg_Destroy, - /**/ EnTg_Update, - /**/ EnTg_Draw, -}; - -s32 D_80B18968[] = { 0x00000000, 0x44480000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; - -extern UNK_TYPE D_06005040; -extern UNK_TYPE D_0600AE40; - -``` - -
- -Now, open the file called `spec` in the base directory, find the section corresponding to EnTg: -``` -beginseg - name "ovl_En_Tg" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Tg/z_en_tg.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_tg.data.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_tg.reloc.o" -endseg -``` -and comment out the .data line, -``` -beginseg - name "ovl_En_Tg" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Tg/z_en_tg.o" - //include "$(BUILD_DIR)/data/overlays/actors/z_en_tg.data.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_tg.reloc.o" -endseg -``` -to tell the compiler not to look for the data in that file any more. Now run `make -j`, and if you did both steps correctly, you should get `OK`. - -Now carry out the usual steps to decompile `Init`. The usual cleanup and struct population gets us to -```C -void EnTg_Init(Actor *thisx, PlayState *play) { - EnTg *this = THIS; - - ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFunc_Circle, 28.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &D_0600AE40, &D_06005040, 0, 0, 0); - Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->actor, (ColliderCylinderInit *) D_80B18910); - func_80061EFC(&this->actor.colChkInfo, NULL, (CollisionCheckInfoInit2 *) D_80B1893C); - this->actor.unk_1F = 6; - Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = func_80B185C0; - this->unk_208 = play->state.frames & 1; -} -``` -and it remains to deal with the data. mips2c has told us what the types should be. We run `colliderinit` on `D_80B18910` as usual, which gives -``` -$ ./tools/overlayhelpers/colliderinit.py 80B18910 ColliderCylinderInit -ovl_En_Tg: Rom 00ECE1F0:00ECE910 VRam 80B18360:80B18A80 Offset 0005B0 - -static ColliderCylinderInit sCylinderInit = -{ - { COLTYPE_UNK10, 0x00, 0x00, 0x39, 0x20, COLSHAPE_CYLINDER }, - { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, 0x00, 0x00, 0x01 }, - { 20, 64, 0, { 0, 0, 0 } }, -}; -``` - -Copy this in below `D_80B18910`, delete the original words of data, change the name back to `D_80B18910`, and put `sCylinderInit` commented out above it: -```C -// sCylinderInit -static ColliderCylinderInit D_80B18910 = -{ - { COLTYPE_UNK10, 0x00, 0x00, 0x39, 0x20, COLSHAPE_CYLINDER }, - { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, 0x00, 0x00, 0x01 }, - { 20, 64, 0, { 0, 0, 0 } }, -}; -``` - -For the `CollisionCheckInfoInit2`, we don't have a script to separate it, but you can look in other files to see that it should be separated as -```C -// sColChkInit -CollisionCheckInfoInit2 D_80B1893C = { 0, 0, 0, 0, 0xFF }; -``` - -One more thing needs to change: since both are no longer arrays, we need to make the uses in the functions pointers: -```C -Collider_SetCylinder(play, &this->collider, &this->actor, &D_80B18910); -func_80061EFC(&this->actor.colChkInfo, NULL, &D_80B1893C); -``` - -A quick check of the diff shows that we just need to put the action function set to last, and it matches. - -Following the function tree as usual, we find the only other place any data is used is in `func_80B1871C`. From its use in `EnTg_Draw`, we realise that this is a `PostLimbDraw` function. Giving mips2c the correct prototype, it comes out as -```C -void func_80B1871C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) { - ? sp18; - - sp18.unk0 = (s32) D_80B18968->unk0; - sp18.unk4 = (s32) D_80B18968[1]; - sp18.unk8 = (s32) D_80B18968[2]; - if (limbIndex == 9) { - Matrix_MultVec3f((Vec3f *) &sp18, thisx + 0x38); - } -} -``` -which clearly doesn't like the words we fed it. We see that `sp18` should be a `Vec3f` from the cast in the `Matrix_MultVec3f`, so the last three words are padding (a `Vec3f` has size `0xC`, and it's not using it like an array), and we can convert it to -```C -Vec3f D_80B18968 = { 0.0f, 800.0f, 0.0f }; -``` -and the function matches as -```C -void func_80B1871C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) { - EnTg* this = THIS; - - Vec3f sp18 = D_80B18968; - - if (limbIndex == 9) { - Matrix_MultVec3f(&sp18, &this->actor.world2.pos); - } -} -``` -(we can see from the assembly doing `lw` and `sw` rather than `lwc1` and `swc1` that it is doing a struct copy, rather than setting it componentwise). - - -## Extern and data last - -Externing is explained in detail in the document about the [Init function](beginning_decomp.md). To summarize, every time a `D_address` appears that is in the data file, we put a -```C -extern UNK_TYPE D_address; -``` -at the top of the file, in the same order that the data appears in the data file. We can also give it a type if we know what the type actually is (e.g. for colliders, initchains, etc.), and convert the actual data and place it commented-out under the corresponding line. This means we don't have to do everything at once at the end. - -Once we have decompiled enough things to know what the data is, we can import it. The advantage of doing it this way is we should know what type everything is already: in our work on EnJj, for example, we ended up with the following data at the top of the file -```C -extern UNK_TYPE D_80A88164; - -extern ColliderCylinderInit D_80A88CB4; -// static ColliderCylinderInit sCylinderInit = -// { -// { COLTYPE_UNK10, 0x00, 0x09, 0x39, 0x10, COLSHAPE_CYLINDER }, -// { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000004, 0x00, 0x00 }, 0x00, 0x01, 0x01 }, -// { 170, 150, 0, { 0, 0, 0 } }, -// }; - -extern InitChainEntry D_80A88CE0[]; -// 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), -// }; - -extern Vec3f D_80A88CF0; -// static Vec3f D_80A88CF0 = { -1589.0f, 53.0f, -43.0f }; - -extern Gfx* D_80A88CFC[]; -// static Gfx* D_80A88CFC[] = { 0x06007698, 0x06007A98, 0x06007E98, } -``` -and the only thing we don't know about is the cutscene data `D_80A88164`. - -*Before doing anything else, make sure `make` gives `OK`.* - -First, we tell the compiler to ignore the original data file. To do this, open the file called `spec` in the main directory of the repository, and search for the actor name. You will find a section that looks like -``` -beginseg - name "ovl_En_Jj" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Jj/z_en_jj.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.data.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.reloc.o" -endseg -``` -We will eventually remove both of the bottom two lines and replace them with our own reloc file, but for now, just comment out the data line: -``` -beginseg - name "ovl_En_Jj" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Jj/z_en_jj.o" - //include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.data.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.reloc.o" -endseg -``` - -Next remove all the externs, and uncomment their corresponding commented data: -```C -extern UNK_TYPE D_80A88164; - -static ColliderCylinderInit sCylinderInit = -{ - { COLTYPE_UNK10, 0x00, 0x09, 0x39, 0x10, COLSHAPE_CYLINDER }, - { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000004, 0x00, 0x00 }, 0x00, 0x01, 0x01 }, - { 170, 150, 0, { 0, 0, 0 } }, -}; - -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), -}; - -static Vec3f D_80A88CF0 = { -1589.0f, 53.0f, -43.0f }; - -static Gfx* D_80A88CFC[] = { 0x06007698, 0x06007A98, 0x06007E98, } -``` -Find-and-replace `D_80A88CB4` and `D_80A88CE0` by `sCylinderInit` and `sInitChain` respectively. Notice the naming scheme: static data symbols always start with `s` in our style. (Unless they are inlined, but we'll worry about that later.) - -We still need to deal with the cutscene data. This is special: because it's so large, it goes in its own file. Make a new file called `z_en_jj_cutscene_data.c` in the same directory as `z_en_jj.c`. Include the actor's header file and `z64cutscene_commands.h`, and put `// clang-format off` and `// clang-format on` in the file (this is so that our formatting script doesn't wreak havoc with the formatting of the cutscene macros). Thus the contents of the file is currently - -```C -#include "z_en_jj.h" -#include "z64cutscene_commands.h" -// clang-format off - -// clang-format on -``` - -Finally, we have a script to convert the cutscene data into macros, namely `csdis.py` in the tools folder. We can just give it the VRAM address that the `D_address` is referring to, and it will output the cs macros: - -
- - (Very) long code block, click to view - - -``` -$ ./tools/csdis.py 80A88164 -ovl_En_Jj: Rom 00E3E3D0:00E3F9E0 VRam 80A87800:80A88E10 Offset 000964 - -static CutsceneData D_80A88164[] = { - CS_BEGIN_CUTSCENE(26, 1629), - CS_PLAYER_CUE_LIST(4), - CS_PLAYER_CUE(PLAYER_CUEID_5, 0, 240, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037197548209e-29f, 0.0f, 1.401298464324817e-45f), - CS_PLAYER_CUE(PLAYER_CUEID_3, 240, 255, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037197548209e-29f, 0.0f, 1.401298464324817e-45f), - CS_PLAYER_CUE(PLAYER_CUEID_6, 255, 285, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037197548209e-29f, 0.0f, 1.401298464324817e-45f), - CS_PLAYER_CUE(PLAYER_CUEID_32, 285, 300, 0x0000, 0xC000, 0x0000, -1732, 52, -44, -1537, 109, -44, 1.1393037197548209e-29f, 0.0f, 1.401298464324817e-45f), - CS_ACTOR_CUE_LIST(68, 4), - CS_ACTOR_CUE(0x0001, 0, 234, 0x0000, 0x4000, 0x0000, -1665, 52, -44, -1665, 52, -44, 1.1393037197548209e-29f, 0.0f, 1.401298464324817e-45f), - CS_ACTOR_CUE(0x0002, 234, 241, 0x41F8, 0x0000, 0x0000, -1665, 52, -44, -1603, 130, -47, 8.857142448425293f, 11.142857551574707f, -8.857142448425293f), - CS_ACTOR_CUE(0x0002, 241, 280, 0x4031, 0x0000, 0x0000, -1603, 130, -47, -549, 130, -52, 27.0256404876709f, 0.0f, -27.0256404876709f), - CS_ACTOR_CUE(0x0003, 280, 300, 0x0000, 0x0000, 0x0000, -549, 130, -52, -549, 130, -52, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE_LIST(67, 5), - CS_ACTOR_CUE(0x0001, 0, 93, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE(0x0003, 93, 121, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE(0x0001, 121, 146, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE(0x0002, 146, 241, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE(0x0001, 241, 441, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE_LIST(69, 3), - CS_ACTOR_CUE(0x0001, 0, 90, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -33, 9, 0.0f, 0.0f, 0.0f), - CS_ACTOR_CUE(0x0002, 90, 330, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -62, 22, 0.0f, -0.12083332985639572f, 0.0f), - CS_ACTOR_CUE(0x0003, 330, 380, 0x0000, 0x0000, 0x0000, 0, -62, 22, 0, -62, 22, 0.0f, 0.0f, 0.0f), - CS_MISC_LIST(1), - CS_MISC(0x000C, 1095, 1161, 0x0000, 0x00000000, 0xFFFFFFD2, 0x00000000, 0xFFFFFFD0, 0xFFFFFFD2, 0x00000000, 0xFFFFFFD0, 0x00000000, 0x00000000, 0x00000000), - CS_TRANSITION(0x0009, 0, 10), - CS_PLAYER_CUE_LIST(1), - CS_PLAYER_CUE(PLAYER_CUEID_53, 300, 1629, 0x0000, 0x0000, 0x0000, -1630, 52, -52, -1630, 52, -52, 0.0f, 0.0f, 0.0f), - CS_CAM_EYE_SPLINE(0, 1091), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x015C), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x016D), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x017E), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x0223), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x7065), - CS_CAM_EYE_SPLINE(60, 1151), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1532, 251, 222, 0x015C), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1532, 251, 222, 0x016D), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1532, 251, 222, 0x017E), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1532, 251, 222, 0x0223), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.39994430541992f, -1532, 251, 222, 0x7065), - CS_CAM_EYE_SPLINE(90, 351), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1698, 382, 455, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1698, 382, 455, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1698, 382, 455, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1694, 380, 451, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0164), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0xAD78), - CS_CAM_EYE_SPLINE(220, 392), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.39994430541992f, -1641, 95, -41, 0x0000), - CS_CAM_EYE_SPLINE(240, 1331), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0xAC10), - CS_CAM_EYE_SPLINE(280, 1371), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0xAC10), - CS_CAM_EYE_SPLINE(310, 1421), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1717, 83, -59, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1717, 83, -59, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1649, 177, -59, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1533, 224, -59, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -1243, 180, -59, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -953, 71, -55, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -953, 71, -55, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 45.39994430541992f, -953, 71, -55, 0x0164), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 45.39994430541992f, -953, 71, -55, 0xAD78), - CS_CAM_EYE_SPLINE(355, 1466), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000), - CS_CAM_AT_SPLINE(0, 1120), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1724, -5, -45, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1724, -5, -45, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 45.39994430541992f, -1724, -5, -45, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1724, -5, -45, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.39994430541992f, -1724, -5, -45, 0xAC10), - CS_CAM_AT_SPLINE(60, 1180), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1440, 241, 134, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1440, 241, 134, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 45.39994430541992f, -1440, 241, 134, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1440, 241, 134, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.39994430541992f, -1440, 241, 134, 0xAC10), - CS_CAM_AT_SPLINE(90, 380), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1610, 348, 373, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1610, 348, 373, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 50, 45.39994430541992f, -1610, 348, 373, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 35.399906158447266f, -1614, 338, 367, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0164), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0xAD78), - CS_CAM_AT_SPLINE(220, 421), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1724, -5, -45, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 70, 45.39994430541992f, -1724, -5, -45, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 5, 45.39994430541992f, -1724, -5, -45, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 6, 45.79994583129883f, -1593, 150, -146, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1531, 152, -75, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -1531, 152, -75, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.39994430541992f, -1531, 152, -75, 0x0000), - CS_CAM_AT_SPLINE(240, 1360), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 45.599945068359375f, -1712, 74, -37, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0xAC10), - CS_CAM_AT_SPLINE(280, 1400), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 45.599945068359375f, -1619, 99, -50, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0xAC10), - CS_CAM_AT_SPLINE(310, 1450), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x0B, 30, 90.99960327148438f, -1610, 141, -59, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x09, 10, 90.79960632324219f, -1599, 114, -57, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0xFC, 10, 90.39961242675781f, -1528, 192, -54, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 10, 90.599609375f, -1427, 164, -54, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0xCB, 10, 90.39961242675781f, -1138, 119, -37, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x20, 10, 90.39961242675781f, -832, 50, -51, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 45.39994430541992f, -836, 35, -51, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 45.39994430541992f, -836, 35, -51, 0x0164), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 45.39994430541992f, -836, 35, -51, 0xAD78), - CS_CAM_AT_SPLINE(355, 1495), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 60.60000228881836f, -1706, 111, -6, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 60.60000228881836f, -1706, 111, -6, 0xAC34), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 10, 60.60000228881836f, -1706, 111, -6, 0x4428), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 10, 60.60000228881836f, -1721, 82, -42, 0x0000), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 1000, 60.60000228881836f, -1721, 82, -42, 0xAC10), - CS_CAM_POINT(CS_CAM_CONTINUE, 0x00, 30, 60.60000228881836f, -1721, 82, -42, 0x0000), - CS_CAM_POINT(CS_CAM_STOP, 0x00, 30, 60.60000228881836f, -1721, 82, -42, 0x0000), - CS_TRANSITION(0x000B, 335, 342), - CS_DESTINATION(CS_DEST_JABU_JABU, 345, 395), - CS_ACTOR_CUE_LIST(62, 1), - CS_ACTOR_CUE(0x0001, 305, 494, 0x0000, 0x0000, 0x0000, -1399, 452, -53, -1399, 452, -53, 0.0f, 0.0f, 0.0f), - CS_END(), -}; -``` - -
- -Copy this into the file we just made (given the length, you may prefer to `>` it into a file and copy it from there, rather than the terminal itself). Save and close that file: we won't need it any more. - -To replace the `extern`, because the data is in a separate file, we include the file in a particular way: -```C -#include "z_en_jj_cutscene_data.c" EARLY -``` -(`EARLY` is required specifically for cutscene data. See [the definition of the CutsceneData struct](../include/z64cutscene.h) for exactly why.) - -Lastly, uncomment the InitVars block that's been sitting there the whole time. The data section of the file now looks like -```C -ActorInit En_Jj_InitVars = { - /**/ ACTOR_EN_JJ, - /**/ ACTORTYPE_ITEMACTION, - /**/ FLAGS, - /**/ OBJECT_JJ, - /**/ sizeof(EnJj), - /**/ EnJj_Init, - /**/ EnJj_Destroy, - /**/ EnJj_Update, - /**/ EnJj_Draw, -}; - -#include "en_jj_cutscene_data.c" EARLY - -static ColliderCylinderInit sCylinderInit = -{ - { COLTYPE_UNK10, 0x00, 0x09, 0x39, 0x10, COLSHAPE_CYLINDER }, - { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000004, 0x00, 0x00 }, 0x00, 0x01, 0x01 }, - { 170, 150, 0, { 0, 0, 0 } }, -}; - -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), -}; - -static Vec3f D_80A88CF0 = { -1589.0f, 53.0f, -43.0f }; - -static Gfx* D_80A88CFC[] = { 0x06007698, 0x06007A98, 0x06007E98, }; -``` - -That should be everything, and we should now be able to `make` without the data file with no issues - -But running `make`, we get the dreaded Error 1: - -``` -md5sum: WARNING: 1 computed checksum did NOT match -make: *** [Makefile:172: all] Error 1 -``` - -Oh no! What went wrong? - -To find out what went wrong, we need to use `firstdiff.py`. This tells us where our ROM starts to differ: -``` -$ ./firstdiff.py -First difference at ROM addr 0x144F4, gDmaDataTable (RAM 0x80016DA0, ROM 0x12F70, build/asm/dmadata.o) -Bytes: 00:E3:F9:D0 vs 00:E3:F9:E0 -Instruction difference at ROM addr 0xE3ED48, En_Jj_InitVars (RAM 0x80A88140, ROM 0xE3ED10, build/src/overlays/actors/ovl_En_Jj/z_en_jj.o) -Bytes: 40:00:00:00 vs 00:F0:00:00 -Instruction difference at ROM addr 0xE3F900, D_80A88D40 (RAM 0x80A88D30, ROM 0xE3F900, build/data/overlays/actors/z_en_jj.reloc.o) -Bytes: 00:00:09:40 vs C4:89:80:00 -Instruction difference at ROM addr 0xE3F9D4, En_Js_SetupAction (RAM 0x80A88E00, ROM 0xE3F9D0, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: AC:85:02:8C vs 00:00:00:00 -Instruction difference at ROM addr 0xE3F9D8, EnJs_Init (RAM 0x80A88E08, ROM 0xE3F9D8, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: 27:BD:FF:B0 vs 00:00:00:00 -Instruction difference at ROM addr 0xE3FAFC, EnJs_Destroy (RAM 0x80A88F2C, ROM 0xE3FAFC, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: 27:BD:FF:E8 vs 8F:B0:00:34 - -Over 1000 differing words, must be a shifted ROM. -Map appears to have shifted just before D_80A88D40 (build/data/overlays/actors/z_en_jj.reloc.o) -- in En_Jj_InitVars? -``` - -Ignore the first line: `gDmaDataTable` is always different if the ROM is shifted. The useful lines are usually the next line, and the guess it makes at the end. - -To fix this, we use a binary diff program. A suitable one is `vbindiff`: run it on the baserom and the zelda_whatever one the compiler generates: -``` -vbindiff baseroms/gc-eu-mq-dbg/baserom-decompressed.z64 oot-gc-eu-mq-dbg.z64 -``` -In this, press `g` to open up goto position, and paste in the address `0xE3ED10` from the first important line of the `first_diff` output. This gives us the following: - -![vbindiff for data](images/vbindiff_data_1.png) - -Notice that the numbers in the bottom pane is all shifted one word to the left. We therefore need some extra padding somewhere. The real issue is where. Thankfully the guess at the bottom gives us a hint: let's try just under `InitVars`. Just put a padding variable straight after them: - -```C -ActorInit En_Jj_InitVars = { - /**/ ACTOR_EN_JJ, - /**/ ACTORTYPE_ITEMACTION, - /**/ FLAGS, - /**/ OBJECT_JJ, - /**/ sizeof(EnJj), - /**/ EnJj_Init, - /**/ EnJj_Destroy, - /**/ EnJj_Update, - /**/ EnJj_Draw, -}; - -s32 usused = 0; - -#include "z_en_jj_cutscene_data.c" EARLY -``` - -This isn't good enough: we still get Error 1, but: -``` -$ ./first_diff.py -First difference at ROM addr 0x144F4, gDmaDataTable (RAM 0x80016DA0, ROM 0x12F70, build/asm/dmadata.o) -Bytes: 00:E3:F9:D0 vs 00:E3:F9:E0 -Instruction difference at ROM addr 0xE3F87C, unused (RAM 0x80A88160, ROM 0xE3ED30, build/src/overlays/actors/ovl_En_Jj/z_en_jj.o) -Bytes: 0A:00:09:39 vs 00:00:00:00 -Instruction difference at ROM addr 0xE3F900, D_80A88D40 (RAM 0x80A88D30, ROM 0xE3F900, build/data/overlays/actors/z_en_jj.reloc.o) -Bytes: 00:00:09:40 vs C4:89:80:00 -Instruction difference at ROM addr 0xE3F9D4, En_Js_SetupAction (RAM 0x80A88E00, ROM 0xE3F9D0, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: AC:85:02:8C vs 00:00:00:00 -Instruction difference at ROM addr 0xE3F9D8, EnJs_Init (RAM 0x80A88E08, ROM 0xE3F9D8, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: 27:BD:FF:B0 vs 00:00:00:00 -Instruction difference at ROM addr 0xE3FAFC, EnJs_Destroy (RAM 0x80A88F2C, ROM 0xE3FAFC, build/src/overlays/actors/ovl_En_Js/z_en_js.o) -Bytes: 27:BD:FF:E8 vs 8F:B0:00:34 - -Over 1000 differing words, must be a shifted ROM. -Map appears to have shifted just before D_80A88D40 (build/data/overlays/actors/z_en_jj.reloc.o) -- in unused? -(Base map file expected/build/z64.map out of date due to new or renamed symbols, so result may be imprecise.) -``` -We've managed to get rid of one issue, but there's still another one. Looking in vbindiff again, - -![vbindiff data 2](images/vbindiff_data_2.png) - -we see that everything is shifted left by 2 words. Guessing based on the hint from `first_diff`, we put two words after the cutscene include: -```C -#include "z_en_jj_cutscene_data.c" EARLY - -s32 usused2[] = { 0, 0 }; - -static ColliderCylinderInit sCylinderInit = -{ - { COLTYPE_UNK10, 0x00, 0x09, 0x39, 0x10, COLSHAPE_CYLINDER }, - { 0x00, { 0x00000000, 0x00, 0x00 }, { 0x00000004, 0x00, 0x00 }, 0x00, 0x01, 0x01 }, - { 170, 150, 0, { 0, 0, 0 } }, -}; -``` - -Running `make -j` again, -``` -oot-gc-eu-mq-dbg.z64: OK -``` - -Hooray, we won! - - -## Fake symbols - -Some symbols in the data have been decompiled wrongly, being incorrectly separated from the previous symbol due to how it was accessed by the actor's functions. However, most of these have now been fixed. Some more detail is given in [Types, structs and padding](types_structs_padding.md) If you are unsure, ask! - - -## Inlining - -After the file is finished, it is possible to move some static data into functions. This requires that: -1. The data is used in only one function -2. The ordering of the data can be maintained - -Additionally, we prefer to keep larger data (more than a line or two) out of functions anyway. - - -# Finally: .bss - -A .bss contains data that is uninitialised (actually initialised to `0`). For most actors all you need to do is declare it at the top of the actor file without giving it a value, once you find out what type it is. diff --git a/docs/tutorial/draw_functions.md b/docs/tutorial/draw_functions.md deleted file mode 100644 index 6724b42817..0000000000 --- a/docs/tutorial/draw_functions.md +++ /dev/null @@ -1,476 +0,0 @@ -# Draw functions - -Up: [Contents](contents.md) -Previous: [The rest of the functions in the actor](other_functions.md) - -Draw functions behave completely differently from the other functions in an actor. They often use a lot of macros. - -For this tutorial we will first look at the `EnJj` draw function, `EnJj_Draw`, then some more complicated examples. - -## A first example - -Unless it is completely invisible, an actor usually has a draw function as one of the main four actor functions. Hence its prototype looks like - -```C -EnJj_Draw(Actor* thisx, PlayState* play); -``` - -As in Init, Destroy and Update, it is much more convenient to feed mips2c the fake prototype - -```C -EnJj_Draw(EnJj* this, PlayState* play); -``` - -so that it fills out the struct fields from the actuar actor; we then put a - -```C -EnJj* this = THIS; -``` - -in the declarations as before. From now on, the process is rather different from the decompilation process used for the other functions. Here is the output of mips2c after sorting out the actor struct from Init, and with the arguments set back to `Actor* thisx`: -```C -void EnJj_Draw(Actor *thisx, PlayState *play) { - EnJj* this = THIS; - - GraphicsContext *sp4C; - Gfx *sp3C; - EnJj *sp18; - Gfx *temp_v1; - GraphicsContext *temp_a1; - s32 temp_a0; - - temp_a1 = play->state.gfxCtx; - sp4C = temp_a1; - Graph_OpenDisps(&sp3C, temp_a1, (const char *) "../z_en_jj.c", 0x36F); - Gfx_SetupDL_37Opa(play->state.gfxCtx); - Matrix_Translate(0.0f, (cosf(this->skelAnime.curFrame * 0.076624215f) * 10.0f) - 10.0f, 0.0f, (u8)1U); - Matrix_Scale(10.0f, 10.0f, 10.0f, (u8)1U); - temp_v1 = temp_a1->polyOpa.p; - temp_a1->polyOpa.p = temp_v1 + 8; - temp_v1->words.w0 = 0xDB060020; - temp_a0 = *(&D_80A88CFC + (this->unk_30E * 4)); - temp_v1->words.w1 = (temp_a0 & 0xFFFFFF) + gSegments[(u32) (temp_a0 * 0x10) >> 0x1C] + 0x80000000; - sp18 = this; - SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, (s32) this->skelAnime.dListCount, 0, 0); - Graph_CloseDisps(&sp3C, play->state.gfxCtx, (const char *) "../z_en_jj.c", 0x382); -} -``` - -Notable features are the Open and Close Disps functions, and blocks of the form - -```C -temp_v1 = temp_a1->polyOpa.p; -temp_a1->polyOpa.p = temp_v1 + 8; -temp_v1->words.w0 = 0xDB060020; -temp_a0 = *(&D_80A88CFC + (this->unk_30E * 4)); -temp_v1->words.w1 = (temp_a0 & 0xFFFFFF) + gSegments[(u32) (temp_a0 * 0x10) >> 0x1C] + 0x80000000; -``` - -(This is a particularly simple example, since there's only one of these blocks. We will give a more involved example later.) - -Each of these blocks converts into a graphics macro. They are usually (but not always) straightforward, but manually converting them is a pain, and there are sometimes special cases. To deal with them easily, we will use a tool from glank's N64 tools. To install these, follow the instructions [here](https://practicerom.com/public/packages/debian/howto.txt). - -For our purposes, we only need one of the programs this provides: `gfxdis.f3dex2`. - - -Graphics are actually 64-bit on the Nintendo 64. This code block is a result of instructions telling the processor what to do with the graphics pointer. There are two types of graphics pointer, -- polyOpa for solid textures -- polyXlu for translucent textures - -Our example is polyOpa, not surprisingly since Jabu is solid. - -`words.w0` and `words.w1` contain the actual graphics instruction, in hex format. Usually, `w0` is constant and `w1` contains the arguments. To find out what sort of macro we are dealing with, we use `gfxdis.f3dex2`. `w1` is variable, but we need to give the program a constant placeholder. A common word to use is 12345678, so in this case we run -``` -gfxdis.f3dex2 -x -g "POLY_OPA_DISP++" -d DB06002012345678 -``` - -- `-x` uses hex instead of the default qu macros (never mind what those are, OoT doesn't have them) -- `-g` is used to specify which graphics pointer macro to use -- `-d` is for the graphics dword - -Our standard now is to use decimal colors. If you have a constant second argument rather than a variable one, you can also use `-dc` to get decimal colors instead of the default hex. - -The output looks like -``` -gSPSegment(POLY_OPA_DISP++, 0x08, 0x12345678); -``` - -We can now replace the `0x12345678` by the actual second word. Or we could, if we had worked out what it was. - -Firstly, `*(&D_80A88CFC + (this->unk_30E * 4))` is referring to a piece of data we haven't externed yet. It looks like -``` -glabel D_80A88CFC -.word 0x06007698, 0x06007A98, 0x06007E98, 0x00000000, 0x00000000 -``` - -The first three words look like pointers to assets in the actor segment, which would make sense if we're looking for textures to draw. The last two words are 0, which is strange. A check in the rest of the actor file shows that `unk_30E` only takes the values `0,1,2`. We conclude that the last two words are just padding, and can be removed. Because this data is used in a graphics macro, it will be either a displaylist or a texture. We therefore set it up to be an array of unknown pointers for now: -```C -extern UNK_PTR D_80A88CFC[]; -// static Gfx* D_80A88CFC[] = { 0x06007698, 0x06007A98, 0x06007E98, } -``` - -It goes through further processing before it is used in the macro: `(temp_a0 & 0xFFFFFF) + gSegments[(u32) (temp_a0 * 0x10) >> 0x1C] + 0x80000000` is a conversion of a segmented address into a VRAM address. We have a macro for this too: `SEGMENTED_TO_VIRTUAL`. So after all this, the second word is -```C -SEGMENTED_TO_VIRTUAL(D_80A88CFC[this->unk_30E]); -``` -and the whole macro is -```C -gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80A88CFC[this->unk_30E])); -``` -The contents of a desegmentation macro used like this are almost always textures in this context, so we can replace `UNK_PTR` by `u64*`, the type for textures. - -You repeat this for every block in the function. - -We also have macros for Graph_OpenDisps and Graph_CloseDisps: you can replace -```C -Graph_OpenDisps(&sp3C, temp_a1, (const char *) "../z_en_jj.c", 0x36F); -``` -by -```C -OPEN_DISPS(temp_a1, "../z_en_jj.c", 879); -``` -(the last argument is a line number, so should be in decimal). - -The function may or may not use a temp for `play->state.gfxCtx`: you have to work it out using the diff. - -Once you've replaced all the blocks and the open and close with macros, you proceed with the function as usual. - -Two last things: the last argument of the matrix functions tells the compiler whether to use the previously stored matrix or not, so we have the enums `MTXMODE_NEW` and `MTXMODE_APPLY` for these. And the rather weird-looking float `0.076624215f` is, of all things, `(M_PI/41.0f)` (try Wolfram Alpha for these things, and if that doesn't produce anything sensible, ask in Discord). - -(The actual reason is probably that the animation is 41 frames long, but you won't necessarily spot this sort of thing for most floats) - -After all that, it turns out that -```C -void EnJj_Draw(Actor *thisx, PlayState *play) { - EnJj *this = THIS; - - OPEN_DISPS(play->state.gfxCtx, "../z_en_jj.c", 879); - Gfx_SetupDL_37Opa(play->state.gfxCtx); - Matrix_Translate(0.0f, (cosf(this->skelAnime.curFrame * (M_PI/41.0f)) * 10.0f) - 10.0f, 0.0f, 1); - Matrix_Scale(10.0f, 10.0f, 10.0f, 1); - gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80A88CFC[this->unk_30E])); - SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, - this->skelAnime.dListCount, 0, 0, this); - CLOSE_DISPS(play->state.gfxCtx, "../z_en_jj.c", 898); -} -``` - -matches apart from a couple of stack differences. This can be resolved by giving it `PlayState* play = play2;` at the top of the function and changing the second argument to `play2` as usual. - -We have enums for the last argument of the matrix functions: `0` is `MTXMODE_NEW`, `1` is `MTXMODE_APPLY`. - -Lastly, the penultimate and antepenultimate arguments of `SkelAnime_DrawFlexOpa` are actually pointers to functions, so they should be `NULL` instead of `0`. - - -## More examples: OverrideLimbDraw and PostLimbDraw - -For more examples of graphics macros and the structure of Draw functions, we look at a function from `EnDntNormal`, which is some Deku Scrubs used in the minigame stuff in Lost Woods. This has a good selection of macros, and two functions that are commonly combined with Draw, namely OverrideLimbDraw and PostLimbDraw. - -The mips2c output for - -```C -void func_809F5A6C(Actor *thisx, PlayState *play) { - ? sp60; - Gfx *sp48; - Gfx *sp38; - Actor *sp14; - Gfx *temp_v0; - Gfx *temp_v0_2; - Gfx *temp_v0_3; - Gfx *temp_v0_4; - Gfx *temp_v0_5; - GraphicsContext *temp_a1; - GraphicsContext *temp_s0; - s32 temp_a0; - void *temp_v1; - - sp60.unk0 = (s32) D_809F5E94.unk0; - sp60.unk4 = (s32) D_809F5E94.unk4; - sp60.unk8 = (s32) D_809F5E94.unk8; - temp_a1 = play->state.gfxCtx; - temp_s0 = temp_a1; - Graph_OpenDisps(&sp48, temp_a1, (const char *) "../z_en_dnt_nomal.c", 0x6FE); - Gfx_SetupDL_25Opa(play->state.gfxCtx); - temp_v0 = temp_s0->polyOpa.p; - temp_s0->polyOpa.p = temp_v0 + 8; - temp_v0->words.w0 = 0xDB060020; - temp_a0 = *(&D_809F5EA0 + (thisx->unk268 * 4)); - temp_v0->words.w1 = (temp_a0 & 0xFFFFFF) + gSegments[(u32) (temp_a0 * 0x10) >> 0x1C] + 0x80000000; - sp14 = thisx; - SkelAnime_DrawOpa(play, thisx->unk150, thisx->unk16C, &func_809F58E4, &func_809F59E4); - Matrix_Translate(thisx->unk21C, thisx->unk220, (bitwise f32) thisx->unk224, (u8)0U); - Matrix_Scale(0.01f, 0.01f, 0.01f, (u8)1U); - temp_v0_2 = temp_s0->polyOpa.p; - temp_s0->polyOpa.p = temp_v0_2 + 8; - temp_v0_2->words.w0 = 0xE7000000; - temp_v0_2->words.w1 = 0; - temp_v0_3 = temp_s0->polyOpa.p; - temp_s0->polyOpa.p = temp_v0_3 + 8; - temp_v0_3->words.w0 = 0xFB000000; - temp_v1 = (thisx->unk26A * 4) + &D_809F5E4C; - temp_v0_3->words.w1 = (temp_v1->unk-2 << 8) | (temp_v1->unk-4 << 0x18) | (temp_v1->unk-3 << 0x10) | 0xFF; - temp_v0_4 = temp_s0->polyOpa.p; - temp_s0->polyOpa.p = temp_v0_4 + 8; - temp_v0_4->words.w0 = 0xDA380003; - sp38 = temp_v0_4; - sp38->words.w1 = Matrix_NewMtx(play->state.gfxCtx, (char *) "../z_en_dnt_nomal.c", 0x716); - temp_v0_5 = temp_s0->polyOpa.p; - temp_s0->polyOpa.p = temp_v0_5 + 8; - temp_v0_5->words.w1 = (u32) &D_06001B00; - temp_v0_5->words.w0 = 0xDE000000; - Graph_CloseDisps(&sp48, play->state.gfxCtx, (const char *) "../z_en_dnt_nomal.c", 0x719); - if (&func_809F49A4 == thisx->unk214) { - func_80033C30((Vec3f *) &thisx->world, (Vec3f *) &sp60, (u8)0xFFU, play); - } -} -``` - -### Graphics macros - -There are 5 graphics macro blocks here: -```C -temp_v0 = temp_s0->polyOpa.p; -temp_s0->polyOpa.p = temp_v0 + 8; -temp_v0->words.w0 = 0xDB060020; -temp_a0 = *(&D_809F5EA0 + (thisx->unk268 * 4)); -temp_v0->words.w1 = (temp_a0 & 0xFFFFFF) + gSegments[(u32) (temp_a0 * 0x10) >> 0x1C] + 0x80000000; -``` - -We've seen one of these before: gfxdis gives -```C -$ gfxdis.f3dex2 -g "POLY_OPA_DISP++" -d DB06002012345678 -gSPSegment(POLY_OPA_DISP++, 0x08, 0x12345678); -``` -and looking at the data shows -``` -glabel D_809F5EA0 - .word 0x060027D0, 0x060025D0, 0x06002750, 0x00000000 -``` -which is an array of pointers to something again. It is used inside a `SEGMENTED_TO_VIRTUAL`, so they are most likely textures, and this block becomes -```C -gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_809F5EA0[this->unk_268])); -``` - -Next, -```C -temp_v0_2 = temp_s0->polyOpa.p; -temp_s0->polyOpa.p = temp_v0_2 + 8; -temp_v0_2->words.w0 = 0xE7000000; -temp_v0_2->words.w1 = 0; -``` -which we can find immediately using -``` -$ gfxdis.f3dex2 -g "POLY_OPA_DISP++" -d E700000000000000 -gDPPipeSync(POLY_OPA_DISP++); -``` - -Third, -```C -temp_v0_3 = temp_s0->polyOpa.p; -temp_s0->polyOpa.p = temp_v0_3 + 8; -temp_v0_3->words.w0 = 0xFB000000; -temp_v1 = (thisx->unk26A * 4) + &D_809F5E4C; -temp_v0_3->words.w1 = (temp_v1->unk-2 << 8) | (temp_v1->unk-4 << 0x18) | (temp_v1->unk-3 << 0x10) | 0xFF; -``` -this looks more troublesome. We find -``` -$ gfxdis.f3dex2 -g "POLY_OPA_DISP++" -d FB00000012345678 -gDPSetEnvColor(POLY_OPA_DISP++, 0x12, 0x34, 0x56, 0x78); -``` - -Now we need to work out what the last four arguments are. Two things are going on here: `D_809F5E4C` is an array of something: -``` -glabel D_809F5E4C - .word 0xFFFFFFFF, 0xFFC3AFFF, 0xD2FF00FF, 0xFFFFFFFF, 0xD2FF00FF, 0xFFC3AFFF, 0xFFFFFFFF, 0xFFC3AFFF, 0xD2FF00FF -``` -Worse, this is being accessed with pointer subtraction in the second word. `temp_v1 = (thisx->unk26A * 4) + &D_809F5E4C;` tells us that the array has elements of size 4 bytes, and the graphics macro implies the elements are colors. Colors of size 4 bytes are `Color_RGBA8`. Usually, we write colors in decimal, so `D_809F5E4C` becomes -```C -static Color_RGBA8 D_809F5E4C[] = { - { 255, 255, 255, 255 }, { 255, 195, 175, 255 }, { 210, 255, 0, 255 }, - { 255, 255, 255, 255 }, { 210, 255, 0, 255 }, { 255, 195, 175, 255 }, - { 255, 255, 255, 255 }, { 255, 195, 175, 255 }, { 210, 255, 0, 255 }, -}; -``` - -Now, we have two things to worry about: how to implement the negative pointer access, and how the second word is built. Negative accesses can be done by just subtracting 1, so that -```C -temp_v1 = D_809F5E4C[this->unk_26A - 1]; -``` -and then -```C -temp_v0_3->words.w1 = (temp_v1->unk2 << 8) | (temp_v1->unk0 << 0x18) | (temp_v1->unk3 << 0x10) | 0xFF; -``` -or rather, since it is a `Color_RGB8`, -```C -temp_v0_3->words.w1 = (temp_v1.b << 8) | (temp_v1.r << 0x18) | (temp_v1.g << 0x10) | 0xFF; -``` - -The last thing to worry about is how to put this word into the macro. Let's think about what the word actually is in a concrete case; it is easiest to see what is going on in hex, so suppose we are in the case -```C -temp_v1 = { 0xFF, 0xC3, 0xAF, 0xFF }; -``` - -Then the calculation is -``` -(0xAF << 8) | (0xFF << 0x18) | (0xC3 << 0x10) | 0xFF = 0xAF00 | 0xC30000 | 0xFF0000000 | 0xFF = 0xFFC3AFFF -``` -and so all this calculation is doing is turning `temp_v1` back into a word, with the last byte replaced by `0xFF` (that all the elements of `D_809F5E4C` have `0xFF` as their last element anyway is irrelevant here). Looking back at the output of gfxdis, we see that this actually means that the r,g,b just slot into the penultimate three arguments, the last being `0xFF`, leaving -```C -temp_v1 = D_809F5E4C[this->unk_26A - 1]; -gDPSetEnvColor(POLY_OPA_DISP++, temp_v1.r, temp_v1.g, temp_v1.b, 0xFF); -``` -as the residue of this block; it may turn out later that we can eliminate the temp. - - -The last two are much easier: -```C -temp_v0_4 = temp_s0->polyOpa.p; -temp_s0->polyOpa.p = temp_v0_4 + 8; -temp_v0_4->words.w0 = 0xDA380003; -sp38 = temp_v0_4; -sp38->words.w1 = Matrix_NewMtx(play->state.gfxCtx, (char *) "../z_en_dnt_nomal.c", 0x716); -``` -The macro is -``` -$ gfxdis.f3dex2 -g "POLY_OPA_DISP++" -d DA38000312345678 -gSPMatrix(POLY_OPA_DISP++, 0x12345678, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); -``` -and the second argument is filled by the `Matrix_NewMtx` function: -```C -gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1814), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); -``` - -Lastly, -```C -temp_v0_5 = temp_s0->polyOpa.p; -temp_s0->polyOpa.p = temp_v0_5 + 8; -temp_v0_5->words.w1 = (u32) &D_06001B00; -temp_v0_5->words.w0 = 0xDE000000; -``` -The macro is -``` -$ gfxdis.f3dex2 -g "POLY_OPA_DISP++" -d DE00000012345678 -gSPDisplayList(POLY_OPA_DISP++, 0x12345678); -``` -and so `D_06001B00` is a displaylist, so the type in the externed data at the top of the file can be changed to `Gfx D_06001B00[]`. Arrays act like pointers, so we don't need the `&` in the macro: -```C -gSPDisplayList(POLY_OPA_DISP++, D_06001B00); -``` - -Putting this all together -```C -void func_809F5A6C(Actor *thisx, PlayState *play) { - EnDntNormal *this = THIS; - ? sp60; - Actor *sp14; - Color_RGBA8 temp_v1; - - sp60.unk0 = (s32) D_809F5E94.unk0; - sp60.unk4 = (s32) D_809F5E94.unk4; - sp60.unk8 = (s32) D_809F5E94.unk8; - - OPEN_DISPS(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1790); - Gfx_SetupDL_25Opa(play->state.gfxCtx); - - gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_809F5EA0[this->unk_268])); - - sp14 = this; - SkelAnime_DrawOpa(play, thisx->unk150, thisx->unk16C, &func_809F58E4, &func_809F59E4); - Matrix_Translate(thisx->unk21C, thisx->unk220, (bitwise f32) thisx->unk224, (u8)0U); - Matrix_Scale(0.01f, 0.01f, 0.01f, (u8)1U); - - gDPPipeSync(POLY_OPA_DISP++); - temp_v1 = D_809F5E4C[this->unk_26A - 1]; - gDPSetEnvColor(POLY_OPA_DISP++, temp_v1.r, temp_v1.g, temp_v1.r, 0xFF); - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1814), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, D_06001B00); - - CLOSE_DISPS(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1817); - - if (&func_809F49A4 == this->unk214) { - func_80033C30((Vec3f *) &this.actor->world, (Vec3f *) &sp60, (u8)0xFFU, play); - } -} -``` - -### SkelAnime_Draw and the LimbDraws - -Some more general tidying up can be done here (`sp60` and so `D_809F5E94` are `Vec3f`, for example, and under normal circumstances we'd know that ), but the big remaining issue is -```C -sp14 = this; -SkelAnime_DrawOpa(play, thisx->unk150, thisx->unk16C, func_809F58E4, func_809F59E4); -``` -If we look at the definition of `SkelAnime_DrawOpa`, we find that it's missing the last argument. This is mips2c not noticing why `this` has been put on the stack: this code should actually be -```C -SkelAnime_DrawOpa(play, thisx->unk150, thisx->unk16C, func_809F58E4, func_809F59E4, this); -``` -mips2c doing this is not especially unusual, so bear it in mind. - -The other thing this tells us is that `func_809F58E4` is of type `OverrideLimbDraw`, and `func_809F59E4` of type `PostLimbDraw`. Their names are fairly self-explanatory. Filling in the prototypes as -```C -s32 func_809F58E4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); -void func_809F59E4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx); -``` -and running mips2c gives - -```C -s32 func_809F58E4(PlayState *play, s32 limbIndex, Gfx **dList, Vec3f *pos, Vec3s *rot, void *thisx) { - GraphicsContext *sp38; - Gfx *sp28; - Gfx *temp_v1; - Gfx *temp_v1_2; - GraphicsContext *temp_a1; - void *temp_v0; - - if ((limbIndex == 1) || (limbIndex == 3) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6)) { - temp_a1 = play->state.gfxCtx; - sp38 = temp_a1; - Graph_OpenDisps(&sp28, temp_a1, (const char *) "../z_en_dnt_nomal.c", 0x6C5); - temp_v1 = sp38->polyOpa.p; - sp38->polyOpa.p = temp_v1 + 8; - temp_v1->words.w1 = 0; - temp_v1->words.w0 = 0xE7000000; - temp_v1_2 = sp38->polyOpa.p; - sp38->polyOpa.p = temp_v1_2 + 8; - temp_v1_2->words.w0 = 0xFB000000; - temp_v0 = (thisx->unk26A * 4) + &D_809F5E4C; - temp_v1_2->words.w1 = (temp_v0->unk-2 << 8) | (temp_v0->unk-4 << 0x18) | (temp_v0->unk-3 << 0x10) | 0xFF; - Graph_CloseDisps(&sp28, play->state.gfxCtx, (const char *) "../z_en_dnt_nomal.c", 0x6CF); - } - return 0; -} - -void func_809F59E4(PlayState *play, s32 limbIndex, Gfx **dList, Vec3s *rot, void *thisx) { - ? sp18; - - sp18.unk0 = (s32) D_809F5E88.unk0; - sp18.unk4 = (s32) D_809F5E88.unk4; - sp18.unk8 = (s32) D_809F5E88.unk8; - if (thisx->unk26A == 0) { - if (limbIndex == 5) { - Matrix_MultVec3f((Vec3f *) &sp18, thisx + 0x27C); - return; - } - } else if (limbIndex == 7) { - Matrix_MultVec3f((Vec3f *) &sp18, thisx + 0x27C); - } -} -``` - -This structure is pretty typical: both edit what certain limbs do. Both also usually need a `ActorName *this = THIS;` at the top. We have seen both of the macros in the former before: applying the usual procedure, we find that it becomes -```C -s32 func_809F58E4(PlayState *play, s32 limbIndex, Gfx **dList, Vec3f *pos, Vec3s *rot, void *thisx) { - EnDntNormal *this = THIS; - - if ((limbIndex == 1) || (limbIndex == 3) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6)) { - OPEN_DISPS(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1733); - gDPPipeSync(POLY_OPA_DISP++); - gDPSetEnvColor(POLY_OPA_DISP++, D_809F5E4C[this->type - 1].r, D_809F5E4C[this->type - 1].g, D_809F5E4C[this->type - 1].b, 255); - CLOSE_DISPS(play->state.gfxCtx, "../z_en_dnt_nomal.c", 1743); - } - return 0; -} -``` -Notice that this function returns `0`. OverrideLimbDraw almost always returns `0`. - -The latter function is easier, and it is probably unnecessary to explain to the reader what it is necessary to do to it to clean it up. diff --git a/docs/tutorial/helper_scripts.md b/docs/tutorial/helper_scripts.md deleted file mode 100644 index 74c580904a..0000000000 --- a/docs/tutorial/helper_scripts.md +++ /dev/null @@ -1,202 +0,0 @@ -# List of helper scripts - -This list gives brief information on the most common usage cases. For more information, first try using `-h` or `--help` as an argument, and failing that, ask in #oot-decomp-help or #tools-other in the Discord. - -Many tools require activating a Python virtual environment that contains Python -dependencies. This virtual environment is automatically installed into the -`.venv` directory by `make setup`, but you need to **activate** it in your -current terminal session in order to run Python tools. To start using the -virtual environment in your current terminal run: - -```bash -source .venv/bin/activate -``` - -Keep in mind that for each new terminal session, you will need to activate the -Python virtual environment again. That is, run the above `source .venv/bin/activate` command. - -To deactivate the virtual environment, run - -```bash -deactivate -``` - -and your terminal session state will be restored to what it was before. - -## m2ctx - -This generates the context for mips2c to use to type objects in its output. It lives in the tools directory. Running -```sh -./tools/m2ctx.py -``` -will produce a file in the root directory called `ctx.c`. You open this file and copy it into the mips2c context box. - -The rule of thumb is to rerun this every time you change something significant to other functions, like the struct in the header or a function prototype, and probably after every function, at least at first. As with most other things on this project, you will develop intuition for when this is required. - -## diff - -This is in the repo's root directory. It is the main comparison tool to check your C code generates the right MIPS. - -The usual way diff is used is -```sh -./diff.py -mwo3 -``` - -- `m` automatically runs make as necessary -- `o` allows using symbol names -- `w` refreshes the diff output when the c file is saved (only the c file, not the header) -- `3` allows comparison of the previous and current saves of the file. - -Many other options exist, use the `-h` to see them. - -In order to use `diff.py` with the symbol names (with `o`), we need a copy of the code to compare against. This is done by copying the `build` folder into a folder called `expected`. Copying in Windows on WSL is very slow, so run -```sh -mkdir expected -cp -r build/ expected/ -``` -from the main directory of the repository. You should end up with the folder structure `expected/build/...`. - -![Example of a diff](images/func_80A87B9C_diff1.png) - -The colors have the following meanings: - -- Red is lines missing -- Green is extra lines -- Blue denotes significant differences in instructions, be they just numerical ones, or whole instructions -- Yellow/Gold denotes that register usage is wrong -- Other colors are used to distinguish incorrectly used registers or stack variables, to make it easy to follow where they are used. - -## decomp-permuter - -This is linked in #resources in the Discord. - -For inspiration when you run out of ideas to match a function. It is unlikely to match it completely by itself, but if you can't see from the MIPS or your code where you have issues, it will often tell you where to start looking. - -First, import the C file and MIPS of the function to compare using -```sh -./import.py -``` - -It will put it in a subdirectory of `nonmatchings`. You then run -```sh -./permuter.py nonmatchings// -``` -to produce suggestions. There are various arguments that can be used, of which the most important initially is `-j`: `-jN` tells it to use `N` CPU threads. - -Suggestions are saved in the function directory it imported the function into. - -## first_diff - -Tells you where your built rom first differs from the baserom. It gives you a memory address that you can use to do, e.g. a binary diff, and also tries too find what function or data this address is in. Run with -```C -./first_diff.py -``` - -If the rom is shifted, the first problem will be in gDMADataTable. Ignore this and look at the next one for where you actually need to look to see what's happened. The last line makes a guess on this location you need to edit to fix the problem. - -## sym_info - -Gives information about a `D_address` symbol (ROM address, RAM address, file). Run -```C -./sym_info.py -``` - -## ichaindis - -This is used to convert the data associated to the `D_address` in -```C -Actor_ProcessInitChain(&this->actor, &D_address); -``` -into an InitChain. It lives in the tools directory. Run -```sh -./tools/ichaindis.py -``` -and copy the output. (This used to only take the ROM address, which you would need to get from `sym_info.py`. Now you can just give it the RAM address, or even the raw `D_address`.) - -## colliderinit - -This is used to convert data `D_address` in the various ColliderInit functions into the format of a collider. It lives in `tools/overlayhelpers`. Because there are different types of collider, you need to give it the type of collider as well. This does not need the baserom path, and a recent update allows it to be run from anywhere. You also have to give it the `
` without the leading `D_`. -```sh -./colliderinit.py
-``` -Collider types supported are - -- `ColliderJntSphInit` -- `ColliderCylinderInit` -- `ColliderTrisInit` -- `ColliderQuadInit` -- `ColliderJntSphElementInit` -- `ColliderTrisElementInit` - -and `num` is used only for `ColliderJntSphElementInit`. - -## sfxconvert - -Automatically converts sound effect numbers in a file into their corresponding `#defines`, taking into account if `SFX_FLAG` is used. Run on a specific C file, -```sh -./tools/sfxconvert.py -``` - -Optional arguments are `-o output` to output to a different file and `-v` to give verbose output (i.e. tell you what changes it has made). - -## vt_fmt - -This turns the strange strings in the `PRINTF`s into the human-readable equivalent instructions. Copy the contents, including the quotation marks, and run -```sh -./tools/vt_fmt.py "contents" -``` -and replace the contents of the printf with the output. - -## Glank's N64 tools - -In particular, the ones used to decompile graphics macros. Their use is discussed in the section on [decompiling Draw functions](draw_functions.md). - -## graphovl - -This generates a directed graph showing an actor's function. Search for `graphovl.py` in the Discord. Put it in the root directory of the project, and run -```sh -./graphovl.py Actor_Name -``` -to produce a png in the `graphs` subdirectory. - -## format - -Shell script that does a standardised format to the C code. Can be run on a file, a directory, or the whole codebase. Run this before you submit a PR. - -## find_unused_asm - -Tracks down any `.s` files no longer used by the project. Does not ignore comments, so you have to actually remove any `#pragma` lines for it to consider the file unused. -```sh -./tools/find_unused_asm.sh -``` -will output a list of all such files, while adding `-d` deletes the files. - -## csdis - -This converts the cutscene data into macros that the cutscene system uses. Cutscenes are generally very long, so I recommend sending the output straight to a file with `>`, rather than trying to copy it all from the terminal. Run -```sh -./tools/csdis.py
-``` -on the address from the `D_address` containing the cutscene data. - -## regconvert - -This converts the direct memory references, of the form `gRegEditor->data[index]` or `gRegEditor + 0x`, into the corresponding REG macros defined in [regs.h](../include/regs.h). Run -```sh -./tools/regconvert.py -``` -if you have it in the form `gRegEditor->data[index]`, or -```sh -./tools/regconvert.py --offset -``` -if you have it in the form `gRegEditor + 0x`. You can also run it on a whole file using `--file `. - -## assist - -This takes a function name, and looks for functions with very similar assembly code. It outputs the best matches, and tells you if there is a decompiled one. -```sh -./tools/assist.py -``` -It has two optional arguments: -- `--threshold` adjust how high the matching threshold is, 1.0 being highest, 0.0 lowest -- `--num-out` change the number of matches to output diff --git a/docs/tutorial/images/changing_init_prototype.png b/docs/tutorial/images/changing_init_prototype.png deleted file mode 100644 index 7e3088b0f4..0000000000 Binary files a/docs/tutorial/images/changing_init_prototype.png and /dev/null differ diff --git a/docs/tutorial/images/ctx.png b/docs/tutorial/images/ctx.png deleted file mode 100644 index 4dd8c87447..0000000000 Binary files a/docs/tutorial/images/ctx.png and /dev/null differ diff --git a/docs/tutorial/images/data_inserted_commented_out.png b/docs/tutorial/images/data_inserted_commented_out.png deleted file mode 100644 index 8ad9686aa2..0000000000 Binary files a/docs/tutorial/images/data_inserted_commented_out.png and /dev/null differ diff --git a/docs/tutorial/images/fresh_actor_data.png b/docs/tutorial/images/fresh_actor_data.png deleted file mode 100644 index 3ab88dff2f..0000000000 Binary files a/docs/tutorial/images/fresh_actor_data.png and /dev/null differ diff --git a/docs/tutorial/images/fresh_actor_file.png b/docs/tutorial/images/fresh_actor_file.png deleted file mode 100644 index f431820248..0000000000 Binary files a/docs/tutorial/images/fresh_actor_file.png and /dev/null differ diff --git a/docs/tutorial/images/fresh_actor_file_annotated.png b/docs/tutorial/images/fresh_actor_file_annotated.png deleted file mode 100644 index e43a96ce77..0000000000 Binary files a/docs/tutorial/images/fresh_actor_file_annotated.png and /dev/null differ diff --git a/docs/tutorial/images/fresh_actor_header.png b/docs/tutorial/images/fresh_actor_header.png deleted file mode 100644 index 53649250e8..0000000000 Binary files a/docs/tutorial/images/fresh_actor_header.png and /dev/null differ diff --git a/docs/tutorial/images/func_80A87B1C_diff1.png b/docs/tutorial/images/func_80A87B1C_diff1.png deleted file mode 100644 index 4c2c6c234f..0000000000 Binary files a/docs/tutorial/images/func_80A87B1C_diff1.png and /dev/null differ diff --git a/docs/tutorial/images/func_80A87B1C_diff2.png b/docs/tutorial/images/func_80A87B1C_diff2.png deleted file mode 100644 index 8f1ae4183d..0000000000 Binary files a/docs/tutorial/images/func_80A87B1C_diff2.png and /dev/null differ diff --git a/docs/tutorial/images/func_80A87B9C_diff1.png b/docs/tutorial/images/func_80A87B9C_diff1.png deleted file mode 100644 index a44354fc67..0000000000 Binary files a/docs/tutorial/images/func_80A87B9C_diff1.png and /dev/null differ diff --git a/docs/tutorial/images/func_80A87B9C_diff2.png b/docs/tutorial/images/func_80A87B9C_diff2.png deleted file mode 100644 index 204eb8b4ad..0000000000 Binary files a/docs/tutorial/images/func_80A87B9C_diff2.png and /dev/null differ diff --git a/docs/tutorial/images/init_after_replace_actorthis.png b/docs/tutorial/images/init_after_replace_actorthis.png deleted file mode 100644 index d73d46fc53..0000000000 Binary files a/docs/tutorial/images/init_after_replace_actorthis.png and /dev/null differ diff --git a/docs/tutorial/images/init_asm.png b/docs/tutorial/images/init_asm.png deleted file mode 100644 index ebd47fde91..0000000000 Binary files a/docs/tutorial/images/init_asm.png and /dev/null differ diff --git a/docs/tutorial/images/init_diff1.png b/docs/tutorial/images/init_diff1.png deleted file mode 100644 index 8f92523e40..0000000000 Binary files a/docs/tutorial/images/init_diff1.png and /dev/null differ diff --git a/docs/tutorial/images/init_diff2.png b/docs/tutorial/images/init_diff2.png deleted file mode 100644 index cc128d754a..0000000000 Binary files a/docs/tutorial/images/init_diff2.png and /dev/null differ diff --git a/docs/tutorial/images/init_diff3top.png b/docs/tutorial/images/init_diff3top.png deleted file mode 100644 index 38d3a5b89c..0000000000 Binary files a/docs/tutorial/images/init_diff3top.png and /dev/null differ diff --git a/docs/tutorial/images/permuter_console_output.png b/docs/tutorial/images/permuter_console_output.png deleted file mode 100644 index cd427a9dc4..0000000000 Binary files a/docs/tutorial/images/permuter_console_output.png and /dev/null differ diff --git a/docs/tutorial/images/vbindiff_data_1.png b/docs/tutorial/images/vbindiff_data_1.png deleted file mode 100644 index 5f04b6b6e1..0000000000 Binary files a/docs/tutorial/images/vbindiff_data_1.png and /dev/null differ diff --git a/docs/tutorial/images/vbindiff_data_2.png b/docs/tutorial/images/vbindiff_data_2.png deleted file mode 100644 index 97d8a0feaa..0000000000 Binary files a/docs/tutorial/images/vbindiff_data_2.png and /dev/null differ diff --git a/docs/tutorial/introduction.md b/docs/tutorial/introduction.md deleted file mode 100644 index b9a658d531..0000000000 --- a/docs/tutorial/introduction.md +++ /dev/null @@ -1,74 +0,0 @@ -# Introduction to decomp - -In this project, we are decompiling The Legend of Zelda: Ocarina of Time. This means that we take the assembly language that is on the cartridge, - -``` -glabel func_80A13098 -/* 00028 80A13098 8482001C */ lh $v0, 0x001C($a0) ## 0000001C -/* 0002C 80A1309C 24010004 */ addiu $at, $zero, 0x0004 ## $at = 00000004 -/* 00030 80A130A0 14410003 */ bne $v0, $at, .L80A130B0 -/* 00034 80A130A4 244EFFFE */ addiu $t6, $v0, 0xFFFE ## $t6 = FFFFFFFE -/* 00038 80A130A8 10000002 */ beq $zero, $zero, .L80A130B4 -/* 0003C 80A130AC A480001C */ sh $zero, 0x001C($a0) ## 0000001C -.L80A130B0: -/* 00040 80A130B0 A48E001C */ sh $t6, 0x001C($a0) ## 0000001C -.L80A130B4: -/* 00044 80A130B4 8C8F0330 */ lw $t7, 0x0330($a0) ## 00000330 -/* 00048 80A130B8 24020001 */ addiu $v0, $zero, 0x0001 ## $v0 = 00000001 -/* 0004C 80A130BC 24180011 */ addiu $t8, $zero, 0x0011 ## $t8 = 00000011 -/* 00050 80A130C0 A1E20004 */ sb $v0, 0x0004($t7) ## 00000004 -/* 00054 80A130C4 A08201B8 */ sb $v0, 0x01B8($a0) ## 000001B8 -/* 00058 80A130C8 A08201B9 */ sb $v0, 0x01B9($a0) ## 000001B9 -/* 0005C 80A130CC 03E00008 */ jr $ra -/* 00060 80A130D0 A0980117 */ sb $t8, 0x0117($a0) ## 00000117 -``` - -(the commented numbers on the left are the original machine code, the middle the translation into MIPS assembly, the right useful information about the numbers in the code) -and turn it into compilable C code: - -```C -void func_80A13098(EnFirefly* this) { - if (this->actor.params == 4) { - this->actor.params = 0; - } else { - this->actor.params -= 2; - } - this->collider.list->body.atDmgInfo.effect = 1; - this->auraType = 1; - this->onFire = 1; - this->actor.naviEnemyId = 0x11; -} -``` - -which is intended to be as close to the original code as possible. We are doing *matching* decomp: in the right context, and with the right compiler settings, the above C compiles into *precisely* the assembly code above, not just equivalent code. - -N.B. We are using only publicly available code. In particular, we are not looking at any of the recent Nintendo source code leaks. (These apparently contain very little Ocarina of Time material anyway.) - -Progress of the project can be found at [https://zelda64.dev]. The long-term goal of this project is to obtain a complete compilable version of the code for every publicly released version of Ocarina of Time (there are also sister projects for Majora's Mask and other Zelda games). *We are not working on a PC Port, and this project will not be making one*, although the resulting code will be very useful if someone does intend to make such a port. - -Most of the discussion on the project takes place on the Zelda Decompilation Discord (linked in the README.md). We are very welcoming to newcomers and are happy to help you with any problems you might have with the decompilation process. - -## What do I need to know to take part? - -Basic knowledge of C, particularly arrays and pointers, is extremely useful. Knowledge of MIPS is not required initially, but if you are serious about decompilation you will soon pick up a lot of it. - -Knowledge of the fundamentals of git and GitHub is required. There are a number of tutorials available online, and a later document in this tutorial describes how you contribute to this project outside the actual decompilation process. - -The most useful knowledge to have is a general understanding of how the game works. An afternoon of constructive mucking about in the [Practice Rom](http://practicerom.com) (aka GZ) will be very beneficial if you have not looked at the game's subsurface workings before. - -## Structure of the code - -A lot of work has already been done on the code to bring it into a format that is easy to decompile. I will discuss actors, since this is where the majority of new people should begin. - -An *actor* is any thing in the game that moves or performs actions or interactions: Link is an actor, enemies are actors, NPCs are actors, props like grass are actors (Fishing is also an actor, the largest one, but you don't need to know about it). The vast majority of actors are *overlays*, which means they are loaded only when the game needs them. - -In the code, each actor is associated to several files: there is -- the main .c file, e.g. `src/overlays/actors/ovl_En_Firefly/z_en_firefly.c` -- the actor's Header file, e.g. `src/overlays/actors/ovl_En_Firefly/z_en_firefly.h` -- various .o files that tell the `make` script how to incorporate it into building the ROM, - -and then for undecompiled actors, various assembly (.s) files, generally including: -- one for the actor's *data* (this usually includes things like its collision information about how to draw it, and various other stuff that is used in it), e.g. `data/overlays/actors/z_en_firefly.data.s` -- one for each function in the actor, e.g. `asm/non_matchings/overlays/actors/ovl_En_Firefly/func_80A13098.s` - -The basic process of decomp is to take one of the .s files, run it through a decompilation program (mips_to_c) that reads the ASM very literally, and then, through humen ingenuity, reshape it into code that not only compiles in the first place, but completely matches the original code (well-written or otherwise). diff --git a/docs/tutorial/merging.md b/docs/tutorial/merging.md deleted file mode 100644 index fb51b8d585..0000000000 --- a/docs/tutorial/merging.md +++ /dev/null @@ -1,97 +0,0 @@ -# The merging process - -## Optional: Documentation - -It is helpful to document the functions and variables in the actor before you Pull Request it. The aim is to provide code that is sufficiently clear to be self-documenting, but it is worth leaving a comment on anything you find obscure or confusing. (Pull Request reviews will let you know if you are leaving too many comments.) Useful things to do documentation-wise: - -- Name all (or most) of the functions. -- Name all the variables in the actor struct. -- Create enums for params, and any other numbers that would benefit from that sort of clarity. - -You can test things using the practice rom for a retail version (watches and memory view is especially helpful), as well as the generated rom with Project 64 and something like Spectrum. The most important things to know if using a retail version to test are: - -- all the addresses will be different -- actor structs in debug have 10 bytes of padding at the end, so subtract `0x10` from any subsequent offsets. - -If you want to use `diff` after renaming anything, particularly functions, remember to copy the `build/` folder into `expected/` so use the correct symbols. *Make sure that `make` gives `OK` before doing this, or you're going to get very confused.* - -Finally, *if you are not sure what something does, either ask or leave it unnamed: it will be less confusing later if things are unnamed than if they are wrongly named* - -## Preparing to PR - -### Change the `spec` - -Specifically, to use the automatically generated reloc, rather than the original. In the case of an entirely matched actor, you find the section relating to the actor that you edited before: - -``` -beginseg - name "ovl_En_Jj" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Jj/z_en_jj.o" - //include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.data.o" - include "$(BUILD_DIR)/data/overlays/actors/z_en_jj.reloc.o" -endseg -``` - -and change to use our reloc: - -``` -beginseg - name "ovl_En_Jj" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Jj/z_en_jj.o" - include "$(BUILD_DIR)/src/overlays/actors/ovl_En_Jj/ovl_En_Jj_reloc.o" -endseg -``` - -(copy the path, then copy the directory name and put `_reloc.o` after it). - -### Delete the asm files. - -We have a script that will detect and delete unused asm files, `find_unused_asm.py`. Running it bare will output a list of all the unused files, while passing `-d` will delete them. - -This does not distinguish comments, so remove all commented references to the files themselves first. If you have left the `#pragma` lines in but commented out, the following regular expression will find them: -``` -\n//.*#pragma .*?\) -``` - -### Non-matchings - -If you can't match a function even with everyone's, don't worry overlong about it. Hopefully you can get it to do the same thing as the original (non-matching), and then you set it up to use the original asm for the matching build, and your code for the non-matching. You can look at the other partially-matched actors to see how to set this up with `#ifdef`s. - -### Format - -Run the formatting script `format.py`, to format the C files in the standard way we use. - -### Merge main - -To make sure the PR builds correctly with the current main, you need to merge `upstream/main` before you make the PR. This tends to break things, that you have to fix to get it to compile correctly again. - -## Pull Requests - -Push commits to your fork of the repository on GitHub, and then open a pull request. Name the PR something sensible, like - -- `EnJj OK and documented` (if all the functions match and your documentation is fairly complete) -- `EnJj OK` (if all the functions match) -- `EnJj (n nonmatching)` (if you couldn't get one or more functions to work, but to the best of your knowledge they are equivalent code) -- `EnJj (1 nonequivalent)` (if you couldn't get one or more functions to work, and do not believe the code has the same effect) - -and so on, although these four tend to cover most cases. Feel free to add a comment describing anything interesting you had to do or issues in non-matchings, - - -### Reviews - -Pull requests may be reviewed by anyone (who knows enough about the conventions of the project), but all are usually reviewed by Fig and Roman. - -To implement suggestions made in reviews, it is generally easier to be consistent if you push more commits from your local branch. It is quite possible that in the meantime some other PR has gone in, and git will ask you to merge main before you add more commits. This is normally fairly painless, although often you have to resolve merge conflicts. If in doubt, backup your work before doing anything, and ask in Discord before doing anything drastic, or if you don't understand what git is telling you. - -There is no need to wait for your PR to be approved and committed before working on your next actor. - - -## Trello - -It's helpful to use the labels on Trello. -- RESERVED is obvious. -- Work in Progress is for when you're actively working on something -- Matched for when it is totally decompiled and matching -- Documented if at least everything is named and odd code is commented. We'll likely wipe these and start over when proper documentation begins. - -We now have a PR label on the Trello that you can use to indicate your actor is in a PR. When the actor is committed to main, you can move the actor into the `Decompiled Files (Overlays)` column: it goes at the top if there is a non-matching, and below if not. diff --git a/docs/tutorial/object_decomp.md b/docs/tutorial/object_decomp.md deleted file mode 100644 index 325239313a..0000000000 --- a/docs/tutorial/object_decomp.md +++ /dev/null @@ -1,174 +0,0 @@ -# Object Decompilation - -Object decompilation is the process of taking an object file and writing instructions to extract the various assets from it in the correct format, with appropriate labelling to distinguish their nature and/or use. - -## What is an object file? - -An object file is generally where most of the information used by overlays is stored. Its contents can include - -- Vertices (positional/normal/color data used by displaylists) -- Textures -- DisplayLists (instructions to the graphics processor on how to put together textures and vertices) -- Skeleton (The underlying structure of an actor's shape, that can be manipulated to change its "pose") -- Animations -- Prerendered backgrounds - -## How we work with objects - -Because these are regarded as copyrighted, we do not want them in the repository. We instead extract them from the ROM. To do this we use a system called ZAPD (Zelda Asset Processor for Decompilation). The main aim of object decompilation is to give ZAPD an XML file that tells it what the assets it is supposed to be extracting actually are, so it can put them in the right format and name them. - - -## How to decomp an object - -Choose an object to decomp. As usual, some will be easier than others. For reasons explained shortly, it is much easier to decomp an object if all actors that use it are decompiled. - -### Files and folders - -Select the XML file of your selected object, which should be in `assets/xml/objects/object_name.xml`. - -The ZAPD output will go in the folder `assets/objects/object_name/`. You'll want this folder open later to check the output is correct. - -### Examining actor files - -Most objects are used by at least one actor. For those used by an actor, we can use the script `tools/xmlcreate.py` on the actor to separate all the blobs of data in the object that we already know about. (While it is possible to do this manually, it is much simpler to run the script first and sort it out afterwards, since it won't miss anything accidentally.) - -Many objects have been added in an automated way, so most constituent parts of each object are already identified, but will still need to be named and documented properly. Also, these objects usually have some blobs unreferenced by the object's own contents and hence not automatically extracted; most of the time these can be identified by looking at references in the actor which uses said object. - -### Extracting assets - -You can run `extract_assets.py` to extract the object's assets. Running it with no arguments extracts *everything* all over again, though. A better way is to run it with `-s` (for single file), and give it the location of the object you want to extract relative to `assets`, i.e. - -```bash -./extract_assets.py -s objects/object_name -``` - -This should populate the folder you created earlier. ZAPD produces a C file containing the extracted object data, which will be `assets/objects/object_name/object_name.c`. Any data that you have not specified the type of, or is not referenced elsewhere in the object, is extracted as unknown blobs (usually named `unaccounted_XXXXXX`). Open the C file to see if there are any such blobs. (Some are just padding with 0s and can be ignored.) - -You now have to try and decipher these blobs using the [list of tools given below](#tools) to work out what they might be. In the case of unused parts of the object, this can be very difficult. - -### Naming - -A significant question is how deep into the object you want to explicitly categorise and name things. - -1. As a minimum, you need to include every piece of data that is directly accessed by another part of the repo (generally, but not always, actors). This allows for elimination of entries in [`undefined_syms.txt`](../../undefined_syms.txt). For most objects, this includes several of a skeleton, animations, some textures, and collision information. - -2. Naming display lists that are associated to limbs in the skeleton. This is usually straightforward, providing Z64Utils or Hylian Toolbox can show the skeleton properly. - -3. The next level is to name and give a format to any texture files that are produced from the extraction that are so far unnamed. - -4. If you really want to you can name the limbs themselves. - -5. In very rare cases, you may also want to name a particular set of vertices. - -Current naming practice is to name each item in the xml using camelCase as usual, with the `g` prefix (for "global"), and the type of data last (Skel, Anim, DL, Tex), while output texture files are named in `snake_case`. - -Each pass of a successive level will require extracting the single asset again. - -### Textures - -Textures are especially troublesome due to the abundance of formats they can be in. Some are simple RGBA textures, while others use external palettes, and can look meaningless without. If the texture is used in a displaylist, it will tell you the format, but if not, you have to use your best judgement based on anything you know about its context. - -The order of operations is that palettes are loaded first, then the texture, and then the vertices to which it is applied. - -The first argument of `gsDPLoadTextureBlock` tells you the offset, the second the format, the third the bit depth, fourth the width and fifth the height - -The following is a list of the texture formats the Nintendo 64 supports, with their gfxdis names and ZAPD format names. - - -| Format name | Typing in `gsDPLoadTextureBlock` | "Format" in xml | -| ----------------------------------------------- | -------------------------------- | --------------- | -| 4-bit intensity (I) | `G_IM_FMT_I, G_IM_SIZ_4b` | i4 | -| 4-bit intensity with alpha (I/A) (3/1) | `G_IM_FMT_IA, G_IM_SIZ_4b` | ia4 | -| 4-bit color index (CI) | `G_IM_FMT_CI, G_IM_SIZ_4b` | ci4 | -| 8-bit I | `G_IM_FMT_I, G_IM_SIZ_8b` | i8 | -| 8-bit IA (4/4) | `G_IM_FMT_IA, G_IM_SIZ_8b` | ia8 | -| 8-bit CI | `G_IM_FMT_CI, G_IM_SIZ_8b` | ci8 | -| 16-bit red, green, blue, alpha (RGBA) (5/5/5/1) | `G_IM_FMT_RGBA, G_IM_SIZ_16b` | rgba16 | -| 16-bit IA (8/8) | `G_IM_FMT_IA, G_IM_SIZ_16b` | ia16 | -| 16-bit YUV (Luminance, Blue-Y, Red-Y) | `G_IM_FMT_YUV, G_IM_SIZ_16b` | (not used) | -| 32-bit RGBA (8/8/8/8) | `G_IM_FMT_RGBA, G_IM_SIZ_32b` | rgba32 | - -The 4-bit formats are loaded using `gDPLoadTextureBlock_4b`. The others use `gDPLoadTextureBlock`. - -For example, - -```c -gsDPLoadTextureBlock(D_06006110, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, 0, 0), -``` - -says that there is a texture at offset `0x6110`, its Format is `rgba16`, Width is `16` and Height is `16`, so we can declare - -```XML - -``` - -See [this web page](http://n64devkit.square7.ch/tutorial/graphics/3/3_3.htm) for more information about these formats, and [gSP functions](http://n64devkit.square7.ch/n64man/gsp/gSP_INDEX.htm) and [gDP functions](http://n64devkit.square7.ch/n64man/gdp/gDP_INDEX.htm) for more about the graphics functions used. - -The `ci` formats use palettes, which are declared separately. The shape you give the palette does not matter, but to avoid overlap errors it needs to fit into a rectangle; choose the one you think looks best. - -If in doubt, look at completed objects in the repo, and if still in doubt, ask. - -### Telling the repo to use the new files - -Just as when you decomp an actor you have to change the `spec` to tell it to use the new files, you have to do a similar thing for the object. Find the appropriate section for the object you have decompiled, and replace the line - -```c -include "$(BUILD_DIR)/baserom/object_name.o" -``` - -by - -```c -include "$(BUILD_DIR)/assets/objects/object_name/object_name.o" -number 6 -``` - -(the second line tells it to assign the object to segment 6 for the actors that use it: some objects use other segments, but you'll know this from the generated XML already: the `Segment` argument in the `File` tag will be different). - -Now, add - -```c -#include "assets/objects/object_name/object_name.h" -``` - -to every actor that uses the file, to tell it about the new symbols you have defined. - -Finally, replace all the symbols in the actors that use the file by the new names you gave them, and remove the corresponding sections in `undefined_syms.txt` and any `extern`s to the object's data in the actor files. - -If you did everything correctly, you should still get OK when running `make`. - -## Tools - -Object decompilation is essentially a descriptive process, but it requires that we know what each blob of data in the object file actually is, and sometimes, the actor files that use an object are not sufficient to determine what everything is. Therefore it is useful to have a battery of romhacking and examination tools to bring to bear on the file to read its contents. - -- The state-of-the-art is random's [Z64Utils](https://github.com/Random06457/Z64Utils). This can find and analyze the displaylists, textures and vertices in an object file, and even has an skeleton and animation viewer. It is not perfect; the best model viewer remains the debug rom itself. -- The old solution to look at skeletons and animations is [Hylian Toolbox](http://wiki.maco64.com/Tools/Hylian_Toolbox). This suffers from numerous issues, but is usually suitable for looking at object files that contain one skeleton and a few animations. -- To look at textures that you know something about, a texture viewer such as [Texture64](https://github.com/queueRAM/Texture64) is often useful. You may have trouble determining things like the palette a texture uses, depending on the format. - -## Building and investigative modding - -Thankfully it is not necessary to do a full make from clean to check that a particular object file has been decompiled successfully. - -- With a valid xml file, run `extract_assets.py -s` on its object. -- `make` - -If you want to change a texture, for example to see precisely where it is used, the following steps ensure it will be used in the build - -- Make sure the `spec` is updated to use the generated assets (see above) -- Change and save the texture -- Touch the C file in the same directory (that includes it) -- make -- Ironically, ERROR 1 implies success (your new texture has changed the checksum). - -If you'd rather not have it tell you about the checksum, you can run `make COMPARE=0` instead. - ---- - -To revert to the original texture, you can just run `extract_assets.py -s` on the object again. - -N.B. doing this will overwrite every custom texture, as will running `make setup`. - - -## Example - -An example of decompiling a particular object is given [here](object_decomp_example.md). diff --git a/docs/tutorial/object_decomp_example.md b/docs/tutorial/object_decomp_example.md deleted file mode 100644 index f7317bbddb..0000000000 --- a/docs/tutorial/object_decomp_example.md +++ /dev/null @@ -1,258 +0,0 @@ -# Object Decompilation Example - -A fairly typical example of an NPC's object is `object_bg`. It is used by one actor: `ovl_En_Bom_Bowl_Man`. - -## First pass: getting it to compile - -Running `tools/xmlcreate.py` gives - -```xml -$ python3 tools/xmlcreate.py src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c chuGirl -Unknown type at offset 004110 -Unknown type at offset 004910 -Unknown type at offset 005110 - - - - - - - - - - - -``` - -We have two issues here that need to be resolved: naming the animations and sorting out the unknown things. - -### Animations - -You have three choices to work out what the animations are: - -- Read the code and look at them in the game. -- Hylian Toolbox -- The latest versions of Z64Utils - -The first of these is probably simplest if you know the game and the actor well. In this case, we know that she is dozing when you first enter, wakes up when you talk to her, then leans on the counter with both hands. We can thus name them accordingly. - -Hylian Toolbox is terrible, but good for quick-and-dirty things like finding out what a particular animation does without booting up the game. - -Z64Utils is way better than Hylian Toolbox, but still in development. - -### Unknowns - -Looking in the actor, the unknowns are assigned to segment 8 using `SEGMENTED_TO_VIRTUAL`. This indicates textures. To find out what type they are, we can find the displaylist that uses them, and look at it in Z64Utils: if we look at the object in the object analyser, then find the right displaylist, it will not display correctly in the DList viewer, asking for a texture to put on 08000000. Giving it one of the textures, we discover that it is the head displaylist and the textures are eye textures. Hence we can name them `gChuGirlEyeOpen/Half/ClosedTex` (we equivocate on half-open/half-closed since many actors use the half texture for both opening and closing). From the code in the displaylist that loads it, we can also extract the texture's format, namely - -```c -06002FD8: gsDPLoadTextureBlock(D_08000000, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 5, 5, 0, 0), -``` - -So all three are `Format="rgba16" Width="32" Height="32"`. - -```xml - - - - - - - - - - - - - - - - - - -``` - -Having got this far, we can now run - -```bash -./extract_assets.py -s objects/object_bg -``` - -to extract the contents of the object into the new folder, change the spec to use our newly extracted assets: - -```txt -beginseg - name "object_bg" - romalign 0x1000 - include "$(BUILD_DIR)/baserom/object_bg.o" -endseg -``` - -to - -```txt -beginseg - name "object_bg" - romalign 0x1000 - include "$(BUILD_DIR)/assets/objects/object_bg/object_bg.o" - number 6 -endseg -``` - -and wipe the `z_en_bom_bowl_man` section from `undefined_syms.txt`: - -```txt -// z_en_bom_bowl_man -D_06006EB0 = 0x06006EB0; -D_06000710 = 0x06000710; -D_06000080 = 0x06000080; -D_060072AC = 0x060072AC; -``` - -Now `make` should give OK. - -## The displaylists - -For this step, we use Hylian Toolbox; if you have more than one skeleton in your actor, Hylian Toolbox will only show the first one. The others can be examined in the latest version of Z64Utils. Z64Utils can also give you a list of every displaylist in an object, be it just for cross-checking or to find extras. - -Opening the rom in Hylian Toolbox and looking at object_bg, we can note down the displaylist associated to each limb. -In this case naming is easy: we just have to note down the limb each is attached to. We only need a name and offset, and we end up with: - -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -Checking the C file, these are all of the displaylists in the actor, so we can move on. - -## The rest of the textures - -This is the difficult bit: we have to work out what each texture in the extracted pile is actually used for. A lot of this can be done in Z64Utils, but sometimes it is necessary to check in-game, especially for the weirder-looking ones. You can edit a texture file and compile the rom (which shouldn't match any more if you did it successfully) to make it easier to find. - -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - - -## Final pass - -Therefore, we end up with the following: -```xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -This was an easier object to do, both because it's a fairly simple collection of stuff associated to a single actor, and because a lot of the typing was already known. diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md deleted file mode 100644 index 9c1916ee60..0000000000 --- a/docs/tutorial/other_functions.md +++ /dev/null @@ -1,830 +0,0 @@ -# The rest of the functions in the actor - -Up: [Contents](contents.md) -Previous: [Beginning decompilation: the Init function and the Actor struct](beginning_decomp.md) - -## Now what? - -Following the scheme we gave last time, we have three options: -- `func_80A87BEC` -- `func_80A87C30` -- `func_80A87F44` - -Another option is to look at `Destroy`, which for smaller actors can often be done straight after Init, since it usually just removes colliders and deallocates dynapoly. However, glancing at the three given functions' assembly, there is an obvious standout: -```MIPS -glabel func_80A87F44 -/* 00744 80A87F44 AFA40000 */ sw $a0, 0x0000($sp) -/* 00748 80A87F48 03E00008 */ jr $ra -/* 0074C 80A87F4C AFA50004 */ sw $a1, 0x0004($sp) - -``` -This is a classic "function with two arguments that does nothing". So we can simply comment out the appropriate pragma and put -```C -void func_80A87F44(Actor* thisx, PlayState* play) { - -} -``` -in the C file. - -## Destroy - -Destroy will be a dead end, but we might as well do it now. Remaking the context and using mips2c on it (main 4 function, so change the prototype to use `EnJj* this`!) gives -```C -void EnJj_Destroy(EnJj *this, PlayState *play) { - PlayState *temp_a3; - s16 temp_v0; - - temp_v0 = this->dyna.actor.params; - temp_a3 = play; - if (temp_v0 == -1) { - play = temp_a3; - DynaPoly_DeleteBgActor(temp_a3, &temp_a3->colCtx.dyna, (s32) this->dyna.bgId); - Collider_DestroyCylinder(play, &this->collider); - return; - } - if ((temp_v0 != 0) && (temp_v0 != 1)) { - return; - } - DynaPoly_DeleteBgActor(temp_a3, &temp_a3->colCtx.dyna, (s32) this->dyna.bgId); -} -``` - -Again remember to return the first argument to `Actor* this` and put `EnJj* this = THIS;` in the function body. Based on what we know about this actor already, we expect this to be another switch. Rearranging it as such, and removing the likely fake `temp_v0` gives -```C -void EnJj_Destroy(Actor* thisx, PlayState* play) { - EnJj* this = THIS; - PlayState* temp_a3; - temp_a3 = play; - - switch (this->dyna.actor.params) { - case -1: - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); - Collider_DestroyCylinder(play, &this->collider); - break; - case 0: - case 1: - DynaPoly_DeleteBgActor(temp_a3, &temp_a3->colCtx.dyna, this->dyna.bgId); - break; - } -} -``` -Using `./diff.py -mwo3 EnJj_Destroy` shows that this matches already, but it seems like the temp usage should be more consistent. A little experimentation shows that -```C -void EnJj_Destroy(Actor* thisx, PlayState* play) { - EnJj* this = THIS; - - switch (this->dyna.actor.params) { - case -1: - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); - Collider_DestroyCylinder(play, &this->collider); - break; - case 0: - case 1: - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); - break; - } -} -``` - -also matches, with no need for the `PlayState*` temp. - -## Action Functions - -### `func_80A87BEC` - -Of the two functions we have available, `func_80A87BEC` is shorter, so we do that next. Since we haven't changed any types or header file information, there is no need to remake the context. mips2c gives -```C -void func_80A87BEC(EnJj *this, PlayState *play) { - if (this->dyna.actor.xzDistToPlayer < 300.0f) { - func_80A87800(this, &func_80A87B9C); - } -} -``` - -We see that this function just sets another action function when Link is close enough to the actor. All we have to do to this is remove the `&`, and prototype `func_80A87B9C` to be an action function. Notably, this time it is not used before it is defined, so we don't need a prototype at the top: putting a placeholder one in at the function position will do, i.e. our total edits this time are -```C -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87B9C.s") -void func_80A87B9C(EnJj *this, PlayState *play); - -// #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87BEC.s") -void func_80A87BEC(EnJj *this, PlayState *play) { - if (this->dyna.actor.xzDistToPlayer < 300.0f) { - func_80A87800(this, func_80A87B9C); - } -} -``` - -We can now either follow this chain of action functions down, or start with the other one. We will go down in this case: it is usually easier to keep track that way. - -### `func_80A87B9C` - -We can remake the context, but it's simpler to just stick the function prototype we made at the bottom of the context. Either way, mips2c gives us -```C -void func_80A87B9C(EnJj *this, PlayState *play) { - s16 temp_v0; - - temp_v0 = this->unk308; - if ((s32) temp_v0 >= -0x1450) { - this->unk308 = (s16) (temp_v0 - 0x66); - if ((s32) this->unk308 < -0xA28) { - func_8003EBF8(play, &play->colCtx.dyna, this->childActor->unk14C); - } - } -} -``` -Here's a new variable for our actor struct! Don't be deceived by the `s32` cast in the comparison: mips2c always does that if it's not sure. The reliable one is the `s16` cast lower down. (An `s32` doesn't fit in the space we have anyway). So the actor struct is now -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ SkelAnime skelAnime; - /* 0x01A8 */ Vec3s jointTable[22]; - /* 0x022C */ Vec3s morphTable[22]; - /* 0x02B0 */ ColliderCylinder collider; - /* 0x02FC */ EnJjActionFunc actionFunc; - /* 0x0300 */ Actor* childActor; - /* 0x0304 */ char unk_304[0x4]; - /* 0x0308 */ s16 unk_308; - /* 0x030A */ s16 unk_30A; - /* 0x030C */ char unk_30C[0x2]; - /* 0x030E */ s8 unk_30E; - /* 0x030F */ s8 unk_30F; - /* 0x0310 */ s8 unk_310; - /* 0x0311 */ s8 unk_311; - /* 0x0312 */ char unk_312[0x2]; -} EnJj; // size = 0x0314 -``` - -We can eliminate the temp since it's used in a simple way one after the other. `this->unk308 = (s16) (this->unk308 - 0x66);` can be written as `this->unk308 -= 0x66;`. - -In the `func_8003EBF8` we see that we should have at least made `this->childActor` a `DynaPolyActor*`, so that the last argument is its `bgId`. To avoid compiler warnings, we also need to cast the `Actor_SpawnAsChild` as such in Init, -```C -this->childActor = (DynaPolyActor*)Actor_SpawnAsChild(...) -``` - -Doing so, we are left with -```C -void func_80A87B9C(EnJj *this, PlayState *play) { - if (this->unk_308 >= -0x1450) { - this->unk_308 -= 0x66; - if (this->unk_308 < -0xA28) { - func_8003EBF8(play, &play->colCtx.dyna, this->childActor->bgId); - } - } -} -``` - -The diff shows this doesn't match: - -![func_80A87B9C diff 1](images/func_80A87B9C_diff1.png) - -It's not obvious why this doesn't match: the branching is correct, but it's loading stuff in the wrong order. Now is therefore a good time to introduce the permuter. - -### The permuter - -The permuter is a useful program for when you run out of ideas: it assigns a function a score based on how much it differs from the original code, then does random stuff that is known to improve matching, keeping ones that give better scores. It is not going to fix your control flow, but it does reasonably well on instruction differences and regalloc. It also has an option to worry about stack differences as well (`--stack-diffs`). - -To use the permuter, clone the decomp-permuter repo from the link given in Discord. First, import the C file and MIPS of the function to compare using -```sh -./import.py -``` - -It will put it in a subdirectory of `nonmatchings`. You then run -```sh -./permuter.py nonmatchings// -``` -to produce suggestions. There are various arguments that can be used, of which the most important initially is `-j`: `-jN` tells it to use `N` CPU threads. - -Suggestions are saved in the directory it imported the function into. - -![Permuter console output](images/permuter_console_output.png) - -The first suggestion looks plausible: -```C ---- before -+++ after -@@ -1390,12 +1390,14 @@ - } EnJj; - void func_80A87B9C(EnJj *this, PlayState *play) - { -- if (this->unk_308 >= (-0x1450)) -+ DynaPolyActor *new_var; -+ new_var = this->childActor; -+ if (this->unk_308 > ((-0x1450) - 1)) - { - this->unk_308 -= 0x66; - if (this->unk_308 < (-0xA28)) - { -- func_8003EBF8(play, &play->colCtx.dyna, this->childActor->bgId); -+ func_8003EBF8(play, &play->colCtx.dyna, new_var->bgId); - } - - } -``` - -In particular, adding a temp for the actor. Some of the rest is rather puzzling, but let's just try the actor temp, -```C -void func_80A87B9C(EnJj *this, PlayState *play) { - DynaPolyActor* child = this->childActor; - - if (this->unk_308 >= -0x1450) { - this->unk_308 -= 0x66; - if (this->unk_308 < -0xA28) { - func_8003EBF8(play, &play->colCtx.dyna, child->bgId); - } - } -} -``` - -![func_80A87B9C diff 2](images/func_80A87B9C_diff2.png) - -Hooray, that worked. The function now matches (as you can check by running `make -j`). In this case we are lucky and got a couple of 0s almost immediately. This will often not be the case, and you may have to go through multiple iterations to improve things. Or you get more ideas for what to do without the permuter necessarily doing everything for you. - -However, the hex values look a bit strange, and it turns out the decimal equivalents look less strange, so it's a good idea to translate them: -```C -void func_80A87B9C(EnJj *this, PlayState *play) { - DynaPolyActor* child = this->childActor; - - if (this->unk_308 >= -5200) { - this->unk_308 -= 102; - if (this->unk_308 < -2600) { - func_8003EBF8(play, &play->colCtx.dyna, child->bgId); - } - } -} -``` - -With that, we have reached the end of this action function chain, and now have to look at `func_80A87C30` - -### `func_80A87C30` - -Remaking the context and running mips2c on the assembly gives -```C -void func_80A87C30(EnJj *this, PlayState *play) { - if ((Math_Vec3f_DistXZ(&D_80A88CF0, play->unk1C44 + 0x24) < 300.0f) && (play->isPlayerDroppingFish(play) != 0)) { - this->unk_30C = 0x64; - func_80A87800(this, &func_80A87CEC); - } - this->collider.dim.pos.x = -0x4DD; - this->collider.dim.pos.y = 0x14; - this->collider.dim.pos.z = -0x30; - CollisionCheck_SetOC(play, &play->colChkCtx, (Collider *) &this->collider); -} -``` - -If you know anything about this game, this is obviously the function that begins the process of the swallowing Link cutscene. Performing minor cleanups reduces us to -```C -void func_80A87C30(EnJj *this, PlayState *play) { - if ((Math_Vec3f_DistXZ(&D_80A88CF0, play->unk1C44 + 0x24) < 300.0f) && (play->isPlayerDroppingFish(play) != 0)) { - this->unk_30C = 100; - func_80A87800(this, func_80A87CEC); - } - this->collider.dim.pos.x = -1245; - this->collider.dim.pos.y = 20; - this->collider.dim.pos.z = -48; - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider); -} -``` - -There are three things left to do to this function: -- prototype the new action function, `func_80A87CEC`. This one is used before its definition, so needs to be prototyped at the top of the file. -- extern `D_80A88CF0`, and since the arguments of `Math_Vec3f_DistXZ` are `Vec3f`s, convert it to floats. To do float conversion, either use an online converter, or get an extension for VSCode that can do it. The data becomes -```C -extern Vec3f D_80A88CF0; -// static Vec3f D_80A88CF0 = { -1589.0f, 53.0f, -43.0f }; -``` -(you must include the `.0f` parts even for integer floats: it can affect codegen, and as such it is part of our style). - -- replace the mysterious `play->unk1C44 + 0x24`. The first part is so common that most people on decomp know it by heart: it is the location of the Player actor. `+ 0x24` is obviously an offset that leats to a `Vec3f`, and if you look in the actor struct, you find that this is the location of `world.pos`. To use `Player`, we put `Player* player = GET_PLAYER(play)` at the top of the function. - -**NOTE:** mips_to_c will now output something like `&play->actorCtx.actorLists[2].head` for the Player pointer instead: this makes a lot more sense, but is not so easy to spot in the ASM without the characteristic `1C44`. - -After all this, the function becomes -```C -void func_80A87C30(EnJj *this, PlayState *play) { - Player* player = GET_PLAYER(play); - - if ((Math_Vec3f_DistXZ(&D_80A88CF0, &player->actor.world.pos) < 300.0f) && (play->isPlayerDroppingFish(play) != 0)) { - this->unk_30C = 100; - func_80A87800(this, func_80A87CEC); - } - this->collider.dim.pos.x = -1245; - this->collider.dim.pos.y = 20; - this->collider.dim.pos.z = -48; - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider); -} -``` - -One issue we have swept under the carpet thus far is what `unk_30C` is: we still have it as padding. For this we have to look at the MIPS, since mips2c hasn't told us. Scanning through the file, we find -```MIPS -/* 00498 80A87C98 A60E030C */ sh $t6, 0x030C($s0) ## 0000030C -``` - -which tells us that `unk_30C` is an `s16`, filling another gap in the struct: -```C -typedef struct EnJj { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ SkelAnime skelAnime; - /* 0x01A8 */ Vec3s jointTable[22]; - /* 0x022C */ Vec3s morphTable[22]; - /* 0x02B0 */ ColliderCylinder collider; - /* 0x02FC */ EnJjActionFunc actionFunc; - /* 0x0300 */ DynaPolyActor* childActor; - /* 0x0304 */ char unk_304[0x4]; - /* 0x0308 */ s16 unk_308; - /* 0x030A */ s16 unk_30A; - /* 0x030C */ s16 unk_30C; - /* 0x030E */ s8 unk_30E; - /* 0x030F */ s8 unk_30F; - /* 0x0310 */ s8 unk_310; - /* 0x0311 */ s8 unk_311; - /* 0x0312 */ char unk_312[0x2]; -} EnJj; // size = 0x0314 -``` - -The diff now looks fine for this function, but it gives compiler warnings about `CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider);`: the last argument is the wrong type: we need to give it `&this->collider.base` instead, which points to the same address, but is the right type. So the matching function is -```C -void func_80A87C30(EnJj *this, PlayState *play) { - Player* player = GET_PLAYER(play); - - if ((Math_Vec3f_DistXZ(&D_80A88CF0, &player->actor.world.pos) < 300.0f) && (play->isPlayerDroppingFish(play) != 0)) { - this->unk_30C = 100; - func_80A87800(this, func_80A87CEC); - } - this->collider.dim.pos.x = -1245; - this->collider.dim.pos.y = 20; - this->collider.dim.pos.z = -48; - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); -} -``` - -Again we have only one choice for our next function, namely `func_80A87CEC`. - -### `func_80A87CEC` - -Remaking the context and running mips2c on the assembly gives -```C -void func_80A87CEC(EnJj *this, PlayState *play) { - DynaPolyActor *sp1C; - DynaPolyActor *temp_v1; - s16 temp_v0; - - temp_v0 = this->unk_30C; - temp_v1 = this->childActor; - if ((s32) temp_v0 > 0) { - this->unk_30C = temp_v0 - 1; - return; - } - sp1C = temp_v1; - play = play; - func_80A87800(this, &func_80A87EF0); - play->csCtx.script = &D_80A88164; - gSaveContext.cutsceneTrigger = (u8)1U; - func_8003EBF8(play, &play->colCtx.dyna, (s32) temp_v1->bgId); - Camera_SetFinishedFlag(play->cameraPtrs[play->activeCamId]); - gSaveContext.unkEDA = (u16) (gSaveContext.unkEDA | 0x400); - Sfx_PlaySfxCentered((u16)0x4802U); -} -``` - -Easy things to sort out: - -- `func_80A87EF0` is another action function. Again it is defined below, so needs a prototype at the top. - -- We have another unknown symbol, `D_80A88164`. This is the massive chunk of data that makes up the cutscene (of Jabu swallowing Link). We will worry about it when we have decompiled the rest of the actor. For now just extern it as `UNK_TYPE`. - -- We can remove the casts from `(u8)1U` and just leave `1`. - -- `play->cameraPtrs[play->activeCamId]` has a macro: it is `GET_ACTIVE_CAM(play)`, so this line can be written as -```C -Camera_SetFinishedFlag(GET_ACTIVE_CAM(play)); -``` - -- `gSaveContext.unkEDA` we have dealt with before: it is `gSaveContext.save.info.eventChkInf[3]`. This is a flag-setting function; it can be written more compactly as -```C -gSaveContext.unkEDA |= 0x400 -``` - -- The last function is an audio function: we can look up the argument in `sfx.h` and find it is `NA_SE_SY_CORRECT_CHIME` - -It remains to work out which, if any, of the temps are real. Based on our previous experience, we expect `temp_v1` to be real. `sp1C` is unused and hence unlikely to be real. `temp_v0` is only used in the short if and so probably not real. Checking the diff shows that our suspicions were correct: -```C -void func_80A87CEC(EnJj *this, PlayState *play) { - DynaPolyActor *child = this->childActor; - if (this->unk_30C > 0) { - this->unk_30C--; - return; - } - func_80A87800(this, func_80A87EF0); - play->csCtx.script = &D_80A88164; - gSaveContext.cutsceneTrigger = 1; - func_8003EBF8(play, &play->colCtx.dyna, child->bgId); - Camera_SetFinishedFlag(GET_ACTIVE_CAM(play)); - gSaveContext.save.info.eventChkInf[3] |= 0x400; - Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); -} -``` - -matches, but generates a complier warning for `Camera_SetFinishedFlag`, which it can't find. To fix this, add it to `functions.h`, in as near as possible the correct position in numerical order. Some detective work with VSCode's Search shows that this function lives in `z_camera.c`, and its prototype is `s16 Camera_SetFinishedFlag(Camera* camera)`, so add this line to `functions.h` at the bottom of the camera functions part. - -Lastly, we prefer to limit use of early `return`s, and use `else`s instead if possible. That applies here: the function can be rewritten as -```C -void func_80A87CEC(EnJj* this, PlayState* play) { - DynaPolyActor* child = this->childActor; - if (this->unk_30C > 0) { - this->unk_30C--; - } else { - func_80A87800(this, func_80A87EF0); - play->csCtx.script = &D_80A88164; - gSaveContext.cutsceneTrigger = 1; - func_8003EBF8(play, &play->colCtx.dyna, child->bgId); - Camera_SetFinishedFlag(GET_ACTIVE_CAM(play)); - gSaveContext.save.info.eventChkInf[3] |= 0x400; - Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); - } -} -``` - -and still match. (Early `return`s are used after an `Actor_Kill` and in a few other situations, but generally avoided for `else`s elsewhere if possible. Talking of which...) - -## `func_80A87EF0` - -mips2c with updated context gives -```C -void func_80A87EF0(EnJj *this, PlayState *play) { - char *temp_a0; - u16 temp_v0; - - temp_v0 = (u16) this->unk_30A; - if ((temp_v0 & 4) == 0) { - this->unk_30A = temp_v0 | 4; - temp_a0 = this->unk_304; - if (temp_a0 != 0) { - this = this; - Actor_Kill((Actor *) temp_a0); - this->dyna.actor.child = NULL; - } - } -} -``` - -Now we're a bit stuck: this tells us that `this->unk_304` is an `Actor*`, but we know nothing else about it. So just make it an actor for the time being. As before, `this->unk_304` is a pointer, so we should compare `temp_a0` to `NULL`. - -We also find in the MIPS -```MIPS -lhu $v0, 0x030A($a0) -``` -which at last tells us that `unk_30A` is actually a `u16`. We can now eliminate `temp_v0`, and replace the ` == 0` by a `!(...)`, which leaves -```C -void func_80A87EF0(EnJj *this, PlayState *play) { - Actor *temp_a0; - - if (!(this->unk_30A & 4)) { - this->unk_30A |= 4; - temp_a0 = this->unk_304; - if (temp_a0 != 0) { - Actor_Kill(temp_a0); - this->dyna.actor.child = NULL; - } - } -} -``` -although we are as yet none the wiser as to which actor `unk_304` actually points to. - -Again we have run out of action functions. The rules suggest that we now look at Update. - -## Update - -Update runs every frame and updates the properties of the actor, and usually runs the action functions once per frame. As before we change the first argument to `EnJj* this` to get it to use our actor's struct. mips2c gives -```C -void EnJj_Update(EnJj *this, PlayState *play) { - if ((play->csCtx.state != CS_STATE_IDLE) && (play->unk1D94 != 0)) { - func_80A87D94(); - } else { - this->actionFunc(this); - if (this->skelAnime.curFrame == 41.0f) { - Actor_PlaySfx((Actor *) this, (u16)0x28B6U); - } - } - func_80A87B1C(this); - SkelAnime_Update(&this->skelAnime); - Actor_SetScale((Actor *) this, 0.087f); - this->skelAnime.jointTable->unk40 = (s16) this->unk_308; -} -``` - -This has several problems: firstly, the action function is called with the wrong argument. We should thus be suspicious of previous functions this actor calls, and decompile them mith mips2c without context if necessary, if only to find out how many arguments they have. We find that `func_80A87D94` definitely takes `EnJj* this, PlayState* play` as arguments. Again, put this prototype at the function location above to avoid compiler warnings. - -`unk40` of an array of `Vec3s`s is `0x40 = 0x6 * 0xA + 0x4`, so is actually `this->skelAnime.jointTable[10].z` - -Lastly, what is `play->unk1D94`? It is at `play->csCtx + 0x30`, or `play->csCtx.actorCues + 0x8`, which is `play->csCtx.actorCues[2]` since this is an array of pointers. Hence it is a pointer, and so should be compared to `NULL`. Looking up the sfx Id again, we end up with -```C -void EnJj_Update(Actor *thisx, PlayState *play) { - EnJj* this = THIS; - - if ((play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.actorCues[2] != NULL)) { - func_80A87D94(this, play); - } else { - this->actionFunc(this, play); - if (this->skelAnime.curFrame == 41.0f) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_JABJAB_GROAN); - } - } - func_80A87B1C(this); - SkelAnime_Update(&this->skelAnime); - Actor_SetScale(&this->dyna.actor, 0.087f); - this->skelAnime.jointTable[10].z = this->unk_308; -} -``` -which matches. - - -3 more functions to go: the two functions called here, and Draw. - - -## `func_80A87B1C` - -Now our typing problems come home to roost: - -```C -void func_80A87B1C(EnJj *this) { - s8 temp_t8; - u8 temp_v0; - u8 temp_v0_2; - - temp_v0 = (u8) this->unk_30F; - if ((s32) temp_v0 > 0) { - this->unk_30F = temp_v0 - 1; - return; - } - temp_t8 = (u8) this->unk_30E + 1; - this->unk_30E = temp_t8; - if ((temp_t8 & 0xFF) >= 3) { - temp_v0_2 = (u8) this->unk_310; - this->unk_30E = 0; - if ((s32) temp_v0_2 > 0) { - this->unk_310 = temp_v0_2 - 1; - return; - } - this = this; - this->unk_30F = Rand_S16Offset((u16)0x14, (u16)0x14); - this->unk_310 = (s8) (u8) this->unk_311; - } -} -``` - -From this we can read off that `unk_30F` is a `u8`, `unk_30E` is a `u8`, `unk_310` is a `u8`, and `unk_311` is a `u8`. Giving mips2c new context and trying again, -```C -void func_80A87B1C(EnJj *this) { - u8 temp_t8; - u8 temp_v0; - u8 temp_v0_2; - - temp_v0 = this->unk_30F; - if ((s32) temp_v0 > 0) { - this->unk_30F = temp_v0 - 1; - return; - } - temp_t8 = this->unk_30E + 1; - this->unk_30E = temp_t8; - if ((temp_t8 & 0xFF) >= 3) { - temp_v0_2 = this->unk_310; - this->unk_30E = 0; - if ((s32) temp_v0_2 > 0) { - this->unk_310 = temp_v0_2 - 1; - return; - } - this = this; - this->unk_30F = Rand_S16Offset((u16)0x14, (u16)0x14); - this->unk_310 = this->unk_311; - } -} -``` -and all the weird casts are gone. Eliminating the temps, replacing the hex, discarding pointless definitions, and replacing early `return`s by `else`s, we end up with -```C -void func_80A87B1C(EnJj* this) { - if (this->unk_30F > 0) { - this->unk_30F--; - } else { - this->unk_30E++; - if ((this->unk_30E & 0xFF) >= 3) { - this->unk_30E = 0; - if (this->unk_310 > 0) { - this->unk_310--; - } else { - this->unk_30F = Rand_S16Offset(20, 20); - this->unk_310 = this->unk_311; - } - } - } -} -``` - -Sadly this doesn't match: - -![func_80A87B1C diff 1](images/func_80A87B1C_diff1.png) - -You will also find that the permuter is essentially useless here: most solutions it offers look very fake. But there's already something a bit weird in here: why does it do `this->unk_30E & 0xFF` explicitly in the comparison? It turns out if you remove this, the function matches: the compiler does this calculation automatically when doing comparisons with `u8`s anyway. - -![func_80A87B1C diff 2](images/func_80A87B1C_diff2.png) - -### `func_80A87D94` - -This is our last ordinary function. Unfortunately, even with new context, mips2c gives us a bit of a mess: -```C -void func_80A87D94(EnJj *this, PlayState *play) { - s16 temp_v0_2; - u16 temp_t1; - u16 temp_t4; - u16 temp_t7; - u16 temp_t9; - u16 temp_v0; - u16 temp_v1; - u16 temp_v1_2; - u16 temp_v1_3; - u16 phi_v1; - - temp_v0 = *play->unk1D94; - if (temp_v0 != 1) { - if (temp_v0 != 2) { - if (temp_v0 != 3) { - phi_v1 = this->unk_30A; - } else { - temp_v1 = this->unk_30A; - temp_t7 = temp_v1 | 2; - phi_v1 = temp_v1; - if ((temp_v1 & 2) == 0) { - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 1; - this->unk_311 = 0; - this->unk_30A = temp_t7; - phi_v1 = temp_t7 & 0xFFFF; - } - } - } else { - temp_t1 = this->unk_30A | 1; - temp_v1_2 = temp_t1 & 0xFFFF; - this->unk_30A = temp_t1; - phi_v1 = temp_v1_2; - if ((temp_v1_2 & 8) == 0) { - this->unk_304 = Actor_SpawnAsChild(&play->actorCtx, (Actor *) this, play, (u16)0x101, -1100.0f, 105.0f, -27.0f, 0, 0, 0, 0); - temp_t4 = this->unk_30A | 8; - this->unk_30A = temp_t4; - phi_v1 = temp_t4 & 0xFFFF; - } - } - } else { - temp_v1_3 = this->unk_30A; - phi_v1 = temp_v1_3; - if ((temp_v1_3 & 2) != 0) { - this->unk_30E = 0; - this->unk_30F = Rand_S16Offset((u16)0x14, (u16)0x14); - this->unk_310 = 0; - temp_t9 = this->unk_30A ^ 2; - this->unk_311 = 0; - this->unk_30A = temp_t9; - phi_v1 = temp_t9 & 0xFFFF; - } - } - if ((phi_v1 & 1) != 0) { - Actor_PlaySfx((Actor *) this, (u16)0x206DU); - temp_v0_2 = this->unk_308; - if ((s32) temp_v0_2 >= -0x1450) { - this->unk_308 = temp_v0_2 - 0x66; - } - } -} -``` - -At the top we have -```C - temp_v0 = *play->unk1D94; - if (temp_v0 != 1) { - if (temp_v0 != 2) { - if (temp_v0 != 3) { -``` -Firstly, we are now comparing with the value of `play->unk1D94`, not just using a pointer, so we need the first thing in `play->csCtx.actorCues[2]`. This turns out to be `play->csCtx.actorCues[2]->id`. - -The if structure here is another classic indicator of a switch: nested, with the same variable compared multiple times. If you were to diff this as-is, you would find that the code is in completely the wrong order. Reading how the ifs work, we see that if `temp_v0` is `1`, it executes the outermost else block, if it is `2`, the middle, if `3`, the innermost, and if it is anything else, the contents of the innermost if. Hence this becomes -```C -void func_80A87D94(EnJj *this, PlayState *play) { - s16 temp_v0_2; - u16 temp_t1; - u16 temp_t4; - u16 temp_t7; - u16 temp_t9; - // u16 temp_v0; - u16 temp_v1; - u16 temp_v1_2; - u16 temp_v1_3; - u16 phi_v1; - - switch (play->csCtx.actorCues[2]->id) { - case 1: - temp_v1_3 = this->unk_30A; - phi_v1 = temp_v1_3; - if ((temp_v1_3 & 2) != 0) { - this->unk_30E = 0; - this->unk_30F = Rand_S16Offset((u16)0x14, (u16)0x14); - this->unk_310 = 0; - temp_t9 = this->unk_30A ^ 2; - this->unk_311 = 0; - this->unk_30A = temp_t9; - phi_v1 = temp_t9 & 0xFFFF; - } - break; - case 2: - temp_t1 = this->unk_30A | 1; - temp_v1_2 = temp_t1 & 0xFFFF; - this->unk_30A = temp_t1; - phi_v1 = temp_v1_2; - if ((temp_v1_2 & 8) == 0) { - this->unk_304 = Actor_SpawnAsChild(&play->actorCtx, (Actor *) this, play, (u16)0x101, -1100.0f, 105.0f, -27.0f, 0, 0, 0, 0); - temp_t4 = this->unk_30A | 8; - this->unk_30A = temp_t4; - phi_v1 = temp_t4 & 0xFFFF; - } - break; - case 3: - temp_v1 = this->unk_30A; - temp_t7 = temp_v1 | 2; - phi_v1 = temp_v1; - if ((temp_v1 & 2) == 0) { - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 1; - this->unk_311 = 0; - this->unk_30A = temp_t7; - phi_v1 = temp_t7 & 0xFFFF; - } - break; - default: - phi_v1 = this->unk_30A; - break; - } - if ((phi_v1 & 1) != 0) { - Actor_PlaySfx((Actor *) this, (u16)0x206DU); - temp_v0_2 = this->unk_308; - if ((s32) temp_v0_2 >= -0x1450) { - this->unk_308 = temp_v0_2 - 0x66; - } - } -} -``` -(notice that this time we need a `default` to deal with the innermost if contents). If you try to replace `0x206D` in the `Actor_PlaySfx`, you will find there is no such sfxId in the list: this is because some sound effects have an extra offset of `0x800` to do with setting flags. Adding `0x800` to the sfxId shows that this sound effect is `NA_SE_EV_JABJAB_BREATHE`. To correct this to the id in the function, we have a macro `SFX_FLAG`, and it should therefore be -```C -Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_JABJAB_BREATHE - SFX_FLAG); -``` - -As usual, most of the remaining temps look fake. The only one that does not is possibly `phi_v1`. However, the way in which they are used here makes it hard to tell if they are fake, and if so, how to replace them. I encourage you to try this yourself, with the aid of the diff script; the final, matching result, with other cleanup, is hidden below - -
- - Matching C for `func_80A87D94` - - -```C -void func_80A87D94(EnJj* this, PlayState* play) { - switch (play->csCtx.actorCues[2]->id) { - case 1: - if ((this->unk_30A & 2) != 0) { - this->unk_30E = 0; - this->unk_30F = Rand_S16Offset(20, 20); - this->unk_310 = 0; - this->unk_311 = 0; - this->unk_30A ^= 2; - } - break; - case 2: - this->unk_30A |= 1; - if ((this->unk_30A & 8) == 0) { - this->unk_304 = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EFF_DUST, - -1100.0f, 105.0f, -27.0f, 0, 0, 0, 0); - this->unk_30A |= 8; - } - break; - case 3: - if ((this->unk_30A & 2) == 0) { - this->unk_30E = 0; - this->unk_30F = 0; - this->unk_310 = 1; - this->unk_311 = 0; - this->unk_30A |= 2; - } - break; - } - if ((this->unk_30A & 1) != 0) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_JABJAB_BREATHE - SFX_FLAG); - if (this->unk_308 >= -5200) { - this->unk_308 -= 102; - } - } -} -``` - -
- - -With that, the last remaining function is `EnJj_Draw`. Draw functions have an extra layer of macroing that is required, so we shall cover them separately. - -Next: [Draw functions](draw_functions.md) diff --git a/docs/tutorial/pre-decomp.md b/docs/tutorial/pre-decomp.md deleted file mode 100644 index 4ad66b76f5..0000000000 --- a/docs/tutorial/pre-decomp.md +++ /dev/null @@ -1,31 +0,0 @@ -# Pre-decompilation - -It is very important to get everything set up properly before you start trying to decompile anything. As usual, if you need help at any stage of the process, ask in the Discord and we'll do our best to help. - -## Setting up the repository - -This is covered on the main page of the repository. - -## Git and GitHub workflow - -First, make a GitHub fork of the repository, then clone it into a git-enabled local folder. - -Once you have decided on an actor, you should make a new git branch to work on: your main branch is meant to stay level with the main repository. Name it something sensible: my `EnFirefly` branch is called "en_firefly", for example, but you may prefer to use a more descriptive name: "Dark_Link" is rather more suggestive than "en_torch2", for example. You work on the branch, commit changes, and periodically push them to GitHub, if only for backup purposes. - -Once you have finished an actor, you submit a pull request for other people to check your work complies with the project's conventions, and once it is deemed satisfactory, it will be merged in to the main repository. - -But we are getting ahead of ourselves: - -## Choosing a first actor - -Since actors cover so many different categories of stuff in the game, they come in a wide variety of shapes, sizes and difficulties. The following is a list of things to bear in mind: - -- Bosses are by far the largest, and all are already taken, so you can safely ignore them. Likewise `ovl_Fishing`, the largest actor in the game. -- Enemies are often quite complicated due to the many different interactions they have with Link, and sometimes one another. -- NPCs vary hugely. Some of the smaller ones are suitable to be first actors, but many are not. -- Cutscene objects tend to have very complicated functions, and are best left until later. -- The best starter actors tend to be dungeon or scene objects: statues, platforms, decorations, gates, etc., although we are naturally running a bit short on these now. - -The general rule of thumb is to pick something with few, simple interactions with its environment. (For example, my first actor was BgIceTurara: icicles, which can do about 3 different things: break, fall, and grow.) This hopefully means that the functions are mostly small and simple. You are also probably better off if Draw and Init are small functions, although difficulty is sometimes not correlated to size. - -If in doubt, ask someone to have a quick look through the code to see if it's suitable. diff --git a/docs/tutorial/types_structs_padding.md b/docs/tutorial/types_structs_padding.md deleted file mode 100644 index 30c691a0c4..0000000000 --- a/docs/tutorial/types_structs_padding.md +++ /dev/null @@ -1,149 +0,0 @@ -# Types, structs, and padding - -Reminders: -- In N64 MIPS, 1 word is 4 bytes (yes, the N64 is meant to be 64-bit, but it mostly isn't used like it in OoT) -- A byte is 8 bits, or 2 hex digits - - -## Types - -The following are the common data types used everywhere: - -| Name | Size | Comment | -| ---- | ----- | -------- | -| char | 1 byte | character | -| u8 | 1 byte | unsigned byte | -| s8 | 1 byte | signed byte | -| u16 | 2 bytes | unsigned short | -| s16 | 2 bytes | signed short | -| u32 | 4 bytes/1 word | unsigned int | -| s32 | 4 bytes/1 word | signed int | -| void* | 4 bytes/1 word | pointer | - -A pointer is sometimes mistaken for an s32. s32 is the default thing to use in the absence of any other information about the data. - -Useful data for guessing types: -- u8 is about 7 times more common than s8 (so the tutorial is a bit misleading) -- s16 is about 16 times more common than u16 -- s32 is about 8 times more common than u32 - -Another useful thing to put here: the prototype for an action function is -```C -typedef void (*ActorNameActionFunc)(struct ActorName*, PlayState*); -``` -where you replace `ActorName` by the actual actor name as used elsewhere in the actor, e.g. `EnJj`. - - -## Some Common Structs - - - -Here are the usual names and the sizes of some of the most common structs used in actors and their structs: -| Type | Usual name | Size | -| ----------------------- | --------------------- | --------------- | -| `Actor` | `actor` | 0x14C | -| `DynaPolyActor` | `dyna` | 0x164 | -| `Vec3f` | | 0xC | -| `Vec3s` | | 0x6 | -| `SkelAnime` | `skelAnime` | 0x44 | -| `Vec3s[limbCount]` | `jointTable` | 0x6 * limbCount | -| `Vec3s[limbCount]` | `morphTable` | 0x6 * limbCount | -| `ColliderCylinder` | `collider` | 0x4C | -| `ColliderQuad` | `collider` | 0x80 | -| `ColliderJntSph` | `collider` | 0x20 | -| `ColliderJntSphElement` | `colliderElements[n]` | 0x40 * n | -| `ColliderTris` | `collider` | 0x20 | -| `ColliderTrisElement` | `colliderElements[n]` | 0x5C * n | - -(`colliderElements` used to be called `colliderItems`, and we have not switched over fully in the repo yet.) - -## Padding - -### Alignment - -A stored variable or piece of data does not always start immediately after the previous one: there may be padding in between: `0`s that are never written or referred to, and so ignored. This is to do with how the processor accesses memory: it reads 1 word at a time, so multibyte objects are aligned so they cross as few word boundaries as possible. - -The clearest example of this is that variables with types that are 1 word in size (`s32`s and pointers, for example) are automatically shifted so that they start at the beginning of the next word, i.e. at an offset ending with one of `0,4,8,C`: this is called 4-alignment. This will also happen to `s16`s, but with 2-alignment - -### Struct padding - -In actor structs, this manifests as some of the char arrays not being completely replaced by actual variables. For example, BgIceTurara, the actor for icicles, has the following actor struct: - -```C -typedef struct BgIceTurara { - /* 0x0000 */ DynaPolyActor dyna; - /* 0x0164 */ BgIceTuraraActionFunc actionFunc; - /* 0x0168 */ s16 shiverTimer; - /* 0x016C */ ColliderCylinder collider; -} BgIceTurara; // size = 0x01B8 -``` - -Notice that even though `timer` is an `s16`, `collider` is at `this + 0x16C`: there was originally a `char unk_166[0x2]` left over from the original char array, but it has been removed without affecting the alignment. - -How do structs themselves align? A struct has the same alignment properties as its longest constituent (that is not itself a struct). For example, a `Vec3f` has 4-alignment, while a `Vec3s` has 2-alignment. - -A struct may also pad at the end: it will pad to the size of its largest non-struct element. Notably, every actor struct has size a whole number of words as well, so this phenomenon also occurs at the ends of structs: see, for example, EnJj's actor struct that we filled out in the tutorial: the `char unk_312[0x2]` is unnecessary, because it is used nowhere, and the struct pads to `0x314` anyway. - -For more information on this topic, there are plenty of guides elsewhere on the Internet. *The main thing to bear in mind for decomp purposes is that after finishing the functions, there may be some small parts of the actor struct that are just not used, because they were originally just struct padding.* - -### Padding at the end of sections - - - - - -In the ROM, each actor is layed out in the following order: - -- .text (Function instructions, separated into .s files, aka .text) -- .data (contents of the .data.s file) -- .rodata (read-only data, includes strings, floats, jumptables etc., moved to the appropriate function files in the OoT repo) -- .bss (varibles initialised to 0, not assigned a value when declared) -- .reloc (relocation information: you can ignore this) - -Each section is 0x10/16-aligned (qword aligned): each new section begins at an address with last digit `0`. This means that there can occur up to three words of padding at the end of each section. - -(The same occurs with any object divided into multiple .c files: each new file becomes 0x10 aligned.) - -#### Padding at the end of .text (function instructions) - -In function instructions, this manifests as a set of `nop`s at the end of the last function, and once the rest of the functions match, this is automatic. So you never need to worry about these. - -#### Padding at the end of .data - -In data, the last entry may contain up to 3 words of 0s as padding. These can safely be removed when migrating data, but make sure that you don't remove something that actually is accessed by the function and happens to be 0! - -For example, in `EnJj` we found that the last symbol in the data, -```C -glabel D_80A88CFC - .word 0x06007698, 0x06007A98, 0x06007E98, 0x00000000, 0x00000000 -``` -had 2 words of padding: only the first 3 entries are actually used. - -### Padding within the .data section - -Every distinct symbol in data is 4-aligned (word-aligned). So in the data, even if you have two `u8`s, they will be stored in addresses starting successive words: - -```C -u8 byte1 = 1 // will go to address ending in 0 -u8 byte2 = 2 // Will go to address ending in 4 -``` - -#### Fake symbols - -The process of separating the data is not flawless, and sometimes gives rise to symbols that are fake: that is, containing data that should not be stored by itself, but part of a different earlier symbol. - -Since `D_address` corresponds to the address where the symbol is stored, every address should be word-aligned, i.e. end in one of `0,4,8,C`. Any symbols that do not are fake, and the data attached to them should be joined to the data of previous symbol, with all references to them adjusted to the correct offset from the previous symbol. - -Thankfully most of the fake symbols have now been automatically eliminated, but that does not mean that there are none left. Symbols can also be fake if they have the correct alignment, but are rather harder to spot. diff --git a/docs/vscode.md b/docs/vscode.md index c88b85c072..c5cd0fc2ea 100644 --- a/docs/vscode.md +++ b/docs/vscode.md @@ -35,13 +35,17 @@ Many of VS Code's other shortcuts can be found on [its getting started page](htt ## C/C++ configuration -You can create a `.vscode/c_cpp_properties.json` file with `C/C++: Edit Configurations (JSON)` in the command box to customise how IntelliSense reads the repository (stuff like where to look for includes, flags, compiler defines, etc.) to make VSCode's IntelliSense plugin better able to understand the structure of the repository. This is a good default one to use for this project's repository: +You can create a `.vscode/c_cpp_properties.json` file with `C/C++: Edit Configurations (JSON)` in the command box to customise how IntelliSense reads the repository (stuff like where to look for includes, flags, compiler defines, etc.) to make VSCode's IntelliSense plugin better able to understand the structure of the repository. + +Below is a good default one to use for this project's repository, for the oot-gc-eu-mq-dbg version specifically. + +A more complete `c_cpp_properties.json` with configurations for all supported versions [can be found here](c_cpp_properties.json). ```jsonc { "configurations": [ { - "name": "N64 oot-gc-eu-mq-dbg", + "name": "oot-gc-eu-mq-dbg", "compilerPath": "${default}", // Needs to not be "" for -m32 to work "compilerArgs": [ "-m32" // Removes integer truncation warnings with gbi macros @@ -57,7 +61,16 @@ You can create a `.vscode/c_cpp_properties.json` file with `C/C++: Edit Configur ], "defines": [ "_LANGUAGE_C", // For gbi.h - "OOT_DEBUG=1" // If targeting a debug version + // Version-specific + "OOT_VERSION=OOT_GC_EU_MQ_DBG", + "OOT_REGION=REGION_EU", + "OOT_PAL=1", + "OOT_MQ=1", + "OOT_DEBUG=1", + "F3DEX_GBI_2", + "F3DEX_GBI_PL", + "GBI_DOWHILE", + "GBI_DEBUG" ], "cStandard": "gnu89", // C89 + some GNU extensions from C99 like C++ comments "cppStandard": "${default}" // Only ZAPD uses C++, so doesn't really matter diff --git a/extract_assets.py b/extract_assets.py index 815b1af498..a3f915c241 100755 --- a/extract_assets.py +++ b/extract_assets.py @@ -17,6 +17,7 @@ def SignalHandler(sig, frame): # Don't exit immediately to update the extracted assets file. def ExtractFile(assetConfig: version_config.AssetConfig, outputPath: Path, outputSourcePath: Path): + name = assetConfig.name xmlPath = assetConfig.xml_path version = globalVersionConfig.version if globalAbort.is_set(): @@ -31,15 +32,15 @@ def ExtractFile(assetConfig: version_config.AssetConfig, outputPath: Path, outpu execStr = f"{zapdPath} e -eh -i {xmlPath} -b extracted/{version}/baserom -o {outputPath} -osf {outputSourcePath} -gsf 1 -rconf {configPath} --cs-float both {ZAPDArgs}" - if "code" in xmlPath.parts or "overlays" in xmlPath.parts: + if name.startswith("code/") or name.startswith("overlays/"): assert assetConfig.start_offset is not None assert assetConfig.end_offset is not None execStr += f" --start-offset 0x{assetConfig.start_offset:X}" execStr += f" --end-offset 0x{assetConfig.end_offset:X}" - if "overlays" in xmlPath.parts: - overlayName = xmlPath.stem + if name.startswith("overlays/"): + overlayName = name.split("/")[1] baseAddress = globalVersionConfig.dmadata_segments[overlayName].vram + assetConfig.start_offset execStr += f" --base-address 0x{baseAddress:X}" diff --git a/format.py b/format.py index 2e5cbd08f7..775d188c18 100755 --- a/format.py +++ b/format.py @@ -31,7 +31,7 @@ APPLY_OPTS = "--format --style=file" # 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 -I." -DEFINES = "-D_LANGUAGE_C -DNON_MATCHING" +DEFINES = "-D_LANGUAGE_C -DNON_MATCHING -DF3DEX_GBI_2" COMPILER_OPTS = f"-fno-builtin -std=gnu90 -m32 -Wno-everything {INCLUDES} {DEFINES}" diff --git a/include/functions.h b/include/functions.h index d0547e5d68..a28a9e68fb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -343,7 +343,7 @@ s16 Actor_WorldPitchTowardActor(Actor* actorA, Actor* actorB); s16 Actor_WorldPitchTowardPoint(Actor* actor, Vec3f* refPoint); f32 Actor_WorldDistXZToActor(Actor* actorA, Actor* actorB); f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint); -void func_8002DBD0(Actor* actor, Vec3f* dest, Vec3f* pos); +void Actor_WorldToActorCoords(Actor* actor, Vec3f* dest, Vec3f* pos); f32 Actor_HeightDiff(Actor* actorA, Actor* actorB); f32 Player_GetHeight(Player* player); f32 func_8002DCE4(Player* player); diff --git a/include/macros.h b/include/macros.h index ed67abc4ac..c5ce822ae2 100644 --- a/include/macros.h +++ b/include/macros.h @@ -108,7 +108,12 @@ ? gSaveContext.save.info.equips.buttonItems[(button) + 1] \ : ITEM_NONE) +#if PLATFORM_N64 +#define CHECK_BTN_ALL(state, combo) (((state) & (combo)) == (combo)) +#else #define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0) +#endif + #define CHECK_BTN_ANY(state, combo) (((state) & (combo)) != 0) #define CHECK_FLAG_ALL(flags, mask) (((flags) & (mask)) == (mask)) @@ -187,9 +192,11 @@ extern struct GraphicsContext* __gfxCtx; (void)__gfxCtx; \ Graph_OpenDisps(dispRefs, gfxCtx, file, line) -#define CLOSE_DISPS(gfxCtx, file, line) \ - Graph_CloseDisps(dispRefs, gfxCtx, file, line); \ - } \ +#define CLOSE_DISPS(gfxCtx, file, line) \ + do { \ + Graph_CloseDisps(dispRefs, gfxCtx, file, line); \ + } while (0); \ + } \ (void)0 #define GRAPH_ALLOC(gfxCtx, size) Graph_Alloc(gfxCtx, size) @@ -221,7 +228,7 @@ extern struct GraphicsContext* __gfxCtx; s32 __dispPad #define CLOSE_DISPS(gfxCtx, file, line) \ - (void)0; \ + do {} while (0); \ } \ (void)0 @@ -249,9 +256,9 @@ extern struct GraphicsContext* __gfxCtx; #endif /* OOT_DEBUG */ #if OOT_NTSC -#define LANGUAGE_ARRAY(jpn, nes, ger, fra) { jpn, nes } +#define LANGUAGE_ARRAY(jpn, eng, ger, fra) { jpn, eng } #else -#define LANGUAGE_ARRAY(jpn, nes, ger, fra) { nes, ger, fra } +#define LANGUAGE_ARRAY(jpn, eng, ger, fra) { eng, ger, fra } #endif /** diff --git a/include/regs.h b/include/regs.h index 85ab8e7dd8..52d78742b4 100644 --- a/include/regs.h +++ b/include/regs.h @@ -100,6 +100,14 @@ #define R_TEXTBOX_TEXHEIGHT YREG(17) #define R_TEXTBOX_WIDTH YREG(22) #define R_TEXTBOX_HEIGHT YREG(23) +#if OOT_NTSC +#define R_KALEIDO_UNK1(i) YREG(48 + (i)) +#define R_KALEIDO_UNK2(i) YREG(50 + (i)) +#define R_KALEIDO_UNK3(i) YREG(52 + (i)) +#define R_KALEIDO_UNK4(i) YREG(54 + (i)) +#define R_KALEIDO_UNK5(i) YREG(56 + (i)) +#define R_KALEIDO_UNK6(i) YREG(58 + (i)) +#endif #define R_TEXTBOX_ICON_XPOS YREG(71) #define R_TEXTBOX_ICON_YPOS YREG(72) #define R_TEXTBOX_ICON_DIMENSION YREG(75) @@ -198,6 +206,12 @@ #define R_B_LABEL_X(i) WREG(40 + (i)) #define R_B_LABEL_Y(i) WREG(43 + (i)) #define R_A_LABEL_Z(i) WREG(46 + (i)) +#define R_KALEIDO_UNK1(i) WREG(49 + (i)) +#define R_KALEIDO_UNK2(i) WREG(52 + (i)) +#define R_KALEIDO_UNK3(i) WREG(55 + (i)) +#define R_KALEIDO_UNK4(i) WREG(58 + (i)) +#define R_KALEIDO_UNK5(i) WREG(61 + (i)) +#define R_KALEIDO_UNK6(i) WREG(64 + (i)) #endif #define R_DGN_MINIMAP_X WREG(68) #define R_DGN_MINIMAP_Y WREG(69) diff --git a/include/variables.h b/include/variables.h index 10f67329ff..930a4c2cad 100644 --- a/include/variables.h +++ b/include/variables.h @@ -19,6 +19,7 @@ extern u32 gViConfigFeatures; extern f32 gViConfigXScale; extern f32 gViConfigYScale; extern OSPiHandle* gCartHandle; +extern s32 gCurrentRegion; extern u32 __osPiAccessQueueEnabled; extern OSViMode osViModePalLan1; extern s32 osViClock; diff --git a/include/z64.h b/include/z64.h index 7e0b60ee5e..1c24f026c7 100644 --- a/include/z64.h +++ b/include/z64.h @@ -207,7 +207,9 @@ typedef struct { /* 0x000A4 */ Vtx* windowVtx; /* 0x000A8 */ u8* staticSegment; /* 0x000AC */ u8* parameterSegment; +#if OOT_PAL /* 0x000B0 */ char unk_B0[0x8]; +#endif /* 0x000B8 */ View view; /* 0x001E0 */ SramContext sramCtx; /* 0x001E4 */ char unk_1E4[0x4]; @@ -226,7 +228,9 @@ typedef struct { /* 0x1CA1C */ u32 questItems[3]; /* 0x1CA28 */ s16 n64ddFlags[3]; /* 0x1CA2E */ s8 defense[3]; +#if OOT_PAL /* 0x1CA32 */ u16 health[3]; +#endif /* 0x1CA38 */ s16 buttonIndex; /* 0x1CA3A */ s16 confirmButtonIndex; // 0: yes, 1: quit /* 0x1CA3C */ s16 menuMode; diff --git a/include/z64actor.h b/include/z64actor.h index ef436ff9fd..f5c2a3ef08 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -34,7 +34,7 @@ typedef struct { /* 0x14 */ ActorFunc destroy; // Destructor /* 0x18 */ ActorFunc update; // Update Function /* 0x1C */ ActorFunc draw; // Draw function -} ActorInit; // size = 0x20 +} ActorProfile; // size = 0x20 /** * @see ACTOROVL_ALLOC_ABSOLUTE @@ -90,7 +90,7 @@ typedef struct { /* 0x08 */ void* vramStart; /* 0x0C */ void* vramEnd; /* 0x10 */ void* loadedRamAddr; // original name: "allocp" - /* 0x14 */ ActorInit* initInfo; + /* 0x14 */ ActorProfile* profile; /* 0x18 */ char* name; /* 0x1C */ u16 allocType; // See `ACTOROVL_ALLOC_` defines /* 0x1E */ s8 numLoaded; // original name: "clients" diff --git a/include/z64effect.h b/include/z64effect.h index e90ff85af6..4e34ec0f7f 100644 --- a/include/z64effect.h +++ b/include/z64effect.h @@ -199,14 +199,14 @@ typedef void (*EffectSsDrawFunc)(struct PlayState* play, u32 index, struct Effec typedef struct { /* 0x00 */ u32 type; /* 0x04 */ EffectSsInitFunc init; -} EffectSsInit; // size = 0x08 +} EffectSsProfile; // size = 0x08 typedef struct { /* 0x00 */ RomFile file; /* 0x08 */ void* vramStart; /* 0x0C */ void* vramEnd; /* 0x10 */ void* loadedRamAddr; - /* 0x14 */ EffectSsInit* initInfo; + /* 0x14 */ EffectSsProfile* profile; /* 0x18 */ u8 unk_18; } EffectSsOverlay; // size = 0x1C diff --git a/retail_progress.py b/retail_progress.py index 21a98ccdbc..58bb5c5401 100755 --- a/retail_progress.py +++ b/retail_progress.py @@ -387,7 +387,7 @@ if __name__ == "__main__": help="find functions with diffs in the given source file (if omitted, print summary of diffs for all files)", ) parser.add_argument( - "-v", "--version", help="version to compare", default="gc-eu-mq" + "-v", "--version", help="version to compare", default="ntsc-1.2" ) parser.add_argument( "--data", diff --git a/src/boot/build.c b/src/boot/build.c index a69c28d1f3..47facdaa96 100644 --- a/src/boot/build.c +++ b/src/boot/build.c @@ -1,15 +1,29 @@ #include "macros.h" +#if PLATFORM_N64 +const char gBuildTeam[] = "zelda@srd44"; +#else const char gBuildTeam[] = "zelda@srd022j"; +#endif -#if OOT_VERSION == OOT_GC_US +#if OOT_VERSION == OOT_NTSC_1_2 +const char gBuildDate[] = "98-11-12 18:17:03"; +#elif OOT_VERSION == OOT_GC_JP +const char gBuildDate[] = "02-10-29 23:49:53"; +#elif OOT_VERSION == OOT_GC_JP_MQ +const char gBuildDate[] = "02-10-30 00:15:15"; +#elif OOT_VERSION == OOT_GC_US const char gBuildDate[] = "02-12-19 13:28:09"; +#elif OOT_VERSION == OOT_GC_US_MQ +const char gBuildDate[] = "02-12-19 14:05:42"; #elif OOT_VERSION == OOT_GC_EU_MQ_DBG const char gBuildDate[] = "03-02-21 00:16:31"; #elif OOT_VERSION == OOT_GC_EU const char gBuildDate[] = "03-02-21 20:12:23"; #elif OOT_VERSION == OOT_GC_EU_MQ const char gBuildDate[] = "03-02-21 20:37:19"; +#elif OOT_VERSION == OOT_GC_JP_CE +const char gBuildDate[] = "03-10-08 21:53:00"; #else #error "Unsupported OOT_VERSION" #endif diff --git a/src/boot/cic6105.c b/src/boot/cic6105.c new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/boot/cic6105.c @@ -0,0 +1 @@ + diff --git a/src/boot/idle.c b/src/boot/idle.c index 3d62994c47..17a983400b 100644 --- a/src/boot/idle.c +++ b/src/boot/idle.c @@ -1,10 +1,7 @@ #include "global.h" #include "terminal.h" -// For retail BSS ordering, the block number of sMainThread must be 0 or -// just above (the exact upper bound depends on the block numbers assigned to -// extern variables declared in headers). -#pragma increment_block_number 60 +#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" OSThread sMainThread; STACK(sMainStack, 0x900); diff --git a/src/boot/z_locale.c b/src/boot/z_locale.c index acd151ce40..72e1831717 100644 --- a/src/boot/z_locale.c +++ b/src/boot/z_locale.c @@ -2,7 +2,7 @@ #include "region.h" #include "terminal.h" -u32 gCurrentRegion = 0; +s32 gCurrentRegion = 0; LocaleCartInfo sCartInfo; void Locale_Init(void) { diff --git a/src/code/code_n64dd_800AD410.c b/src/code/code_n64dd_800AD410.c new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/code/code_n64dd_800AD410.c @@ -0,0 +1 @@ + diff --git a/src/code/code_n64dd_800AD4C0.c b/src/code/code_n64dd_800AD4C0.c new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/code/code_n64dd_800AD4C0.c @@ -0,0 +1 @@ + diff --git a/src/code/fault.c b/src/code/fault.c index 16f1a183f7..17d7a214d9 100644 --- a/src/code/fault.c +++ b/src/code/fault.c @@ -44,14 +44,8 @@ #include "terminal.h" #include "alloca.h" -// For retail BSS ordering, the block number of sFaultInstance must be 0 or -// just above (the exact upper bound depends on the block numbers assigned to -// extern variables declared in headers). -#if OOT_DEBUG -#pragma increment_block_number 0 -#else -#pragma increment_block_number 20 -#endif +#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-eu-mq-dbg:0 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64" \ + "gc-us-mq:64" void FaultDrawer_Init(void); void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled); diff --git a/src/code/game.c b/src/code/game.c index 7d290e3329..ec67cde03e 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -197,8 +197,6 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { Gfx_Close(polyOpaP, newDList); POLY_OPA_DISP = newDList; - if (1) {} - CLOSE_DISPS(gfxCtx, "../game.c", 800); Debug_DrawText(gfxCtx); @@ -238,8 +236,6 @@ void func_800C49F4(GraphicsContext* gfxCtx) { Gfx_Close(polyOpaP, newDlist); POLY_OPA_DISP = newDlist; - if (1) {} - CLOSE_DISPS(gfxCtx, "../game.c", 865); } diff --git a/src/code/graph.c b/src/code/graph.c index 92df90d8ff..3e5df91458 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -246,8 +246,6 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) { task->yield_data_ptr = gGfxSPTaskYieldBuffer; - if (1) {} - task->yield_data_size = sizeof(gGfxSPTaskYieldBuffer); scTask->next = NULL; diff --git a/src/code/main.c b/src/code/main.c index ca72ab0e55..3dada11023 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -7,9 +7,7 @@ s32 gScreenWidth = SCREEN_WIDTH; s32 gScreenHeight = SCREEN_HEIGHT; u32 gSystemHeapSize = 0; -// For retail BSS ordering, the block number of gIrqMgr must be greater than the -// the block numbers assigned to extern variables above (declared in variables.h). -#pragma increment_block_number 220 +#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" PreNmiBuff* gAppNmiBufferPtr; Scheduler gScheduler; diff --git a/src/code/sys_math3d.c b/src/code/sys_math3d.c index bb86036ad5..6ac7482da3 100644 --- a/src/code/sys_math3d.c +++ b/src/code/sys_math3d.c @@ -5,9 +5,7 @@ #include "macros.h" #include "sys_math3d.h" -// For retail BSS ordering, the block number of cbf in Math3D_CylVsCylOverlapCenterDist -// must be 0. -#pragma increment_block_number 108 +#pragma increment_block_number "gc-eu:108 gc-eu-mq:108 gc-jp:108 gc-jp-ce:108 gc-jp-mq:108 gc-us:108 gc-us-mq:108" s32 Math3D_LineVsLineClosestTwoPoints(Vec3f* lineAPointA, Vec3f* lineAPointB, Vec3f* lineBPointA, Vec3f* lineBPointB, Vec3f* lineAClosestToB, Vec3f* lineBClosestToA); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 890a05a681..9768a272a8 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -8,8 +8,7 @@ #include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" #include "assets/objects/object_bdoor/object_bdoor.h" -// For retail BSS ordering, the block number of sCurCeilingPoly -// must be between 2 and 243 inclusive. +#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" static CollisionPoly* sCurCeilingPoly; static s32 sCurCeilingBgId; @@ -988,9 +987,8 @@ f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint) { /** * Convert `pos` to be relative to the actor's position and yaw, store into `dest`. - * Actor_WorldToActorCoords */ -void func_8002DBD0(Actor* actor, Vec3f* dest, Vec3f* pos) { +void Actor_WorldToActorCoords(Actor* actor, Vec3f* dest, Vec3f* pos) { f32 cosY; f32 sinY; f32 deltaX; @@ -1906,7 +1904,7 @@ s32 func_8002F9EC(PlayState* play, Actor* actor, CollisionPoly* poly, s32 bgId, return false; } -#pragma increment_block_number 22 +#pragma increment_block_number "gc-eu:22 gc-eu-mq:22 gc-jp:22 gc-jp-ce:22 gc-jp-mq:22 gc-us:22 gc-us-mq:22" // Local data used for Farore's Wind light (stored in BSS) LightInfo D_8015BC00; @@ -2834,7 +2832,7 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos s16 rotY, s16 rotZ, s16 params) { s32 pad; Actor* actor; - ActorInit* actorInit; + ActorProfile* profile; s32 objectSlot; ActorOverlay* overlayEntry; uintptr_t temp; @@ -2862,7 +2860,7 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos if (overlayEntry->vramStart == NULL) { ACTOR_DEBUG_PRINTF("オーバーレイではありません\n"); // "Not an overlay" - actorInit = overlayEntry->initInfo; + profile = overlayEntry->profile; } else { if (overlayEntry->loadedRamAddr != NULL) { ACTOR_DEBUG_PRINTF("既にロードされています\n"); // "Already loaded" @@ -2905,30 +2903,30 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos overlayEntry->numLoaded = 0; } - actorInit = (void*)(uintptr_t)((overlayEntry->initInfo != NULL) - ? (void*)((uintptr_t)overlayEntry->initInfo - - (intptr_t)((uintptr_t)overlayEntry->vramStart - - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + profile = (void*)(uintptr_t)((overlayEntry->profile != NULL) + ? (void*)((uintptr_t)overlayEntry->profile - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); } - objectSlot = Object_GetSlot(&play->objectCtx, actorInit->objectId); + objectSlot = Object_GetSlot(&play->objectCtx, profile->objectId); if ((objectSlot < 0) || - ((actorInit->category == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num))) { + ((profile->category == ACTORCAT_ENEMY) && Flags_GetClear(play, play->roomCtx.curRoom.num))) { // "No data bank!! (profilep->bank=%d)" PRINTF(VT_COL(RED, WHITE) "データバンク無し!!<データバンク=%d>(profilep->bank=%d)\n" VT_RST, objectSlot, - actorInit->objectId); + profile->objectId); Actor_FreeOverlay(overlayEntry); return NULL; } - actor = ZELDA_ARENA_MALLOC(actorInit->instanceSize, name, 1); + actor = ZELDA_ARENA_MALLOC(profile->instanceSize, name, 1); if (actor == NULL) { // "Actor class cannot be reserved! %s " PRINTF(VT_COL(RED, WHITE) "Actorクラス確保できません! %s <サイズ=%dバイト>\n", VT_RST, name, - actorInit->instanceSize); + profile->instanceSize); Actor_FreeOverlay(overlayEntry); return NULL; } @@ -2942,32 +2940,36 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos // "Actor client No. %d" ACTOR_DEBUG_PRINTF("アクタークライアントは %d 個目です\n", overlayEntry->numLoaded); - Lib_MemSet((u8*)actor, actorInit->instanceSize, 0); + Lib_MemSet((u8*)actor, profile->instanceSize, 0); actor->overlayEntry = overlayEntry; - actor->id = actorInit->id; - actor->flags = actorInit->flags; + actor->id = profile->id; + actor->flags = profile->flags; - if (actorInit->id == ACTOR_EN_PART) { + if (profile->id == ACTOR_EN_PART) { actor->objectSlot = rotZ; rotZ = 0; } else { actor->objectSlot = objectSlot; } - actor->init = actorInit->init; - actor->destroy = actorInit->destroy; - actor->update = actorInit->update; - actor->draw = actorInit->draw; + actor->init = profile->init; + actor->destroy = profile->destroy; + actor->update = profile->update; + actor->draw = profile->draw; + actor->room = play->roomCtx.curRoom.num; + actor->home.pos.x = posX; actor->home.pos.y = posY; actor->home.pos.z = posZ; + actor->home.rot.x = rotX; actor->home.rot.y = rotY; actor->home.rot.z = rotZ; + actor->params = params; - Actor_AddToCategory(actorCtx, actor, actorInit->category); + Actor_AddToCategory(actorCtx, actor, profile->category); temp = gSegments[6]; Actor_Init(actor, play); diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 4a6ce25671..ff162db4b4 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -11,9 +11,9 @@ #undef DEFINE_ACTOR_INTERNAL #undef DEFINE_ACTOR_UNSET -// Init Vars declarations (also used in the table below) -#define DEFINE_ACTOR(name, _1, _2, _3) extern ActorInit name##_InitVars; -#define DEFINE_ACTOR_INTERNAL(name, _1, _2, _3) extern ActorInit name##_InitVars; +// Profile declarations (also used in the table below) +#define DEFINE_ACTOR(name, _1, _2, _3) extern ActorProfile name##_Profile; +#define DEFINE_ACTOR_INTERNAL(name, _1, _2, _3) extern ActorProfile name##_Profile; #define DEFINE_ACTOR_UNSET(_0) #include "tables/actor_table.h" @@ -31,15 +31,15 @@ _ovl_##name##SegmentStart, \ _ovl_##name##SegmentEnd, \ NULL, \ - &name##_InitVars, \ + &name##_Profile, \ nameString, \ allocType, \ 0, \ }, -#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, nameString) \ - { \ - ROM_FILE_UNSET, NULL, NULL, NULL, &name##_InitVars, nameString, allocType, 0, \ +#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, nameString) \ + { \ + ROM_FILE_UNSET, NULL, NULL, NULL, &name##_Profile, nameString, allocType, 0, \ }, #else @@ -51,15 +51,15 @@ _ovl_##name##SegmentStart, \ _ovl_##name##SegmentEnd, \ NULL, \ - &name##_InitVars, \ + &name##_Profile, \ NULL, \ allocType, \ 0, \ }, -#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, _3) \ - { \ - ROM_FILE_UNSET, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0, \ +#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, _3) \ + { \ + ROM_FILE_UNSET, NULL, NULL, NULL, &name##_Profile, NULL, allocType, 0, \ }, #endif @@ -88,7 +88,7 @@ void ActorOverlayTable_LogPrint(void) { for (i = 0, overlayEntry = &gActorOverlayTable[0]; i < (u32)gMaxActorId; i++, overlayEntry++) { PRINTF("%08x %08x %08x %08x %08x %08x %s\n", overlayEntry->file.vromStart, overlayEntry->file.vromEnd, - overlayEntry->vramStart, overlayEntry->vramEnd, overlayEntry->loadedRamAddr, &overlayEntry->initInfo->id, + overlayEntry->vramStart, overlayEntry->vramEnd, overlayEntry->loadedRamAddr, &overlayEntry->profile->id, overlayEntry->name != NULL ? overlayEntry->name : "?"); } #endif diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 4caafe18c9..ae9a744c5f 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -4,9 +4,7 @@ #include "terminal.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" -// For retail BSS ordering, the block number of D_8015BD7C -// must be between 88 and 123 inclusive. -#pragma increment_block_number 30 +#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" s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags); s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange); @@ -3632,7 +3630,7 @@ s32 Camera_KeepOn3(Camera* camera) { return 1; } -#pragma increment_block_number 100 +#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" 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 9b0e03131f..4303b0577b 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -12,9 +12,7 @@ typedef s32 (*ColChkLineFunc)(PlayState*, CollisionCheckContext*, Collider*, Vec #define SAC_ENABLE (1 << 0) -// For retail BSS ordering, the block number of sparkInit in CollisionCheck_BlueBlood -// must be between 183 and 255 inclusive. -#pragma increment_block_number 50 +#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64" #if OOT_DEBUG /** @@ -2695,7 +2693,7 @@ typedef enum { /* 2 */ MASSTYPE_NORMAL } ColChkMassType; -#pragma increment_block_number 253 +#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-jp:252 gc-jp-ce:252 gc-jp-mq:252 gc-us:252 gc-us-mq:252" /** * Get mass type. Immovable colliders cannot be pushed, while heavy colliders can only be pushed by heavy and immovable diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index a0588d9295..08e0184951 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -1,9 +1,7 @@ #include "global.h" +#include "region.h" -// For retail BSS ordering, the block number of D_8015FA88 must be 0 or -// just above (the exact upper bound depends on the block numbers assigned to -// extern variables declared in headers). -#pragma increment_block_number 60 +#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" ALIGNED(16) SaveContext gSaveContext; u32 D_8015FA88; @@ -24,7 +22,16 @@ void SaveContext_Init(void) { gSaveContext.dogIsLost = true; gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.prevHudVisibilityMode = HUD_VISIBILITY_ALL; -#if OOT_NTSC +#if OOT_NTSC && OOT_VERSION < OOT_GC_US + if (gCurrentRegion == REGION_JP) { + gSaveContext.language = LANGUAGE_JPN; + } + if (gCurrentRegion == REGION_US) { + gSaveContext.language = LANGUAGE_ENG; + } +#elif OOT_VERSION == OOT_GC_US || OOT_VERSION == OOT_GC_US_MQ gSaveContext.language = LANGUAGE_ENG; +#elif OOT_VERSION == OOT_GC_JP_CE + gSaveContext.language = LANGUAGE_JPN; #endif } diff --git a/src/code/z_construct.c b/src/code/z_construct.c index 90a3311876..6935d77e9f 100644 --- a/src/code/z_construct.c +++ b/src/code/z_construct.c @@ -247,6 +247,22 @@ void Regs_InitDataImpl(void) { YREG(45) = 236; YREG(46) = 36; YREG(47) = 0; + +#if OOT_NTSC + R_KALEIDO_UNK1(0) = -45; + R_KALEIDO_UNK1(1) = -48; + R_KALEIDO_UNK2(0) = 16; + R_KALEIDO_UNK2(1) = 22; + R_KALEIDO_UNK3(0) = -55; + R_KALEIDO_UNK3(1) = -53; + R_KALEIDO_UNK4(0) = 43; + R_KALEIDO_UNK4(1) = 47; + R_KALEIDO_UNK5(0) = -33; + R_KALEIDO_UNK5(1) = -42; + R_KALEIDO_UNK6(0) = -33; + R_KALEIDO_UNK6(1) = -37; +#else + // Same as above, although these regs are now unused for PAL versions YREG(48) = -45; YREG(49) = -48; YREG(50) = 16; @@ -259,6 +275,8 @@ void Regs_InitDataImpl(void) { YREG(57) = -42; YREG(58) = -33; YREG(59) = -37; +#endif + YREG(60) = 14; YREG(61) = -2; YREG(62) = -2; @@ -534,24 +552,24 @@ void Regs_InitDataImpl(void) { R_A_LABEL_Z(0) = -380; R_A_LABEL_Z(1) = -360; R_A_LABEL_Z(2) = -350; - WREG(49) = -48; - WREG(50) = 16; - WREG(51) = -62; - WREG(52) = 22; - WREG(53) = -84; - WREG(54) = 20; - WREG(55) = -53; - WREG(56) = 40; - WREG(57) = -64; - WREG(58) = 47; - WREG(59) = -84; - WREG(60) = 44; - WREG(61) = -42; - WREG(62) = 32; - WREG(63) = -45; - WREG(64) = -37; - WREG(65) = 30; - WREG(66) = -50; + R_KALEIDO_UNK1(0) = -48; + R_KALEIDO_UNK1(1) = 16; + R_KALEIDO_UNK1(2) = -62; + R_KALEIDO_UNK2(0) = 22; + R_KALEIDO_UNK2(1) = -84; + R_KALEIDO_UNK2(2) = 20; + R_KALEIDO_UNK3(0) = -53; + R_KALEIDO_UNK3(1) = 40; + R_KALEIDO_UNK3(2) = -64; + R_KALEIDO_UNK4(0) = 47; + R_KALEIDO_UNK4(1) = -84; + R_KALEIDO_UNK4(2) = 44; + R_KALEIDO_UNK5(0) = -42; + R_KALEIDO_UNK5(1) = 32; + R_KALEIDO_UNK5(2) = -45; + R_KALEIDO_UNK6(0) = -37; + R_KALEIDO_UNK6(1) = 30; + R_KALEIDO_UNK6(2) = -50; #endif R_DGN_MINIMAP_X = 204; diff --git a/src/code/z_debug.c b/src/code/z_debug.c index 652b6f643a..7a38b3dedb 100644 --- a/src/code/z_debug.c +++ b/src/code/z_debug.c @@ -308,8 +308,6 @@ void Debug_DrawText(GraphicsContext* gfxCtx) { Gfx_Close(opaStart, gfx); POLY_OPA_DISP = gfx; - if (1) {} - CLOSE_DISPS(gfxCtx, "../z_debug.c", 664); GfxPrint_Destroy(&printer); diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 6961ed25be..f86e32dcc5 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -120,9 +120,7 @@ u16 gCamAtSplinePointsAppliedFrame; u16 gCamEyePointAppliedFrame; u16 gCamAtPointAppliedFrame; -// For retail BSS ordering, the block number of sReturnToCamId must be greater -// than that of gCamAtPointAppliedFrame (declared in variables.h). -#pragma increment_block_number 180 +#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" // Cam ID to return to when a scripted cutscene is finished s16 sReturnToCamId; @@ -2224,7 +2222,6 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) { Gfx_Close(prevDisplayList, displayList); POLY_OPA_DISP = displayList; - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_demo.c", 4108); } #endif diff --git a/src/code/z_draw.c b/src/code/z_draw.c index f890804eb3..671b8d0e2a 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -768,8 +768,6 @@ void GetItem_DrawSmallRupee(PlayState* play, s16 drawId) { Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY); - if (1) {} - Gfx_SetupDL_25Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_draw.c", 1140), G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].dlists[1]); diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 47722faaf8..09715288aa 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -452,8 +452,6 @@ void EffectBlure_DrawElemNoInterpolation(EffectBlure* this, EffectBlureElement* vtx[2].v.cn[2] = sp7C.b; vtx[2].v.cn[3] = sp7C.a; - if (1) {} // Necessary to match - sp60.x = sp84.x; sp60.y = sp84.y; sp60.z = sp84.z; diff --git a/src/code/z_eff_ss_dead.c b/src/code/z_eff_ss_dead.c index be283f773c..c77b7f2153 100644 --- a/src/code/z_eff_ss_dead.c +++ b/src/code/z_eff_ss_dead.c @@ -23,8 +23,6 @@ void func_80026230(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3) { POLY_OPA_DISP = displayListHead; - if (1) {} // Necessary to match - CLOSE_DISPS(play->state.gfxCtx, "../z_eff_ss_dead.c", 129); } @@ -44,8 +42,6 @@ void func_80026400(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3) { POLY_OPA_DISP = displayListHead; - if (1) {} // Necessary to match - CLOSE_DISPS(play->state.gfxCtx, "../z_eff_ss_dead.c", 153); } } @@ -84,8 +80,6 @@ void func_80026690(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3) { POLY_XLU_DISP = displayListHead; - if (1) {} // Necessary to match - CLOSE_DISPS(play->state.gfxCtx, "../z_eff_ss_dead.c", 194); } diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 20691e7162..d6d58659df 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -174,7 +174,7 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) { s32 index; u32 overlaySize; EffectSsOverlay* overlayEntry; - EffectSsInit* initInfo; + EffectSsProfile* profile; overlayEntry = &gEffectSsOverlayTable[type]; @@ -191,7 +191,7 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) { if (overlayEntry->vramStart == NULL) { // "Not an overlay" PRINTF("EffectSoftSprite2_makeEffect():オーバーレイではありません。\n"); - initInfo = overlayEntry->initInfo; + profile = overlayEntry->profile; } else { if (overlayEntry->loadedRamAddr == NULL) { overlayEntry->loadedRamAddr = ZELDA_ARENA_MALLOC_R(overlaySize, "../z_effect_soft_sprite.c", 585); @@ -218,19 +218,19 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) { PRINTF(VT_RST); } - initInfo = (void*)(uintptr_t)((overlayEntry->initInfo != NULL) - ? (void*)((uintptr_t)overlayEntry->initInfo - - (intptr_t)((uintptr_t)overlayEntry->vramStart - - (uintptr_t)overlayEntry->loadedRamAddr)) - : NULL); + profile = (void*)(uintptr_t)((overlayEntry->profile != NULL) + ? (void*)((uintptr_t)overlayEntry->profile - + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); } - if (initInfo->init == NULL) { + if (profile->init == NULL) { // "Effects have already been loaded, but the constructor is NULL so the addition will not occur. // Please fix this. (Waste of memory) %08x %d" PRINTF("EffectSoftSprite2_makeEffect():すでにエフェクトはロード済みで\nすが," "コンストラクターがNULLなので追加をやめます。\n直してください。(メモリーの無駄) %08x %d\n", - initInfo, type); + profile, type); return; } @@ -240,7 +240,7 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams) { sEffectSsInfo.table[index].type = type; sEffectSsInfo.table[index].priority = priority; - if (initInfo->init(play, index, &sEffectSsInfo.table[index], initParams) == 0) { + if (profile->init(play, index, &sEffectSsInfo.table[index], initParams) == 0) { PRINTF(VT_FGCOL(GREEN)); // "Construction failed for some reason. The constructor returned an error. // Ceasing effect addition." diff --git a/src/code/z_effect_soft_sprite_dlftbls.c b/src/code/z_effect_soft_sprite_dlftbls.c index 3fb498b33f..cb24257c87 100644 --- a/src/code/z_effect_soft_sprite_dlftbls.c +++ b/src/code/z_effect_soft_sprite_dlftbls.c @@ -9,8 +9,8 @@ #undef DEFINE_EFFECT_SS #undef DEFINE_EFFECT_SS_UNSET -// Init Vars declarations (also used in the table below) -#define DEFINE_EFFECT_SS(name, _1) extern EffectSsInit name##_InitVars; +// Profile declarations (also used in the table below) +#define DEFINE_EFFECT_SS(name, _1) extern EffectSsProfile name##_Profile; #define DEFINE_EFFECT_SS_UNSET(_0) #include "tables/effect_ss_table.h" @@ -19,9 +19,9 @@ #undef DEFINE_EFFECT_SS_UNSET // Effect SS Overlay Table definition -#define DEFINE_EFFECT_SS(name, _1) \ - { \ - ROM_FILE(ovl_##name), _ovl_##name##SegmentStart, _ovl_##name##SegmentEnd, NULL, &name##_InitVars, 1, \ +#define DEFINE_EFFECT_SS(name, _1) \ + { \ + ROM_FILE(ovl_##name), _ovl_##name##SegmentStart, _ovl_##name##SegmentEnd, NULL, &name##_Profile, 1, \ }, #define DEFINE_EFFECT_SS_UNSET(_0) \ diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index 21c5ebd757..57799c22e9 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -20,7 +20,7 @@ void EnAObj_SetupBlockRot(EnAObj* this, s16 type); void EnAObj_SetupBoulderFragment(EnAObj* this, s16 type); void EnAObj_SetupBlock(EnAObj* this, s16 type); -ActorInit En_A_Obj_InitVars = { +ActorProfile En_A_Obj_Profile = { /**/ ACTOR_EN_A_OBJ, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 9e2e762498..7306c4689f 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -20,7 +20,7 @@ void EnItem00_DrawCollectible(EnItem00* this, PlayState* play); void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play); void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play); -ActorInit En_Item00_InitVars = { +ActorProfile En_Item00_Profile = { /**/ ACTOR_EN_ITEM00, /**/ ACTORCAT_MISC, /**/ FLAGS, diff --git a/src/code/z_fcurve_data_skelanime.c b/src/code/z_fcurve_data_skelanime.c index e4d4b8a772..2348fa13a4 100644 --- a/src/code/z_fcurve_data_skelanime.c +++ b/src/code/z_fcurve_data_skelanime.c @@ -162,8 +162,6 @@ void SkelCurve_DrawLimb(PlayState* play, s32 limbIndex, SkelCurve* skelCurve, Ov OPEN_DISPS(play->state.gfxCtx, "../z_fcurve_data_skelanime.c", 279); - if (1) {} - Matrix_Push(); if ((overrideLimbDraw == NULL) || diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 03eae95416..01bab1b8d2 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -1,10 +1,7 @@ #include "global.h" #include "terminal.h" -// For retail BSS ordering, the block number of sKaleidoScopeUpdateFunc must be 0 or -// just above (the exact upper bound depends on the block numbers assigned to -// extern variables declared in headers). -#pragma increment_block_number 60 +#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" void (*sKaleidoScopeUpdateFunc)(PlayState* play); void (*sKaleidoScopeDrawFunc)(PlayState* play); diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 60f5c651f9..f0f36341d6 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -7,10 +7,7 @@ #include "assets/objects/gameplay_keep/gameplay_keep.h" #include "assets/objects/gameplay_field_keep/gameplay_field_keep.h" -// For retail BSS ordering, the block number of sLensFlareUnused must be lower -// than the extern variables declared in the header (e.g. gLightningStrike) -// while the block number of sNGameOverLightNode must be higher. -#pragma increment_block_number 80 +#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" typedef enum { /* 0x00 */ LIGHTNING_BOLT_START, @@ -215,10 +212,7 @@ s16 sLightningFlashAlpha; s16 sSunDepthTestX; s16 sSunDepthTestY; -// These variables could be moved farther down in the file to reduce the amount -// of block number padding here, but currently this causes BSS ordering issues -// for debug. -#pragma increment_block_number 217 +#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" LightNode* sNGameOverLightNode; LightInfo sNGameOverLightInfo; @@ -990,7 +984,6 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex gSPEndDisplayList(displayList++); Gfx_Close(prevDisplayList, displayList); POLY_OPA_DISP = displayList; - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_kankyo.c", 1690); } #endif diff --git a/src/code/z_message.c b/src/code/z_message.c index 999e95dc8f..1ce84c7ac7 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -3850,7 +3850,9 @@ void Message_DrawDebugText(PlayState* play, Gfx** p) { void Message_Draw(PlayState* play) { Gfx* plusOne; Gfx* polyOpaP; - +#if OOT_VERSION < OOT_GC_US + s32 pad; +#endif #if OOT_DEBUG s16 watchVar; #endif @@ -3868,7 +3870,6 @@ void Message_Draw(PlayState* play) { Gfx_Close(polyOpaP, plusOne); POLY_OPA_DISP = plusOne; } - if (1) {} #endif plusOne = Gfx_Open(polyOpaP = POLY_OPA_DISP); @@ -3901,6 +3902,9 @@ void Message_Update(PlayState* play) { 0x0400, 0x0400, 0x0200, 0x0000, 0x1038, 0x0008, 0x200A, 0x088B, 0x0007, 0x0009, 0x000A, 0x107E, 0x2008, 0x2007, 0x0015, 0x0016, 0x0017, 0x0003, 0x0000, 0x270B, 0x00C8, 0x012C, 0x012D, 0xFFDA, 0x0014, 0x0016, 0x0014, 0x0016, }; +#if OOT_VERSION < OOT_GC_US + static s32 sUnknown = 0; +#endif static u8 D_80153D74 = 0; MessageContext* msgCtx = &play->msgCtx; InterfaceContext* interfaceCtx = &play->interfaceCtx; @@ -3911,6 +3915,9 @@ void Message_Update(PlayState* play) { s16 averageY; s16 playerFocusScreenPosY; s16 actorFocusScreenPosY; +#if OOT_VERSION < OOT_GC_US + s32 pad[2]; +#endif #if OOT_DEBUG if (BREG(0) != 0) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 12d0f9312c..a8584ea291 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2115,9 +2115,8 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l action += DO_ACTION_MAX; } - if ((action != LANGUAGE_ENG * DO_ACTION_MAX + DO_ACTION_NONE) && - (action != LANGUAGE_GER * DO_ACTION_MAX + DO_ACTION_NONE) && - (action != LANGUAGE_FRA * DO_ACTION_MAX + DO_ACTION_NONE)) { + if ((action != 0 * DO_ACTION_MAX + DO_ACTION_NONE) && (action != 1 * DO_ACTION_MAX + DO_ACTION_NONE) && + (action != 2 * DO_ACTION_MAX + DO_ACTION_NONE)) { osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, 1); DMA_REQUEST_ASYNC(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE), diff --git a/src/code/z_play.c b/src/code/z_play.c index 465dc4e9ad..9d9f1a9d67 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -168,10 +168,12 @@ void Play_SetupTransition(PlayState* this, s32 transitionType) { break; default: -#if OOT_NTSC +#if OOT_VERSION < OOT_GC_EU_MQ_DBG HUNGUP_AND_CRASH("../z_play.c", 2287); -#else +#elif OOT_VERSION < OOT_GC_JP_CE HUNGUP_AND_CRASH("../z_play.c", 2290); +#else + HUNGUP_AND_CRASH("../z_play.c", 2293); #endif break; } diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index 1eb12319ca..38812cb0f6 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -17,7 +17,7 @@ void Player_Destroy(Actor* thisx, PlayState* play); void Player_Update(Actor* thisx, PlayState* play); void Player_Draw(Actor* thisx, PlayState* play); -ActorInit Player_InitVars = { +ActorProfile Player_Profile = { /**/ ACTOR_PLAYER, /**/ ACTORCAT_PLAYER, /**/ FLAGS, diff --git a/src/code/z_scene.c b/src/code/z_scene.c index ccb9cde84e..c8b3ecbb6f 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -205,7 +205,7 @@ BAD_RETURN(s32) Scene_CommandPlayerEntryList(PlayState* play, SceneCmd* cmd) { linkObjectId = gLinkObjectIds[((void)0, gSaveContext.save.linkAge)]; - gActorOverlayTable[playerEntry->id].initInfo->objectId = linkObjectId; + gActorOverlayTable[playerEntry->id].profile->objectId = linkObjectId; Object_SpawnPersistent(&play->objectCtx, linkObjectId); } diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c index b38aa2c8e2..d1cd007abd 100644 --- a/src/code/z_scene_table.c +++ b/src/code/z_scene_table.c @@ -415,8 +415,6 @@ void Scene_DrawConfigWaterTemple(PlayState* play) { OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 5535); - if (1) {} // Necessary to match - spB0 = (play->roomCtx.unk_74[1] >> 8) & 0xFF; spAC = play->roomCtx.unk_74[1] & 0xFF; gameplayFrames = play->gameplayFrames; @@ -709,8 +707,6 @@ void Scene_DrawConfigLakesideLaboratory(PlayState* play) { 32, 32)); gSPSegment(POLY_XLU_DISP++, 0x09, Gfx_TexScroll(play->state.gfxCtx, 0, 255 - (gameplayFrames * 10) % 256, 32, 64)); - if (1) {} - gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); @@ -748,8 +744,6 @@ void* sGTGEntranceTextures[] = { void Scene_DrawConfigGerudoTrainingGround(PlayState* play) { u32 gameplayFrames; - if (0) {} // Necessary to match - OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6290); gameplayFrames = play->gameplayFrames; @@ -914,8 +908,6 @@ void* sForestTempleEntranceTextures[] = { void Scene_DrawConfigForestTemple(PlayState* play) { u32 gameplayFrames; - if (0) {} // Necessary to match - OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6640); gameplayFrames = play->gameplayFrames; @@ -1042,8 +1034,6 @@ void Scene_DrawConfigZorasRiver(PlayState* play) { (gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128, 32, 32)); - if (1) {} - gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); @@ -1177,8 +1167,6 @@ void Scene_DrawConfigZorasFountain(PlayState* play) { Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 0, (gameplayFrames * 1) % 128, 32, 32, 1, 0, (gameplayFrames * 1) % 128, 32, 32)); - if (1) {} - gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); @@ -1552,8 +1540,6 @@ void Scene_DrawConfigInsideGanonsCastle(PlayState* play) { gameplayFrames = play->gameplayFrames; - if (1) {} - gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128, (gameplayFrames * 1) % 512, 32, 128, 1, gameplayFrames % 128, @@ -1659,7 +1645,8 @@ void (*sSceneDrawConfigs[SDC_MAX])(PlayState*) = { }; void Scene_Draw(PlayState* play) { - if ((R_HREG_MODE == HREG_MODE_SCENE_CONFIG) && OOT_DEBUG) { +#if OOT_DEBUG + if (R_HREG_MODE == HREG_MODE_SCENE_CONFIG) { if (R_SCENE_CONFIG_INIT != HREG_MODE_SCENE_CONFIG) { R_SCENE_CONFIG_INIT = HREG_MODE_SCENE_CONFIG; R_SCENE_CONFIG_DRAW_DEFAULT_DLIST = 1; @@ -1694,4 +1681,7 @@ void Scene_Draw(PlayState* play) { } else { sSceneDrawConfigs[play->sceneDrawConfig](play); } +#else + sSceneDrawConfigs[play->sceneDrawConfig](play); +#endif } diff --git a/src/code/z_sram.c b/src/code/z_sram.c index fb2a4d1195..af77828f56 100644 --- a/src/code/z_sram.c +++ b/src/code/z_sram.c @@ -10,7 +10,9 @@ #define HEALTH_CAP offsetof(SaveContext, save.info.playerData.healthCapacity) #define QUEST offsetof(SaveContext, save.info.inventory.questItems) #define DEFENSE offsetof(SaveContext, save.info.inventory.defenseHearts) +#if OOT_PAL #define HEALTH offsetof(SaveContext, save.info.playerData.health) +#endif #define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE)) @@ -726,13 +728,17 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt MemCpy(&fileSelect->defense[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEFENSE, sizeof(fileSelect->defense[0])); MemCpy(&fileSelect->defense[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEFENSE, sizeof(fileSelect->defense[0])); +#if OOT_PAL MemCpy(&fileSelect->health[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH, sizeof(fileSelect->health[0])); MemCpy(&fileSelect->health[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH, sizeof(fileSelect->health[0])); MemCpy(&fileSelect->health[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH, sizeof(fileSelect->health[0])); +#endif PRINTF("f_64dd=%d, %d, %d\n", fileSelect->n64ddFlags[0], fileSelect->n64ddFlags[1], fileSelect->n64ddFlags[2]); PRINTF("heart_status=%d, %d, %d\n", fileSelect->defense[0], fileSelect->defense[1], fileSelect->defense[2]); +#if OOT_PAL PRINTF("now_life=%d, %d, %d\n", fileSelect->health[0], fileSelect->health[1], fileSelect->health[2]); +#endif } void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) { @@ -821,11 +827,15 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) { MemCpy(&fileSelect->n64ddFlags[gSaveContext.fileNum], sramCtx->readBuff + j + N64DD, sizeof(fileSelect->n64ddFlags[0])); MemCpy(&fileSelect->defense[gSaveContext.fileNum], sramCtx->readBuff + j + DEFENSE, sizeof(fileSelect->defense[0])); +#if OOT_PAL MemCpy(&fileSelect->health[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH, sizeof(fileSelect->health[0])); +#endif PRINTF("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileSelect->n64ddFlags[gSaveContext.fileNum]); PRINTF("heart_status[%d]=%d\n", gSaveContext.fileNum, fileSelect->defense[gSaveContext.fileNum]); +#if OOT_PAL PRINTF("now_life[%d]=%d\n", gSaveContext.fileNum, fileSelect->health[gSaveContext.fileNum]); +#endif } void Sram_EraseSave(FileSelectState* fileSelect, SramContext* sramCtx) { @@ -879,8 +889,10 @@ void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) { sizeof(fileSelect->n64ddFlags[0])); MemCpy(&fileSelect->defense[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + DEFENSE, sizeof(fileSelect->defense[0])); +#if OOT_PAL MemCpy(&fileSelect->health[fileSelect->copyDestFileIndex], (sramCtx->readBuff + offset) + HEALTH, sizeof(fileSelect->health[0])); +#endif PRINTF("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileSelect->n64ddFlags[gSaveContext.fileNum]); PRINTF("heart_status[%d]=%d\n", gSaveContext.fileNum, fileSelect->defense[gSaveContext.fileNum]); @@ -903,22 +915,30 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) { for (i = 0; i < ARRAY_COUNTU(sZeldaMagic) - 3; i++) { if (sZeldaMagic[i + SRAM_HEADER_MAGIC] != sramCtx->readBuff[i + SRAM_HEADER_MAGIC]) { PRINTF("SRAM破壊!!!!!!\n"); // "SRAM destruction! ! ! ! ! !" +#if OOT_PAL gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE]; +#endif + MemCpy(sramCtx->readBuff, sZeldaMagic, sizeof(sZeldaMagic)); + +#if OOT_PAL sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language; +#endif Sram_WriteSramHeader(sramCtx); } } gSaveContext.audioSetting = sramCtx->readBuff[SRAM_HEADER_SOUND] & 3; gSaveContext.zTargetSetting = sramCtx->readBuff[SRAM_HEADER_ZTARGET] & 1; - gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE]; +#if OOT_PAL + gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE]; if (gSaveContext.language >= LANGUAGE_MAX) { gSaveContext.language = LANGUAGE_ENG; sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language; Sram_WriteSramHeader(sramCtx); } +#endif #if OOT_DEBUG if (CHECK_BTN_ANY(gameState->input[2].cur.button, BTN_DRIGHT)) { diff --git a/src/libultra/gu/mtxutil.c b/src/libultra/gu/mtxutil.c new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/libultra/gu/mtxutil.c @@ -0,0 +1 @@ + diff --git a/src/libultra/os/getintmask.s b/src/libultra/os/getintmask.s new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/libultra/os/settime.c b/src/libultra/os/settime.c new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/libultra/os/settime.c @@ -0,0 +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 9552c45460..b1ec6987ac 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -11,7 +11,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play); void ArmsHook_Wait(ArmsHook* this, PlayState* play); void ArmsHook_Shoot(ArmsHook* this, PlayState* play); -ActorInit Arms_Hook_InitVars = { +ActorProfile Arms_Hook_Profile = { /**/ ACTOR_ARMS_HOOK, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 afc9cc19c6..2dde5c416c 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -20,7 +20,7 @@ void ArrowFire_Hit(ArrowFire* this, PlayState* play); #include "assets/overlays/ovl_Arrow_Fire/ovl_Arrow_Fire.c" -ActorInit Arrow_Fire_InitVars = { +ActorProfile Arrow_Fire_Profile = { /**/ ACTOR_ARROW_FIRE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 ff8e88896e..da5e1bc000 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -21,7 +21,7 @@ void ArrowIce_Hit(ArrowIce* this, PlayState* play); #include "assets/overlays/ovl_Arrow_Ice/ovl_Arrow_Ice.c" -ActorInit Arrow_Ice_InitVars = { +ActorProfile Arrow_Ice_Profile = { /**/ ACTOR_ARROW_ICE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 fb96f1124b..87546c713f 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -21,7 +21,7 @@ void ArrowLight_Hit(ArrowLight* this, PlayState* play); #include "assets/overlays/ovl_Arrow_Light/ovl_Arrow_Light.c" -ActorInit Arrow_Light_InitVars = { +ActorProfile Arrow_Light_Profile = { /**/ ACTOR_ARROW_LIGHT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 bd1270ab2f..0786f214df 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 @@ -43,7 +43,7 @@ void BgBdanObjects_WaitForTimerExpired(BgBdanObjects* this, PlayState* play); void BgBdanObjects_WaitForPlayerOnTop(BgBdanObjects* this, PlayState* play); void BgBdanObjects_FallToLowerPos(BgBdanObjects* this, PlayState* play); -ActorInit Bg_Bdan_Objects_InitVars = { +ActorProfile Bg_Bdan_Objects_Profile = { /**/ ACTOR_BG_BDAN_OBJECTS, /**/ ACTORCAT_BG, /**/ FLAGS, 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 cba055ea84..bc19400642 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 @@ -42,7 +42,7 @@ void func_8086DCE8(BgBdanSwitch* this, PlayState* play); void func_8086DDA8(BgBdanSwitch* this); void func_8086DDC0(BgBdanSwitch* this, PlayState* play); -ActorInit Bg_Bdan_Switch_InitVars = { +ActorProfile Bg_Bdan_Switch_Profile = { /**/ ACTOR_BG_BDAN_SWITCH, /**/ ACTORCAT_SWITCH, /**/ FLAGS, 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 44950a46cd..729dd81552 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 @@ -17,7 +17,7 @@ void BgBomGuard_Update(Actor* thisx, PlayState* play); void func_8086E638(BgBomGuard* this, PlayState* play); -ActorInit Bg_Bom_Guard_InitVars = { +ActorProfile Bg_Bom_Guard_Profile = { /**/ ACTOR_BG_BOM_GUARD, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 ff7ebd99c2..17622037f2 100644 --- a/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Bombwall/z_bg_bombwall.c @@ -69,7 +69,7 @@ static ColliderTrisInit sTrisInit = { sTrisElementsInit, }; -ActorInit Bg_Bombwall_InitVars = { +ActorProfile Bg_Bombwall_Profile = { /**/ ACTOR_BG_BOMBWALL, /**/ ACTORCAT_BG, /**/ FLAGS, 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 3fdafb1444..1278f8c569 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 @@ -24,7 +24,7 @@ void BgBowlWall_FallDoEffects(BgBowlWall* this, PlayState* play); void BgBowlWall_FinishFall(BgBowlWall* this, PlayState* play); void BgBowlWall_Reset(BgBowlWall* this, PlayState* play); -ActorInit Bg_Bowl_Wall_InitVars = { +ActorProfile Bg_Bowl_Wall_Profile = { /**/ ACTOR_BG_BOWL_WALL, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 ef92c82eec..b7ca1a7316 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -26,7 +26,7 @@ void BgBreakwall_WaitForObject(BgBreakwall* this, PlayState* play); void BgBreakwall_Wait(BgBreakwall* this, PlayState* play); void BgBreakwall_LavaCoverMove(BgBreakwall* this, PlayState* play); -ActorInit Bg_Breakwall_InitVars = { +ActorProfile Bg_Breakwall_Profile = { /**/ ACTOR_BG_BREAKWALL, /**/ ACTORCAT_BG, /**/ FLAGS, 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 cf0746a99a..469aaa75a7 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 @@ -17,7 +17,7 @@ void BgDdanJd_Draw(Actor* thisx, PlayState* play); void BgDdanJd_Idle(BgDdanJd* this, PlayState* play); void BgDdanJd_Move(BgDdanJd* this, PlayState* play); -ActorInit Bg_Ddan_Jd_InitVars = { +ActorProfile Bg_Ddan_Jd_Profile = { /**/ ACTOR_BG_DDAN_JD, /**/ ACTORCAT_BG, /**/ FLAGS, 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 f5396acc28..1909b801e6 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 @@ -18,7 +18,7 @@ void BgDdanKd_CheckForExplosions(BgDdanKd* this, PlayState* play); void BgDdanKd_LowerStairs(BgDdanKd* this, PlayState* play); void BgDdanKd_DoNothing(BgDdanKd* this, PlayState* play); -ActorInit Bg_Ddan_Kd_InitVars = { +ActorProfile Bg_Ddan_Kd_Profile = { /**/ ACTOR_BG_DDAN_KD, /**/ ACTORCAT_BG, /**/ FLAGS, 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 d1ccf08fc0..ac5460a296 100644 --- a/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c +++ b/src/overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.c @@ -20,7 +20,7 @@ void BgDodoago_OpenJaw(BgDodoago* this, PlayState* play); void BgDodoago_DoNothing(BgDodoago* this, PlayState* play); void BgDodoago_LightOneEye(BgDodoago* this, PlayState* play); -ActorInit Bg_Dodoago_InitVars = { +ActorProfile Bg_Dodoago_Profile = { /**/ ACTOR_BG_DODOAGO, /**/ ACTORCAT_BG, /**/ FLAGS, 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 4187b34023..5e90d07746 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 @@ -54,7 +54,7 @@ void BgDyYoseizo_DrawEffects(BgDyYoseizo* this, PlayState* play); static s32 sUnusedGetItemIds[] = { GI_FARORES_WIND, GI_NAYRUS_LOVE, GI_DINS_FIRE }; -ActorInit Bg_Dy_Yoseizo_InitVars = { +ActorProfile Bg_Dy_Yoseizo_Profile = { /**/ ACTOR_BG_DY_YOSEIZO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7cf14989c1..88eae8d914 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 @@ -25,7 +25,7 @@ void BgGanonOtyuka_WaitToFall(BgGanonOtyuka* this, PlayState* play); void BgGanonOtyuka_Fall(BgGanonOtyuka* this, PlayState* play); void BgGanonOtyuka_DoNothing(Actor* thisx, PlayState* play); -ActorInit Bg_Ganon_Otyuka_InitVars = { +ActorProfile Bg_Ganon_Otyuka_Profile = { /**/ ACTOR_BG_GANON_OTYUKA, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c b/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c index af27042725..27b71b28d2 100644 --- a/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c +++ b/src/overlays/actors/ovl_Bg_Gate_Shutter/z_bg_gate_shutter.c @@ -20,7 +20,7 @@ void func_80878300(BgGateShutter* this, PlayState* play); void func_808783AC(BgGateShutter* this, PlayState* play); void func_808783D4(BgGateShutter* this, PlayState* play); -ActorInit Bg_Gate_Shutter_InitVars = { +ActorProfile Bg_Gate_Shutter_Profile = { /**/ ACTOR_BG_GATE_SHUTTER, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 e8bcca20b1..090076a438 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 @@ -19,7 +19,7 @@ void func_808787A4(BgGjyoBridge* this, PlayState* play); void BgGjyoBridge_TriggerCutscene(BgGjyoBridge* this, PlayState* play); void BgGjyoBridge_SpawnBridge(BgGjyoBridge* this, PlayState* play); -ActorInit Bg_Gjyo_Bridge_InitVars = { +ActorProfile Bg_Gjyo_Bridge_Profile = { /**/ ACTOR_BG_GJYO_BRIDGE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 287cd60ea0..fc0bc51bf1 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 @@ -21,7 +21,7 @@ void BgGndDarkmeiro_UpdateBlockTimer(BgGndDarkmeiro* this, PlayState* play); void BgGndDarkmeiro_UpdateStaticBlock(BgGndDarkmeiro* this, PlayState* play); void BgGndDarkmeiro_UpdateSwitchBlock(BgGndDarkmeiro* this, PlayState* play); -ActorInit Bg_Gnd_Darkmeiro_InitVars = { +ActorProfile Bg_Gnd_Darkmeiro_Profile = { /**/ ACTOR_BG_GND_DARKMEIRO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 809158c8a3..8773496bb4 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 @@ -18,7 +18,7 @@ void BgGndFiremeiro_Sink(BgGndFiremeiro* this, PlayState* play); void BgGndFiremeiro_Shake(BgGndFiremeiro* this, PlayState* play); void BgGndFiremeiro_Rise(BgGndFiremeiro* this, PlayState* play); -ActorInit Bg_Gnd_Firemeiro_InitVars = { +ActorProfile Bg_Gnd_Firemeiro_Profile = { /**/ ACTOR_BG_GND_FIREMEIRO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 2f347fada9..7ac595bc19 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 @@ -23,7 +23,7 @@ void BgGndIceblock_Draw(Actor* thisx, PlayState* play); void BgGndIceblock_Idle(BgGndIceblock* this, PlayState* play); void BgGndIceblock_Slide(BgGndIceblock* this, PlayState* play); -ActorInit Bg_Gnd_Iceblock_InitVars = { +ActorProfile Bg_Gnd_Iceblock_Profile = { /**/ ACTOR_BG_GND_ICEBLOCK, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 a6766c62af..e7e243e9e0 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 @@ -14,7 +14,7 @@ void BgGndNisekabe_Destroy(Actor* thisx, PlayState* play); void BgGndNisekabe_Update(Actor* thisx, PlayState* play); void BgGndNisekabe_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Gnd_Nisekabe_InitVars = { +ActorProfile Bg_Gnd_Nisekabe_Profile = { /**/ ACTOR_BG_GND_NISEKABE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 05cf7cde56..0007e54344 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 @@ -19,7 +19,7 @@ void func_8087AF38(BgGndSoulmeiro* this, PlayState* play); void func_8087B284(BgGndSoulmeiro* this, PlayState* play); void func_8087B350(BgGndSoulmeiro* this, PlayState* play); -ActorInit Bg_Gnd_Soulmeiro_InitVars = { +ActorProfile Bg_Gnd_Soulmeiro_Profile = { /**/ ACTOR_BG_GND_SOULMEIRO, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c index 43e2d8c90d..563a67e3da 100644 --- a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c +++ b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c @@ -14,13 +14,13 @@ void BgHaka_Destroy(Actor* thisx, PlayState* play); void BgHaka_Update(Actor* thisx, PlayState* play); void BgHaka_Draw(Actor* thisx, PlayState* play); -void func_8087B758(BgHaka* this, Player* player); -void func_8087B7E8(BgHaka* this, PlayState* play); -void func_8087B938(BgHaka* this, PlayState* play); -void func_8087BAAC(BgHaka* this, PlayState* play); -void func_8087BAE4(BgHaka* this, PlayState* play); +void BgHaka_CheckPlayerOnDirtPatch(BgHaka* this, Player* player); +void BgHaka_IdleClosed(BgHaka* this, PlayState* play); +void BgHaka_Pull(BgHaka* this, PlayState* play); +void BgHaka_IdleOpened(BgHaka* this, PlayState* play); +void BgHaka_IdleLockedClosed(BgHaka* this, PlayState* play); -ActorInit Bg_Haka_InitVars = { +ActorProfile Bg_Haka_Profile = { /**/ ACTOR_BG_HAKA, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -46,7 +46,7 @@ void BgHaka_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&gGravestoneCol, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - this->actionFunc = func_8087B7E8; + this->actionFunc = BgHaka_IdleClosed; } void BgHaka_Destroy(Actor* thisx, PlayState* play) { @@ -55,16 +55,16 @@ void BgHaka_Destroy(Actor* thisx, PlayState* play) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); } -void func_8087B758(BgHaka* this, Player* player) { - Vec3f sp1C; +void BgHaka_CheckPlayerOnDirtPatch(BgHaka* this, Player* player) { + Vec3f playerRelativePos; - func_8002DBD0(&this->dyna.actor, &sp1C, &player->actor.world.pos); - if (fabsf(sp1C.x) < 34.6f && sp1C.z > -112.8f && sp1C.z < -36.0f) { + Actor_WorldToActorCoords(&this->dyna.actor, &playerRelativePos, &player->actor.world.pos); + if (fabsf(playerRelativePos.x) < 34.6f && playerRelativePos.z > -112.8f && playerRelativePos.z < -36.0f) { player->stateFlags2 |= PLAYER_STATE2_FORCE_SAND_FLOOR_SOUND; } } -void func_8087B7E8(BgHaka* this, PlayState* play) { +void BgHaka_IdleClosed(BgHaka* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->dyna.unk_150 != 0.0f) { @@ -73,8 +73,8 @@ void func_8087B7E8(BgHaka* this, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_4; if (!Play_InCsMode(play)) { Message_StartTextbox(play, 0x5073, NULL); - this->dyna.actor.params = 100; - this->actionFunc = func_8087BAE4; + this->dyna.actor.params = 100; // Used as a cooldown for displaying Graveyard Boy's warning + this->actionFunc = BgHaka_IdleLockedClosed; } } else if (0.0f < this->dyna.unk_150 || (play->sceneId == SCENE_LAKE_HYLIA && !LINK_IS_ADULT && !Flags_GetSwitch(play, 0x23))) { @@ -82,24 +82,25 @@ void func_8087B7E8(BgHaka* this, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_4; } else { this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y + 0x8000; - this->actionFunc = func_8087B938; + this->actionFunc = BgHaka_Pull; } } - func_8087B758(this, player); + BgHaka_CheckPlayerOnDirtPatch(this, player); } -void func_8087B938(BgHaka* this, PlayState* play) { +void BgHaka_Pull(BgHaka* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 sp38; + s32 reachedMaxPullDist; this->dyna.actor.speed += 0.05f; this->dyna.actor.speed = CLAMP_MAX(this->dyna.actor.speed, 1.5f); - sp38 = Math_StepToF(&this->dyna.actor.minVelocityY, 60.0f, this->dyna.actor.speed); + // minVelocityY is used to keep track of the distance pulled from home + reachedMaxPullDist = Math_StepToF(&this->dyna.actor.minVelocityY, 60.0f, this->dyna.actor.speed); this->dyna.actor.world.pos.x = Math_SinS(this->dyna.actor.world.rot.y) * this->dyna.actor.minVelocityY + this->dyna.actor.home.pos.x; this->dyna.actor.world.pos.z = Math_CosS(this->dyna.actor.world.rot.y) * this->dyna.actor.minVelocityY + this->dyna.actor.home.pos.z; - if (sp38 != 0) { + if (reachedMaxPullDist) { this->dyna.unk_150 = 0.0f; player->stateFlags2 &= ~PLAYER_STATE2_4; if (this->dyna.actor.params == 1) { @@ -108,12 +109,12 @@ void func_8087B938(BgHaka* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_POH, this->dyna.actor.home.pos.x, this->dyna.actor.home.pos.y, this->dyna.actor.home.pos.z, 0, this->dyna.actor.shape.rot.y, 0, 1); } - this->actionFunc = func_8087BAAC; + this->actionFunc = BgHaka_IdleOpened; } func_8002F974(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); } -void func_8087BAAC(BgHaka* this, PlayState* play) { +void BgHaka_IdleOpened(BgHaka* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->dyna.unk_150 != 0.0f) { @@ -122,7 +123,7 @@ void func_8087BAAC(BgHaka* this, PlayState* play) { } } -void func_8087BAE4(BgHaka* this, PlayState* play) { +void BgHaka_IdleLockedClosed(BgHaka* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 pad; @@ -134,9 +135,9 @@ void func_8087BAE4(BgHaka* this, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_4; } if (this->dyna.actor.params == 0) { - this->actionFunc = func_8087B7E8; + this->actionFunc = BgHaka_IdleClosed; } - func_8087B758(this, player); + BgHaka_CheckPlayerOnDirtPatch(this, player); } void BgHaka_Update(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 ed45e2cfc8..b83921bf6c 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 @@ -52,7 +52,7 @@ static f32 sStatueDistToPlayer = 0; static s16 sStatueRotY; -ActorInit Bg_Haka_Gate_InitVars = { +ActorProfile Bg_Haka_Gate_Profile = { /**/ ACTOR_BG_HAKA_GATE, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -326,8 +326,6 @@ void BgHakaGate_DrawFlame(BgHakaGate* this, PlayState* play) { Matrix_RotateY(BINANG_TO_RAD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); scale = this->vFlameScale * 0.00001f; - if (1) {} - Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_bg_haka_gate.c", 744), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 b1d38adc98..4b2abe6638 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 @@ -24,7 +24,7 @@ void BgHakaHuta_SlideOpen(BgHakaHuta* this, PlayState* play); void func_8087D720(BgHakaHuta* this, PlayState* play); void BgHakaHuta_DoNothing(BgHakaHuta* this, PlayState* play); -ActorInit Bg_Haka_Huta_InitVars = { +ActorProfile Bg_Haka_Huta_Profile = { /**/ ACTOR_BG_HAKA_HUTA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 39082dcb64..3d6de9f415 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 @@ -19,7 +19,7 @@ void func_8087DB24(BgHakaMegane* this, PlayState* play); void func_8087DBF0(BgHakaMegane* this, PlayState* play); void BgHakaMegane_DoNothing(BgHakaMegane* this, PlayState* play); -ActorInit Bg_Haka_Megane_InitVars = { +ActorProfile Bg_Haka_Megane_Profile = { /**/ ACTOR_BG_HAKA_MEGANE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 6c8e3bf119..275317dc0e 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 @@ -23,7 +23,7 @@ void func_8087E288(BgHakaMeganeBG* this, PlayState* play); void func_8087E2D8(BgHakaMeganeBG* this, PlayState* play); void func_8087E34C(BgHakaMeganeBG* this, PlayState* play); -ActorInit Bg_Haka_MeganeBG_InitVars = { +ActorProfile Bg_Haka_MeganeBG_Profile = { /**/ ACTOR_BG_HAKA_MEGANEBG, /**/ ACTORCAT_BG, /**/ FLAGS, 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 c96055ac4a..9a83cbfcaf 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 @@ -26,7 +26,7 @@ void BgHakaSgami_Draw(Actor* thisx, PlayState* play); void BgHakaSgami_SetupSpin(BgHakaSgami* this, PlayState* play); void BgHakaSgami_Spin(BgHakaSgami* this, PlayState* play); -ActorInit Bg_Haka_Sgami_InitVars = { +ActorProfile Bg_Haka_Sgami_Profile = { /**/ ACTOR_BG_HAKA_SGAMI, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 19e7e18a74..d462920c63 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 @@ -21,7 +21,7 @@ void BgHakaShip_SetupCrash(BgHakaShip* this, PlayState* play); void BgHakaShip_CrashShake(BgHakaShip* this, PlayState* play); void BgHakaShip_CrashFall(BgHakaShip* this, PlayState* play); -ActorInit Bg_Haka_Ship_InitVars = { +ActorProfile Bg_Haka_Ship_Profile = { /**/ ACTOR_BG_HAKA_SHIP, /**/ ACTORCAT_BG, /**/ FLAGS, 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 c65a1a2f0a..a017dcf17e 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 @@ -29,7 +29,7 @@ void func_80880D68(BgHakaTrap* this); static UNK_TYPE D_80880F30 = 0; -ActorInit Bg_Haka_Trap_InitVars = { +ActorProfile Bg_Haka_Trap_Profile = { /**/ ACTOR_BG_HAKA_TRAP, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -208,7 +208,7 @@ void func_8087FFC0(BgHakaTrap* this, PlayState* play) { f32 zNonNegative; Player* player = GET_PLAYER(play); - func_8002DBD0(&this->dyna.actor, &sp28, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &sp28, &player->actor.world.pos); sine = Math_SinS(this->dyna.actor.shape.rot.y); cosine = Math_CosS(this->dyna.actor.shape.rot.y); @@ -431,7 +431,7 @@ void func_808809E4(BgHakaTrap* this, PlayState* play, s16 arg2) { Player* player = GET_PLAYER(play); Vec3f sp18; - func_8002DBD0(&this->dyna.actor, &sp18, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &sp18, &player->actor.world.pos); if ((fabsf(sp18.x) < 70.0f) && (fabsf(sp18.y) < 100.0f) && (sp18.z < 500.0f) && (GET_PLAYER(play)->currentBoots != PLAYER_BOOTS_IRON)) { 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 c499e31915..74ec4f9998 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 @@ -18,7 +18,7 @@ void BgHakaTubo_Draw(Actor* thisx, PlayState* play); void BgHakaTubo_Idle(BgHakaTubo* this, PlayState* play); void BgHakaTubo_DropCollectible(BgHakaTubo* this, PlayState* play); -ActorInit Bg_Haka_Tubo_InitVars = { +ActorProfile Bg_Haka_Tubo_Profile = { /**/ ACTOR_BG_HAKA_TUBO, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -228,7 +228,6 @@ void BgHakaTubo_DrawFlameCircle(BgHakaTubo* this, PlayState* play) { MTXMODE_NEW); Matrix_RotateY(BINANG_TO_RAD(this->dyna.actor.shape.rot.y), MTXMODE_APPLY); Matrix_Scale(0.07f, 0.04f, 0.07f, MTXMODE_APPLY); - if (1) {} gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 0, 170, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 255); gSPSegment(POLY_XLU_DISP++, 0x08, 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 e40af64939..588fddb5ed 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 @@ -18,7 +18,7 @@ void BgHakaWater_LowerWater(BgHakaWater* this, PlayState* play); void BgHakaWater_Wait(BgHakaWater* this, PlayState* play); void BgHakaWater_ChangeWaterLevel(BgHakaWater* this, PlayState* play); -ActorInit Bg_Haka_Water_InitVars = { +ActorProfile Bg_Haka_Water_Profile = { /**/ ACTOR_BG_HAKA_WATER, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 781dd579b4..dd4b281487 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 @@ -54,7 +54,7 @@ static ColliderCylinderInit sCylinderInit = { static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f }; -ActorInit Bg_Haka_Zou_InitVars = { +ActorProfile Bg_Haka_Zou_Profile = { /**/ ACTOR_BG_HAKA_ZOU, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 85549a63d7..683bf85b70 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 @@ -27,7 +27,7 @@ void BgHeavyBlock_Fly(BgHeavyBlock* this, PlayState* play); void BgHeavyBlock_Land(BgHeavyBlock* this, PlayState* play); void BgHeavyBlock_DoNothing(BgHeavyBlock* this, PlayState* play); -ActorInit Bg_Heavy_Block_InitVars = { +ActorProfile Bg_Heavy_Block_Profile = { /**/ ACTOR_BG_HEAVY_BLOCK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 394a828b61..080c74d958 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 @@ -53,7 +53,7 @@ static CollisionCheckInfoInit sCcInfoInit = { 1, 80, 100, MASS_IMMOVABLE }; static BgHidanCurtainParams sHCParams[] = { { 81, 144, 0.090f, 144.0f, 5.0f }, { 46, 88, 0.055f, 88.0f, 3.0f } }; -ActorInit Bg_Hidan_Curtain_InitVars = { +ActorProfile Bg_Hidan_Curtain_Profile = { /**/ ACTOR_BG_HIDAN_CURTAIN, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 16e1d80423..7e7732883f 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 @@ -17,7 +17,7 @@ void BgHidanDalm_Draw(Actor* thisx, PlayState* play); void BgHidanDalm_Wait(BgHidanDalm* this, PlayState* play); void BgHidanDalm_Shrink(BgHidanDalm* this, PlayState* play); -ActorInit Bg_Hidan_Dalm_InitVars = { +ActorProfile Bg_Hidan_Dalm_Profile = { /**/ ACTOR_BG_HIDAN_DALM, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c index 130b38c124..cd89e1fd16 100644 --- a/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c +++ b/src/overlays/actors/ovl_Bg_Hidan_Firewall/z_bg_hidan_firewall.c @@ -21,7 +21,7 @@ void BgHidanFirewall_Erupt(BgHidanFirewall* this, PlayState* play); void BgHidanFirewall_Collide(BgHidanFirewall* this, PlayState* play); void BgHidanFirewall_ColliderFollowPlayer(BgHidanFirewall* this, PlayState* play); -ActorInit Bg_Hidan_Firewall_InitVars = { +ActorProfile Bg_Hidan_Firewall_Profile = { /**/ ACTOR_BG_HIDAN_FIREWALL, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -81,12 +81,12 @@ void BgHidanFirewall_Destroy(Actor* thisx, PlayState* play) { s32 BgHidanFirewall_CheckProximity(BgHidanFirewall* this, PlayState* play) { Player* player; - Vec3f distance; + Vec3f playerRelativePos; player = GET_PLAYER(play); - func_8002DBD0(&this->actor, &distance, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &playerRelativePos, &player->actor.world.pos); - if (fabsf(distance.x) < 100.0f && fabsf(distance.z) < 120.0f) { + if (fabsf(playerRelativePos.x) < 100.0f && fabsf(playerRelativePos.z) < 120.0f) { return 1; } return 0; @@ -137,39 +137,39 @@ void BgHidanFirewall_Collide(BgHidanFirewall* this, PlayState* play) { void BgHidanFirewall_ColliderFollowPlayer(BgHidanFirewall* this, PlayState* play) { Player* player; - Vec3f sp30; + Vec3f playerRelativePos; f32 temp_ret; f32 sp28; f32 phi_f0; player = GET_PLAYER(play); - func_8002DBD0(&this->actor, &sp30, &player->actor.world.pos); - if (sp30.x < -70.0f) { - sp30.x = -70.0f; + Actor_WorldToActorCoords(&this->actor, &playerRelativePos, &player->actor.world.pos); + if (playerRelativePos.x < -70.0f) { + playerRelativePos.x = -70.0f; } else { - if (70.0f < sp30.x) { + if (70.0f < playerRelativePos.x) { phi_f0 = 70.0f; } else { - phi_f0 = sp30.x; + phi_f0 = playerRelativePos.x; } - sp30.x = phi_f0; + playerRelativePos.x = phi_f0; } if (this->actor.params == 0) { - if (0.0f < sp30.z) { - sp30.z = -25.0f; + if (0.0f < playerRelativePos.z) { + playerRelativePos.z = -25.0f; this->actor.params = -1; } else { - sp30.z = 25.0f; + playerRelativePos.z = 25.0f; this->actor.params = 1; } } else { - sp30.z = this->actor.params * 25.0f; + playerRelativePos.z = this->actor.params * 25.0f; } sp28 = Math_SinS(this->actor.shape.rot.y); temp_ret = Math_CosS(this->actor.shape.rot.y); - this->collider.dim.pos.x = this->actor.world.pos.x + sp30.x * temp_ret + sp30.z * sp28; - this->collider.dim.pos.z = this->actor.world.pos.z - sp30.x * sp28 + sp30.z * temp_ret; + this->collider.dim.pos.x = this->actor.world.pos.x + playerRelativePos.x * temp_ret + playerRelativePos.z * sp28; + this->collider.dim.pos.z = this->actor.world.pos.z - playerRelativePos.x * sp28 + playerRelativePos.z * temp_ret; } void BgHidanFirewall_Update(Actor* thisx, PlayState* play) { 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 846903cfb1..202eea4241 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 @@ -18,7 +18,7 @@ void BgHidanFslift_Idle(BgHidanFslift* this, PlayState* play); void BgHidanFslift_Descend(BgHidanFslift* this, PlayState* play); void BgHidanFslift_Ascend(BgHidanFslift* this, PlayState* play); -ActorInit Bg_Hidan_Fslift_InitVars = { +ActorProfile Bg_Hidan_Fslift_Profile = { /**/ ACTOR_BG_HIDAN_FSLIFT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 170f0677ba..d2cc17d636 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 @@ -31,7 +31,7 @@ void BgHidanFwbig_WaitForTimer(BgHidanFwbig* this, PlayState* play); void BgHidanFwbig_WaitForPlayer(BgHidanFwbig* this, PlayState* play); void BgHidanFwbig_Move(BgHidanFwbig* this, PlayState* play); -ActorInit Bg_Hidan_Fwbig_InitVars = { +ActorProfile Bg_Hidan_Fwbig_Profile = { /**/ ACTOR_BG_HIDAN_FWBIG, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -195,25 +195,25 @@ void BgHidanFwbig_Move(BgHidanFwbig* this, PlayState* play) { void BgHidanFwbig_MoveCollider(BgHidanFwbig* this, PlayState* play) { Player* player = GET_PLAYER(play); - Vec3f projPos; + Vec3f playerRelativePos; f32 cs; f32 sn; - func_8002DBD0(&this->actor, &projPos, &player->actor.world.pos); - projPos.z = ((projPos.z >= 0.0f) ? 1.0f : -1.0f) * 25.0f * -1.0f; + Actor_WorldToActorCoords(&this->actor, &playerRelativePos, &player->actor.world.pos); + playerRelativePos.z = ((playerRelativePos.z >= 0.0f) ? 1.0f : -1.0f) * 25.0f * -1.0f; if (this->direction == 0) { - projPos.x = CLAMP(projPos.x, -360.0f, 360.0f); + playerRelativePos.x = CLAMP(playerRelativePos.x, -360.0f, 360.0f); } else { - projPos.x = CLAMP(projPos.x, -500.0f, 500.0f); + playerRelativePos.x = CLAMP(playerRelativePos.x, -500.0f, 500.0f); } sn = Math_SinS(this->actor.shape.rot.y); cs = Math_CosS(this->actor.shape.rot.y); - this->collider.dim.pos.x = this->actor.world.pos.x + (projPos.x * cs) + (projPos.z * sn); - this->collider.dim.pos.z = this->actor.world.pos.z - (projPos.x * sn) + (projPos.z * cs); + this->collider.dim.pos.x = this->actor.world.pos.x + (playerRelativePos.x * cs) + (playerRelativePos.z * sn); + this->collider.dim.pos.z = this->actor.world.pos.z - (playerRelativePos.x * sn) + (playerRelativePos.z * cs); this->collider.dim.pos.y = this->actor.world.pos.y; - this->actor.world.rot.y = (projPos.z < 0.0f) ? this->actor.shape.rot.y : this->actor.shape.rot.y + 0x8000; + this->actor.world.rot.y = (playerRelativePos.z < 0.0f) ? this->actor.shape.rot.y : this->actor.shape.rot.y + 0x8000; } void BgHidanFwbig_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Hidan_Hamstep/z_bg_hidan_hamstep.c b/src/overlays/actors/ovl_Bg_Hidan_Hamstep/z_bg_hidan_hamstep.c index 27c1c9e617..0368e6b708 100644 --- a/src/overlays/actors/ovl_Bg_Hidan_Hamstep/z_bg_hidan_hamstep.c +++ b/src/overlays/actors/ovl_Bg_Hidan_Hamstep/z_bg_hidan_hamstep.c @@ -63,7 +63,7 @@ static ColliderTrisInit sTrisInit = { sTrisElementsInit, }; -ActorInit Bg_Hidan_Hamstep_InitVars = { +ActorProfile Bg_Hidan_Hamstep_Profile = { /**/ ACTOR_BG_HIDAN_HAMSTEP, /**/ ACTORCAT_BG, /**/ FLAGS, 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 d2f5a4f8c6..99440ae979 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 @@ -18,7 +18,7 @@ void func_8088960C(BgHidanHrock* this, PlayState* play); void func_808896B8(BgHidanHrock* this, PlayState* play); void func_808894A4(BgHidanHrock* this, PlayState* play); -ActorInit Bg_Hidan_Hrock_InitVars = { +ActorProfile Bg_Hidan_Hrock_Profile = { /**/ ACTOR_BG_HIDAN_HROCK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 c7890ace87..d013eaab6f 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 @@ -23,7 +23,7 @@ void func_80889D28(BgHidanKousi* this, PlayState* play); static f32 D_80889E40[] = { 120.0f, 150.0f, 150.0f }; -ActorInit Bg_Hidan_Kousi_InitVars = { +ActorProfile Bg_Hidan_Kousi_Profile = { /**/ ACTOR_BG_HIDAN_KOUSI, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 d9ce7e6ab2..e8fb098b3f 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 @@ -22,7 +22,7 @@ void BgHidanKowarerukabe_Destroy(Actor* thisx, PlayState* play); void BgHidanKowarerukabe_Update(Actor* thisx, PlayState* play); void BgHidanKowarerukabe_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Hidan_Kowarerukabe_InitVars = { +ActorProfile Bg_Hidan_Kowarerukabe_Profile = { /**/ ACTOR_BG_HIDAN_KOWARERUKABE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 ef6bb43867..307f6f2608 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 @@ -29,7 +29,7 @@ void func_8088BC40(PlayState* play, BgHidanRock* this); static Vec3f D_8088BF60 = { 3310.0f, 120.0f, 0.0f }; -ActorInit Bg_Hidan_Rock_InitVars = { +ActorProfile Bg_Hidan_Rock_Profile = { /**/ ACTOR_BG_HIDAN_ROCK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 5f8ec0ce03..f170e28115 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 @@ -14,7 +14,7 @@ void BgHidanRsekizou_Destroy(Actor* thisx, PlayState* play); void BgHidanRsekizou_Update(Actor* thisx, PlayState* play); void BgHidanRsekizou_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Hidan_Rsekizou_InitVars = { +ActorProfile Bg_Hidan_Rsekizou_Profile = { /**/ ACTOR_BG_HIDAN_RSEKIZOU, /**/ ACTORCAT_BG, /**/ FLAGS, 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 d07db7eca0..8f91b00005 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 @@ -17,7 +17,7 @@ void BgHidanSekizou_Draw(Actor* thisx, PlayState* play2); void func_8088D434(BgHidanSekizou* this, PlayState* play); void func_8088D720(BgHidanSekizou* this, PlayState* play); -ActorInit Bg_Hidan_Sekizou_InitVars = { +ActorProfile Bg_Hidan_Sekizou_Profile = { /**/ ACTOR_BG_HIDAN_SEKIZOU, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Hidan_Sima/z_bg_hidan_sima.c b/src/overlays/actors/ovl_Bg_Hidan_Sima/z_bg_hidan_sima.c index 8273e2696b..3d0ede852d 100644 --- a/src/overlays/actors/ovl_Bg_Hidan_Sima/z_bg_hidan_sima.c +++ b/src/overlays/actors/ovl_Bg_Hidan_Sima/z_bg_hidan_sima.c @@ -21,7 +21,7 @@ void func_8088E760(BgHidanSima* this, PlayState* play); void func_8088E7A8(BgHidanSima* this, PlayState* play); void func_8088E90C(BgHidanSima* this); -ActorInit Bg_Hidan_Sima_InitVars = { +ActorProfile Bg_Hidan_Sima_Profile = { /**/ ACTOR_BG_HIDAN_SIMA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 e69cca84aa..0714a51c6c 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 @@ -18,7 +18,7 @@ void func_8088F4B8(BgHidanSyoku* this, PlayState* play); void func_8088F514(BgHidanSyoku* this, PlayState* play); void func_8088F62C(BgHidanSyoku* this, PlayState* play); -ActorInit Bg_Hidan_Syoku_InitVars = { +ActorProfile Bg_Hidan_Syoku_Profile = { /**/ ACTOR_BG_HIDAN_SYOKU, /**/ ACTORCAT_BG, /**/ FLAGS, 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 56b3d62ad8..fc8bc31925 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 @@ -23,7 +23,7 @@ static Color_RGBA8 sWhite = { 250, 250, 250, 255 }; static Color_RGBA8 sGray = { 180, 180, 180, 255 }; static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f }; -ActorInit Bg_Ice_Objects_InitVars = { +ActorProfile Bg_Ice_Objects_Profile = { /**/ ACTOR_BG_ICE_OBJECTS, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 459e118992..d00519f2b6 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 @@ -23,7 +23,7 @@ void BgIceShelter_SetupMelt(BgIceShelter* this); void BgIceShelter_Idle(BgIceShelter* this, PlayState* play); void BgIceShelter_Melt(BgIceShelter* this, PlayState* play); -ActorInit Bg_Ice_Shelter_InitVars = { +ActorProfile Bg_Ice_Shelter_Profile = { /**/ ACTOR_BG_ICE_SHELTER, /**/ ACTORCAT_BG, /**/ FLAGS, 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 0d8f5a34d2..1e99bbaf1b 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 @@ -18,7 +18,7 @@ void func_80891CF4(BgIceShutter* this, PlayState* play); void func_80891D6C(BgIceShutter* this, PlayState* play); void func_80891DD4(BgIceShutter* this, PlayState* play); -ActorInit Bg_Ice_Shutter_InitVars = { +ActorProfile Bg_Ice_Shutter_Profile = { /**/ ACTOR_BG_ICE_SHUTTER, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 30a2c281c8..59eeb3190a 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 @@ -40,7 +40,7 @@ static ColliderCylinderInit sCylinderInit = { { 13, 120, 0, { 0, 0, 0 } }, }; -ActorInit Bg_Ice_Turara_InitVars = { +ActorProfile Bg_Ice_Turara_Profile = { /**/ ACTOR_BG_ICE_TURARA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 81e75edbdc..47a008c9fc 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -17,7 +17,7 @@ void BgInGate_Draw(Actor* thisx, PlayState* play); void func_80892890(BgInGate* this, PlayState* play); void BgInGate_DoNothing(BgInGate* this, PlayState* play); -ActorInit Bg_Ingate_InitVars = { +ActorProfile Bg_Ingate_Profile = { /**/ ACTOR_BG_INGATE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 0b5e2c538c..e9395d9037 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 @@ -25,7 +25,7 @@ void BgJya1flift_DelayMove(BgJya1flift* this, PlayState* play); static u8 sIsSpawned = false; -ActorInit Bg_Jya_1flift_InitVars = { +ActorProfile Bg_Jya_1flift_Profile = { /**/ ACTOR_BG_JYA_1FLIFT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 87cb2807dc..b610da9e42 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 @@ -23,7 +23,7 @@ void func_808934C0(BgJyaAmishutter* this); void func_808934FC(BgJyaAmishutter* this); void func_8089350C(BgJyaAmishutter* this); -ActorInit Bg_Jya_Amishutter_InitVars = { +ActorProfile Bg_Jya_Amishutter_Profile = { /**/ ACTOR_BG_JYA_AMISHUTTER, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a8e3c1ad7e..e0f0b78213 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 @@ -16,7 +16,7 @@ void BgJyaBigmirror_Draw(Actor* thisx, PlayState* play); static u8 sIsSpawned = false; -ActorInit Bg_Jya_Bigmirror_InitVars = { +ActorProfile Bg_Jya_Bigmirror_Profile = { /**/ ACTOR_BG_JYA_BIGMIRROR, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -225,7 +225,6 @@ void BgJyaBigmirror_DrawLightBeam(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gBigMirror1DL); if (lift != NULL) { - if (1) {} Matrix_SetTranslateRotateYXZ(lift->world.pos.x, lift->world.pos.y, lift->world.pos.z, &D_80893F4C); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_bg_jya_bigmirror.c", 467), 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 e4155e4f8b..c6923c6621 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 @@ -14,7 +14,7 @@ void BgJyaBlock_Destroy(Actor* thisx, PlayState* play); void BgJyaBlock_Update(Actor* thisx, PlayState* play); void BgJyaBlock_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Jya_Block_InitVars = { +ActorProfile Bg_Jya_Block_Profile = { /**/ ACTOR_BG_JYA_BLOCK, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 b4c2d6158b..1fa70be0da 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 @@ -14,7 +14,7 @@ void func_808949B8(BgJyaBombchuiwa* this, PlayState* play); void BgJyaBombchuiwa_CleanUpAfterExplosion(BgJyaBombchuiwa* this, PlayState* play); void BgJyaBombchuiwa_SpawnLightRay(BgJyaBombchuiwa* this, PlayState* play); -ActorInit Bg_Jya_Bombchuiwa_InitVars = { +ActorProfile Bg_Jya_Bombchuiwa_Profile = { /**/ ACTOR_BG_JYA_BOMBCHUIWA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 4450298fa3..103471d3c6 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 @@ -16,7 +16,7 @@ void BgJyaBombiwa_Destroy(Actor* thisx, PlayState* play); void BgJyaBombiwa_Update(Actor* thisx, PlayState* play); void BgJyaBombiwa_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Jya_Bombiwa_InitVars = { +ActorProfile Bg_Jya_Bombiwa_Profile = { /**/ ACTOR_BG_JYA_BOMBIWA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 78f5a1f5e4..079b2cc877 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 @@ -18,7 +18,7 @@ void func_80896ABC(BgJyaCobra* this, PlayState* play); #include "assets/overlays/ovl_Bg_Jya_Cobra/ovl_Bg_Jya_Cobra.c" -ActorInit Bg_Jya_Cobra_InitVars = { +ActorProfile Bg_Jya_Cobra_Profile = { /**/ ACTOR_BG_JYA_COBRA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7ab065bd3e..5a4898763e 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 @@ -23,7 +23,7 @@ void BgJyaGoroiwa_SetupMove(BgJyaGoroiwa* this); void BgJyaGoroiwa_UpdateRotation(BgJyaGoroiwa* this); void BgJyaGoroiwa_UpdateCollider(BgJyaGoroiwa* this); -ActorInit Bg_Jya_Goroiwa_InitVars = { +ActorProfile Bg_Jya_Goroiwa_Profile = { /**/ ACTOR_BG_JYA_GOROIWA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 93e972e2e6..670bbef007 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 @@ -22,7 +22,7 @@ void BgJyaHaheniron_PillarCrumble(BgJyaHaheniron* this, PlayState* play); void BgJyaHaheniron_SetupRubbleCollide(BgJyaHaheniron* this); void BgJyaHaheniron_RubbleCollide(BgJyaHaheniron* this, PlayState* play); -ActorInit Bg_Jya_Haheniron_InitVars = { +ActorProfile Bg_Jya_Haheniron_Profile = { /**/ ACTOR_BG_JYA_HAHENIRON, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 9188456de5..8d955b4020 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 @@ -24,7 +24,7 @@ void BgJyaIronobj_SpawnThroneParticles(BgJyaIronobj* this, PlayState* play, EnIk static int sUnused = 0; -ActorInit Bg_Jya_Ironobj_InitVars = { +ActorProfile Bg_Jya_Ironobj_Profile = { /**/ ACTOR_BG_JYA_IRONOBJ, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 4a56ed44e8..3c752333b0 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 @@ -21,7 +21,7 @@ void func_8089993C(BgJyaKanaami* this); void func_80899950(BgJyaKanaami* this, PlayState* play); void func_80899A08(BgJyaKanaami* this); -ActorInit Bg_Jya_Kanaami_InitVars = { +ActorProfile Bg_Jya_Kanaami_Profile = { /**/ ACTOR_BG_JYA_KANAAMI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 5462ee6dc1..4d5a3367e5 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 @@ -22,7 +22,7 @@ void BgJyaLift_Move(BgJyaLift* this, PlayState* play); static s16 sIsSpawned = false; -ActorInit Bg_Jya_Lift_InitVars = { +ActorProfile Bg_Jya_Lift_Profile = { /**/ ACTOR_BG_JYA_LIFT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 f4bd5ebcff..b51804cb18 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 @@ -20,7 +20,7 @@ void BgJyaMegami_DetectLight(BgJyaMegami* this, PlayState* play); void BgJyaMegami_SetupExplode(BgJyaMegami* this); void BgJyaMegami_Explode(BgJyaMegami* this, PlayState* play); -ActorInit Bg_Jya_Megami_InitVars = { +ActorProfile Bg_Jya_Megami_Profile = { /**/ ACTOR_BG_JYA_MEGAMI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 378116f72a..2786512bc6 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 @@ -23,7 +23,7 @@ void func_8089B870(BgJyaZurerukabe* this, PlayState* play); static f32 D_8089B9C0[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; -ActorInit Bg_Jya_Zurerukabe_InitVars = { +ActorProfile Bg_Jya_Zurerukabe_Profile = { /**/ ACTOR_BG_JYA_ZURERUKABE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a39b2e8aed..da6e9c60c9 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 @@ -14,7 +14,7 @@ void BgMenkuriEye_Destroy(Actor* thisx, PlayState* play); void BgMenkuriEye_Update(Actor* thisx, PlayState* play); void BgMenkuriEye_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Menkuri_Eye_InitVars = { +ActorProfile Bg_Menkuri_Eye_Profile = { /**/ ACTOR_BG_MENKURI_EYE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 b7fa437b80..7b3e0b5b44 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 @@ -14,7 +14,7 @@ void BgMenkuriKaiten_Destroy(Actor* thisx, PlayState* play); void BgMenkuriKaiten_Update(Actor* thisx, PlayState* play); void BgMenkuriKaiten_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Menkuri_Kaiten_InitVars = { +ActorProfile Bg_Menkuri_Kaiten_Profile = { /**/ ACTOR_BG_MENKURI_KAITEN, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Menkuri_Nisekabe/z_bg_menkuri_nisekabe.c b/src/overlays/actors/ovl_Bg_Menkuri_Nisekabe/z_bg_menkuri_nisekabe.c index 0d3c4635e2..0bd95411b4 100644 --- a/src/overlays/actors/ovl_Bg_Menkuri_Nisekabe/z_bg_menkuri_nisekabe.c +++ b/src/overlays/actors/ovl_Bg_Menkuri_Nisekabe/z_bg_menkuri_nisekabe.c @@ -14,7 +14,7 @@ void BgMenkuriNisekabe_Destroy(Actor* thisx, PlayState* play); void BgMenkuriNisekabe_Update(Actor* thisx, PlayState* play); void BgMenkuriNisekabe_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Menkuri_Nisekabe_InitVars = { +ActorProfile Bg_Menkuri_Nisekabe_Profile = { /**/ ACTOR_BG_MENKURI_NISEKABE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 2eaf22b9ec..3123b1ea5b 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 @@ -19,7 +19,7 @@ void BgMizuBwall_Idle(BgMizuBwall* this, PlayState* play); void BgMizuBwall_Break(BgMizuBwall* this, PlayState* play); void BgMizuBwall_DoNothing(BgMizuBwall* this, PlayState* play); -ActorInit Bg_Mizu_Bwall_InitVars = { +ActorProfile Bg_Mizu_Bwall_Profile = { /**/ ACTOR_BG_MIZU_BWALL, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -522,7 +522,6 @@ void BgMizuBwall_Draw(Actor* thisx, PlayState* play2) { u32 frames; OPEN_DISPS(play->state.gfxCtx, "../z_bg_mizu_bwall.c", 1095); - if (1) {} frames = play->gameplayFrames; Gfx_SetupDL_25Opa(play->state.gfxCtx); 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 9e78921ae4..302d72a68c 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 @@ -25,7 +25,7 @@ void BgMizuMovebg_UpdateMain(BgMizuMovebg* this, PlayState* play); void BgMizuMovebg_UpdateHookshotPlatform(BgMizuMovebg* this, PlayState* play); s32 BgMizuMovebg_SetPosFromPath(Path* pathList, Vec3f* pos, s32 pathId, s32 pointId); -ActorInit Bg_Mizu_Movebg_InitVars = { +ActorProfile Bg_Mizu_Movebg_Profile = { /**/ ACTOR_BG_MIZU_MOVEBG, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -382,8 +382,6 @@ void BgMizuMovebg_Draw(Actor* thisx, PlayState* play2) { PlayState* play = play2; u32 frames; - if (1) {} - OPEN_DISPS(play->state.gfxCtx, "../z_bg_mizu_movebg.c", 754); frames = play->gameplayFrames; 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 a547fde73c..8af0447f24 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 @@ -13,7 +13,7 @@ void BgMizuShutter_WaitForSwitch(BgMizuShutter* this, PlayState* play); void BgMizuShutter_Move(BgMizuShutter* this, PlayState* play); void BgMizuShutter_WaitForCutscene(BgMizuShutter* this, PlayState* play); -ActorInit Bg_Mizu_Shutter_InitVars = { +ActorProfile Bg_Mizu_Shutter_Profile = { /**/ ACTOR_BG_MIZU_SHUTTER, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 8d9ebd8556..1810d0bd2d 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 @@ -16,7 +16,7 @@ void BgMizuUzu_Draw(Actor* thisx, PlayState* play); void func_8089F788(BgMizuUzu* this, PlayState* play); -ActorInit Bg_Mizu_Uzu_InitVars = { +ActorProfile Bg_Mizu_Uzu_Profile = { /**/ ACTOR_BG_MIZU_UZU, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 c0071bed5c..4d58505b01 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 @@ -29,7 +29,7 @@ static WaterLevel sWaterLevels[] = { { WATER_TEMPLE_WATER_F1_FLAG, WATER_TEMPLE_WATER_F1_Y - WATER_TEMPLE_WATER_F3_Y }, }; -ActorInit Bg_Mizu_Water_InitVars = { +ActorProfile Bg_Mizu_Water_Profile = { /**/ ACTOR_BG_MIZU_WATER, /**/ ACTORCAT_BG, /**/ FLAGS, 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 4463a4f79b..a615c5598a 100644 --- a/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c +++ b/src/overlays/actors/ovl_Bg_Mjin/z_bg_mjin.c @@ -24,7 +24,7 @@ void BgMjin_Draw(Actor* thisx, PlayState* play); void func_808A0850(BgMjin* this, PlayState* play); void BgMjin_DoNothing(BgMjin* this, PlayState* play); -ActorInit Bg_Mjin_InitVars = { +ActorProfile Bg_Mjin_Profile = { /**/ ACTOR_BG_MJIN, /**/ ACTORCAT_BG, /**/ FLAGS, 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 9cb6034bc2..afb9469ab6 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 @@ -28,7 +28,7 @@ void BgMoriBigst_SetupStalfosPairFight(BgMoriBigst* this, PlayState* play); void BgMoriBigst_StalfosPairFight(BgMoriBigst* this, PlayState* play); void BgMoriBigst_SetupDone(BgMoriBigst* this, PlayState* play); -ActorInit Bg_Mori_Bigst_InitVars = { +ActorProfile Bg_Mori_Bigst_Profile = { /**/ ACTOR_BG_MORI_BIGST, /**/ ACTORCAT_BG, /**/ FLAGS, 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 8b50d4b5dd..b5bbda9f23 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 @@ -19,7 +19,7 @@ void BgMoriElevator_MoveAboveGround(BgMoriElevator* this, PlayState* play); static s16 sIsSpawned = false; -ActorInit Bg_Mori_Elevator_InitVars = { +ActorProfile Bg_Mori_Elevator_Profile = { /**/ ACTOR_BG_MORI_ELEVATOR, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a4b870c10b..7d779dc94a 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 @@ -24,7 +24,7 @@ void BgMoriHashigo_SetupLadderFall(BgMoriHashigo* this); void BgMoriHashigo_LadderFall(BgMoriHashigo* this, PlayState* play); void BgMoriHashigo_SetupLadderRest(BgMoriHashigo* this); -ActorInit Bg_Mori_Hashigo_InitVars = { +ActorProfile Bg_Mori_Hashigo_Profile = { /**/ ACTOR_BG_MORI_HASHIGO, /**/ ACTORCAT_BG, /**/ FLAGS, 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 5f5af22350..ca0224f17a 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 @@ -21,7 +21,7 @@ void BgMoriHashira4_PillarsRotate(BgMoriHashira4* this, PlayState* play); void BgMoriHashira4_GateWait(BgMoriHashira4* this, PlayState* play); void BgMoriHashira4_GateOpen(BgMoriHashira4* this, PlayState* play); -ActorInit Bg_Mori_Hashira4_InitVars = { +ActorProfile Bg_Mori_Hashira4_Profile = { /**/ ACTOR_BG_MORI_HASHIRA4, /**/ ACTORCAT_BG, /**/ FLAGS, 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 b6c0d9c9bb..7e94e0cbef 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 @@ -29,7 +29,7 @@ void func_808A3D58(BgMoriHineri* this, PlayState* play); static s16 sSubCamId = CAM_ID_NONE; -ActorInit Bg_Mori_Hineri_InitVars = { +ActorProfile Bg_Mori_Hineri_Profile = { /**/ ACTOR_BG_MORI_HINERI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 0af410e5f0..d16ebaa95b 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 @@ -21,7 +21,7 @@ void BgMoriIdomizu_Main(BgMoriIdomizu* this, PlayState* play); static s16 sIsSpawned = false; -ActorInit Bg_Mori_Idomizu_InitVars = { +ActorProfile Bg_Mori_Idomizu_Profile = { /**/ ACTOR_BG_MORI_IDOMIZU, /**/ ACTORCAT_BG, /**/ FLAGS, 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 836ab229ab..ab012874bb 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 @@ -20,7 +20,7 @@ void BgMoriKaitenkabe_Wait(BgMoriKaitenkabe* this, PlayState* play); void BgMoriKaitenkabe_SetupRotate(BgMoriKaitenkabe* this); void BgMoriKaitenkabe_Rotate(BgMoriKaitenkabe* this, PlayState* play); -ActorInit Bg_Mori_Kaitenkabe_InitVars = { +ActorProfile Bg_Mori_Kaitenkabe_Profile = { /**/ ACTOR_BG_MORI_KAITENKABE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 cab9eed7d5..1cb084f290 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 @@ -28,7 +28,7 @@ void BgMoriRakkatenjo_Rise(BgMoriRakkatenjo* this, PlayState* play); static s16 sCamSetting = CAM_SET_NONE; -ActorInit Bg_Mori_Rakkatenjo_InitVars = { +ActorProfile Bg_Mori_Rakkatenjo_Profile = { /**/ ACTOR_BG_MORI_RAKKATENJO, /**/ ACTORCAT_BG, /**/ FLAGS, 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 f5fb613bab..9111d5e0ed 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 @@ -28,7 +28,7 @@ void BgPoEvent_PaintingAppear(BgPoEvent* this, PlayState* play); void BgPoEvent_PaintingPresent(BgPoEvent* this, PlayState* play); void BgPoEvent_PaintingBurn(BgPoEvent* this, PlayState* play); -ActorInit Bg_Po_Event_InitVars = { +ActorProfile Bg_Po_Event_Profile = { /**/ ACTOR_BG_PO_EVENT, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c index 5c379a538c..6def1043f6 100644 --- a/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c +++ b/src/overlays/actors/ovl_Bg_Po_Syokudai/z_bg_po_syokudai.c @@ -58,7 +58,7 @@ static Color_RGBA8 sEnvColors[] = { { 0, 150, 0, 255 }, }; -ActorInit Bg_Po_Syokudai_InitVars = { +ActorProfile Bg_Po_Syokudai_Profile = { /**/ ACTOR_BG_PO_SYOKUDAI, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Pushbox/z_bg_pushbox.c b/src/overlays/actors/ovl_Bg_Pushbox/z_bg_pushbox.c index ef5e59d667..78104fa503 100644 --- a/src/overlays/actors/ovl_Bg_Pushbox/z_bg_pushbox.c +++ b/src/overlays/actors/ovl_Bg_Pushbox/z_bg_pushbox.c @@ -16,7 +16,7 @@ void BgPushbox_Draw(Actor* thisx, PlayState* play); void BgPushbox_UpdateImpl(BgPushbox* this, PlayState* play); -ActorInit Bg_Pushbox_InitVars = { +ActorProfile Bg_Pushbox_Profile = { /**/ ACTOR_BG_PUSHBOX, /**/ ACTORCAT_BG, /**/ FLAGS, 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 680f6e12e6..038890ee85 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 @@ -26,7 +26,7 @@ void BgRelayObjects_DoNothing(BgRelayObjects* this, PlayState* play); void func_808A932C(BgRelayObjects* this, PlayState* play); void func_808A939C(BgRelayObjects* this, PlayState* play); -ActorInit Bg_Relay_Objects_InitVars = { +ActorProfile Bg_Relay_Objects_Profile = { /**/ ACTOR_BG_RELAY_OBJECTS, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a16c96b91d..2ad49f6e71 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 @@ -14,7 +14,7 @@ void BgSpot00Break_Destroy(Actor* thisx, PlayState* play); void BgSpot00Break_Update(Actor* thisx, PlayState* play); void BgSpot00Break_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Spot00_Break_InitVars = { +ActorProfile Bg_Spot00_Break_Profile = { /**/ ACTOR_BG_SPOT00_BREAK, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 1fafea47cd..95d9f361bd 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 @@ -25,7 +25,7 @@ void BgSpot00Hanebasi_DrawbridgeWait(BgSpot00Hanebasi* this, PlayState* play); void BgSpot00Hanebasi_DrawbridgeRiseAndFall(BgSpot00Hanebasi* this, PlayState* play); void BgSpot00Hanebasi_SetTorchLightInfo(BgSpot00Hanebasi* this, PlayState* play); -ActorInit Bg_Spot00_Hanebasi_InitVars = { +ActorProfile Bg_Spot00_Hanebasi_Profile = { /**/ ACTOR_BG_SPOT00_HANEBASI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 f2306ac6b7..d01ec3a349 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 @@ -16,7 +16,7 @@ void BgSpot01Fusya_Draw(Actor* thisx, PlayState* play); void func_808AAA50(BgSpot01Fusya* this, PlayState* play); -ActorInit Bg_Spot01_Fusya_InitVars = { +ActorProfile Bg_Spot01_Fusya_Profile = { /**/ ACTOR_BG_SPOT01_FUSYA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a8e6ce6559..3542b77147 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 @@ -36,7 +36,7 @@ static BgSpot01IdohashiraDrawFunc sDrawFuncs[] = { func_808AB700, }; -ActorInit Bg_Spot01_Idohashira_InitVars = { +ActorProfile Bg_Spot01_Idohashira_Profile = { /**/ ACTOR_BG_SPOT01_IDOHASHIRA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 4b1ec00adf..994a2d2bbb 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 @@ -16,7 +16,7 @@ void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play); void func_808ABB84(BgSpot01Idomizu* this, PlayState* play); -ActorInit Bg_Spot01_Idomizu_InitVars = { +ActorProfile Bg_Spot01_Idomizu_Profile = { /**/ ACTOR_BG_SPOT01_IDOMIZU, /**/ ACTORCAT_BG, /**/ FLAGS, 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 0acc4f2073..8623e2dd74 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 @@ -16,7 +16,7 @@ void BgSpot01Idosoko_Draw(Actor* thisx, PlayState* play); void func_808ABF54(BgSpot01Idosoko* this, PlayState* play); -ActorInit Bg_Spot01_Idosoko_InitVars = { +ActorProfile Bg_Spot01_Idosoko_Profile = { /**/ ACTOR_BG_SPOT01_IDOSOKO, /**/ ACTORCAT_BG, /**/ FLAGS, 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 63697a0a80..921cc601e7 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 @@ -18,7 +18,7 @@ void func_808AC2BC(BgSpot01Objects2* this, PlayState* play); void func_808AC474(BgSpot01Objects2* this, PlayState* play); void func_808AC4A4(Actor* thisx, PlayState* play); -ActorInit Bg_Spot01_Objects2_InitVars = { +ActorProfile Bg_Spot01_Objects2_Profile = { /**/ ACTOR_BG_SPOT01_OBJECTS2, /**/ ACTORCAT_BG, /**/ FLAGS, 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 1f1f9da166..18dd4eae44 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 @@ -31,7 +31,7 @@ static void* D_808AD850[] = { object_spot02_objects_Tex_0102B0, object_spot02_objects_Tex_010EB0, object_spot02_objects_Tex_011AB0, }; -ActorInit Bg_Spot02_Objects_InitVars = { +ActorProfile Bg_Spot02_Objects_Profile = { /**/ ACTOR_BG_SPOT02_OBJECTS, /**/ ACTORCAT_BG, /**/ FLAGS, 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 78d1e3d376..39bd576873 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 @@ -16,7 +16,7 @@ void BgSpot03Taki_Draw(Actor* thisx, PlayState* play); void func_808ADEF0(BgSpot03Taki* this, PlayState* play); -ActorInit Bg_Spot03_Taki_InitVars = { +ActorProfile Bg_Spot03_Taki_Profile = { /**/ ACTOR_BG_SPOT03_TAKI, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -147,8 +147,6 @@ void BgSpot03Taki_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, object_spot03_object_DL_001580); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_bg_spot03_taki.c", 358); this->bufferIndex = this->bufferIndex == 0; 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 681a512d87..4eed722101 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 @@ -17,7 +17,7 @@ void func_808AE5A8(BgSpot05Soko* this, PlayState* play); void func_808AE5B4(BgSpot05Soko* this, PlayState* play); void func_808AE630(BgSpot05Soko* this, PlayState* play); -ActorInit Bg_Spot05_Soko_InitVars = { +ActorProfile Bg_Spot05_Soko_Profile = { /**/ ACTOR_BG_SPOT05_SOKO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 acba75f76a..4d28d392c7 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 @@ -44,7 +44,7 @@ void BgSpot06Objects_LockFloat(BgSpot06Objects* this, PlayState* play); void BgSpot06Objects_WaterPlaneCutsceneWait(BgSpot06Objects* this, PlayState* play); void BgSpot06Objects_WaterPlaneCutsceneRise(BgSpot06Objects* this, PlayState* play); -ActorInit Bg_Spot06_Objects_InitVars = { +ActorProfile Bg_Spot06_Objects_Profile = { /**/ ACTOR_BG_SPOT06_OBJECTS, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 c88235dbfd..a40daf01fc 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 @@ -16,7 +16,7 @@ void BgSpot07Taki_Draw(Actor* thisx, PlayState* play); void BgSpot07Taki_DoNothing(BgSpot07Taki* this, PlayState* play); -ActorInit Bg_Spot07_Taki_InitVars = { +ActorProfile Bg_Spot07_Taki_Profile = { /**/ ACTOR_BG_SPOT07_TAKI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 3015e90151..4174abb0b2 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 @@ -19,7 +19,7 @@ void BgSpot08Bakudankabe_Draw(Actor* thisx, PlayState* play); void func_808B02D0(BgSpot08Bakudankabe* this, PlayState* play); void func_808B0324(BgSpot08Bakudankabe* this, PlayState* play); -ActorInit Bg_Spot08_Bakudankabe_InitVars = { +ActorProfile Bg_Spot08_Bakudankabe_Profile = { /**/ ACTOR_BG_SPOT08_BAKUDANKABE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 3ad8321f17..4c8336f9ec 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 @@ -22,7 +22,7 @@ void BgSpot08Iceblock_SetupFloatOrbitingTwins(BgSpot08Iceblock* this); void BgSpot08Iceblock_FloatOrbitingTwins(BgSpot08Iceblock* this, PlayState* play); void BgSpot08Iceblock_SetupNoAction(BgSpot08Iceblock* this); -ActorInit Bg_Spot08_Iceblock_InitVars = { +ActorProfile Bg_Spot08_Iceblock_Profile = { /**/ ACTOR_BG_SPOT08_ICEBLOCK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 6df0a26576..8c25f125e2 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 @@ -18,7 +18,7 @@ s32 func_808B1AE0(BgSpot09Obj* this, PlayState* play); s32 func_808B1BA0(BgSpot09Obj* this, PlayState* play); s32 func_808B1BEC(BgSpot09Obj* this, PlayState* play); -ActorInit Bg_Spot09_Obj_InitVars = { +ActorProfile Bg_Spot09_Obj_Profile = { /**/ ACTOR_BG_SPOT09_OBJ, /**/ ACTORCAT_BG, /**/ FLAGS, 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 68f723fcec..b8ce8ddaee 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 @@ -16,7 +16,7 @@ void BgSpot11Bakudankabe_Destroy(Actor* thisx, PlayState* play); void BgSpot11Bakudankabe_Update(Actor* thisx, PlayState* play); void BgSpot11Bakudankabe_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Spot11_Bakudankabe_InitVars = { +ActorProfile Bg_Spot11_Bakudankabe_Profile = { /**/ ACTOR_BG_SPOT11_BAKUDANKABE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 ff7c8e28ba..e5d37c33ab 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 @@ -20,7 +20,7 @@ void func_808B29F0(BgSpot11Oasis* this, PlayState* play); void func_808B2AA8(BgSpot11Oasis* this); void func_808B2AB8(BgSpot11Oasis* this, PlayState* play); -ActorInit Bg_Spot11_Oasis_InitVars = { +ActorProfile Bg_Spot11_Oasis_Profile = { /**/ ACTOR_BG_SPOT11_OASIS, /**/ ACTORCAT_BG, /**/ FLAGS, 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 2a62445f48..f7262bc13b 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 @@ -24,7 +24,7 @@ void func_808B318C(BgSpot12Gate* this, PlayState* play); void func_808B3274(BgSpot12Gate* this); void func_808B3298(BgSpot12Gate* this, PlayState* play); -ActorInit Bg_Spot12_Gate_InitVars = { +ActorProfile Bg_Spot12_Gate_Profile = { /**/ ACTOR_BG_SPOT12_GATE, /**/ ACTORCAT_BG, /**/ 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 360464957c..5d62353472 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 @@ -21,7 +21,7 @@ void func_808B3604(BgSpot12Saku* this, PlayState* play); void func_808B3714(BgSpot12Saku* this); void func_808B37AC(BgSpot12Saku* this, PlayState* play); -ActorInit Bg_Spot12_Saku_InitVars = { +ActorProfile Bg_Spot12_Saku_Profile = { /**/ ACTOR_BG_SPOT12_SAKU, /**/ ACTORCAT_BG, /**/ 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 5a8560df82..ee673af661 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 @@ -25,7 +25,7 @@ void func_808B44CC(BgSpot15Rrbox* this, PlayState* play); static s16 D_808B4590 = 0; -ActorInit Bg_Spot15_Rrbox_InitVars = { +ActorProfile Bg_Spot15_Rrbox_Profile = { /**/ ACTOR_BG_SPOT15_RRBOX, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.c b/src/overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.c index 3432321a91..e414a3e512 100644 --- a/src/overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.c +++ b/src/overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.c @@ -18,7 +18,7 @@ void func_808B4930(BgSpot15Saku* this, PlayState* play); void func_808B4978(BgSpot15Saku* this, PlayState* play); void func_808B4A04(BgSpot15Saku* this, PlayState* play); -ActorInit Bg_Spot15_Saku_InitVars = { +ActorProfile Bg_Spot15_Saku_Profile = { /**/ ACTOR_BG_SPOT15_SAKU, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 5a9726a82e..d705589500 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 @@ -109,7 +109,7 @@ static s16 D_808B5EB0[][7] = { { 0x0014, 0x0050, 0x0032, 0x0000, 0x0096, 0x00C8, 0x0008 }, }; -ActorInit Bg_Spot16_Bombstone_InitVars = { +ActorProfile Bg_Spot16_Bombstone_Profile = { /**/ ACTOR_BG_SPOT16_BOMBSTONE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 8f60a33980..23c3cb1692 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 @@ -18,7 +18,7 @@ void BgSpot16Doughnut_Draw(Actor* thisx, PlayState* play); void BgSpot16Doughnut_UpdateExpanding(Actor* thisx, PlayState* play); void BgSpot16Doughnut_DrawExpanding(Actor* thisx, PlayState* play); -ActorInit Bg_Spot16_Doughnut_InitVars = { +ActorProfile Bg_Spot16_Doughnut_Profile = { /**/ ACTOR_BG_SPOT16_DOUGHNUT, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -125,8 +125,6 @@ void BgSpot16Doughnut_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL_25Xlu(play->state.gfxCtx); - if (1) {} - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_bg_spot16_doughnut.c", 213), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (this->fireFlag & 1) { 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 fe22885a6e..ddb0b0f26b 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 @@ -16,7 +16,7 @@ void BgSpot17Bakudankabe_Destroy(Actor* thisx, PlayState* play); void BgSpot17Bakudankabe_Update(Actor* thisx, PlayState* play); void BgSpot17Bakudankabe_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Spot17_Bakudankabe_InitVars = { +ActorProfile Bg_Spot17_Bakudankabe_Profile = { /**/ ACTOR_BG_SPOT17_BAKUDANKABE, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -123,9 +123,9 @@ void BgSpot17Bakudankabe_Update(Actor* thisx, PlayState* play) { } void BgSpot17Bakudankabe_Draw(Actor* thisx, PlayState* play) { - s32 pad; - s8 r = coss(play->gameplayFrames * 1500) >> 8; - s8 g = coss(play->gameplayFrames * 1500) >> 8; + PlayState* play2 = (PlayState*)play; + s8 r = coss(play2->gameplayFrames * 1500) >> 8; + s8 g = coss(play2->gameplayFrames * 1500) >> 8; OPEN_DISPS(play->state.gfxCtx, "../z_bg_spot17_bakudankabe.c", 269); 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 b8c93658cf..9c5134bb0f 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 @@ -15,7 +15,7 @@ void BgSpot17Funen_Update(Actor* thisx, PlayState* play); void func_808B746C(Actor* thisx, PlayState* play); void func_808B7478(Actor* thisx, PlayState* play); -ActorInit Bg_Spot17_Funen_InitVars = { +ActorProfile Bg_Spot17_Funen_Profile = { /**/ ACTOR_BG_SPOT17_FUNEN, /**/ ACTORCAT_SWITCH, /**/ FLAGS, @@ -67,7 +67,5 @@ void func_808B7478(Actor* thisx, PlayState* play) { 1, 0, (0 - play->gameplayFrames) & 0x7F, 0x20, 0x20)); gSPDisplayList(POLY_XLU_DISP++, gCraterSmokeConeDL); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_bg_spot17_funen.c", 176); } 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 92d1f9671a..8f9d890b60 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 @@ -22,7 +22,7 @@ void func_808B7D50(BgSpot18Basket* this, PlayState* play); void func_808B7FC0(BgSpot18Basket* this, PlayState* play); void func_808B81A0(BgSpot18Basket* this, PlayState* play); -ActorInit Bg_Spot18_Basket_InitVars = { +ActorProfile Bg_Spot18_Basket_Profile = { /**/ ACTOR_BG_SPOT18_BASKET, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 158856409d..c321d5c550 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 @@ -14,7 +14,7 @@ void BgSpot18Futa_Destroy(Actor* thisx, PlayState* play); void BgSpot18Futa_Update(Actor* thisx, PlayState* play); void BgSpot18Futa_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Spot18_Futa_InitVars = { +ActorProfile Bg_Spot18_Futa_Profile = { /**/ ACTOR_BG_SPOT18_FUTA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 4c284b9b15..6c65828e81 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 @@ -30,7 +30,7 @@ void func_808B8F08(BgSpot18Obj* this, PlayState* play); void func_808B9030(BgSpot18Obj* this); void func_808B9040(BgSpot18Obj* this, PlayState* play); -ActorInit Bg_Spot18_Obj_InitVars = { +ActorProfile Bg_Spot18_Obj_Profile = { /**/ ACTOR_BG_SPOT18_OBJ, /**/ ACTORCAT_BG, /**/ FLAGS, 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 c4ce8ce190..eabb541546 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 @@ -20,7 +20,7 @@ void func_808B9618(BgSpot18Shutter* this, PlayState* play); void func_808B9698(BgSpot18Shutter* this, PlayState* play); void func_808B971C(BgSpot18Shutter* this, PlayState* play); -ActorInit Bg_Spot18_Shutter_InitVars = { +ActorProfile Bg_Spot18_Shutter_Profile = { /**/ ACTOR_BG_SPOT18_SHUTTER, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 c9c30b37a6..b0bdaa8549 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 @@ -16,7 +16,7 @@ void BgSstFloor_Draw(Actor* thisx, PlayState* play); static s32 sUnkValues[] = { 0, 0, 0 }; // Unused, probably a zero vector -ActorInit Bg_Sst_Floor_InitVars = { +ActorProfile Bg_Sst_Floor_Profile = { /**/ ACTOR_BG_SST_FLOOR, /**/ ACTORCAT_BG, /**/ FLAGS, 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 eafa885cb2..a421d428dd 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 @@ -21,7 +21,7 @@ void func_808BA22C(BgTokiHikari* this, PlayState* play); void func_808BA274(BgTokiHikari* this, PlayState* play); void func_808BA2CC(BgTokiHikari* this, PlayState* play); -ActorInit Bg_Toki_Hikari_InitVars = { +ActorProfile Bg_Toki_Hikari_Profile = { /**/ ACTOR_BG_TOKI_HIKARI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 3f8968a84c..2a689189c9 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 @@ -22,7 +22,7 @@ extern CutsceneData D_808BB2F0[]; extern CutsceneData D_808BB7A0[]; extern CutsceneData D_808BBD90[]; -ActorInit Bg_Toki_Swd_InitVars = { +ActorProfile Bg_Toki_Swd_Profile = { /**/ ACTOR_BG_TOKI_SWD, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 cdbbba7ef2..e6a4f1cae2 100644 --- a/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c +++ b/src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.c @@ -29,7 +29,7 @@ extern CutsceneData D_808BD2A0[]; extern CutsceneData D_808BD520[]; extern CutsceneData D_808BD790[]; -ActorInit Bg_Treemouth_InitVars = { +ActorProfile Bg_Treemouth_Profile = { /**/ ACTOR_BG_TREEMOUTH, /**/ ACTORCAT_BG, /**/ FLAGS, 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 4df2aa2184..822a9ddd59 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -14,7 +14,7 @@ void BgUmaJump_Destroy(Actor* thisx, PlayState* play); void BgUmaJump_Update(Actor* thisx, PlayState* play); void BgUmaJump_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Umajump_InitVars = { +ActorProfile Bg_Umajump_Profile = { /**/ ACTOR_BG_UMAJUMP, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Vb_Sima/z_bg_vb_sima.c b/src/overlays/actors/ovl_Bg_Vb_Sima/z_bg_vb_sima.c index 6381343658..fa566bb370 100644 --- a/src/overlays/actors/ovl_Bg_Vb_Sima/z_bg_vb_sima.c +++ b/src/overlays/actors/ovl_Bg_Vb_Sima/z_bg_vb_sima.c @@ -15,7 +15,7 @@ void BgVbSima_Destroy(Actor* thisx, PlayState* play); void BgVbSima_Update(Actor* thisx, PlayState* play); void BgVbSima_Draw(Actor* thisx, PlayState* play); -ActorInit Bg_Vb_Sima_InitVars = { +ActorProfile Bg_Vb_Sima_Profile = { /**/ ACTOR_BG_VB_SIMA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 0b32afe5ee..885abc5da1 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 @@ -21,7 +21,7 @@ void BgYdanHasi_MoveWater(BgYdanHasi* this, PlayState* play); void BgYdanHasi_DecWaterTimer(BgYdanHasi* this, PlayState* play); void BgYdanHasi_UpdateThreeBlocks(BgYdanHasi* this, PlayState* play); -ActorInit Bg_Ydan_Hasi_InitVars = { +ActorProfile Bg_Ydan_Hasi_Profile = { /**/ ACTOR_BG_YDAN_HASI, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Bg_Ydan_Maruta/z_bg_ydan_maruta.c b/src/overlays/actors/ovl_Bg_Ydan_Maruta/z_bg_ydan_maruta.c index 9d141c2975..142960fead 100644 --- a/src/overlays/actors/ovl_Bg_Ydan_Maruta/z_bg_ydan_maruta.c +++ b/src/overlays/actors/ovl_Bg_Ydan_Maruta/z_bg_ydan_maruta.c @@ -20,7 +20,7 @@ void func_808BF078(BgYdanMaruta* this, PlayState* play); void func_808BF108(BgYdanMaruta* this, PlayState* play); void func_808BF1EC(BgYdanMaruta* this, PlayState* play); -ActorInit Bg_Ydan_Maruta_InitVars = { +ActorProfile Bg_Ydan_Maruta_Profile = { /**/ ACTOR_BG_YDAN_MARUTA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 1a5d2e3664..6a1d989a2a 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 @@ -24,7 +24,7 @@ typedef enum { /* 1 */ WEB_WALL } BgYdanSpType; -ActorInit Bg_Ydan_Sp_InitVars = { +ActorProfile Bg_Ydan_Sp_Profile = { /**/ ACTOR_BG_YDAN_SP, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -395,7 +395,7 @@ void BgYdanSp_WallWebIdle(BgYdanSp* this, PlayState* play) { this->dyna.actor.home.pos.y = this->dyna.actor.world.pos.y + 80.0f; BgYdanSp_BurnWeb(this, play); } else if (player->heldItemAction == PLAYER_IA_DEKU_STICK && player->unk_860 != 0) { - func_8002DBD0(&this->dyna.actor, &sp30, &player->meleeWeaponInfo[0].tip); + Actor_WorldToActorCoords(&this->dyna.actor, &sp30, &player->meleeWeaponInfo[0].tip); if (fabsf(sp30.x) < 100.0f && sp30.z < 1.0f && sp30.y < 200.0f) { OnePointCutscene_Init(play, 3020, 40, &this->dyna.actor, CAM_ID_MAIN); Math_Vec3f_Copy(&this->dyna.actor.home.pos, &player->meleeWeaponInfo[0].tip); @@ -418,8 +418,6 @@ void BgYdanSp_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx, "../z_bg_ydan_sp.c", 781); - if (1) {} - Gfx_SetupDL_25Xlu(play->state.gfxCtx); if (thisx->params == WEB_WALL) { gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_bg_ydan_sp.c", 787), 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 18f026c33b..06ff7dbff3 100644 --- a/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c +++ b/src/overlays/actors/ovl_Bg_Zg/z_bg_zg.c @@ -35,7 +35,7 @@ static BgZgDrawFunc sDrawFuncs[] = { func_808C0EEC, }; -ActorInit Bg_Zg_InitVars = { +ActorProfile Bg_Zg_Profile = { /**/ ACTOR_BG_ZG, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 a502fb6f2e..dbdc0a3708 100644 --- a/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c +++ b/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c @@ -33,7 +33,7 @@ f32 func_808C50A8(BossDodongo* this, PlayState* play); void BossDodongo_DrawEffects(PlayState* play); void BossDodongo_UpdateEffects(PlayState* play); -ActorInit Boss_Dodongo_InitVars = { +ActorProfile Boss_Dodongo_Profile = { /**/ ACTOR_EN_DODONGO, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 6ba94dbed5..2377494fb9 100644 --- a/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c +++ b/src/overlays/actors/ovl_Boss_Fd/z_boss_fd.c @@ -44,7 +44,7 @@ void BossFd_Wait(BossFd* this, PlayState* play); void BossFd_UpdateEffects(BossFd* this, PlayState* play); void BossFd_DrawBody(PlayState* play, BossFd* this); -ActorInit Boss_Fd_InitVars = { +ActorProfile Boss_Fd_Profile = { /**/ ACTOR_BOSS_FD, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 7a0895bdc1..86e22e9093 100644 --- a/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c +++ b/src/overlays/actors/ovl_Boss_Fd2/z_boss_fd2.c @@ -46,7 +46,7 @@ void BossFd2_Damaged(BossFd2* this, PlayState* play); void BossFd2_Death(BossFd2* this, PlayState* play); void BossFd2_Wait(BossFd2* this, PlayState* play); -ActorInit Boss_Fd2_InitVars = { +ActorProfile Boss_Fd2_Profile = { /**/ ACTOR_BOSS_FD2, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 0d5b973618..f4d050ac1a 100644 --- a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c +++ b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c @@ -45,7 +45,7 @@ void BossGanon_UpdateEffects(PlayState* play); s32 BossGanon_CheckFallingPlatforms(BossGanon* this, PlayState* play, Vec3f* checkPos); -ActorInit Boss_Ganon_InitVars = { +ActorProfile Boss_Ganon_Profile = { /**/ ACTOR_BOSS_GANON, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -100,21 +100,19 @@ static ColliderCylinderInit sLightBallCylinderInit = { static u8 D_808E4C58[] = { 0, 12, 10, 12, 14, 16, 12, 14, 16, 12, 14, 16, 12, 14, 16, 10, 16, 14 }; static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f }; -// For retail BSS ordering, the block number of sGanondorf must be 0 or just above. - -// TODO: There's probably a way to do this 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 50 +#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" static EnGanonMant* sCape; -#pragma increment_block_number 200 +// 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:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" static s32 sSeed1; static s32 sSeed2; static s32 sSeed3; -#pragma increment_block_number 200 +#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" static BossGanon* sGanondorf; @@ -3521,8 +3519,6 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, PlayState* play) { Matrix_Pop(); } - if (1) {} - CLOSE_DISPS(gfxCtx, "../z_boss_ganon.c", 7721); } } @@ -4179,8 +4175,6 @@ void BossGanon_LightBall_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 9911); } 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 ced201f7b1..904dc40b5f 100644 --- a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c +++ b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c @@ -32,7 +32,7 @@ void BossGanon2_DrawEffects(PlayState* play); void BossGanon2_GenShadowTexture(void* shadowTexture, BossGanon2* this, PlayState* play); void BossGanon2_DrawShadowTexture(void* shadowTexture, BossGanon2* this, PlayState* play); -ActorInit Boss_Ganon2_InitVars = { +ActorProfile Boss_Ganon2_Profile = { /**/ ACTOR_BOSS_GANON2, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -2486,7 +2486,6 @@ void func_80904340(BossGanon2* this, PlayState* play) { } Matrix_Pop(); - if (1) {} CLOSE_DISPS(gameState->gfxCtx, "../z_boss_ganon2.c", 5255); } @@ -2640,8 +2639,6 @@ void func_80904D88(BossGanon2* this, PlayState* play) { } } - if (1) {} - CLOSE_DISPS(gameState->gfxCtx, "../z_boss_ganon2.c", 5622); } 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 dae6502be4..98aa721bb0 100644 --- a/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c +++ b/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c @@ -69,7 +69,7 @@ void BossGanondrof_Charge(BossGanondrof* this, PlayState* play); void BossGanondrof_Stunned(BossGanondrof* this, PlayState* play); void BossGanondrof_Death(BossGanondrof* this, PlayState* play); -ActorInit Boss_Ganondrof_InitVars = { +ActorProfile Boss_Ganondrof_Profile = { /**/ ACTOR_BOSS_GANONDROF, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -1520,7 +1520,6 @@ void BossGanondrof_Draw(Actor* thisx, PlayState* play) { BossGanondrof_PostLimbDraw, this); PRINTF("DRAW 22\n"); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganondrof.c", 3814); PRINTF("DRAW END %d\n", this->actor.params); } 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 bdbf0fcf03..3e217b2953 100644 --- a/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c +++ b/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c @@ -49,7 +49,7 @@ void BossGoma_WallClimb(BossGoma* this, PlayState* play); void BossGoma_CeilingMoveToCenter(BossGoma* this, PlayState* play); void BossGoma_SpawnChildGohma(BossGoma* this, PlayState* play, s16 i); -ActorInit Boss_Goma_InitVars = { +ActorProfile Boss_Goma_Profile = { /**/ ACTOR_BOSS_GOMA, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 94021d0ee1..1f5dc938fe 100644 --- a/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c +++ b/src/overlays/actors/ovl_Boss_Mo/z_boss_mo.c @@ -118,7 +118,7 @@ typedef enum { /* 150 */ MO_DEATH_MO_CORE_BURST = 150 } BossMoCsState; -ActorInit Boss_Mo_InitVars = { +ActorProfile Boss_Mo_Profile = { /**/ ACTOR_BOSS_MO, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -2753,7 +2753,6 @@ void BossMo_DrawTent(Actor* thisx, PlayState* play) { if (this->drawActor) { BossMo_DrawTentacle(this, play); } - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_boss_mo.c", 7023); } 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 dd2136039d..eccf44d43e 100644 --- a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c +++ b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c @@ -234,7 +234,7 @@ static Color_RGBA8 sBodyColor = { 255, 255, 255, 255 }; static Color_RGBA8 sStaticColor = { 0, 0, 0, 255 }; static s32 sHandState[] = { HAND_WAIT, HAND_WAIT }; -ActorInit Boss_Sst_InitVars = { +ActorProfile Boss_Sst_Profile = { /**/ ACTOR_BOSS_SST, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -1055,8 +1055,8 @@ void BossSst_HeadDeath(BossSst* this, PlayState* play) { player->actor.world.pos.z = sRoomCenter.z + (400.0f * Math_CosS(this->actor.shape.rot.y)) - (Math_SinS(this->actor.shape.rot.y) * -120.0f); player->actor.shape.rot.y = Actor_WorldYawTowardPoint(&player->actor, &sRoomCenter); - func_8002DBD0(&this->actor, &sSubCamEye, &GET_ACTIVE_CAM(play)->eye); - func_8002DBD0(&this->actor, &sSubCamAt, &GET_ACTIVE_CAM(play)->at); + Actor_WorldToActorCoords(&this->actor, &sSubCamEye, &GET_ACTIVE_CAM(play)->eye); + Actor_WorldToActorCoords(&this->actor, &sSubCamAt, &GET_ACTIVE_CAM(play)->at); this->radius = -350.0f; this->actor.world.pos.x = sRoomCenter.x - (Math_SinS(this->actor.shape.rot.y) * 350.0f); this->actor.world.pos.z = sRoomCenter.z - (Math_CosS(this->actor.shape.rot.y) * 350.0f); @@ -2640,8 +2640,8 @@ void BossSst_UpdateHead(Actor* thisx, PlayState* play) { s32 pad; BossSst* this = (BossSst*)thisx; - func_8002DBD0(&this->actor, &sHandOffsets[RIGHT], &sHands[RIGHT]->actor.world.pos); - func_8002DBD0(&this->actor, &sHandOffsets[LEFT], &sHands[LEFT]->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &sHandOffsets[RIGHT], &sHands[RIGHT]->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &sHandOffsets[LEFT], &sHands[LEFT]->actor.world.pos); sHandYawOffsets[LEFT] = sHands[LEFT]->actor.shape.rot.y - thisx->shape.rot.y; sHandYawOffsets[RIGHT] = sHands[RIGHT]->actor.shape.rot.y - thisx->shape.rot.y; 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 2f9c32a68f..ebd911e99d 100644 --- a/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c +++ b/src/overlays/actors/ovl_Boss_Tw/z_boss_tw.c @@ -116,7 +116,7 @@ void BossTw_TwinrovaChargeBlast(BossTw* this, PlayState* play); void BossTw_TwinrovaSetupSpin(BossTw* this, PlayState* play); void BossTw_UpdateEffects(PlayState* play); -ActorInit Boss_Tw_InitVars = { +ActorProfile Boss_Tw_Profile = { /**/ ACTOR_BOSS_TW, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -3299,8 +3299,6 @@ void func_80941BC0(BossTw* this, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gTwinrovaEffectHaloDL)); Matrix_Pop(); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_boss_tw.c", 6461); } @@ -3565,8 +3563,6 @@ void BossTw_Draw(Actor* thisx, PlayState* play2) { } } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_boss_tw.c", 7123); } 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 49a3b69f63..c84328b57c 100644 --- a/src/overlays/actors/ovl_Boss_Va/z_boss_va.c +++ b/src/overlays/actors/ovl_Boss_Va/z_boss_va.c @@ -188,7 +188,7 @@ void BossVa_SpawnBloodDroplets(PlayState* play, BossVaEffect* effect, Vec3f* pos void BossVa_Tumor(PlayState* play, BossVa* this, s32 count, s16 scale, f32 xzSpread, f32 ySpread, u8 mode, f32 range, u8 fixed); -ActorInit Boss_Va_InitVars = { +ActorProfile Boss_Va_Profile = { /**/ ACTOR_BOSS_VA, /**/ ACTORCAT_BOSS, /**/ FLAGS, @@ -3149,8 +3149,6 @@ void BossVa_BariPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* gSPDisplayList(POLY_XLU_DISP++, *dList); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_boss_va.c", 4517); } 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 c2b949c27c..fcd116ffee 100644 --- a/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c +++ b/src/overlays/actors/ovl_Demo_6K/z_demo_6k.c @@ -37,7 +37,7 @@ void func_80968B70(Actor* thisx, PlayState* play); void func_80968FB0(Actor* thisx, PlayState* play); void func_809691BC(Demo6K* this, PlayState* play, s32 cueChannel); -ActorInit Demo_6K_InitVars = { +ActorProfile Demo_6K_Profile = { /**/ ACTOR_DEMO_6K, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 4fc2d7bb94..35c6b7550f 100644 --- a/src/overlays/actors/ovl_Demo_Du/z_demo_du.c +++ b/src/overlays/actors/ovl_Demo_Du/z_demo_du.c @@ -1042,7 +1042,7 @@ void DemoDu_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawIndex](thisx, play); } -ActorInit Demo_Du_InitVars = { +ActorProfile Demo_Du_Profile = { /**/ ACTOR_DEMO_DU, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c3d0e6327b..27cac8856d 100644 --- a/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c +++ b/src/overlays/actors/ovl_Demo_Ec/z_demo_ec.c @@ -1369,7 +1369,7 @@ void DemoEc_Draw(Actor* thisx, PlayState* play) { } } -ActorInit Demo_Ec_InitVars = { +ActorProfile Demo_Ec_Profile = { /**/ ACTOR_DEMO_EC, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 e5db2e88a0..e6ec54a62e 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -62,7 +62,7 @@ void DemoEffect_SetStartPosFromCue(DemoEffect* this, PlayState* play, s32 cueCha void DemoEffect_SetPosRotFromCue(DemoEffect* this, PlayState* play, s32 cueChannel, s32 shouldUpdateFacing); void DemoEffect_MoveTowardCuePos(DemoEffect* this, PlayState* play, s32 cueChannel, f32 speed); -ActorInit Demo_Effect_InitVars = { +ActorProfile Demo_Effect_Profile = { /**/ ACTOR_DEMO_EFFECT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 b80f419979..384398cba8 100644 --- a/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c +++ b/src/overlays/actors/ovl_Demo_Ext/z_demo_ext.c @@ -236,7 +236,7 @@ void DemoExt_Draw(Actor* thisx, PlayState* play) { } } -ActorInit Demo_Ext_InitVars = { +ActorProfile Demo_Ext_Profile = { /**/ ACTOR_DEMO_EXT, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 ee75d038d7..c18e18d8a9 100644 --- a/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c +++ b/src/overlays/actors/ovl_Demo_Geff/z_demo_geff.c @@ -42,7 +42,7 @@ static DemoGeffDrawFunc sDrawFuncs[] = { func_80978344, }; -ActorInit Demo_Geff_InitVars = { +ActorProfile Demo_Geff_Profile = { /**/ ACTOR_DEMO_GEFF, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 e508f6cc8b..9d4ba2fa36 100644 --- a/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c +++ b/src/overlays/actors/ovl_Demo_Gj/z_demo_gj.c @@ -1457,7 +1457,7 @@ void DemoGj_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawConfig](this, play); } -ActorInit Demo_Gj_InitVars = { +ActorProfile Demo_Gj_Profile = { /**/ ACTOR_DEMO_GJ, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 432b8ce63d..2a6ac15c52 100644 --- a/src/overlays/actors/ovl_Demo_Go/z_demo_go.c +++ b/src/overlays/actors/ovl_Demo_Go/z_demo_go.c @@ -37,7 +37,7 @@ static DemoGoDrawFunc D_8097D468[] = { func_8097D29C, }; -ActorInit Demo_Go_InitVars = { +ActorProfile Demo_Go_Profile = { /**/ ACTOR_DEMO_GO, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 6e3d236134..b9a1a9e116 100644 --- a/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c +++ b/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c @@ -1784,7 +1784,7 @@ void DemoGt_Draw(Actor* thisx, PlayState* play) { drawFunc(this, play); } -ActorInit Demo_Gt_InitVars = { +ActorProfile Demo_Gt_Profile = { /**/ ACTOR_DEMO_GT, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 fcb7817e65..05ef28a1b3 100644 --- a/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c +++ b/src/overlays/actors/ovl_Demo_Ik/z_demo_ik.c @@ -503,7 +503,7 @@ void DemoIk_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawMode](this, play); } -ActorInit Demo_Ik_InitVars = { +ActorProfile Demo_Ik_Profile = { /**/ ACTOR_DEMO_IK, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 8d85486225..37226cc591 100644 --- a/src/overlays/actors/ovl_Demo_Im/z_demo_im.c +++ b/src/overlays/actors/ovl_Demo_Im/z_demo_im.c @@ -92,7 +92,7 @@ static DemoImDrawFunc sDrawFuncs[] = { DemoIm_DrawTranslucent, }; -ActorInit Demo_Im_InitVars = { +ActorProfile Demo_Im_Profile = { /**/ ACTOR_DEMO_IM, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 f2f1941750..cd106c8519 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -40,7 +40,7 @@ extern CutsceneData gChildWarpOutCS[]; extern CutsceneData gChildWarpInToTCS[]; extern CutsceneData gChildWarpOutToTCS[]; -ActorInit Demo_Kankyo_InitVars = { +ActorProfile Demo_Kankyo_Profile = { /**/ ACTOR_DEMO_KANKYO, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -764,11 +764,11 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { static u32 D_8098CF94; static Vec3f D_8098CF98; + PlayState* play2 = (PlayState*)play; s16 i; f32 temp_f22; DemoKankyo* this = (DemoKankyo*)thisx; - Gfx* disp; - Player* player = GET_PLAYER(play); + Player* player = GET_PLAYER(play2); Vec3f camPos; f32 translateX; f32 translateY; @@ -800,7 +800,7 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { &this->unk_150[i].unk_1C) != 0) { this->unk_150[i].unk_22++; } - if (play->sceneId == SCENE_TEMPLE_OF_TIME && play->csCtx.curFrame == 25) { + if (play2->sceneId == SCENE_TEMPLE_OF_TIME && play2->csCtx.curFrame == 25) { this->unk_150[i].unk_22++; } } else { @@ -810,7 +810,7 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { &this->unk_150[i].unk_1C) != 0) { this->unk_150[i].unk_22++; } - if (D_8098CF84 < play->csCtx.curFrame && this->actor.params == DEMOKANKYO_WARP_OUT) { + if (D_8098CF84 < play2->csCtx.curFrame && this->actor.params == DEMOKANKYO_WARP_OUT) { this->unk_150[i].unk_22++; } } @@ -820,11 +820,11 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { case 2: if (this->actor.params == DEMOKANKYO_WARP_OUT) { if (i == 0) { - Environment_WarpSongLeave(play); + Environment_WarpSongLeave(play2); this->unk_150[i].unk_22++; } - } else if (i + 1 == this->sparkleCounter && play->csCtx.state == CS_STATE_IDLE) { - Interface_SetSubTimerToFinalSecond(play); + } else if (i + 1 == this->sparkleCounter && play2->csCtx.state == CS_STATE_IDLE) { + Interface_SetSubTimerToFinalSecond(play2); Actor_Kill(&this->actor); } break; @@ -862,7 +862,6 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { translateZ = this->unk_150[i].unk_C.z + this->unk_150[i].unk_0.z; if (this->unk_150[i].unk_22 < 2) { - disp = (Gfx*)(uintptr_t)gEffFlash1DL; // necessary to match but probably fake if (linkAge != LINK_AGE_ADULT) { Matrix_Translate(translateX, translateY, translateZ, MTXMODE_NEW); } else { @@ -873,9 +872,9 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { this->unk_150[i].unk_18 * (0.018f * temp_f22), MTXMODE_APPLY); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); if (this->actor.params == DEMOKANKYO_WARP_OUT) { - gDPSetEnvColor(POLY_XLU_DISP++, sWarpSparkleEnvColors[play->msgCtx.lastPlayedSong].r, - sWarpSparkleEnvColors[play->msgCtx.lastPlayedSong].g, - sWarpSparkleEnvColors[play->msgCtx.lastPlayedSong].b, 255); + gDPSetEnvColor(POLY_XLU_DISP++, sWarpSparkleEnvColors[play2->msgCtx.lastPlayedSong].r, + sWarpSparkleEnvColors[play2->msgCtx.lastPlayedSong].g, + sWarpSparkleEnvColors[play2->msgCtx.lastPlayedSong].b, 255); } else { s8 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data; @@ -883,11 +882,11 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { sWarpSparkleEnvColors[respawnData].g, sWarpSparkleEnvColors[respawnData].b, 255); } Gfx_SetupDL_25Xlu(play->state.gfxCtx); - Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); + Matrix_Mult(&play2->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZ(DEG_TO_RAD(this->unk_150[i].unk_24), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_demo_kankyo.c", 2011), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, disp); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); this->unk_150[i].unk_24 += 0x190; } } 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 9568574a4b..a51816bee3 100644 --- a/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c +++ b/src/overlays/actors/ovl_Demo_Kekkai/z_demo_kekkai.c @@ -21,7 +21,7 @@ void DemoKekkai_DrawTrialBarrier(Actor* thisx, PlayState* play2); void DemoKekkai_TowerBarrier(DemoKekkai* this, PlayState* play); -ActorInit Demo_Kekkai_InitVars = { +ActorProfile Demo_Kekkai_Profile = { /**/ ACTOR_DEMO_KEKKAI, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 b930f0365a..57edd774cf 100644 --- a/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c +++ b/src/overlays/actors/ovl_Demo_Sa/z_demo_sa.c @@ -87,7 +87,7 @@ static DemoSaDrawFunc sDrawFuncs[] = { DemoSa_DrawXlu, }; -ActorInit Demo_Sa_InitVars = { +ActorProfile Demo_Sa_Profile = { /**/ ACTOR_DEMO_SA, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 19272d5042..0e1fce9315 100644 --- a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c +++ b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c @@ -15,7 +15,7 @@ void DemoShd_Draw(Actor* thisx, PlayState* play); void func_80991298(DemoShd* this, PlayState* play); -ActorInit Demo_Shd_InitVars = { +ActorProfile Demo_Shd_Profile = { /**/ ACTOR_DEMO_SHD, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -117,7 +117,5 @@ void DemoShd_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, D_809934B8); } - if (1) {} // Necessary to match - CLOSE_DISPS(play->state.gfxCtx, "../z_demo_shd.c", 762); } 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 cd6966eb05..8966ec40b2 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 @@ -26,7 +26,7 @@ static DemoTreLgtInfo sDemoTreLgtInfo[] = { { 1.0f, 136.0f, 220.0f, 50.0f }, }; -ActorInit Demo_Tre_Lgt_InitVars = { +ActorProfile Demo_Tre_Lgt_Profile = { /**/ ACTOR_DEMO_TRE_LGT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 5487a20b4c..948b1b8a2b 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -18,7 +18,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play); void DoorAna_WaitOpen(DoorAna* this, PlayState* play); void DoorAna_GrabPlayer(DoorAna* this, PlayState* play); -ActorInit Door_Ana_InitVars = { +ActorProfile Door_Ana_Profile = { /**/ ACTOR_DOOR_ANA, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c index 160a159596..f12bccb5b9 100644 --- a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c +++ b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c @@ -19,7 +19,7 @@ s32 func_80994750(DoorGerudo* this, PlayState* play); void func_8099496C(DoorGerudo* this, PlayState* play); void func_809949C8(DoorGerudo* this, PlayState* play); -ActorInit Door_Gerudo_InitVars = { +ActorProfile Door_Gerudo_Profile = { /**/ ACTOR_DOOR_GERUDO, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -67,7 +67,7 @@ f32 func_809946BC(PlayState* play, DoorGerudo* this, f32 arg2, f32 arg3, f32 arg playerPos.x = player->actor.world.pos.x; playerPos.y = player->actor.world.pos.y + arg2; playerPos.z = player->actor.world.pos.z; - func_8002DBD0(&this->dyna.actor, &sp1C, &playerPos); + Actor_WorldToActorCoords(&this->dyna.actor, &sp1C, &playerPos); if ((arg3 < fabsf(sp1C.x)) || (arg4 < fabsf(sp1C.y))) { return MAXFLOAT; 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 26630ef776..b938e97df6 100644 --- a/src/overlays/actors/ovl_Door_Killer/z_door_killer.c +++ b/src/overlays/actors/ovl_Door_Killer/z_door_killer.c @@ -29,7 +29,7 @@ void DoorKiller_WaitForObject(DoorKiller* this, PlayState* play); void DoorKiller_DrawDoor(Actor* thisx, PlayState* play); void DoorKiller_DrawRubble(Actor* thisx, PlayState* play); -ActorInit Door_Killer_InitVars = { +ActorProfile Door_Killer_Profile = { /**/ ACTOR_DOOR_KILLER, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -349,7 +349,7 @@ void DoorKiller_FallOver(DoorKiller* this, PlayState* play) { if (!(this->hasHitPlayerOrGround & 1)) { Vec3f playerPosRelToDoor; Player* player = GET_PLAYER(play); - func_8002DBD0(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); if ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) && (playerPosRelToDoor.z < 100.0f) && (playerPosRelToDoor.z > 0.0f)) { this->hasHitPlayerOrGround |= 1; @@ -411,7 +411,7 @@ void DoorKiller_Wait(DoorKiller* this, PlayState* play) { Vec3f playerPosRelToDoor; s16 angleToFacingPlayer; - func_8002DBD0(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); // playerIsOpening is set by player if (this->playerIsOpening) { 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 4926bdc7b8..c6a4b5bee2 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -48,7 +48,7 @@ void DoorShutter_GohmaBlockFall(DoorShutter* this, PlayState* play); void DoorShutter_GohmaBlockBounce(DoorShutter* this, PlayState* play); void DoorShutter_PhantomGanonBarsRaise(DoorShutter* this, PlayState* play); -ActorInit Door_Shutter_InitVars = { +ActorProfile Door_Shutter_Profile = { /**/ ACTOR_DOOR_SHUTTER, /**/ ACTORCAT_DOOR, /**/ FLAGS, @@ -508,7 +508,7 @@ f32 DoorShutter_GetPlayerDistance(PlayState* play, DoorShutter* this, f32 offset playerPos.y = player->actor.world.pos.y + offsetY; playerPos.z = player->actor.world.pos.z; - func_8002DBD0(&this->dyna.actor, &relPlayerPos, &playerPos); + Actor_WorldToActorCoords(&this->dyna.actor, &relPlayerPos, &playerPos); if (fabsf(relPlayerPos.x) > maxDistSides || fabsf(relPlayerPos.y) > maxDistY) { return MAXFLOAT; @@ -800,7 +800,7 @@ void DoorShutter_SetupClosed(DoorShutter* this, PlayState* play) { if (this->dyna.actor.room >= 0) { Vec3f relPlayerPos; - func_8002DBD0(&this->dyna.actor, &relPlayerPos, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &relPlayerPos, &player->actor.world.pos); this->dyna.actor.room = play->transiActorCtx.list[GET_TRANSITION_ACTOR_INDEX(&this->dyna.actor)] .sides[(relPlayerPos.z < 0.0f) ? 0 : 1] .room; @@ -973,20 +973,19 @@ s32 DoorShutter_ShouldDraw(DoorShutter* this, PlayState* play) { void DoorShutter_Draw(Actor* thisx, PlayState* play) { DoorShutter* this = (DoorShutter*)thisx; - if (1) {} if (1) {} //! @bug This actor is not fully initialized until the required object dependency is loaded. //! In most cases, the check for objectSlot to equal requiredObjectSlot prevents the actor //! from drawing until initialization is complete. However if the required object is the same as the - //! object dependency listed in init vars (gameplay_keep in this case), the check will pass even though + //! object dependency listed in the actor profile (gameplay_keep in this case), the check will pass even though //! initialization has not completed. When this happens, it will try to draw the display list of the //! first entry in `sGfxInfo`, which will likely crash the game. //! This only matters in very specific scenarios, when the door is unculled on the first possible frame //! after spawning. It will try to draw without having run update yet. //! //! The best way to fix this issue (and what was done in Majora's Mask) is to null out the draw function in - //! the init vars for the actor, and only set draw after initialization is complete. + //! the profile for the actor, and only set draw after initialization is complete. if (this->dyna.actor.objectSlot == this->requiredObjectSlot && (this->styleType == DOORSHUTTER_STYLE_PHANTOM_GANON || DoorShutter_ShouldDraw(this, play))) { 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 726f0f5d1d..e2e6ada56b 100644 --- a/src/overlays/actors/ovl_Door_Toki/z_door_toki.c +++ b/src/overlays/actors/ovl_Door_Toki/z_door_toki.c @@ -13,7 +13,7 @@ void DoorToki_Init(Actor* thisx, PlayState* play); void DoorToki_Destroy(Actor* thisx, PlayState* play); void DoorToki_Update(Actor* thisx, PlayState* play); -ActorInit Door_Toki_InitVars = { +ActorProfile Door_Toki_Profile = { /**/ ACTOR_DOOR_TOKI, /**/ ACTORCAT_BG, /**/ FLAGS, 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 dbddf17995..f6aa53916c 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -32,7 +32,7 @@ void DoorWarp1_DoNothing(DoorWarp1* this, PlayState* play); void DoorWarp1_ChooseInitialAction(DoorWarp1* this, PlayState* play); void DoorWarp1_FloatPlayer(DoorWarp1* this, PlayState* play); -ActorInit Door_Warp1_InitVars = { +ActorProfile Door_Warp1_Profile = { /**/ ACTOR_DOOR_WARP1, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 cd2dbef96d..33e718a059 100644 --- a/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c +++ b/src/overlays/actors/ovl_Efc_Erupc/z_efc_erupc.c @@ -14,7 +14,7 @@ void EfcErupc_UpdateEffects(EfcErupc* this, PlayState* play); void EfcErupc_SpawnEffect(EfcErupcEffect* effect, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 scaleFactor); void EfcErupc_InitEffects(EfcErupcEffect* effect); -ActorInit Efc_Erupc_InitVars = { +ActorProfile Efc_Erupc_Profile = { /**/ ACTOR_EFC_ERUPC, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 289fee6a8a..de97ec8444 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -22,7 +22,7 @@ void EffDust_UpdateFunc_8099DFC0(EffDust* this, PlayState* play); void EffDust_DrawFunc_8099E4F4(Actor* thisx, PlayState* play2); void EffDust_DrawFunc_8099E784(Actor* thisx, PlayState* play2); -ActorInit Eff_Dust_InitVars = { +ActorProfile Eff_Dust_Profile = { /**/ ACTOR_EFF_DUST, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 d326f93b5c..13057532a4 100644 --- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c +++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c @@ -20,7 +20,7 @@ void ElfMsg_Draw(Actor* thisx, PlayState* play); void ElfMsg_CallNaviCuboid(ElfMsg* this, PlayState* play); void ElfMsg_CallNaviCylinder(ElfMsg* this, PlayState* play); -ActorInit Elf_Msg_InitVars = { +ActorProfile Elf_Msg_Profile = { /**/ ACTOR_ELF_MSG, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 0e94e73927..9a7eb92f4b 100644 --- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c +++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c @@ -20,7 +20,7 @@ s32 ElfMsg2_GetMessageId(ElfMsg2* this); void ElfMsg2_WaitUntilActivated(ElfMsg2* this, PlayState* play); void ElfMsg2_WaitForTextRead(ElfMsg2* this, PlayState* play); -ActorInit Elf_Msg2_InitVars = { +ActorProfile Elf_Msg2_Profile = { /**/ ACTOR_ELF_MSG2, /**/ ACTORCAT_BG, /**/ FLAGS, 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 bed0a0be6f..8dfe3fbb2b 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -39,7 +39,7 @@ typedef enum { /* 10 */ AM_BEHAVIOR_AGGRO = 10 } ArmosBehavior; -ActorInit En_Am_InitVars = { +ActorProfile En_Am_Profile = { /**/ ACTOR_EN_AM, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 1e9dbb9333..aca4646244 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -26,7 +26,7 @@ void func_809B0994(EnAni* this, PlayState* play); void func_809B0A28(EnAni* this, PlayState* play); void func_809B0A6C(EnAni* this, PlayState* play); -ActorInit En_Ani_InitVars = { +ActorProfile En_Ani_Profile = { /**/ ACTOR_EN_ANI, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 a370e6b36a..501c25182a 100644 --- a/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c +++ b/src/overlays/actors/ovl_En_Anubice/z_en_anubice.c @@ -25,7 +25,7 @@ void EnAnubice_SetupShootFireball(EnAnubice* this, PlayState* play); void EnAnubice_ShootFireball(EnAnubice* this, PlayState* play); void EnAnubice_Die(EnAnubice* this, PlayState* play); -ActorInit En_Anubice_InitVars = { +ActorProfile En_Anubice_Profile = { /**/ ACTOR_EN_ANUBICE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 19851e173b..480dc15804 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 @@ -19,7 +19,7 @@ void func_809B26EC(EnAnubiceFire* this, PlayState* play); void func_809B27D8(EnAnubiceFire* this, PlayState* play); void func_809B2B48(EnAnubiceFire* this, PlayState* play); -ActorInit En_Anubice_Fire_InitVars = { +ActorProfile En_Anubice_Fire_Profile = { /**/ ACTOR_EN_ANUBICE_FIRE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 d2e69c344b..ae88d59295 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 @@ -17,7 +17,7 @@ void EnAnubiceTag_Draw(Actor* thisx, PlayState* play); void EnAnubiceTag_SpawnAnubis(EnAnubiceTag* this, PlayState* play); void EnAnubiceTag_ManageAnubis(EnAnubiceTag* this, PlayState* play); -ActorInit En_Anubice_Tag_InitVars = { +ActorProfile En_Anubice_Tag_Profile = { /**/ ACTOR_EN_ANUBICE_TAG, /**/ ACTORCAT_SWITCH, /**/ FLAGS, 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 84bed0a06e..60b2121000 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 @@ -12,7 +12,7 @@ void EnArowTrap_Init(Actor* thisx, PlayState* play); void EnArowTrap_Destroy(Actor* thisx, PlayState* play); void EnArowTrap_Update(Actor* thisx, PlayState* play); -ActorInit En_Arow_Trap_InitVars = { +ActorProfile En_Arow_Trap_Profile = { /**/ ACTOR_EN_AROW_TRAP, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 75aa432f7f..573b15d833 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -19,7 +19,7 @@ void EnArrow_Fly(EnArrow* this, PlayState* play); void func_809B45E0(EnArrow* this, PlayState* play); void func_809B4640(EnArrow* this, PlayState* play); -ActorInit En_Arrow_InitVars = { +ActorProfile En_Arrow_Profile = { /**/ ACTOR_EN_ARROW, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 a045dd41bd..3025df7f51 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 @@ -19,7 +19,7 @@ void func_809B5670(EnAttackNiw* this, PlayState* play); void func_809B5C18(EnAttackNiw* this, PlayState* play); void func_809B59B0(EnAttackNiw* this, PlayState* play); -ActorInit En_Attack_Niw_InitVars = { +ActorProfile En_Attack_Niw_Profile = { /**/ ACTOR_EN_ATTACK_NIW, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 133cffe450..0f927d635d 100644 --- a/src/overlays/actors/ovl_En_Ba/z_en_ba.c +++ b/src/overlays/actors/ovl_En_Ba/z_en_ba.c @@ -23,7 +23,7 @@ void EnBa_RecoilFromDamage(EnBa* this, PlayState* play); void EnBa_Die(EnBa* this, PlayState* play); void EnBa_SetupSwingAtPlayer(EnBa* this); -ActorInit En_Ba_InitVars = { +ActorProfile En_Ba_Profile = { /**/ ACTOR_EN_BA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 2c05b09977..a8131ea372 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -195,7 +195,7 @@ static DamageTable sDamageTableWhite = { /* Unknown 2 */ DMG_ENTRY(0, 0x0), }; -ActorInit En_Bb_InitVars = { +ActorProfile En_Bb_Profile = { /**/ ACTOR_EN_BB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 ba1920a321..7137c04212 100644 --- a/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c +++ b/src/overlays/actors/ovl_En_Bdfire/z_en_bdfire.c @@ -18,7 +18,7 @@ void EnBdfire_DrawFire(EnBdfire* this, PlayState* play); void func_809BC2A4(EnBdfire* this, PlayState* play); void func_809BC598(EnBdfire* this, PlayState* play); -ActorInit En_Bdfire_InitVars = { +ActorProfile En_Bdfire_Profile = { /**/ 0, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 54248862c1..398ab5d8a3 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -30,7 +30,7 @@ static Color_RGBA8 sEffectPrimColor = { 255, 255, 255, 255 }; static Color_RGBA8 sEffectEnvColor = { 100, 255, 255, 255 }; static Vec3f sEffectPosAccel = { 0.0f, 0.0f, 0.0f }; -ActorInit En_Bigokuta_InitVars = { +ActorProfile En_Bigokuta_Profile = { /**/ ACTOR_EN_BIGOKUTA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -498,7 +498,7 @@ void func_809BDC08(EnBigokuta* this, PlayState* play) { } phi_v1 = (Actor_WorldDistXZToPoint(&player->actor, &this->actor.home.pos) - 180.0f) * (8.0f / 15); - func_8002DBD0(&this->actor, &sp28, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &sp28, &player->actor.world.pos); if (fabsf(sp28.x) > 263.0f || ((sp28.z > 0.0f) && !Actor_IsFacingPlayer(&this->actor, 0x1B00) && !Player_IsFacingActor(&this->actor, 0x2000, play))) { phi_v1 -= 0x80; @@ -837,7 +837,6 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, temp_f0, temp_f0, temp_f0, 255); - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_en_bigokuta.c", 1945); } } else if (limbIndex == 10) { @@ -849,7 +848,6 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec } gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, intensity, intensity, intensity, intensity); - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_en_bigokuta.c", 1972); } else if (limbIndex == 17 && this->actionFunc == func_809BE26C) { if (this->unk_198 < 5) { 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 b7b4d5d760..312d6172c1 100644 --- a/src/overlays/actors/ovl_En_Bili/z_en_bili.c +++ b/src/overlays/actors/ovl_En_Bili/z_en_bili.c @@ -28,7 +28,7 @@ void EnBili_Die(EnBili* this, PlayState* play); void EnBili_Stunned(EnBili* this, PlayState* play); void EnBili_Frozen(EnBili* this, PlayState* play); -ActorInit En_Bili_InitVars = { +ActorProfile En_Bili_Profile = { /**/ ACTOR_EN_BILI, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Bird/z_en_bird.c b/src/overlays/actors/ovl_En_Bird/z_en_bird.c index 77db59284c..3229f5af88 100644 --- a/src/overlays/actors/ovl_En_Bird/z_en_bird.c +++ b/src/overlays/actors/ovl_En_Bird/z_en_bird.c @@ -19,7 +19,7 @@ void EnBird_Move(EnBird* this, PlayState* play); void EnBird_Idle(EnBird* this, PlayState* play); void EnBird_SetupIdle(EnBird* this, s16 params); -ActorInit En_Bird_InitVars = { +ActorProfile En_Bird_Profile = { /**/ ACTOR_EN_BIRD, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 59a2e76bf8..d2c008fec6 100644 --- a/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c +++ b/src/overlays/actors/ovl_En_Blkobj/z_en_blkobj.c @@ -19,7 +19,7 @@ void EnBlkobj_SpawnDarkLink(EnBlkobj* this, PlayState* play); void EnBlkobj_DarkLinkFight(EnBlkobj* this, PlayState* play); void EnBlkobj_DoNothing(EnBlkobj* this, PlayState* play); -ActorInit En_Blkobj_InitVars = { +ActorProfile En_Blkobj_Profile = { /**/ ACTOR_EN_BLKOBJ, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 86871860ed..0bb4ffc2d9 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -18,7 +18,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play); void EnBom_Move(EnBom* this, PlayState* play); void EnBom_WaitForRelease(EnBom* this, PlayState* play); -ActorInit En_Bom_InitVars = { +ActorProfile En_Bom_Profile = { /**/ ACTOR_EN_BOM, /**/ ACTORCAT_EXPLOSIVE, /**/ FLAGS, @@ -359,10 +359,6 @@ void EnBom_Draw(Actor* thisx, PlayState* play) { s32 pad; EnBom* this = (EnBom*)thisx; -#if OOT_DEBUG - if (1) {} -#endif - OPEN_DISPS(play->state.gfxCtx, "../z_en_bom.c", 913); if (thisx->params == BOMB_BODY) { 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 3907b579f5..0373fac491 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 @@ -34,7 +34,7 @@ void EnBomBowlMan_SetupChooseShowPrize(EnBomBowlMan* this, PlayState* play); void EnBomBowlMan_ChooseShowPrize(EnBomBowlMan* this, PlayState* play); void EnBomBowlMan_BeginPlayGame(EnBomBowlMan* this, PlayState* play); -ActorInit En_Bom_Bowl_Man_InitVars = { +ActorProfile En_Bom_Bowl_Man_Profile = { /**/ ACTOR_EN_BOM_BOWL_MAN, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 a1fa88b631..3e8ff39453 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 @@ -20,7 +20,7 @@ void EnBomBowlPit_Reset(EnBomBowlPit* this, PlayState* play); static s32 sGetItemIds[] = { GI_BOMB_BAG_30, GI_HEART_PIECE, GI_BOMBCHUS_10, GI_BOMBS_1, GI_RUPEE_PURPLE }; -ActorInit En_Bom_Bowl_Pit_InitVars = { +ActorProfile En_Bom_Bowl_Pit_Profile = { /**/ ACTOR_EN_BOM_BOWL_PIT, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 a0b95d2200..7abad332b9 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 @@ -15,7 +15,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play); void EnBomChu_Move(EnBomChu* this, PlayState* play); void EnBomChu_WaitForKill(EnBomChu* this, PlayState* play); -ActorInit En_Bom_Chu_InitVars = { +ActorProfile En_Bom_Chu_Profile = { /**/ ACTOR_EN_BOM_CHU, /**/ ACTORCAT_EXPLOSIVE, /**/ FLAGS, 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 36860ca1cc..d1c6bf379c 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -21,7 +21,7 @@ void EnBombf_WaitForRelease(EnBombf* this, PlayState* play); void EnBombf_Explode(EnBombf* this, PlayState* play); void EnBombf_SetupGrowBomb(EnBombf* this, s16 params); -ActorInit En_Bombf_InitVars = { +ActorProfile En_Bombf_Profile = { /**/ ACTOR_EN_BOMBF, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -508,7 +508,5 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) { Collider_UpdateSpheres(0, &this->explosionCollider); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_bombf.c", 1063); } 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 e5697f91c6..4450db093a 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -16,7 +16,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play); void EnBoom_Fly(EnBoom* this, PlayState* play); -ActorInit En_Boom_InitVars = { +ActorProfile En_Boom_Profile = { /**/ ACTOR_EN_BOOM, /**/ ACTORCAT_MISC, /**/ FLAGS, @@ -272,7 +272,5 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gBoomerangRefDL); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_boom.c", 604); } 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 c8077659e9..19c922edc2 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -50,7 +50,7 @@ void EnBox_AppearAnimation(EnBox* this, PlayState* play); void EnBox_WaitOpen(EnBox* this, PlayState* play); void EnBox_Open(EnBox* this, PlayState* play); -ActorInit En_Box_InitVars = { +ActorProfile En_Box_Profile = { /**/ ACTOR_EN_BOX, /**/ ACTORCAT_CHEST, /**/ FLAGS, @@ -421,7 +421,7 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { Flags_SetTreasure(play, this->dyna.actor.params & 0x1F); } else { player = GET_PLAYER(play); - func_8002DBD0(&this->dyna.actor, &sp4C, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &sp4C, &player->actor.world.pos); if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f && Player_IsFacingActor(&this->dyna.actor, 0x3000, play)) { Actor_OfferGetItemNearby(&this->dyna.actor, play, 0 - (this->dyna.actor.params >> 5 & 0x7F)); diff --git a/src/overlays/actors/ovl_En_Brob/z_en_brob.c b/src/overlays/actors/ovl_En_Brob/z_en_brob.c index 58bd6d52e0..32a7a3b363 100644 --- a/src/overlays/actors/ovl_En_Brob/z_en_brob.c +++ b/src/overlays/actors/ovl_En_Brob/z_en_brob.c @@ -22,7 +22,7 @@ void EnBrob_Stunned(EnBrob* this, PlayState* play); void EnBrob_MoveDown(EnBrob* this, PlayState* play); void EnBrob_Shock(EnBrob* this, PlayState* play); -ActorInit En_Brob_InitVars = { +ActorProfile En_Brob_Profile = { /**/ ACTOR_EN_BROB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c index 902520173b..093e9aa1b0 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -12,7 +12,7 @@ void EnBubble_Wait(EnBubble* this, PlayState* play); void EnBubble_Pop(EnBubble* this, PlayState* play); void EnBubble_Regrow(EnBubble* this, PlayState* play); -ActorInit En_Bubble_InitVars = { +ActorProfile En_Bubble_Profile = { /**/ ACTOR_EN_BUBBLE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -425,8 +425,6 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gBubbleDL); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_bubble.c", 1226); if (this->actionFunc != EnBubble_Disappear) { 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 e91e59d47c..e7a39c17cd 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -49,7 +49,7 @@ static ColliderJntSphInit sColliderInit = { sJntSphElementsInit, }; -ActorInit En_Butte_InitVars = { +ActorProfile En_Butte_Profile = { /**/ ACTOR_EN_BUTTE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 5380555405..e9f062e153 100644 --- a/src/overlays/actors/ovl_En_Bw/z_en_bw.c +++ b/src/overlays/actors/ovl_En_Bw/z_en_bw.c @@ -33,7 +33,7 @@ void func_809D0268(EnBw* this, PlayState* play); void func_809D03CC(EnBw* this); void func_809D0424(EnBw* this, PlayState* play); -ActorInit En_Bw_InitVars = { +ActorProfile En_Bw_Profile = { /**/ ACTOR_EN_BW, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -907,7 +907,5 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) { } } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_bw.c", 1521); } 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 c0c9fb7038..4ce0d62c9b 100644 --- a/src/overlays/actors/ovl_En_Bx/z_en_bx.c +++ b/src/overlays/actors/ovl_En_Bx/z_en_bx.c @@ -14,7 +14,7 @@ void EnBx_Destroy(Actor* thisx, PlayState* play); void EnBx_Update(Actor* thisx, PlayState* play); void EnBx_Draw(Actor* thisx, PlayState* play); -ActorInit En_Bx_InitVars = { +ActorProfile En_Bx_Profile = { /**/ ACTOR_EN_BX, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Changer/z_en_changer.c b/src/overlays/actors/ovl_En_Changer/z_en_changer.c index d548a7a887..3f90555d7b 100644 --- a/src/overlays/actors/ovl_En_Changer/z_en_changer.c +++ b/src/overlays/actors/ovl_En_Changer/z_en_changer.c @@ -24,7 +24,7 @@ void EnChanger_Wait(EnChanger* this, PlayState* play); void EnChanger_OpenChests(EnChanger* this, PlayState* play); void EnChanger_SetHeartPieceFlag(EnChanger* this, PlayState* play); -ActorInit En_Changer_InitVars = { +ActorProfile En_Changer_Profile = { /**/ ACTOR_EN_CHANGER, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 a47186b62a..e1450c0c86 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 @@ -18,7 +18,7 @@ void EnClearTag_CreateFlashEffect(PlayState* play, Vec3f* position, f32 scale, f void EnClearTag_CalculateFloorTangent(EnClearTag* this); -ActorInit En_Clear_Tag_InitVars = { +ActorProfile En_Clear_Tag_Profile = { /**/ ACTOR_EN_CLEAR_TAG, /**/ ACTORCAT_BOSS, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index a9e667089f..d47ec80abd 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -26,7 +26,7 @@ void EnCow_DrawTail(Actor* thisx, PlayState* play); void EnCow_UpdateTail(Actor* thisx, PlayState* play); void EnCow_IdleTail(EnCow* this, PlayState* play); -ActorInit En_Cow_InitVars = { +ActorProfile En_Cow_Profile = { /**/ ACTOR_EN_COW, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 fc6f9474e2..5cdcd6bd76 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -18,7 +18,7 @@ void EnCrow_Damaged(EnCrow* this, PlayState* play); static Vec3f sZeroVecAccel = { 0.0f, 0.0f, 0.0f }; -ActorInit En_Crow_InitVars = { +ActorProfile En_Crow_Profile = { /**/ ACTOR_EN_CROW, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Cs/z_en_cs.c b/src/overlays/actors/ovl_En_Cs/z_en_cs.c index d99e291207..89b3e859df 100644 --- a/src/overlays/actors/ovl_En_Cs/z_en_cs.c +++ b/src/overlays/actors/ovl_En_Cs/z_en_cs.c @@ -15,7 +15,7 @@ void EnCs_Wait(EnCs* this, PlayState* play); s32 EnCs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); void EnCs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx); -ActorInit En_Cs_InitVars = { +ActorProfile En_Cs_Profile = { /**/ ACTOR_EN_CS, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c99af39956..6a497d3185 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -41,7 +41,7 @@ void EnDaiku_EscapeRun(EnDaiku* this, PlayState* play); s32 EnDaiku_OverrideLimbDraw(PlayState* play, s32 limb, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); void EnDaiku_PostLimbDraw(PlayState* play, s32 limb, Gfx** dList, Vec3s* rot, void* thisx); -ActorInit En_Daiku_InitVars = { +ActorProfile En_Daiku_Profile = { /**/ ACTOR_EN_DAIKU, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -607,8 +607,6 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDaiku_OverrideLimbDraw, EnDaiku_PostLimbDraw, this); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku.c", 1255); } 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 f5e31493c3..787551cf77 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 @@ -24,7 +24,7 @@ void EnDaikuKakariko_Draw(Actor* thisx, PlayState* play); void EnDaikuKakariko_Wait(EnDaikuKakariko* this, PlayState* play); void EnDaikuKakariko_Run(EnDaikuKakariko* this, PlayState* play); -ActorInit En_Daiku_Kakariko_InitVars = { +ActorProfile En_Daiku_Kakariko_Profile = { /**/ ACTOR_EN_DAIKU_KAKARIKO, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -562,7 +562,5 @@ void EnDaikuKakariko_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDaikuKakariko_OverrideLimbDraw, EnDaikuKakariko_PostLimbDraw, thisx); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_daiku_kakariko.c", 1151); } 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 265e58cc00..11f2d0e94d 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -29,7 +29,7 @@ void EnDekubaba_DeadStickDrop(EnDekubaba* this, PlayState* play); static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f }; -ActorInit En_Dekubaba_InitVars = { +ActorProfile En_Dekubaba_Profile = { /**/ ACTOR_EN_DEKUBABA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -1278,7 +1278,6 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) { EnDekubaba* this = (EnDekubaba*)thisx; f32 scale; - if (1) {} OPEN_DISPS(play->state.gfxCtx, "../z_en_dekubaba.c", 2752); Gfx_SetupDL_25Opa(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index 6e14eba6ce..583c09705c 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -30,7 +30,7 @@ void EnDekunuts_BeDamaged(EnDekunuts* this, PlayState* play); void EnDekunuts_BeStunned(EnDekunuts* this, PlayState* play); void EnDekunuts_Die(EnDekunuts* this, PlayState* play); -ActorInit En_Dekunuts_InitVars = { +ActorProfile En_Dekunuts_Profile = { /**/ ACTOR_EN_DEKUNUTS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 ccf7f4af2c..8b973ff598 100644 --- a/src/overlays/actors/ovl_En_Dh/z_en_dh.c +++ b/src/overlays/actors/ovl_En_Dh/z_en_dh.c @@ -31,7 +31,7 @@ void EnDh_Burrow(EnDh* this, PlayState* play); void EnDh_Damage(EnDh* this, PlayState* play); void EnDh_Death(EnDh* this, PlayState* play); -ActorInit En_Dh_InitVars = { +ActorProfile En_Dh_Profile = { /**/ ACTOR_EN_DH, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 17ec0b85ef..7a7eca1bcb 100644 --- a/src/overlays/actors/ovl_En_Dha/z_en_dha.c +++ b/src/overlays/actors/ovl_En_Dha/z_en_dha.c @@ -23,7 +23,7 @@ void EnDha_SetupDeath(EnDha* this); void EnDha_Die(EnDha* this, PlayState* play); void EnDha_UpdateHealth(EnDha* this, PlayState* play); -ActorInit En_Dha_InitVars = { +ActorProfile En_Dha_Profile = { /**/ ACTOR_EN_DHA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 d0ba252073..da5e7dbf20 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 @@ -33,7 +33,7 @@ void func_809EEA00(EnDivingGame* this, PlayState* play); void func_809EEA90(EnDivingGame* this, PlayState* play); void func_809EEAF8(EnDivingGame* this, PlayState* play); -ActorInit En_Diving_Game_InitVars = { +ActorProfile En_Diving_Game_Profile = { /**/ ACTOR_EN_DIVING_GAME, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 9d1c37c472..853437b44f 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -42,7 +42,7 @@ void EnDns_SetupNoSaleBurrow(EnDns* this, PlayState* play); void EnDns_Burrow(EnDns* this, PlayState* play); void EnDns_PostBurrow(EnDns* this, PlayState* play); -ActorInit En_Dns_InitVars = { +ActorProfile En_Dns_Profile = { /**/ ACTOR_EN_DNS, /**/ ACTORCAT_BG, /**/ FLAGS, 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 9e0c0f6e42..f4f708959d 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 @@ -26,7 +26,7 @@ void EnDntDemo_Judge(EnDntDemo* this, PlayState* play); void EnDntDemo_Results(EnDntDemo* this, PlayState* play); void EnDntDemo_Prize(EnDntDemo* this, PlayState* play); -ActorInit En_Dnt_Demo_InitVars = { +ActorProfile En_Dnt_Demo_Profile = { /**/ ACTOR_EN_DNT_DEMO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 cfa1f2a32b..6cb7731fbb 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 @@ -39,7 +39,7 @@ void EnDntJiji_GivePrize(EnDntJiji* this, PlayState* play); void EnDntJiji_Hide(EnDntJiji* this, PlayState* play); void EnDntJiji_Return(EnDntJiji* this, PlayState* play); -ActorInit En_Dnt_Jiji_InitVars = { +ActorProfile En_Dnt_Jiji_Profile = { /**/ ACTOR_EN_DNT_JIJI, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 ff9f9cc71a..eb215b32c2 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 @@ -56,7 +56,7 @@ void EnDntNomal_StageAttackHide(EnDntNomal* this, PlayState* play); void EnDntNomal_StageAttack(EnDntNomal* this, PlayState* play); void EnDntNomal_StageReturn(EnDntNomal* this, PlayState* play); -ActorInit En_Dnt_Nomal_InitVars = { +ActorProfile En_Dnt_Nomal_Profile = { /**/ ACTOR_EN_DNT_NOMAL, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c index f5f5940881..0a882fe0cb 100644 --- a/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c +++ b/src/overlays/actors/ovl_En_Dodojr/z_en_dodojr.c @@ -31,7 +31,7 @@ void EnDodojr_DeathSequence(EnDodojr* this, PlayState* play); void EnDodojr_WaitFreezeFrames(EnDodojr* this, PlayState* play); void EnDodojr_EatBomb(EnDodojr* this, PlayState* play); -ActorInit En_Dodojr_InitVars = { +ActorProfile En_Dodojr_Profile = { /**/ ACTOR_EN_DODOJR, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 6ae9701d53..8f30f194ae 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -36,7 +36,7 @@ void EnDodongo_Stunned(EnDodongo* this, PlayState* play); void EnDodongo_Death(EnDodongo* this, PlayState* play); void EnDodongo_SweepTail(EnDodongo* this, PlayState* play); -ActorInit En_Dodongo_InitVars = { +ActorProfile En_Dodongo_Profile = { /**/ ACTOR_EN_DODONGO, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Dog/z_en_dog.c b/src/overlays/actors/ovl_En_Dog/z_en_dog.c index be4c04dd9e..6735211ced 100644 --- a/src/overlays/actors/ovl_En_Dog/z_en_dog.c +++ b/src/overlays/actors/ovl_En_Dog/z_en_dog.c @@ -21,7 +21,7 @@ void EnDog_RunAway(EnDog* this, PlayState* play); void EnDog_FaceLink(EnDog* this, PlayState* play); void EnDog_Wait(EnDog* this, PlayState* play); -ActorInit En_Dog_InitVars = { +ActorProfile En_Dog_Profile = { /**/ ACTOR_EN_DOG, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 7a087c0b91..08bb8cfde4 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -32,7 +32,7 @@ void EnDoor_AjarOpen(EnDoor* this, PlayState* play); void EnDoor_AjarClose(EnDoor* this, PlayState* play); void EnDoor_Open(EnDoor* this, PlayState* play); -ActorInit En_Door_InitVars = { +ActorProfile En_Door_Profile = { /**/ ACTOR_EN_DOOR, /**/ ACTORCAT_DOOR, /**/ FLAGS, @@ -220,7 +220,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) { Vec3f playerPosRelToDoor; doorType = ENDOOR_GET_TYPE(&this->actor); - func_8002DBD0(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &playerPosRelToDoor, &player->actor.world.pos); if (this->playerIsOpening) { this->actionFunc = EnDoor_Open; Animation_PlayOnceSetSpeed(&this->skelAnime, sDoorAnims[this->openAnim], 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 3d8e0e57ce..5cfabd6834 100644 --- a/src/overlays/actors/ovl_En_Ds/z_en_ds.c +++ b/src/overlays/actors/ovl_En_Ds/z_en_ds.c @@ -16,7 +16,7 @@ void EnDs_Draw(Actor* thisx, PlayState* play); void EnDs_Wait(EnDs* this, PlayState* play); -ActorInit En_Ds_InitVars = { +ActorProfile En_Ds_Profile = { /**/ ACTOR_EN_DS, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 65f4b90bf6..4181108b75 100644 --- a/src/overlays/actors/ovl_En_Du/z_en_du.c +++ b/src/overlays/actors/ovl_En_Du/z_en_du.c @@ -22,7 +22,7 @@ void func_809FEC70(EnDu* this, PlayState* play); void func_809FECE4(EnDu* this, PlayState* play); void func_809FEB08(EnDu* this, PlayState* play); -ActorInit En_Du_InitVars = { +ActorProfile En_Du_Profile = { /**/ ACTOR_EN_DU, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 0f9fb333e9..591eb82c75 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 @@ -18,7 +18,7 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play); void EnDyExtra_WaitForTrigger(EnDyExtra* this, PlayState* play); void EnDyExtra_FallAndKill(EnDyExtra* this, PlayState* play); -ActorInit En_Dy_Extra_InitVars = { +ActorProfile En_Dy_Extra_Profile = { /**/ ACTOR_EN_DY_EXTRA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7b3940994d..4bfba816ab 100644 --- a/src/overlays/actors/ovl_En_Eg/z_en_eg.c +++ b/src/overlays/actors/ovl_En_Eg/z_en_eg.c @@ -22,7 +22,7 @@ static EnEgActionFunc sActionFuncs[] = { func_809FFDC8, }; -ActorInit En_Eg_InitVars = { +ActorProfile En_Eg_Profile = { /**/ ACTOR_EN_EG, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 ebfa1c6e11..5c0921755b 100644 --- a/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c +++ b/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c @@ -35,7 +35,7 @@ void EnEiyer_Die(EnEiyer* this, PlayState* play); void EnEiyer_Dead(EnEiyer* this, PlayState* play); void EnEiyer_Stunned(EnEiyer* this, PlayState* play); -ActorInit En_Eiyer_InitVars = { +ActorProfile En_Eiyer_Profile = { /**/ ACTOR_EN_EIYER, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 6de4a0c58b..1beda793a1 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -54,7 +54,7 @@ void func_80A0461C(EnElf* this, PlayState* play); void EnElf_SpawnSparkles(EnElf* this, PlayState* play, s32 sparkleLife); void EnElf_GetCuePos(Vec3f* dest, PlayState* play, s32 cueChannel); -ActorInit En_Elf_InitVars = { +ActorProfile En_Elf_Profile = { /**/ ACTOR_EN_ELF, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 45f993da0d..fb342b6152 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -14,7 +14,7 @@ void EnEncount1_SpawnStalchildOrWolfos(EnEncount1* this, PlayState* play); static s16 sLeeverAngles[] = { 0x0000, 0x2710, 0x7148, 0x8EB8, 0xD8F0 }; static f32 sLeeverDists[] = { 200.0f, 170.0f, 120.0f, 120.0f, 170.0f }; -ActorInit En_Encount1_InitVars = { +ActorProfile En_Encount1_Profile = { /**/ ACTOR_EN_ENCOUNT1, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 cab41eec90..4ad684fa82 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -23,7 +23,7 @@ void EnEncount2_SpawnEffect(EnEncount2* this, Vec3f* position, f32 scale); void EnEncount2_DrawEffects(Actor* thisx, PlayState* play); void EnEncount2_UpdateEffects(EnEncount2* this, PlayState* play); -ActorInit En_Encount2_InitVars = { +ActorProfile En_Encount2_Profile = { /**/ ACTOR_EN_ENCOUNT2, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 060f97435b..bf6028d8e0 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 @@ -32,7 +32,7 @@ void EnExItem_TargetPrizeApproach(EnExItem* this, PlayState* play); void EnExItem_TargetPrizeGive(EnExItem* this, PlayState* play); void EnExItem_TargetPrizeFinish(EnExItem* this, PlayState* play); -ActorInit En_Ex_Item_InitVars = { +ActorProfile En_Ex_Item_Profile = { /**/ ACTOR_EN_EX_ITEM, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 ea7d242248..86d7d65ee1 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 @@ -28,7 +28,7 @@ static s16 sRupeeValues[] = { 1, 5, 20, 500, 50, }; -ActorInit En_Ex_Ruppy_InitVars = { +ActorProfile En_Ex_Ruppy_Profile = { /**/ ACTOR_EN_EX_RUPPY, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 fe2eadd287..a74a3d5944 100644 --- a/src/overlays/actors/ovl_En_Fd/z_en_fd.c +++ b/src/overlays/actors/ovl_En_Fd/z_en_fd.c @@ -30,7 +30,7 @@ void EnFd_DrawEffectsDots(EnFd* this, PlayState* play); void EnFd_DrawEffectsFlames(EnFd* this, PlayState* play); void EnFd_Land(EnFd* this, PlayState* play); -ActorInit En_Fd_InitVars = { +ActorProfile En_Fd_Profile = { /**/ ACTOR_EN_FD, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 d15f8c58aa..942a8de3a0 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 @@ -12,7 +12,7 @@ void func_80A0E70C(EnFdFire* this, PlayState* play); void EnFdFire_DanceTowardsPlayer(EnFdFire* this, PlayState* play); void EnFdFire_WaitToDie(EnFdFire* this, PlayState* play); -ActorInit En_Fd_Fire_InitVars = { +ActorProfile En_Fd_Fire_Profile = { /**/ ACTOR_EN_FD_FIRE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -255,7 +255,6 @@ void EnFdFire_Draw(Actor* thisx, PlayState* play) { sp80 = Math_Vec3f_DistXZ(&scale, &this->actor.velocity) / 1.5f; if (1) {} if (1) {} - if (1) {} Matrix_RotateY(BINANG_TO_RAD((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000)), MTXMODE_APPLY); Matrix_RotateZ(DEG_TO_RAD((sp88 * -10.0f) * sp80), MTXMODE_APPLY); scale.x = scale.y = scale.z = this->scale * 0.001f; 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 8d0a8f2a63..55fc46789a 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 @@ -44,7 +44,7 @@ void EnFhgFire_SpearLight(EnFhgFire* this, PlayState* play); void EnFhgFire_EnergyBall(EnFhgFire* this, PlayState* play); void EnFhgFire_PhantomWarp(EnFhgFire* this, PlayState* play); -ActorInit En_Fhg_Fire_InitVars = { +ActorProfile En_Fhg_Fire_Profile = { /**/ 0, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 32d28a0074..229e0a9171 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 @@ -15,7 +15,7 @@ void FireRock_WaitOnFloor(EnFireRock* this, PlayState* play); void EnFireRock_Fall(EnFireRock* this, PlayState* play); void EnFireRock_SpawnMoreBrokenPieces(EnFireRock* this, PlayState* play); -ActorInit En_Fire_Rock_InitVars = { +ActorProfile En_Fire_Rock_Profile = { /**/ ACTOR_EN_FIRE_ROCK, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 760140aed5..344943544e 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -34,7 +34,7 @@ typedef enum { /* 2 */ KEESE_AURA_ICE } KeeseAuraType; -ActorInit En_Firefly_InitVars = { +ActorProfile En_Firefly_Profile = { /**/ ACTOR_EN_FIREFLY, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 e008be1d2d..757eddd05c 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c @@ -64,7 +64,7 @@ static ColliderJntSphInit sJntSphInit = { sJntSphElementsInit, }; -ActorInit En_Fish_InitVars = { +ActorProfile En_Fish_Profile = { /**/ ACTOR_EN_FISH, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 41dd2cfdc5..6da11b6f5d 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -44,7 +44,7 @@ void EnFloormas_Stand(EnFloormas* this, PlayState* play); void EnFloormas_BigDecideAction(EnFloormas* this, PlayState* play); void EnFloormas_Charge(EnFloormas* this, PlayState* play); -ActorInit En_Floormas_InitVars = { +ActorProfile En_Floormas_Profile = { /**/ ACTOR_EN_FLOORMAS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 955cc02db3..773731261d 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c @@ -133,7 +133,7 @@ static s32 sSongToFrog[] = { FROG_PURPLE, FROG_WHITE, FROG_YELLOW, FROG_BLUE, FROG_RED, }; -ActorInit En_Fr_InitVars = { +ActorProfile En_Fr_Profile = { /**/ ACTOR_EN_FR, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 9f10084857..40457c98d5 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -28,7 +28,7 @@ void func_80A1DBA0(EnFu* this, PlayState* play); void func_80A1DBD4(EnFu* this, PlayState* play); void func_80A1DB60(EnFu* this, PlayState* play); -ActorInit En_Fu_InitVars = { +ActorProfile En_Fu_Profile = { /**/ ACTOR_EN_FU, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 4170af674d..5f8768ff10 100644 --- a/src/overlays/actors/ovl_En_Fw/z_en_fw.c +++ b/src/overlays/actors/ovl_En_Fw/z_en_fw.c @@ -24,7 +24,7 @@ void EnFw_Run(EnFw* this, PlayState* play); void EnFw_JumpToParentInitPos(EnFw* this, PlayState* play); void EnFw_TurnToParentInitPos(EnFw* this, PlayState* play); -ActorInit En_Fw_InitVars = { +ActorProfile En_Fw_Profile = { /**/ ACTOR_EN_FW, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 3e4b6ec492..158daf3687 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -45,7 +45,7 @@ void EnFz_SpawnIceSmokeFreeze(EnFz* this, Vec3f* pos, Vec3f* velocity, Vec3f* ac void EnFz_UpdateIceSmoke(EnFz* this, PlayState* play); void EnFz_DrawEffects(EnFz* this, PlayState* play); -ActorInit En_Fz_InitVars = { +ActorProfile En_Fz_Profile = { /**/ ACTOR_EN_FZ, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -722,8 +722,6 @@ void EnFz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx, "../z_en_fz.c", 1167); - if (1) {} - if (this->actor.colChkInfo.health == 0) { index = 2; } 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 dd5ad3b499..9ebf1c4013 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 @@ -64,7 +64,7 @@ static s16 sRupeeTypes[] = { ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_ORANGE, ITEM00_RUPEE_PURPLE, }; -ActorInit En_G_Switch_InitVars = { +ActorProfile En_G_Switch_Profile = { /**/ ACTOR_EN_G_SWITCH, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 2ccb862d62..b76e89ece2 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 @@ -14,7 +14,7 @@ void EnGanonMant_Destroy(Actor* thisx, PlayState* play); void EnGanonMant_Update(Actor* thisx, PlayState* play); void EnGanonMant_Draw(Actor* thisx, PlayState* play); -ActorInit En_Ganon_Mant_InitVars = { +ActorProfile En_Ganon_Mant_Profile = { /**/ ACTOR_EN_GANON_MANT, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 a4c93dea9c..8d81044e80 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 @@ -14,7 +14,7 @@ void EnGanonOrgan_Destroy(Actor* thisx, PlayState* play); void EnGanonOrgan_Update(Actor* thisx, PlayState* play); void EnGanonOrgan_Draw(Actor* thisx, PlayState* play); -ActorInit En_Ganon_Organ_InitVars = { +ActorProfile En_Ganon_Organ_Profile = { /**/ ACTOR_EN_GANON_ORGAN, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 ad08fbdace..9a39c09822 100644 --- a/src/overlays/actors/ovl_En_Gb/z_en_gb.c +++ b/src/overlays/actors/ovl_En_Gb/z_en_gb.c @@ -26,7 +26,7 @@ void func_80A2FC0C(EnGb* this, PlayState* play); void EnGb_DrawCagedSouls(EnGb* this, PlayState* play); void EnGb_UpdateCagedSouls(EnGb* this, PlayState* play); -ActorInit En_Gb_InitVars = { +ActorProfile En_Gb_Profile = { /**/ ACTOR_EN_GB, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 405cfc0664..de56141d4e 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -39,7 +39,7 @@ void EnGe1_Wait_Archery(EnGe1* this, PlayState* play); void EnGe1_CueUpAnimation(EnGe1* this); void EnGe1_StopFidget(EnGe1* this); -ActorInit En_Ge1_InitVars = { +ActorProfile En_Ge1_Profile = { /**/ ACTOR_EN_GE1, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 40b2b9df58..3b5b8bea7d 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -55,7 +55,7 @@ void EnGe2_UpdateFriendly(Actor* thisx, PlayState* play); void EnGe2_UpdateAfterTalk(Actor* thisx, PlayState* play); void EnGe2_UpdateStunned(Actor* thisx, PlayState* play2); -ActorInit En_Ge2_InitVars = { +ActorProfile En_Ge2_Profile = { /**/ ACTOR_EN_GE2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 df33dc59e3..184e2a8365 100644 --- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c +++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c @@ -18,7 +18,7 @@ void EnGe3_WaitLookAtPlayer(EnGe3* this, PlayState* play); void EnGe3_ForceTalk(EnGe3* this, PlayState* play); void EnGe3_UpdateWhenNotTalking(Actor* thisx, PlayState* play); -ActorInit En_Ge3_InitVars = { +ActorProfile En_Ge3_Profile = { /**/ ACTOR_EN_GE3, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 8ef486c42c..ea99032f46 100644 --- a/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c +++ b/src/overlays/actors/ovl_En_GeldB/z_en_geldb.c @@ -69,7 +69,7 @@ void EnGeldB_Block(EnGeldB* this, PlayState* play); void EnGeldB_Sidestep(EnGeldB* this, PlayState* play); void EnGeldB_Defeated(EnGeldB* this, PlayState* play); -ActorInit En_GeldB_InitVars = { +ActorProfile En_GeldB_Profile = { /**/ ACTOR_EN_GELDB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -1567,7 +1567,6 @@ void EnGeldB_Draw(Actor* thisx, PlayState* play) { EnGeldB* this = (EnGeldB*)thisx; OPEN_DISPS(play->state.gfxCtx, "../z_en_geldB.c", 2672); - if (1) {} if ((this->spinAttackState >= 2) && SkelAnime_Update(&this->skelAnime)) { if (this->spinAttackState == 2) { 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 13a545dc1d..7abec67e2b 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -67,7 +67,7 @@ void EnGirlA_BuyEvent_ObtainBombchuPack(PlayState* play, EnGirlA* this); void EnGirlA_BuyEvent_GoronTunic(PlayState* play, EnGirlA* this); void EnGirlA_BuyEvent_ZoraTunic(PlayState* play, EnGirlA* this); -ActorInit En_GirlA_InitVars = { +ActorProfile En_GirlA_Profile = { /**/ ACTOR_EN_GIRLA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 46f0a2ec00..3e80b4e038 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -26,7 +26,7 @@ void EnGm_ProcessChoiceIndex(EnGm* this, PlayState* play); void func_80A3DF00(EnGm* this, PlayState* play); void func_80A3DF60(EnGm* this, PlayState* play); -ActorInit En_Gm_InitVars = { +ActorProfile En_Gm_Profile = { /**/ ACTOR_EN_GM, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 f648a2f910..ec34f6db06 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -34,7 +34,7 @@ void EnGo_SpawnEffectDust(EnGo* this, Vec3f* pos, Vec3f* velocity, Vec3f* accel, void EnGo_UpdateEffects(EnGo* this); void EnGo_DrawEffects(EnGo* this, PlayState* play); -ActorInit En_Go_InitVars = { +ActorProfile En_Go_Profile = { /**/ ACTOR_EN_GO, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 b5b699676e..2f1f4f3126 100644 --- a/src/overlays/actors/ovl_En_Go2/z_en_go2.c +++ b/src/overlays/actors/ovl_En_Go2/z_en_go2.c @@ -94,7 +94,7 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_Go2_InitVars = { +ActorProfile En_Go2_Profile = { /**/ ACTOR_EN_GO2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 1734511c51..50dbe53d5f 100644 --- a/src/overlays/actors/ovl_En_Goma/z_en_goma.c +++ b/src/overlays/actors/ovl_En_Goma/z_en_goma.c @@ -42,7 +42,7 @@ void EnGoma_SetupLand(EnGoma* this); void EnGoma_SetupJump(EnGoma* this); void EnGoma_SetupStunned(EnGoma* this, PlayState* play); -ActorInit En_Goma_InitVars = { +ActorProfile En_Goma_Profile = { /**/ ACTOR_BOSS_GOMA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 23df326169..3e9793f982 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -43,7 +43,7 @@ void EnGoroiwa_MoveUp(EnGoroiwa* this, PlayState* play); void EnGoroiwa_SetupMoveDown(EnGoroiwa* this); void EnGoroiwa_MoveDown(EnGoroiwa* this, PlayState* play); -ActorInit En_Goroiwa_InitVars = { +ActorProfile En_Goroiwa_Profile = { /**/ ACTOR_EN_GOROIWA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 d367633af6..6a7da4f559 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -21,7 +21,7 @@ void func_80A4F700(EnGs* this, PlayState* play); void func_80A4F77C(EnGs* this); -ActorInit En_Gs_InitVars = { +ActorProfile En_Gs_Profile = { /**/ ACTOR_EN_GS, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 a122de078a..df604c728f 100644 --- a/src/overlays/actors/ovl_En_Guest/z_en_guest.c +++ b/src/overlays/actors/ovl_En_Guest/z_en_guest.c @@ -20,7 +20,7 @@ void func_80A50518(EnGuest* this, PlayState* play); void func_80A5057C(EnGuest* this, PlayState* play); void func_80A505CC(Actor* thisx, PlayState* play); -ActorInit En_Guest_InitVars = { +ActorProfile En_Guest_Profile = { /**/ ACTOR_EN_GUEST, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 dcf9aca99b..0151dc7877 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -14,7 +14,7 @@ void EnHata_Destroy(Actor* thisx, PlayState* play); void EnHata_Update(Actor* thisx, PlayState* play2); void EnHata_Draw(Actor* thisx, PlayState* play); -ActorInit En_Hata_InitVars = { +ActorProfile En_Hata_Profile = { /**/ ACTOR_EN_HATA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 8fd6c9d6ff..0668b8395c 100644 --- a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c +++ b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c @@ -31,7 +31,7 @@ void EnHeishi1_WaitNight(EnHeishi1* this, PlayState* play); static s32 sPlayerIsCaught = false; -ActorInit En_Heishi1_InitVars = { +ActorProfile En_Heishi1_Profile = { /**/ 0, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 762fa5d6c6..f8fad950d6 100644 --- a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c +++ b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c @@ -50,7 +50,7 @@ void func_80A546DC(EnHeishi2* this, PlayState* play); void func_80A541FC(EnHeishi2* this, PlayState* play); void func_80A53DF8(EnHeishi2* this, PlayState* play); -ActorInit En_Heishi2_InitVars = { +ActorProfile En_Heishi2_Profile = { /**/ ACTOR_EN_HEISHI2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c38744ea2b..072d5d71ae 100644 --- a/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c +++ b/src/overlays/actors/ovl_En_Heishi3/z_en_heishi3.c @@ -25,7 +25,7 @@ void func_80A55BD4(EnHeishi3* this, PlayState* play); static s16 sPlayerCaught = 0; -ActorInit En_Heishi3_InitVars = { +ActorProfile En_Heishi3_Profile = { /**/ ACTOR_EN_HEISHI3, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c b/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c index c02946ac22..5298317f01 100644 --- a/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c +++ b/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c @@ -21,7 +21,7 @@ void func_80A56994(EnHeishi4* this, PlayState* play); void func_80A56A50(EnHeishi4* this, PlayState* play); void func_80A56ACC(EnHeishi4* this, PlayState* play); -ActorInit En_Heishi4_InitVars = { +ActorProfile En_Heishi4_Profile = { /**/ ACTOR_EN_HEISHI4, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 08468d132b..8a9400eebf 100644 --- a/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c +++ b/src/overlays/actors/ovl_En_Hintnuts/z_en_hintnuts.c @@ -27,7 +27,7 @@ void EnHintnuts_Talk(EnHintnuts* this, PlayState* play); void EnHintnuts_Leave(EnHintnuts* this, PlayState* play); void EnHintnuts_Freeze(EnHintnuts* this, PlayState* play); -ActorInit En_Hintnuts_InitVars = { +ActorProfile En_Hintnuts_Profile = { /**/ ACTOR_EN_HINTNUTS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 921156ee51..bc5d25a168 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -76,7 +76,7 @@ void EnHoll_VerticalBgCover(EnHoll* this, PlayState* play); void EnHoll_VerticalInvisible(EnHoll* this, PlayState* play); void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play); -ActorInit En_Holl_InitVars = { +ActorProfile En_Holl_Profile = { /**/ ACTOR_EN_HOLL, /**/ ACTORCAT_DOOR, /**/ FLAGS, @@ -186,7 +186,7 @@ void EnHoll_HorizontalVisibleNarrow(EnHoll* this, PlayState* play) { f32 orthogonalDistToPlayer; s32 transitionActorIndex; - func_8002DBD0(&this->actor, &relPlayerPos, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &relPlayerPos, &player->actor.world.pos); this->side = (relPlayerPos.z < 0.0f) ? 0 : 1; orthogonalDistToPlayer = fabsf(relPlayerPos.z); if (relPlayerPos.y > ENHOLL_H_Y_MIN && relPlayerPos.y < ENHOLL_H_Y_MAX && @@ -227,7 +227,7 @@ void EnHoll_HorizontalInvisible(EnHoll* this, PlayState* play) { f32 hollHalfWidth; f32 orthogonalDistToSubject; - func_8002DBD0(&this->actor, &relSubjectPos, useViewEye ? &play->view.eye : &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &relSubjectPos, useViewEye ? &play->view.eye : &player->actor.world.pos); hollHalfWidth = (ENHOLL_GET_TYPE(&this->actor) == ENHOLL_H_INVISIBLE_NARROW) ? ENHOLL_H_HALFWIDTH_NARROW : ENHOLL_H_HALFWIDTH; @@ -355,7 +355,7 @@ void EnHoll_HorizontalBgCoverSwitchFlag(EnHoll* this, PlayState* play) { Vec3f relPlayerPos; f32 orthogonalDistToPlayer; - func_8002DBD0(&this->actor, &relPlayerPos, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->actor, &relPlayerPos, &player->actor.world.pos); orthogonalDistToPlayer = fabsf(relPlayerPos.z); if (ENHOLL_H_Y_MIN < relPlayerPos.y && relPlayerPos.y < ENHOLL_H_Y_MAX && 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 8e3a20b269..d9a689a882 100644 --- a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c +++ b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c @@ -48,7 +48,7 @@ void EnHonotrap_FlameChase(EnHonotrap* this, PlayState* play); void EnHonotrap_SetupFlameVanish(EnHonotrap* this); void EnHonotrap_FlameVanish(EnHonotrap* this, PlayState* play); -ActorInit En_Honotrap_InitVars = { +ActorProfile En_Honotrap_Profile = { /**/ ACTOR_EN_HONOTRAP, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 43937fd02a..37df3828ac 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -66,7 +66,7 @@ static f32 sPlaybackSpeeds[] = { 2.0f / 3.0f, 2.0f / 3.0f, 1.0f, 1.0f, 1.0f, 1.0 static SkeletonHeader* sSkeletonHeaders[] = { &gEponaSkel, &gHorseIngoSkel }; -ActorInit En_Horse_InitVars = { +ActorProfile En_Horse_Profile = { /**/ ACTOR_EN_HORSE, /**/ ACTORCAT_BG, /**/ FLAGS, 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 53c09dc472..155227b1fe 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 @@ -48,7 +48,7 @@ void EnHorseGameCheck_Destroy(Actor* thisx, PlayState* play); void EnHorseGameCheck_Update(Actor* thisx, PlayState* play); void EnHorseGameCheck_Draw(Actor* thisx, PlayState* play); -ActorInit En_Horse_Game_Check_InitVars = { +ActorProfile En_Horse_Game_Check_Profile = { /**/ ACTOR_EN_HORSE_GAME_CHECK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 0b324c3089..49c3661426 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 @@ -23,7 +23,7 @@ void func_80A68AC4(EnHorseGanon* this); void func_80A68AF0(EnHorseGanon* this, PlayState* play); void func_80A68DB0(EnHorseGanon* this, PlayState* play); -ActorInit En_Horse_Ganon_InitVars = { +ActorProfile En_Horse_Ganon_Profile = { /**/ ACTOR_EN_HORSE_GANON, /**/ ACTORCAT_BG, /**/ FLAGS, 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 698a026306..ff33ecbe37 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 @@ -19,7 +19,7 @@ void func_80A69EC0(EnHorseLinkChild* this); void func_80A6A4DC(EnHorseLinkChild* this); void func_80A6A724(EnHorseLinkChild* this); -ActorInit En_Horse_Link_Child_InitVars = { +ActorProfile En_Horse_Link_Child_Profile = { /**/ ACTOR_EN_HORSE_LINK_CHILD, /**/ ACTORCAT_BG, /**/ FLAGS, 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 443dcf15c3..2ba604eba3 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 @@ -39,7 +39,7 @@ void func_80A6BCEC(EnHorseNormal* this); void func_80A6C4CC(EnHorseNormal* this); void func_80A6C6B0(EnHorseNormal* this); -ActorInit En_Horse_Normal_InitVars = { +ActorProfile En_Horse_Normal_Profile = { /**/ ACTOR_EN_HORSE_NORMAL, /**/ ACTORCAT_BG, /**/ FLAGS, 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 e3da728e85..09ffab69b0 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 @@ -18,7 +18,7 @@ void EnHorseZelda_Stop(EnHorseZelda* this, PlayState* play); void EnHorseZelda_Gallop(EnHorseZelda* this, PlayState* play); void EnHorseZelda_SetupStop(EnHorseZelda* this); -ActorInit En_Horse_Zelda_InitVars = { +ActorProfile En_Horse_Zelda_Profile = { /**/ ACTOR_EN_HORSE_ZELDA, /**/ ACTORCAT_BG, /**/ FLAGS, 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 09b1da8dda..ba6f7e55b4 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -18,7 +18,7 @@ void EnHs_Draw(Actor* thisx, PlayState* play); void func_80A6E9AC(EnHs* this, PlayState* play); void func_80A6E6B0(EnHs* this, PlayState* play); -ActorInit En_Hs_InitVars = { +ActorProfile En_Hs_Profile = { /**/ ACTOR_EN_HS, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c index d84e35c4ef..c10f85b660 100644 --- a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c +++ b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c @@ -16,7 +16,7 @@ void EnHs2_Update(Actor* thisx, PlayState* play); void EnHs2_Draw(Actor* thisx, PlayState* play); void func_80A6F1A4(EnHs2* this, PlayState* play); -ActorInit En_Hs2_InitVars = { +ActorProfile En_Hs2_Profile = { /**/ ACTOR_EN_HS2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 37e0666f3e..6b9cd5b1d4 100644 --- a/src/overlays/actors/ovl_En_Hy/z_en_hy.c +++ b/src/overlays/actors/ovl_En_Hy/z_en_hy.c @@ -32,7 +32,7 @@ void func_80A7127C(EnHy* this, PlayState* play); void EnHy_DoNothing(EnHy* this, PlayState* play); void func_80A714C4(EnHy* this, PlayState* play); -ActorInit En_Hy_InitVars = { +ActorProfile En_Hy_Profile = { /**/ ACTOR_EN_HY, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -1141,8 +1141,6 @@ s32 EnHy_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po rot->z += Math_CosS(this->unk_23C[limbIndex]) * 200.0f; } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_hy.c", 2228); return false; 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 2a7e7006b0..0725c380fc 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 @@ -24,7 +24,7 @@ void EnIceHono_SetupActionDroppedFlame(EnIceHono* this); void EnIceHono_SetupActionSpreadFlames(EnIceHono* this); void EnIceHono_SetupActionSmallFlame(EnIceHono* this); -ActorInit En_Ice_Hono_InitVars = { +ActorProfile En_Ice_Hono_Profile = { /**/ ACTOR_EN_ICE_HONO, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 da82e07253..7357a5d1ae 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -1558,7 +1558,7 @@ void EnIk_Init(Actor* thisx, PlayState* play) { } } -ActorInit En_Ik_InitVars = { +ActorProfile En_Ik_Profile = { /**/ ACTOR_EN_IK, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 5e63760b25..20e87a210b 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -24,7 +24,7 @@ void func_80A7A940(EnIn* this, PlayState* play); void func_80A7AA40(EnIn* this, PlayState* play); void func_80A7A4BC(EnIn* this, PlayState* play); -ActorInit En_In_InitVars = { +ActorProfile En_In_Profile = { /**/ ACTOR_EN_IN, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -503,7 +503,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 ActorInit data +// 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; 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 9140aef7b0..4cb346977d 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -42,7 +42,7 @@ static s16 sCaughtCount = 0; */ static s16 sDroppedCount = 0; -ActorInit En_Insect_InitVars = { +ActorProfile En_Insect_Profile = { /**/ ACTOR_EN_INSECT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 3caf9062ad..8ab5e481b1 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -32,7 +32,7 @@ void EnIshi_SpawnDustLarge(EnIshi* this, PlayState* play); static s16 sRotSpeedX = 0; static s16 sRotSpeedY = 0; -ActorInit En_Ishi_InitVars = { +ActorProfile En_Ishi_Profile = { /**/ ACTOR_EN_ISHI, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_It/z_en_it.c b/src/overlays/actors/ovl_En_It/z_en_it.c index 39c0a913d4..8445812f79 100644 --- a/src/overlays/actors/ovl_En_It/z_en_it.c +++ b/src/overlays/actors/ovl_En_It/z_en_it.c @@ -34,7 +34,7 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_It_InitVars = { +ActorProfile En_It_Profile = { /**/ ACTOR_EN_IT, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 9162737dc4..eaf47d8f97 100644 --- a/src/overlays/actors/ovl_En_Jj/z_en_jj.c +++ b/src/overlays/actors/ovl_En_Jj/z_en_jj.c @@ -28,7 +28,7 @@ void EnJj_WaitForFish(EnJj* this, PlayState* play); void EnJj_BeginCutscene(EnJj* this, PlayState* play); void EnJj_RemoveDust(EnJj* this, PlayState* play); -ActorInit En_Jj_InitVars = { +ActorProfile En_Jj_Profile = { /**/ ACTOR_EN_JJ, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 667ebf7404..aec212f0ff 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -16,7 +16,7 @@ void EnJs_Draw(Actor* thisx, PlayState* play); void func_80A89304(EnJs* this, PlayState* play); -ActorInit En_Js_InitVars = { +ActorProfile En_Js_Profile = { /**/ ACTOR_EN_JS, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c index f6fcd43c62..607ccb17a2 100644 --- a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c +++ b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c @@ -14,7 +14,7 @@ void EnJsjutan_Destroy(Actor* thisx, PlayState* play); void EnJsjutan_Update(Actor* thisx, PlayState* play2); void EnJsjutan_Draw(Actor* thisx, PlayState* play2); -ActorInit En_Jsjutan_InitVars = { +ActorProfile En_Jsjutan_Profile = { /**/ ACTOR_EN_JSJUTAN, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 0d7cd9d831..f586a408f8 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -42,7 +42,7 @@ static ColliderCylinderInit sCylinderInit = { { 20, 70, 0, { 0, 0, 0 } }, }; -ActorInit En_Kakasi_InitVars = { +ActorProfile En_Kakasi_Profile = { /**/ ACTOR_EN_KAKASI, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 31b3b3d006..6fb57a361c 100644 --- a/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c +++ b/src/overlays/actors/ovl_En_Kakasi2/z_en_kakasi2.c @@ -41,7 +41,7 @@ void func_80A904D8(EnKakasi2* this, PlayState* play); void func_80A90578(EnKakasi2* this, PlayState* play); void func_80A906C4(EnKakasi2* this, PlayState* play); -ActorInit En_Kakasi2_InitVars = { +ActorProfile En_Kakasi2_Profile = { /**/ ACTOR_EN_KAKASI2, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c index 669596dd81..478e5d666e 100644 --- a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c +++ b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c @@ -46,7 +46,7 @@ static ColliderCylinderInit sCylinderInit = { { 20, 70, 0, { 0, 0, 0 } }, }; -ActorInit En_Kakasi3_InitVars = { +ActorProfile En_Kakasi3_Profile = { /**/ ACTOR_EN_KAKASI3, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 d86ae429a0..0ca298c459 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -75,7 +75,7 @@ void EnKanban_Destroy(Actor* thisx, PlayState* play); void EnKanban_Update(Actor* thisx, PlayState* play2); void EnKanban_Draw(Actor* thisx, PlayState* play); -ActorInit En_Kanban_InitVars = { +ActorProfile En_Kanban_Profile = { /**/ ACTOR_EN_KANBAN, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 53fb55984d..2974272305 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -29,7 +29,7 @@ void EnKarebaba_Dead(EnKarebaba* this, PlayState* play); void EnKarebaba_Regrow(EnKarebaba* this, PlayState* play); void EnKarebaba_Upright(EnKarebaba* this, PlayState* play); -ActorInit En_Karebaba_InitVars = { +ActorProfile En_Karebaba_Profile = { /**/ ACTOR_EN_KAREBABA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 72c74e0741..9c820fe171 100644 --- a/src/overlays/actors/ovl_En_Ko/z_en_ko.c +++ b/src/overlays/actors/ovl_En_Ko/z_en_ko.c @@ -30,7 +30,7 @@ void func_80A99560(EnKo* this, PlayState* play); s32 func_80A98ECC(EnKo* this, PlayState* play); -ActorInit En_Ko_InitVars = { +ActorProfile En_Ko_Profile = { /**/ ACTOR_EN_KO, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c5924df2b2..7bfa8183df 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -41,7 +41,7 @@ static s16 rotSpeedX = 0; static s16 rotSpeedYtarget = 0; static s16 rotSpeedY = 0; -ActorInit En_Kusa_InitVars = { +ActorProfile En_Kusa_Profile = { /**/ ACTOR_EN_KUSA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 ce431636a1..6aaab99551 100644 --- a/src/overlays/actors/ovl_En_Kz/z_en_kz.c +++ b/src/overlays/actors/ovl_En_Kz/z_en_kz.c @@ -22,7 +22,7 @@ void EnKz_Wait(EnKz* this, PlayState* play); void EnKz_SetupGetItem(EnKz* this, PlayState* play); void EnKz_StartTimer(EnKz* this, PlayState* play); -ActorInit En_Kz_InitVars = { +ActorProfile En_Kz_Profile = { /**/ ACTOR_EN_KZ, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c index 3eeba75217..f235d0fcdf 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -16,7 +16,7 @@ void EnLight_Update(Actor* thisx, PlayState* play); void EnLight_Draw(Actor* thisx, PlayState* play); void EnLight_UpdateSwitch(Actor* thisx, PlayState* play); -ActorInit En_Light_InitVars = { +ActorProfile En_Light_Profile = { /**/ ACTOR_EN_LIGHT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 f89e7dc765..d7bb502f93 100644 --- a/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c +++ b/src/overlays/actors/ovl_En_Lightbox/z_en_lightbox.c @@ -14,7 +14,7 @@ void EnLightbox_Destroy(Actor* thisx, PlayState* play); void EnLightbox_Update(Actor* thisx, PlayState* play); void EnLightbox_Draw(Actor* thisx, PlayState* play); -ActorInit En_Lightbox_InitVars = { +ActorProfile En_Lightbox_Profile = { /**/ ACTOR_EN_LIGHTBOX, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c index 5de6557784..74bc53af1f 100644 --- a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c +++ b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c @@ -12,7 +12,7 @@ void EnMFire1_Init(Actor* thisx, PlayState* play); void EnMFire1_Destroy(Actor* thisx, PlayState* play); void EnMFire1_Update(Actor* thisx, PlayState* play); -ActorInit En_M_Fire1_InitVars = { +ActorProfile En_M_Fire1_Profile = { /**/ ACTOR_EN_M_FIRE1, /**/ ACTORCAT_MISC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index 2bc4831539..7fce325335 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -12,7 +12,7 @@ void func_80A9F314(PlayState* play, f32 arg1); void func_80A9F408(EnMThunder* this, PlayState* play); void func_80A9F9B4(EnMThunder* this, PlayState* play); -ActorInit En_M_Thunder_InitVars = { +ActorProfile En_M_Thunder_Profile = { /**/ ACTOR_EN_M_THUNDER, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 26795a516b..0206c09dd0 100644 --- a/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c +++ b/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c @@ -23,7 +23,7 @@ void EnMa1_TeachSong(EnMa1* this, PlayState* play); void EnMa1_WaitForPlayback(EnMa1* this, PlayState* play); void EnMa1_DoNothing(EnMa1* this, PlayState* play); -ActorInit En_Ma1_InitVars = { +ActorProfile En_Ma1_Profile = { /**/ ACTOR_EN_MA1, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 d840a4b538..6b727f28fd 100644 --- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c +++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c @@ -17,7 +17,7 @@ void func_80AA204C(EnMa2* this, PlayState* play); void func_80AA20E4(EnMa2* this, PlayState* play); void func_80AA21C8(EnMa2* this, PlayState* play); -ActorInit En_Ma2_InitVars = { +ActorProfile En_Ma2_Profile = { /**/ ACTOR_EN_MA2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 2bbc185636..3feb7cc332 100644 --- a/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c +++ b/src/overlays/actors/ovl_En_Ma3/z_en_ma3.c @@ -20,7 +20,7 @@ s32 func_80AA2F28(EnMa3* this); void EnMa3_UpdateEyes(EnMa3* this); void func_80AA3200(EnMa3* this, PlayState* play); -ActorInit En_Ma3_InitVars = { +ActorProfile En_Ma3_Profile = { /**/ ACTOR_EN_MA3, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 07c0fb92ac..3cfc1ab7ec 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -14,7 +14,7 @@ void EnMag_Destroy(Actor* thisx, PlayState* play); void EnMag_Update(Actor* thisx, PlayState* play); void EnMag_Draw(Actor* thisx, PlayState* play); -ActorInit En_Mag_InitVars = { +ActorProfile En_Mag_Profile = { /**/ ACTOR_EN_MAG, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -28,6 +28,34 @@ ActorInit En_Mag_InitVars = { static s16 sDelayTimer = 0; +#if OOT_VERSION < OOT_GC_US +void EnMag_ResetSram(void) { + static u8 buffer[0x2000]; + + bzero(buffer, 0x800); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8001000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8001800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8002000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8002800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8003000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8003800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8004000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8004800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8005000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8005800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8006000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8006800), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8007000), buffer, 0x800, 1); + SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8007800), buffer, 0x800, 1); + + gSaveContext.audioSetting = 0; + gSaveContext.zTargetSetting = 0; + func_800F6700(gSaveContext.audioSetting); +} +#endif + void EnMag_Init(Actor* thisx, PlayState* play) { EnMag* this = (EnMag*)thisx; @@ -109,10 +137,58 @@ void EnMag_Init(Actor* thisx, PlayState* play) { void EnMag_Destroy(Actor* thisx, PlayState* play) { } +#if OOT_VERSION < OOT_GC_US +void EnMag_CheckSramResetCode(PlayState* play, EnMag* this) { + static s32 sSramResetCode[] = { + BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT, BTN_START, BTN_B, BTN_CDOWN, + BTN_L, BTN_CRIGHT, BTN_CLEFT, BTN_A, BTN_CUP, BTN_R, BTN_Z, + }; + s32 var_v1; + + var_v1 = + play->state.input[2].cur.button & (BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_L | BTN_DRIGHT | + BTN_DLEFT | BTN_DDOWN | BTN_DUP | BTN_START | BTN_Z | BTN_B | BTN_A); + if (this->unk_E31C == var_v1) { + this->unk_E320--; + if (this->unk_E320 < 0) { + this->unk_E320 = 1; + } else { + var_v1 ^= this->unk_E31C; + } + } else { + this->unk_E320 = 16; + this->unk_E31C = var_v1; + } + + if (this->unk_E316 < 4) { + if (sSramResetCode[this->unk_E316] & var_v1) { + this->unk_E316++; + } else if (var_v1 != 0) { + this->unk_E316 = 0; + } + } else { + if (CHECK_BTN_ALL(play->state.input[2].press.button, sSramResetCode[this->unk_E316])) { + this->unk_E316++; + } else if (var_v1 != 0) { + this->unk_E316 = 0; + } + } + + if (this->unk_E316 == ARRAY_COUNT(sSramResetCode)) { + EnMag_ResetSram(); + this->unk_E316 = 0; + } +} +#endif + void EnMag_Update(Actor* thisx, PlayState* play) { s32 pad[2]; EnMag* this = (EnMag*)thisx; +#if OOT_VERSION < OOT_GC_US + EnMag_CheckSramResetCode(play, this); +#endif + if (gSaveContext.fileNum != 0xFEDC) { if (this->globalState < MAG_STATE_DISPLAY) { if (CHECK_BTN_ALL(play->state.input[0].press.button, BTN_START) || @@ -400,8 +476,10 @@ void EnMag_DrawCharTexture(Gfx** gfxP, u8* texture, s32 rectLeft, s32 rectTop) { // Title logo is shifted to the left in Master Quest #if !OOT_MQ #define LOGO_X_SHIFT 0 +#define JPN_SUBTITLE_X_SHIFT 0 #else #define LOGO_X_SHIFT (-8) +#define JPN_SUBTITLE_X_SHIFT (-32) #endif void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) { @@ -503,8 +581,17 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) { #if OOT_MQ gDPPipeSync(gfx++); gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, (s16)this->subAlpha); - +#if OOT_VERSION == OOT_GC_JP_MQ + EnMag_DrawImageRGBA32(&gfx, 235, 149, (u8*)gTitleUraLogoTex, 40, 40); +#elif OOT_VERSION == OOT_GC_US_MQ + if (gSaveContext.language == LANGUAGE_JPN) { + EnMag_DrawImageRGBA32(&gfx, 235, 149, (u8*)gTitleUraLogoTex, 40, 40); + } else { + EnMag_DrawImageRGBA32(&gfx, 174, 145, (u8*)gTitleMasterQuestSubtitleTex, 128, 32); + } +#else EnMag_DrawImageRGBA32(&gfx, 174, 145, (u8*)gTitleMasterQuestSubtitleTex, 128, 32); +#endif #endif } @@ -520,8 +607,15 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) { } gDPSetCombineLERP(gfx++, TEXEL1, PRIMITIVE, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); + +#if !OOT_MQ gDPSetPrimColor(gfx++, 0, 0x80, 255, 255, 170, (s16)this->subAlpha); gDPSetEnvColor(gfx++, 255, 150, 0, 255); +#else + gDPSetPrimColor(gfx++, 0, 0x80, 170, 255, 255, (s16)this->subAlpha); + gDPSetEnvColor(gfx++, ZREG(34), 100 + ZREG(35), 255 + ZREG(36), 255); +#endif + if ((s16)this->subAlpha != 0) { gDPLoadTextureBlock(gfx++, gTitleTitleJPNTex, G_IM_FMT_I, G_IM_SIZ_8b, 128, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, @@ -530,7 +624,8 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 1); gDPSetTileSize(gfx++, 1, this->unk_E30C & 0x7F, this->effectScroll & 0x7F, (this->unk_E30C & 0x7F) + ((32 - 1) << 2), (this->effectScroll & 0x7F) + ((32 - 1) << 2)); - gSPTextureRectangle(gfx++, 424, 576, 424 + 512, 576 + 64, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gSPTextureRectangle(gfx++, 424 + JPN_SUBTITLE_X_SHIFT, 576, 424 + JPN_SUBTITLE_X_SHIFT + 512, 576 + 64, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } #endif @@ -544,7 +639,15 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxP) { (s16)this->copyrightAlpha); if ((s16)this->copyrightAlpha != 0) { -#if OOT_NTSC +#if PLATFORM_N64 + gDPLoadTextureBlock(gfx++, gTitleCopyright1998Tex, 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_VERSION < OOT_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 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, 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 92f3aac854..60c2cff720 100644 --- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c +++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c @@ -53,7 +53,7 @@ void EnMb_Destroy(Actor* thisx, PlayState* play); void EnMb_Update(Actor* thisx, PlayState* play); void EnMb_Draw(Actor* thisx, PlayState* play); -ActorInit En_Mb_InitVars = { +ActorProfile En_Mb_Profile = { /**/ ACTOR_EN_MB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 879de69ecf..631a58af0d 100644 --- a/src/overlays/actors/ovl_En_Md/z_en_md.c +++ b/src/overlays/actors/ovl_En_Md/z_en_md.c @@ -21,7 +21,7 @@ void func_80AAB948(EnMd* this, PlayState* play); void func_80AABC10(EnMd* this, PlayState* play); void func_80AABD0C(EnMd* this, PlayState* play); -ActorInit En_Md_InitVars = { +ActorProfile En_Md_Profile = { /**/ ACTOR_EN_MD, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 5b8e26d91c..b98cda4e43 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -16,7 +16,7 @@ void EnMk_Draw(Actor* thisx, PlayState* play); void EnMk_Wait(EnMk* this, PlayState* play); -ActorInit En_Mk_InitVars = { +ActorProfile En_Mk_Profile = { /**/ ACTOR_EN_MK, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 2375b5e6ca..48771d5490 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -39,7 +39,7 @@ s32 func_80AADA70(void); s32 EnMm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); void EnMm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void*); -ActorInit En_Mm_InitVars = { +ActorProfile En_Mm_Profile = { /**/ ACTOR_EN_MM, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -558,8 +558,6 @@ void EnMm_Draw(Actor* thisx, PlayState* play) { } } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_mm.c", 1141); } 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 74636b9e24..43df398a87 100644 --- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c +++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c @@ -35,7 +35,7 @@ void func_80AAF668(EnMm2* this, PlayState* play); s32 EnMm2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); void EnMm2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx); -ActorInit En_Mm2_InitVars = { +ActorProfile En_Mm2_Profile = { /**/ ACTOR_EN_MM2, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index 9feb9d43bc..18a8c723eb 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -20,7 +20,7 @@ void EnMs_Talk(EnMs* this, PlayState* play); void EnMs_Sell(EnMs* this, PlayState* play); void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play); -ActorInit En_Ms_InitVars = { +ActorProfile En_Ms_Profile = { /**/ ACTOR_EN_MS, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 d6a8f2af01..eeaf652b12 100644 --- a/src/overlays/actors/ovl_En_Mu/z_en_mu.c +++ b/src/overlays/actors/ovl_En_Mu/z_en_mu.c @@ -39,7 +39,7 @@ static ColliderCylinderInit D_80AB0BD0 = { static CollisionCheckInfoInit2 D_80AB0BFC = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_Mu_InitVars = { +ActorProfile En_Mu_Profile = { /**/ ACTOR_EN_MU, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 454c36a154..04883b3fca 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -1558,7 +1558,7 @@ void EnNb_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawMode](this, play); } -ActorInit En_Nb_InitVars = { +ActorProfile En_Nb_Profile = { /**/ ACTOR_EN_NB, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 e24f78be87..e2c44b79d9 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -36,7 +36,7 @@ void EnNiw_DrawEffects(EnNiw* this, PlayState* play); static s16 D_80AB85E0 = 0; -ActorInit En_Niw_InitVars = { +ActorProfile En_Niw_Profile = { /**/ ACTOR_EN_NIW, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 33c98d4f8f..d318e9f051 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 @@ -19,7 +19,7 @@ void EnNiwGirl_Talk(EnNiwGirl* this, PlayState* play); void func_80AB94D0(EnNiwGirl* this, PlayState* play); void func_80AB9210(EnNiwGirl* this, PlayState* play); -ActorInit En_Niw_Girl_InitVars = { +ActorProfile En_Niw_Girl_Profile = { /**/ ACTOR_EN_NIW_GIRL, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 9da760fb15..e977d18652 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 @@ -25,7 +25,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play); void func_80ABA654(EnNiwLady* this, PlayState* play); void func_80ABAD7C(EnNiwLady* this, PlayState* play); -ActorInit En_Niw_Lady_InitVars = { +ActorProfile En_Niw_Lady_Profile = { /**/ ACTOR_EN_NIW_LADY, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 1d05b78c35..151b4e746c 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -22,7 +22,7 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play); void func_80ABBB34(EnNutsball* this, PlayState* play); void func_80ABBBA8(EnNutsball* this, PlayState* play); -ActorInit En_Nutsball_InitVars = { +ActorProfile En_Nutsball_Profile = { /**/ ACTOR_EN_NUTSBALL, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 b6942de606..0a38ca95c0 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -30,7 +30,7 @@ typedef enum { /* 1 */ CHICK_NORMAL } ChickTypes; -ActorInit En_Nwc_InitVars = { +ActorProfile En_Nwc_Profile = { /**/ ACTOR_EN_NWC, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Ny/z_en_ny.c b/src/overlays/actors/ovl_En_Ny/z_en_ny.c index 38e717dd66..5d6eb3338c 100644 --- a/src/overlays/actors/ovl_En_Ny/z_en_ny.c +++ b/src/overlays/actors/ovl_En_Ny/z_en_ny.c @@ -23,7 +23,7 @@ void EnNy_SetupDie(EnNy* this, PlayState* play); void EnNy_DrawDeathEffect(Actor* thisx, PlayState* play); void func_80ABD3B8(EnNy* this, f32, f32); -ActorInit En_Ny_InitVars = { +ActorProfile En_Ny_Profile = { /**/ ACTOR_EN_NY, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_OE2/z_en_oe2.c b/src/overlays/actors/ovl_En_OE2/z_en_oe2.c index 641f47d0fd..cfd4f7377f 100644 --- a/src/overlays/actors/ovl_En_OE2/z_en_oe2.c +++ b/src/overlays/actors/ovl_En_OE2/z_en_oe2.c @@ -15,7 +15,7 @@ void EnOE2_Draw(Actor* thisx, PlayState* play); void EnOE2_DoNothing(EnOE2* this, PlayState* play); -ActorInit En_OE2_InitVars = { +ActorProfile En_OE2_Profile = { /**/ ACTOR_EN_OE2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 4b755ca610..9d8edf6a1e 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 @@ -18,7 +18,7 @@ void EnOkarinaEffect_Update(Actor* thisx, PlayState* play); void EnOkarinaEffect_TriggerStorm(EnOkarinaEffect* this, PlayState* play); void EnOkarinaEffect_ManageStorm(EnOkarinaEffect* this, PlayState* play); -ActorInit En_Okarina_Effect_InitVars = { +ActorProfile En_Okarina_Effect_Profile = { /**/ ACTOR_EN_OKARINA_EFFECT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 a258f84c1b..1e4ade9f29 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 @@ -22,7 +22,7 @@ void func_80ABF0CC(EnOkarinaTag* this, PlayState* play); void func_80ABF4C8(EnOkarinaTag* this, PlayState* play); void func_80ABF7CC(EnOkarinaTag* this, PlayState* play); -ActorInit En_Okarina_Tag_InitVars = { +ActorProfile En_Okarina_Tag_Profile = { /**/ ACTOR_EN_OKARINA_TAG, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 3b4bbb26fc..21dc7500d8 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -19,7 +19,7 @@ void EnOkuta_Die(EnOkuta* this, PlayState* play); void EnOkuta_Freeze(EnOkuta* this, PlayState* play); void EnOkuta_ProjectileFly(EnOkuta* this, PlayState* play); -ActorInit En_Okuta_InitVars = { +ActorProfile En_Okuta_Profile = { /**/ ACTOR_EN_OKUTA, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 784ac765cf..5ec2091fa1 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -100,7 +100,7 @@ void EnOssan_SetStateGiveDiscountDialog(PlayState* play, EnOssan* this); #define CURSOR_INVALID 0xFF -ActorInit En_Ossan_InitVars = { +ActorProfile En_Ossan_Profile = { /**/ ACTOR_EN_OSSAN, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 b67d863e31..df91014844 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -65,7 +65,7 @@ typedef enum { /* 0x01 */ OWL_OK } EnOwlMessageChoice; -ActorInit En_Owl_InitVars = { +ActorProfile En_Owl_Profile = { /**/ ACTOR_EN_OWL, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 63219d2f0c..8ff94c65bc 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.c +++ b/src/overlays/actors/ovl_En_Part/z_en_part.c @@ -15,7 +15,7 @@ void EnPart_Destroy(Actor* thisx, PlayState* play); void EnPart_Update(Actor* thisx, PlayState* play); void EnPart_Draw(Actor* thisx, PlayState* play); -ActorInit En_Part_InitVars = { +ActorProfile En_Part_Profile = { /**/ ACTOR_EN_PART, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 8fa9e1a490..b0120cf4ad 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -40,7 +40,7 @@ void EnPeehat_Adult_StateDie(EnPeehat* this, PlayState* play); void EnPeehat_SetStateExplode(EnPeehat* this); void EnPeehat_StateExplode(EnPeehat* this, PlayState* play); -ActorInit En_Peehat_InitVars = { +ActorProfile En_Peehat_Profile = { /**/ ACTOR_EN_PEEHAT, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 3f814e796d..6adf35d68b 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 @@ -19,7 +19,7 @@ void EnPoDesert_WaitForPlayer(EnPoDesert* this, PlayState* play); void EnPoDesert_MoveToNextPoint(EnPoDesert* this, PlayState* play); void EnPoDesert_Disappear(EnPoDesert* this, PlayState* play); -ActorInit En_Po_Desert_InitVars = { +ActorProfile En_Po_Desert_Profile = { /**/ ACTOR_EN_PO_DESERT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 f67ce8d4ef..88542082e9 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 @@ -33,7 +33,7 @@ void EnPoField_SoulDisappear(EnPoField* this, PlayState* play); void EnPoField_SoulInteract(EnPoField* this, PlayState* play); void EnPoField_SpawnFlame(EnPoField* this); -ActorInit En_Po_Field_InitVars = { +ActorProfile En_Po_Field_Profile = { /**/ ACTOR_EN_PO_FIELD, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -796,8 +796,6 @@ void EnPoField_DrawFlame(EnPoField* this, PlayState* play) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_po_field.c", 1712); } } @@ -1000,8 +998,6 @@ void EnPoField_DrawSoul(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gPoeFieldSoulDL); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_po_field.c", 2149); EnPoField_DrawFlame(this, 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 4106c8f0cd..681770d82d 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 @@ -33,7 +33,7 @@ static Vec3s D_80AD8C30[] = { { 0x0B4E, 0xFE66, 0xF87E }, { 0x0B4A, 0xFE66, 0xF97A }, { 0x0B4A, 0xFE98, 0xF9FC }, { 0x0BAE, 0xFE98, 0xF9FC }, }; -ActorInit En_Po_Relay_InitVars = { +ActorProfile En_Po_Relay_Profile = { /**/ ACTOR_EN_PO_RELAY, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -385,7 +385,6 @@ void EnPoRelay_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, this->lightColor.r, this->lightColor.g, this->lightColor.b, 128); gSPDisplayList(POLY_OPA_DISP++, gDampeLanternDL); - if (1) {} CLOSE_DISPS(play->state.gfxCtx, "../z_en_po_relay.c", 901); Matrix_MultVec3f(&D_80AD8D48, &vec); Lights_PointNoGlowSetInfo(&this->lightInfo, vec.x, vec.y, vec.z, this->lightColor.r, this->lightColor.g, 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 1315e00b98..17fc773e97 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 @@ -61,7 +61,7 @@ static Color_RGBA8 D_80ADD700[4] = { { 0, 150, 0, 255 }, }; -ActorInit En_Po_Sisters_InitVars = { +ActorProfile En_Po_Sisters_Profile = { /**/ ACTOR_EN_PO_SISTERS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 10af760994..a95fb1fe36 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -42,7 +42,7 @@ void EnPoh_TalkComposer(EnPoh* this, PlayState* play); static s16 D_80AE1A50 = 0; -ActorInit En_Poh_InitVars = { +ActorProfile En_Poh_Profile = { /**/ ACTOR_EN_POH, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 b141965c37..90eba0cde1 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 @@ -14,7 +14,7 @@ void EnPubox_Destroy(Actor* thisx, PlayState* play); void EnPubox_Update(Actor* thisx, PlayState* play); void EnPubox_Draw(Actor* thisx, PlayState* play); -ActorInit En_Pu_box_InitVars = { +ActorProfile En_Pu_box_Profile = { /**/ ACTOR_EN_PU_BOX, /**/ ACTORCAT_BG, /**/ FLAGS, 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 cae3ead4ee..b20ed63dd3 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -52,7 +52,7 @@ typedef enum { /* 4 */ REDEAD_GRAB_END } EnRdGrabState; -ActorInit En_Rd_InitVars = { +ActorProfile En_Rd_Profile = { /**/ ACTOR_EN_RD, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -994,7 +994,5 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { func_80033C30(&thisPos, &sShadowScale, this->alpha, play); } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_rd.c", 1735); } 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 d2be030709..e58a655044 100644 --- a/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c +++ b/src/overlays/actors/ovl_En_Reeba/z_en_reeba.c @@ -75,7 +75,7 @@ static DamageTable sDamageTable = { /* Unknown 2 */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE), }; -ActorInit En_Reeba_InitVars = { +ActorProfile En_Reeba_Profile = { /**/ ACTOR_EN_REEBA, /**/ ACTORCAT_MISC, /**/ FLAGS, 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 19b867eb8c..0cbcbdb024 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 @@ -13,7 +13,7 @@ void EnRiverSound_Destroy(Actor* thisx, PlayState* play); void EnRiverSound_Update(Actor* thisx, PlayState* play); void EnRiverSound_Draw(Actor* thisx, PlayState* play); -ActorInit En_River_Sound_InitVars = { +ActorProfile En_River_Sound_Profile = { /**/ ACTOR_EN_RIVER_SOUND, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -226,7 +226,7 @@ void EnRiverSound_Update(Actor* thisx, PlayState* play) { } } } else if ((thisx->params == RS_GORON_CITY_SARIAS_SONG) || (thisx->params == RS_GREAT_FAIRY)) { - func_8002DBD0(&player->actor, &thisx->home.pos, &thisx->world.pos); + Actor_WorldToActorCoords(&player->actor, &thisx->home.pos, &thisx->world.pos); } else if (play->sceneId == SCENE_DODONGOS_CAVERN_BOSS && Flags_GetClear(play, thisx->room)) { Actor_Kill(thisx); } 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 d3c74b7908..ad648f5eb1 100644 --- a/src/overlays/actors/ovl_En_Rl/z_en_rl.c +++ b/src/overlays/actors/ovl_En_Rl/z_en_rl.c @@ -394,7 +394,7 @@ void EnRl_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawConfig](this, play); } -ActorInit En_Rl_InitVars = { +ActorProfile En_Rl_Profile = { /**/ ACTOR_EN_RL, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 146f926a96..34e1bd21c8 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -64,7 +64,7 @@ void EnRr_Death(EnRr* this, PlayState* play); void EnRr_Retreat(EnRr* this, PlayState* play); void EnRr_Stunned(EnRr* this, PlayState* play); -ActorInit En_Rr_InitVars = { +ActorProfile En_Rr_Profile = { /**/ ACTOR_EN_RR, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -901,20 +901,18 @@ void EnRr_Draw(Actor* thisx, PlayState* play) { s32 offIndex; this->actor.colorFilterTimer++; - if ((effectTimer & 1) != 0) { - return; - } + if ((effectTimer & 1) == 0) { + segIndex = 4 - (effectTimer >> 2); + offIndex = (effectTimer >> 1) & 3; - segIndex = 4 - (effectTimer >> 2); - offIndex = (effectTimer >> 1) & 3; - - effectPos.x = this->effectPos[segIndex].x + sEffectOffsets[offIndex].x + Rand_CenteredFloat(10.0f); - effectPos.y = this->effectPos[segIndex].y + sEffectOffsets[offIndex].y + Rand_CenteredFloat(10.0f); - effectPos.z = this->effectPos[segIndex].z + sEffectOffsets[offIndex].z + Rand_CenteredFloat(10.0f); - if (this->actor.colorFilterParams & 0x4000) { - EffectSsEnFire_SpawnVec3f(play, &this->actor, &effectPos, 100, 0, 0, -1); - } else { - EffectSsEnIce_SpawnFlyingVec3f(play, &this->actor, &effectPos, 150, 150, 150, 250, 235, 245, 255, 3.0f); + effectPos.x = this->effectPos[segIndex].x + sEffectOffsets[offIndex].x + Rand_CenteredFloat(10.0f); + effectPos.y = this->effectPos[segIndex].y + sEffectOffsets[offIndex].y + Rand_CenteredFloat(10.0f); + effectPos.z = this->effectPos[segIndex].z + sEffectOffsets[offIndex].z + Rand_CenteredFloat(10.0f); + if (this->actor.colorFilterParams & 0x4000) { + EffectSsEnFire_SpawnVec3f(play, &this->actor, &effectPos, 100, 0, 0, -1); + } else { + EffectSsEnIce_SpawnFlyingVec3f(play, &this->actor, &effectPos, 150, 150, 150, 250, 235, 245, 255, 3.0f); + } } } } 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 d33d43917b..9f11eba226 100644 --- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c +++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c @@ -132,7 +132,7 @@ static EnRu1DrawFunc sDrawFuncs[] = { EnRu1_DrawXlu, }; -ActorInit En_Ru1_InitVars = { +ActorProfile En_Ru1_Profile = { /**/ ACTOR_EN_RU1, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c2c23b2b90..e93011fc4b 100644 --- a/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c +++ b/src/overlays/actors/ovl_En_Ru2/z_en_ru2.c @@ -79,7 +79,7 @@ static EnRu2DrawFunc sDrawFuncs[] = { func_80AF321C, }; -ActorInit En_Ru2_InitVars = { +ActorProfile En_Ru2_Profile = { /**/ ACTOR_EN_RU2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 d60aa4e40c..d6296987e6 100644 --- a/src/overlays/actors/ovl_En_Sa/z_en_sa.c +++ b/src/overlays/actors/ovl_En_Sa/z_en_sa.c @@ -33,7 +33,7 @@ typedef enum { /* 4 */ SARIA_MOUTH_FROWNING } SariaMouthState; -ActorInit En_Sa_InitVars = { +ActorProfile En_Sa_Profile = { /**/ ACTOR_EN_SA, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index df531b2b7c..ef608988e8 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -25,7 +25,7 @@ void EnSb_Lunge(EnSb* this, PlayState* play); void EnSb_Bounce(EnSb* this, PlayState* play); void EnSb_Cooldown(EnSb* this, PlayState* play); -ActorInit En_Sb_InitVars = { +ActorProfile En_Sb_Profile = { /**/ ACTOR_EN_SB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Scene_Change/z_en_scene_change.c b/src/overlays/actors/ovl_En_Scene_Change/z_en_scene_change.c index 0bc1a11879..26d322f9b5 100644 --- a/src/overlays/actors/ovl_En_Scene_Change/z_en_scene_change.c +++ b/src/overlays/actors/ovl_En_Scene_Change/z_en_scene_change.c @@ -15,7 +15,7 @@ void EnSceneChange_Draw(Actor* thisx, PlayState* play); void EnSceneChange_DoNothing(EnSceneChange* this, PlayState* play); -ActorInit En_Scene_Change_InitVars = { +ActorProfile En_Scene_Change_Profile = { /**/ ACTOR_EN_SCENE_CHANGE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7a3b1c81fd..6e90040a56 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -17,7 +17,7 @@ void func_80AF95C4(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl void func_80AF9C70(u8* shadowTexture, Player* player, PlayState* play); void func_80AF8F60(Player* player, u8* shadowTexture, f32 arg2); -ActorInit En_Sda_InitVars = { +ActorProfile En_Sda_Profile = { /**/ ACTOR_EN_SDA, /**/ ACTORCAT_BOSS, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c b/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c index b351d6888d..679a00f8af 100644 --- a/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c +++ b/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c @@ -21,7 +21,7 @@ void EnShopnuts_ThrowNut(EnShopnuts* this, PlayState* play); void EnShopnuts_Burrow(EnShopnuts* this, PlayState* play); void EnShopnuts_SpawnSalesman(EnShopnuts* this, PlayState* play); -ActorInit En_Shopnuts_InitVars = { +ActorProfile En_Shopnuts_Profile = { /**/ ACTOR_EN_SHOPNUTS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Si/z_en_si.c b/src/overlays/actors/ovl_En_Si/z_en_si.c index b6b3adf161..cac674c404 100644 --- a/src/overlays/actors/ovl_En_Si/z_en_si.c +++ b/src/overlays/actors/ovl_En_Si/z_en_si.c @@ -40,7 +40,7 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 D_80AFBADC = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_Si_InitVars = { +ActorProfile En_Si_Profile = { /**/ ACTOR_EN_SI, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 0d28bea18f..1335c1b7ad 100644 --- a/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c +++ b/src/overlays/actors/ovl_En_Siofuki/z_en_siofuki.c @@ -18,7 +18,7 @@ void func_80AFC34C(EnSiofuki* this, PlayState* play); void func_80AFC544(EnSiofuki* this, PlayState* play); void func_80AFC478(EnSiofuki* this, PlayState* play); -ActorInit En_Siofuki_InitVars = { +ActorProfile En_Siofuki_Profile = { /**/ ACTOR_EN_SIOFUKI, /**/ ACTORCAT_BG, /**/ FLAGS, @@ -294,8 +294,6 @@ void EnSiofuki_Draw(Actor* thisx, PlayState* play) { Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, x, y, 64, 64, 1, x, y, 64, 64)); gSPDisplayList(POLY_XLU_DISP++, object_siofuki_DL_000B70); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_siofuki.c", 674); if (this->sfxFlags & 1) { 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 c484ee2068..1853e7b75b 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -113,7 +113,7 @@ static DamageTable sDamageTable = { /* Unknown 2 */ DMG_ENTRY(0, 0x0), }; -ActorInit En_Skb_InitVars = { +ActorProfile En_Skb_Profile = { /**/ ACTOR_EN_SKB, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 1fb08a6cdf..9805f0542d 100644 --- a/src/overlays/actors/ovl_En_Skj/z_en_skj.c +++ b/src/overlays/actors/ovl_En_Skj/z_en_skj.c @@ -159,7 +159,7 @@ typedef struct { static EnSkjUnkStruct sSmallStumpSkullKid = { 0, NULL }; static EnSkjUnkStruct sOcarinaMinigameSkullKids[] = { { 0, NULL }, { 0, NULL } }; -ActorInit En_Skj_InitVars = { +ActorProfile En_Skj_Profile = { /**/ ACTOR_EN_SKJ, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.c b/src/overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.c index df3f584f91..b27a05a488 100644 --- a/src/overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.c +++ b/src/overlays/actors/ovl_En_Skjneedle/z_en_skjneedle.c @@ -16,7 +16,7 @@ void EnSkjneedle_Draw(Actor* thisx, PlayState* play); s32 EnSkjNeedle_CollisionCheck(EnSkjneedle* this); -ActorInit En_Skjneedle_InitVars = { +ActorProfile En_Skjneedle_Profile = { /**/ ACTOR_EN_SKJNEEDLE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 e7b9d3ee0f..1cf4f71ad8 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -30,7 +30,7 @@ void EnSsh_Start(EnSsh* this, PlayState* play); #include "assets/overlays/ovl_En_Ssh/ovl_En_Ssh.c" -ActorInit En_Ssh_InitVars = { +ActorProfile En_Ssh_Profile = { /**/ ACTOR_EN_SSH, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 b7983ad59b..1011149b3b 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -23,7 +23,7 @@ void EnSt_FinishBouncing(EnSt* this, PlayState* play); #include "assets/overlays/ovl_En_St/ovl_En_St.c" -ActorInit En_St_InitVars = { +ActorProfile En_St_Profile = { /**/ ACTOR_EN_ST, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 66416baba9..ac1ead5ac2 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -22,7 +22,7 @@ void EnSth_ParentRewardObtainedWait(EnSth* this, PlayState* play); void EnSth_RewardUnobtainedWait(EnSth* this, PlayState* play); void EnSth_ChildRewardObtainedWait(EnSth* this, PlayState* play); -ActorInit En_Sth_InitVars = { +ActorProfile En_Sth_Profile = { /**/ ACTOR_EN_STH, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 cc6cf457d5..afd36981f5 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -15,7 +15,7 @@ void EnStream_Update(Actor* thisx, PlayState* play); void EnStream_Draw(Actor* thisx, PlayState* play); void EnStream_WaitForPlayer(EnStream* this, PlayState* play); -ActorInit En_Stream_InitVars = { +ActorProfile En_Stream_Profile = { /**/ ACTOR_EN_STREAM, /**/ ACTORCAT_BG, /**/ FLAGS, 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 6ffffd208c..91d65ef9b9 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -20,7 +20,7 @@ void func_80B0D3AC(EnSw* this, PlayState* play); void func_80B0DB00(EnSw* this, PlayState* play); void func_80B0D878(EnSw* this, PlayState* play); -ActorInit En_Sw_InitVars = { +ActorProfile En_Sw_Profile = { /**/ ACTOR_EN_SW, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 9719fd651a..5f39b2de69 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 @@ -27,7 +27,7 @@ void EnSyatekiItm_CheckTargets(EnSyatekiItm* this, PlayState* play); void EnSyatekiItm_CleanupGame(EnSyatekiItm* this, PlayState* play); void EnSyatekiItm_EndGame(EnSyatekiItm* this, PlayState* play); -ActorInit En_Syateki_Itm_InitVars = { +ActorProfile En_Syateki_Itm_Profile = { /**/ ACTOR_EN_SYATEKI_ITM, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 90c72cf991..bcf5c8baf9 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 @@ -44,7 +44,7 @@ void EnSyatekiMan_Blink(EnSyatekiMan* this); void EnSyatekiMan_SetBgm(void); #endif -ActorInit En_Syateki_Man_InitVars = { +ActorProfile En_Syateki_Man_Profile = { /**/ ACTOR_EN_SYATEKI_MAN, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 9da826cd60..2e85c4d53b 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 @@ -26,7 +26,7 @@ void EnSyatekiNiw_ExitArchery(EnSyatekiNiw* this, PlayState* play); void EnSyatekiNiw_SpawnFeather(EnSyatekiNiw* this, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 scale); -ActorInit En_Syateki_Niw_InitVars = { +ActorProfile En_Syateki_Niw_Profile = { /**/ ACTOR_EN_SYATEKI_NIW, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 b9575cf6eb..63e0005eb2 100644 --- a/src/overlays/actors/ovl_En_Ta/z_en_ta.c +++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.c @@ -57,7 +57,7 @@ void EnTa_AnimSleeping(EnTa* this); void EnTa_AnimSitSleeping(EnTa* this); void EnTa_AnimRunToEnd(EnTa* this); -ActorInit En_Ta_InitVars = { +ActorProfile En_Ta_Profile = { /**/ ACTOR_EN_TA, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 b0c4c92495..f243fc13f3 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 @@ -22,7 +22,7 @@ void func_80B17934(EnTakaraMan* this, PlayState* play); void func_80B17A6C(EnTakaraMan* this, PlayState* play); void func_80B17AC4(EnTakaraMan* this, PlayState* play); -ActorInit En_Takara_Man_InitVars = { +ActorProfile En_Takara_Man_Profile = { /**/ ACTOR_EN_TAKARA_MAN, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Tana/z_en_tana.c b/src/overlays/actors/ovl_En_Tana/z_en_tana.c index a3cf4949c6..1bb12bd048 100644 --- a/src/overlays/actors/ovl_En_Tana/z_en_tana.c +++ b/src/overlays/actors/ovl_En_Tana/z_en_tana.c @@ -15,7 +15,7 @@ void EnTana_Update(Actor* thisx, PlayState* play); void EnTana_DrawWoodenShelves(Actor* thisx, PlayState* play); void EnTana_DrawStoneShelves(Actor* thisx, PlayState* play); -ActorInit En_Tana_InitVars = { +ActorProfile En_Tana_Profile = { /**/ ACTOR_EN_TANA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 96a2a2e87b..6434aa2c12 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.c +++ b/src/overlays/actors/ovl_En_Test/z_en_test.c @@ -125,7 +125,7 @@ static u8 sUpperBodyLimbCopyMap[] = { false, // STALFOS_LIMB_WAIST }; -ActorInit En_Test_InitVars = { +ActorProfile En_Test_Profile = { /**/ ACTOR_EN_TEST, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c index 403ea500f9..b95ebe951f 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -38,7 +38,7 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_Tg_InitVars = { +ActorProfile En_Tg_Profile = { /**/ ACTOR_EN_TG, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 f9ab171274..0c2dc38f44 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -74,7 +74,7 @@ void EnTite_FallApart(EnTite* this, PlayState* play); void EnTite_FlipOnBack(EnTite* this, PlayState* play); void EnTite_FlipUpright(EnTite* this, PlayState* play); -ActorInit En_Tite_InitVars = { +ActorProfile En_Tite_Profile = { /**/ ACTOR_EN_TITE, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index b48964c8fb..40045d3323 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -20,7 +20,7 @@ void EnTk_Rest(EnTk* this, PlayState* play); void EnTk_Walk(EnTk* this, PlayState* play); void EnTk_Dig(EnTk* this, PlayState* play); -ActorInit En_Tk_InitVars = { +ActorProfile En_Tk_Profile = { /**/ ACTOR_EN_TK, /**/ ACTORCAT_NPC, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Torch/z_en_torch.c b/src/overlays/actors/ovl_En_Torch/z_en_torch.c index 95623b0de9..e60e16c0de 100644 --- a/src/overlays/actors/ovl_En_Torch/z_en_torch.c +++ b/src/overlays/actors/ovl_En_Torch/z_en_torch.c @@ -10,7 +10,7 @@ void EnTorch_Init(Actor* thisx, PlayState* play); -ActorInit En_Torch_InitVars = { +ActorProfile En_Torch_Profile = { /**/ ACTOR_EN_TORCH, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 8c3c1c90a8..93d2643bc4 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -21,7 +21,7 @@ void EnTorch2_Destroy(Actor* thisx, PlayState* play); void EnTorch2_Update(Actor* thisx, PlayState* play2); void EnTorch2_Draw(Actor* thisx, PlayState* play2); -ActorInit En_Torch2_InitVars = { +ActorProfile En_Torch2_Profile = { /**/ ACTOR_EN_TORCH2, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 38e5f46d53..74c25006c4 100644 --- a/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c +++ b/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c @@ -18,7 +18,7 @@ void EnToryo_Idle(EnToryo* this, PlayState* play); s32 EnToryo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx); void EnToryo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx); -ActorInit En_Toryo_InitVars = { +ActorProfile En_Toryo_Profile = { /**/ ACTOR_EN_TORYO, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 cf99f6eca4..d71f1d6171 100644 --- a/src/overlays/actors/ovl_En_Tp/z_en_tp.c +++ b/src/overlays/actors/ovl_En_Tp/z_en_tp.c @@ -39,7 +39,7 @@ typedef enum { /* 9 */ TAILPASARAN_ACTION_HEAD_BURROWRETURNHOME } TailpasaranAction; -ActorInit En_Tp_InitVars = { +ActorProfile En_Tp_Profile = { /**/ ACTOR_EN_TP, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 fa9a5fca8e..8908dad6c8 100644 --- a/src/overlays/actors/ovl_En_Tr/z_en_tr.c +++ b/src/overlays/actors/ovl_En_Tr/z_en_tr.c @@ -23,7 +23,7 @@ void EnTr_SetRotFromCue(EnTr* this, PlayState* play, s32 cueChannel); void func_80B24038(EnTr* this, PlayState* play, s32 cueChannel); void EnTr_SetStartPosRotFromCue(EnTr* this, PlayState* play, s32 cueChannel); -ActorInit En_Tr_InitVars = { +ActorProfile En_Tr_Profile = { /**/ ACTOR_EN_TR, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 6c21a07c25..44ab7726dd 100644 --- a/src/overlays/actors/ovl_En_Trap/z_en_trap.c +++ b/src/overlays/actors/ovl_En_Trap/z_en_trap.c @@ -34,7 +34,7 @@ void EnTrap_Destroy(Actor* thisx, PlayState* play); void EnTrap_Update(Actor* thisx, PlayState* play); void EnTrap_Draw(Actor* thisx, PlayState* play); -ActorInit En_Trap_InitVars = { +ActorProfile En_Trap_Profile = { /**/ ACTOR_EN_TRAP, /**/ ACTORCAT_BG, /**/ FLAGS, 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 9d40aa022f..45da6ae14b 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 @@ -40,7 +40,7 @@ static ColliderCylinderInit sCylinderInit = { { 9, 23, 0, { 0 } }, }; -ActorInit En_Tubo_Trap_InitVars = { +ActorProfile En_Tubo_Trap_Profile = { /**/ ACTOR_EN_TUBO_TRAP, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 b48c0e3e20..a8f7574e6a 100644 --- a/src/overlays/actors/ovl_En_Vali/z_en_vali.c +++ b/src/overlays/actors/ovl_En_Vali/z_en_vali.c @@ -29,7 +29,7 @@ void EnVali_Stunned(EnVali* this, PlayState* play); void EnVali_Frozen(EnVali* this, PlayState* play); void EnVali_ReturnToLurk(EnVali* this, PlayState* play); -ActorInit En_Vali_InitVars = { +ActorProfile En_Vali_Profile = { /**/ ACTOR_EN_VALI, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 c411371c24..065013bb52 100644 --- a/src/overlays/actors/ovl_En_Vase/z_en_vase.c +++ b/src/overlays/actors/ovl_En_Vase/z_en_vase.c @@ -13,7 +13,7 @@ void EnVase_Init(Actor* thisx, PlayState* play); void EnVase_Destroy(Actor* thisx, PlayState* play); void EnVase_Draw(Actor* thisx, PlayState* play); -ActorInit En_Vase_InitVars = { +ActorProfile En_Vase_Profile = { /**/ ACTOR_EN_VASE, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 695b88014b..e4b89045db 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 @@ -16,7 +16,7 @@ void EnVbBall_Destroy(Actor* thisx, PlayState* play); void EnVbBall_Update(Actor* thisx, PlayState* play2); void EnVbBall_Draw(Actor* thisx, PlayState* play); -ActorInit En_Vb_Ball_InitVars = { +ActorProfile En_Vb_Ball_Profile = { /**/ 0, /**/ ACTORCAT_BOSS, /**/ FLAGS, 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 1c459b1e53..ef8df01190 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -31,7 +31,7 @@ void EnViewer_UpdateImpl(EnViewer* this, PlayState* play); static u8 sHorseSfxPlayed = false; -ActorInit En_Viewer_InitVars = { +ActorProfile En_Viewer_Profile = { /**/ ACTOR_EN_VIEWER, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 25f13383ca..4ea733cc22 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -23,7 +23,7 @@ void EnVm_Attack(EnVm* this, PlayState* play); void EnVm_Stun(EnVm* this, PlayState* play); void EnVm_Die(EnVm* this, PlayState* play); -ActorInit En_Vm_InitVars = { +ActorProfile En_Vm_Profile = { /**/ ACTOR_EN_VM, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 2728e4b0d3..c20a257544 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 @@ -21,7 +21,7 @@ void EnWallTubo_FindGirl(EnWallTubo* this, PlayState* play); void EnWallTubo_DetectChu(EnWallTubo* this, PlayState* play); void EnWallTubo_SetWallFall(EnWallTubo* this, PlayState* play); -ActorInit En_Wall_Tubo_InitVars = { +ActorProfile En_Wall_Tubo_Profile = { /**/ ACTOR_EN_WALL_TUBO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 645b077de7..9e56239051 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -38,7 +38,7 @@ void EnWallmas_WaitForSwitchFlag(EnWallmas* this, PlayState* play); void EnWallmas_Stun(EnWallmas* this, PlayState* play); void EnWallmas_Walk(EnWallmas* this, PlayState* play); -ActorInit En_Wallmas_InitVars = { +ActorProfile En_Wallmas_Profile = { /**/ ACTOR_EN_WALLMAS, /**/ ACTORCAT_ENEMY, /**/ FLAGS, @@ -609,8 +609,6 @@ void EnWallmas_DrawXlu(EnWallmas* this, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_en_wallmas.c", 1421), G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, gCircleShadowDL); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_en_wallmas.c", 1426); } 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 1259de2781..18ae59f2b4 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 @@ -31,7 +31,7 @@ void EnWeatherTag_EnabledRainThunder(EnWeatherTag* this, PlayState* play); #define WEATHER_TAG_RANGE100(x) ((x >> 8) * 100.0f) -ActorInit En_Weather_Tag_InitVars = { +ActorProfile En_Weather_Tag_Profile = { /**/ ACTOR_EN_WEATHER_TAG, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c index ecf2ffb554..d7e1a835d3 100644 --- a/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c +++ b/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c @@ -26,7 +26,7 @@ void func_80B332B4(EnWeiyer* this, PlayState* play); void func_80B33338(EnWeiyer* this, PlayState* play); void func_80B3349C(EnWeiyer* this, PlayState* play); -ActorInit En_Weiyer_InitVars = { +ActorProfile En_Weiyer_Profile = { /**/ ACTOR_EN_WEIYER, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 a0088fc699..00351e785e 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -187,7 +187,7 @@ static DamageTable sDamageTable = { /* Unknown 2 */ DMG_ENTRY(0, ENWF_DMGEFF_NONE), }; -ActorInit En_Wf_InitVars = { +ActorProfile En_Wf_Profile = { /**/ ACTOR_EN_WF, /**/ ACTORCAT_ENEMY, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.c b/src/overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.c index acf36140c2..1bfad680c6 100644 --- a/src/overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.c +++ b/src/overlays/actors/ovl_En_Wonder_Item/z_en_wonder_item.c @@ -41,7 +41,7 @@ static ColliderCylinderInit sCylinderInit = { { 20, 30, 0, { 0, 0, 0 } }, }; -ActorInit En_Wonder_Item_InitVars = { +ActorProfile En_Wonder_Item_Profile = { /**/ ACTOR_EN_WONDER_ITEM, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -53,7 +53,7 @@ ActorInit En_Wonder_Item_InitVars = { /**/ NULL, }; -#pragma increment_block_number 1 +#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" static Vec3f sTagPointsFree[9]; static Vec3f sTagPointsOrdered[9]; diff --git a/src/overlays/actors/ovl_En_Wonder_Talk/z_en_wonder_talk.c b/src/overlays/actors/ovl_En_Wonder_Talk/z_en_wonder_talk.c index 08dbcbd9fb..cb51d8868a 100644 --- a/src/overlays/actors/ovl_En_Wonder_Talk/z_en_wonder_talk.c +++ b/src/overlays/actors/ovl_En_Wonder_Talk/z_en_wonder_talk.c @@ -17,7 +17,7 @@ void func_80B391CC(EnWonderTalk* this, PlayState* play); void func_80B395F0(EnWonderTalk* this, PlayState* play); void func_80B3943C(EnWonderTalk* this, PlayState* play); -ActorInit En_Wonder_Talk_InitVars = { +ActorProfile En_Wonder_Talk_Profile = { /**/ ACTOR_EN_WONDER_TALK, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7dd016d496..69117b0cbd 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 @@ -19,7 +19,7 @@ void func_80B3A15C(EnWonderTalk2* this, PlayState* play); void func_80B3A3D4(EnWonderTalk2* this, PlayState* play); void EnWonderTalk2_DoNothing(EnWonderTalk2* this, PlayState* play); -ActorInit En_Wonder_Talk2_InitVars = { +ActorProfile En_Wonder_Talk2_Profile = { /**/ ACTOR_EN_WONDER_TALK2, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 6845d39837..c61f2f1aaa 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -33,7 +33,7 @@ typedef enum { /* 5 */ WOOD_DRAW_LEAF_YELLOW } WoodDrawType; -ActorInit En_Wood02_InitVars = { +ActorProfile En_Wood02_Profile = { /**/ ACTOR_EN_WOOD02, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 1f3b1bca91..03a7ffd32d 100644 --- a/src/overlays/actors/ovl_En_Xc/z_en_xc.c +++ b/src/overlays/actors/ovl_En_Xc/z_en_xc.c @@ -14,8 +14,7 @@ #include "assets/scenes/dungeons/ice_doukutu/ice_doukutu_scene.h" #include "terminal.h" -// For retail BSS ordering, the block number of sSfxPos -// must be between 0 and 213 inclusive. +#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" #define FLAGS ACTOR_FLAG_4 @@ -1396,7 +1395,7 @@ void func_80B3F3D8(void) { Sfx_PlaySfxCentered2(NA_SE_PL_SKIP); } -#pragma increment_block_number 20 +#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" void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) { static Vec3f D_80B42DA0; @@ -2456,7 +2455,7 @@ void EnXc_Draw(Actor* thisx, PlayState* play) { } } -ActorInit En_Xc_InitVars = { +ActorProfile En_Xc_Profile = { /**/ ACTOR_EN_XC, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 8d7cf097de..ee2fbb4bb5 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 @@ -34,7 +34,7 @@ static ColliderQuadInit sQuadInit = { { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, }; -ActorInit En_Yabusame_Mark_InitVars = { +ActorProfile En_Yabusame_Mark_Profile = { /**/ ACTOR_EN_YABUSAME_MARK, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 c133bde62b..fc1541d8c5 100644 --- a/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c +++ b/src/overlays/actors/ovl_En_Yukabyun/z_en_yukabyun.c @@ -18,7 +18,7 @@ void func_80B43A94(EnYukabyun* this, PlayState* play); void func_80B43AD4(EnYukabyun* this, PlayState* play); void func_80B43B6C(EnYukabyun* this, PlayState* play); -ActorInit En_Yukabyun_InitVars = { +ActorProfile En_Yukabyun_Profile = { /**/ ACTOR_EN_YUKABYUN, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 05ef602b33..a10d0321d2 100644 --- a/src/overlays/actors/ovl_En_Zf/z_en_zf.c +++ b/src/overlays/actors/ovl_En_Zf/z_en_zf.c @@ -99,7 +99,7 @@ static Vec3f sPlatformPositions[] = { static s16 D_80B4A1B0 = 0; static s16 D_80B4A1B4 = 1; -ActorInit En_Zf_InitVars = { +ActorProfile En_Zf_Profile = { /**/ ACTOR_EN_ZF, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 1780cc1c9b..f63480381a 100644 --- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c +++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c @@ -27,7 +27,7 @@ extern CutsceneData D_80B4C5D0[]; #include "z_en_zl1_camera_data.inc.c" -ActorInit En_Zl1_InitVars = { +ActorProfile En_Zl1_Profile = { /**/ ACTOR_EN_ZL1, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 e3b0c516bc..c3867c17f7 100644 --- a/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c +++ b/src/overlays/actors/ovl_En_Zl2/z_en_zl2.c @@ -87,7 +87,7 @@ static EnZl2DrawFunc sDrawFuncs[] = { func_80B525D4, }; -ActorInit En_Zl2_InitVars = { +ActorProfile En_Zl2_Profile = { /**/ ACTOR_EN_ZL2, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 cdc701bdd5..a4d62f84c4 100644 --- a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c +++ b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c @@ -2788,7 +2788,7 @@ void EnZl3_Draw(Actor* thisx, PlayState* play) { sDrawFuncs[this->drawConfig](this, play); } -ActorInit En_Zl3_InitVars = { +ActorProfile En_Zl3_Profile = { /**/ ACTOR_EN_ZL3, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 fb6cbd9ec0..f133f51c2e 100644 --- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c +++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c @@ -58,7 +58,7 @@ void EnZl4_Cutscene(EnZl4* this, PlayState* play); void EnZl4_Idle(EnZl4* this, PlayState* play); void EnZl4_TheEnd(EnZl4* this, PlayState* play); -ActorInit En_Zl4_InitVars = { +ActorProfile En_Zl4_Profile = { /**/ ACTOR_EN_ZL4, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 8b6b591233..c54842fec8 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -299,7 +299,7 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -ActorInit En_Zo_InitVars = { +ActorProfile En_Zo_Profile = { /**/ ACTOR_EN_ZO, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 de1bc675fc..6cfd3dd927 100644 --- a/src/overlays/actors/ovl_En_fHG/z_en_fhg.c +++ b/src/overlays/actors/ovl_En_fHG/z_en_fhg.c @@ -45,7 +45,7 @@ void EnfHG_Damage(EnfHG* this, PlayState* play); void EnfHG_Retreat(EnfHG* this, PlayState* play); void EnfHG_Done(EnfHG* this, PlayState* play); -ActorInit En_fHG_InitVars = { +ActorProfile En_fHG_Profile = { /**/ ACTOR_EN_FHG, /**/ ACTORCAT_BG, /**/ FLAGS, 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 a71164cec4..7117be63a3 100644 --- a/src/overlays/actors/ovl_End_Title/z_end_title.c +++ b/src/overlays/actors/ovl_End_Title/z_end_title.c @@ -14,7 +14,7 @@ void EndTitle_Update(Actor* thisx, PlayState* play); void EndTitle_DrawFull(Actor* thisx, PlayState* play); void EndTitle_DrawNintendoLogo(Actor* thisx, PlayState* play); -ActorInit End_Title_InitVars = { +ActorProfile End_Title_Profile = { /**/ ACTOR_END_TITLE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c index 176632cf27..f3dab36084 100644 --- a/src/overlays/actors/ovl_Fishing/z_fishing.c +++ b/src/overlays/actors/ovl_Fishing/z_fishing.c @@ -11,8 +11,7 @@ #include "ichain.h" #include "terminal.h" -// For retail BSS ordering, the block number of sStreamSfxProjectedPos must be 0. -#pragma increment_block_number 191 +#pragma increment_block_number "gc-eu:190 gc-eu-mq:190 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" #define FLAGS ACTOR_FLAG_4 @@ -131,7 +130,7 @@ typedef enum { #define LINE_SEG_COUNT 200 #define SINKING_LURE_SEG_COUNT 20 -ActorInit Fishing_InitVars = { +ActorProfile Fishing_Profile = { /**/ ACTOR_FISHING, /**/ ACTORCAT_NPC, /**/ FLAGS, @@ -4556,8 +4555,6 @@ void Fishing_DrawPondProps(PlayState* play) { Matrix_Pop(); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_fishing.c", 7805); } 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 f6d21ef419..52545ba6aa 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 @@ -16,7 +16,7 @@ void ItemBHeart_Draw(Actor* thisx, PlayState* play); void func_80B85264(ItemBHeart* this, PlayState* play); -ActorInit Item_B_Heart_InitVars = { +ActorProfile Item_B_Heart_Profile = { /**/ ACTOR_ITEM_B_HEART, /**/ ACTORCAT_MISC, /**/ FLAGS, 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 a1d99a01af..3efe62cc24 100644 --- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -22,7 +22,7 @@ void ItemEtcetera_MoveFireArrowDown(ItemEtcetera* this, PlayState* play); void func_80B85B28(ItemEtcetera* this, PlayState* play); void ItemEtcetera_UpdateFireArrow(ItemEtcetera* this, PlayState* play); -ActorInit Item_Etcetera_InitVars = { +ActorProfile Item_Etcetera_Profile = { /**/ ACTOR_ITEM_ETCETERA, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c index 3935fa1ea8..b93b680a2a 100644 --- a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c +++ b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c @@ -15,7 +15,7 @@ void ItemInbox_Draw(Actor* thisx, PlayState* play); void ItemInbox_Wait(ItemInbox* this, PlayState* play); -ActorInit Item_Inbox_InitVars = { +ActorProfile Item_Inbox_Profile = { /**/ ACTOR_ITEM_INBOX, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 c7394227eb..00d7eab43e 100644 --- a/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c +++ b/src/overlays/actors/ovl_Item_Ocarina/z_item_ocarina.c @@ -22,7 +22,7 @@ void func_80B864EC(ItemOcarina* this, PlayState* play); void func_80B865E0(ItemOcarina* this, PlayState* play); void ItemOcarina_DoNothing(ItemOcarina* this, PlayState* play); -ActorInit Item_Ocarina_InitVars = { +ActorProfile Item_Ocarina_Profile = { /**/ ACTOR_ITEM_OCARINA, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 acb8dbee3c..32587360d0 100644 --- a/src/overlays/actors/ovl_Item_Shield/z_item_shield.c +++ b/src/overlays/actors/ovl_Item_Shield/z_item_shield.c @@ -38,7 +38,7 @@ static ColliderCylinderInit sCylinderInit = { { 15, 15, 0, { 0, 0, 0 } }, }; -ActorInit Item_Shield_InitVars = { +ActorProfile Item_Shield_Profile = { /**/ ACTOR_ITEM_SHIELD, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 2d3053bfc0..d1605484c0 100644 --- a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c +++ b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c @@ -18,7 +18,7 @@ void MagicDark_DiamondDraw(Actor* thisx, PlayState* play); void MagicDark_DimLighting(PlayState* play, f32 intensity); -ActorInit Magic_Dark_InitVars = { +ActorProfile Magic_Dark_Profile = { /**/ ACTOR_MAGIC_DARK, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 e861cc84e0..34accd7558 100644 --- a/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c +++ b/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c @@ -30,7 +30,7 @@ typedef enum { /* 0x04 */ DF_SCREEN_TINT_FINISHED } MagicFireScreenTint; -ActorInit Magic_Fire_InitVars = { +ActorProfile Magic_Fire_Profile = { /**/ ACTOR_MAGIC_FIRE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 38458db6b9..f8a9e829e2 100644 --- a/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c +++ b/src/overlays/actors/ovl_Magic_Wind/z_magic_wind.c @@ -19,7 +19,7 @@ void MagicWind_FadeOut(MagicWind* this, PlayState* play); void MagicWind_WaitAtFullSize(MagicWind* this, PlayState* play); void MagicWind_Grow(MagicWind* this, PlayState* play); -ActorInit Magic_Wind_InitVars = { +ActorProfile Magic_Wind_Profile = { /**/ ACTOR_MAGIC_WIND, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 8c200e3dac..6828028abb 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c @@ -30,7 +30,7 @@ typedef enum { /* 9 */ MIRRAY_GANONSCASTLE_SPIRITTRIAL_DOWNLIGHT } MirRayBeamLocations; -ActorInit Mir_Ray_InitVars = { +ActorProfile Mir_Ray_Profile = { /**/ ACTOR_MIR_RAY, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 7a42022b69..5b5e2c7d7c 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -72,7 +72,7 @@ void ObjBean_WaitForStepOff(ObjBean* this, PlayState* play); static ObjBean* D_80B90E30 = NULL; -ActorInit Obj_Bean_InitVars = { +ActorProfile Obj_Bean_Profile = { /**/ ACTOR_OBJ_BEAN, /**/ ACTORCAT_BG, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c index c908d7c3ff..615793c909 100644 --- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c +++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c @@ -13,7 +13,7 @@ void ObjBlockstop_Init(Actor* thisx, PlayState* play); void ObjBlockstop_Destroy(Actor* thisx, PlayState* play); void ObjBlockstop_Update(Actor* thisx, PlayState* play); -ActorInit Obj_Blockstop_InitVars = { +ActorProfile Obj_Blockstop_Profile = { /**/ ACTOR_OBJ_BLOCKSTOP, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 dc7cd70d92..d2e2aa5eb9 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -18,7 +18,7 @@ void ObjBombiwa_Draw(Actor* thisx, PlayState* play); void ObjBombiwa_Break(ObjBombiwa* this, PlayState* play); -ActorInit Obj_Bombiwa_InitVars = { +ActorProfile Obj_Bombiwa_Profile = { /**/ ACTOR_OBJ_BOMBIWA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 1c071363cf..37ed2432fe 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -20,7 +20,7 @@ void ObjComb_ChooseItemDrop(ObjComb* this, PlayState* play); void ObjComb_SetupWait(ObjComb* this); void ObjComb_Wait(ObjComb* this, PlayState* play); -ActorInit Obj_Comb_InitVars = { +ActorProfile Obj_Comb_Profile = { /**/ ACTOR_OBJ_COMB, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c b/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c index 3d24be0958..e698b55d38 100644 --- a/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c +++ b/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c @@ -16,7 +16,7 @@ void ObjDekujr_Draw(Actor* thisx, PlayState* play); void ObjDekujr_ComeUp(ObjDekujr* this, PlayState* play); -ActorInit Obj_Dekujr_InitVars = { +ActorProfile Obj_Dekujr_Profile = { /**/ ACTOR_OBJ_DEKUJR, /**/ ACTORCAT_NPC, /**/ FLAGS, 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 0cd7062bdf..c1d6507abe 100644 --- a/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c +++ b/src/overlays/actors/ovl_Obj_Elevator/z_obj_elevator.c @@ -19,7 +19,7 @@ void func_80B92C80(ObjElevator* this, PlayState* play); void func_80B92D20(ObjElevator* this); void func_80B92D44(ObjElevator* this, PlayState* play); -ActorInit Obj_Elevator_InitVars = { +ActorProfile Obj_Elevator_Profile = { /**/ ACTOR_OBJ_ELEVATOR, /**/ ACTORCAT_BG, /**/ FLAGS, 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 3eb9e3347d..245325d25d 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -14,7 +14,7 @@ void ObjHamishi_Destroy(Actor* thisx, PlayState* play2); void ObjHamishi_Update(Actor* thisx, PlayState* play); void ObjHamishi_Draw(Actor* thisx, PlayState* play); -ActorInit Obj_Hamishi_InitVars = { +ActorProfile Obj_Hamishi_Profile = { /**/ ACTOR_OBJ_HAMISHI, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 6dea87f6b3..303373ea7a 100644 --- a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c +++ b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c @@ -14,7 +14,7 @@ void ObjHana_Destroy(Actor* thisx, PlayState* play); void ObjHana_Update(Actor* thisx, PlayState* play); void ObjHana_Draw(Actor* thisx, PlayState* play); -ActorInit Obj_Hana_InitVars = { +ActorProfile Obj_Hana_Profile = { /**/ ACTOR_OBJ_HANA, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 602502f9bb..e7e37675a1 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c @@ -21,7 +21,7 @@ void func_80B93D90(ObjHsblock* this); void func_80B93DB0(ObjHsblock* this); void func_80B93E38(ObjHsblock* this); -ActorInit Obj_Hsblock_InitVars = { +ActorProfile Obj_Hsblock_Profile = { /**/ ACTOR_OBJ_HSBLOCK, /**/ ACTORCAT_BG, /**/ FLAGS, 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 736ba66f77..5aa41d15ec 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 @@ -17,7 +17,7 @@ void ObjIcePoly_Draw(Actor* thisx, PlayState* play); void ObjIcePoly_Idle(ObjIcePoly* this, PlayState* play); void ObjIcePoly_Melt(ObjIcePoly* this, PlayState* play); -ActorInit Obj_Ice_Poly_InitVars = { +ActorProfile Obj_Ice_Poly_Profile = { /**/ ACTOR_OBJ_ICE_POLY, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 63b9fb1170..c6c503a806 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -22,7 +22,7 @@ void ObjKibako_Held(ObjKibako* this, PlayState* play); void ObjKibako_SetupThrown(ObjKibako* this); void ObjKibako_Thrown(ObjKibako* this, PlayState* play); -ActorInit Obj_Kibako_InitVars = { +ActorProfile Obj_Kibako_Profile = { /**/ ACTOR_OBJ_KIBAKO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 bfcc4bbf26..231b504b0a 100644 --- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -17,7 +17,7 @@ void ObjKibako2_Draw(Actor* thisx, PlayState* play); void ObjKibako2_Idle(ObjKibako2* this, PlayState* play); void ObjKibako2_Kill(ObjKibako2* this, PlayState* play); -ActorInit Obj_Kibako2_InitVars = { +ActorProfile Obj_Kibako2_Profile = { /**/ ACTOR_OBJ_KIBAKO2, /**/ ACTORCAT_BG, /**/ FLAGS, 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 52859a628c..f51118f3cd 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -24,7 +24,7 @@ void ObjLift_Wait(ObjLift* this, PlayState* play); void ObjLift_Shake(ObjLift* this, PlayState* play); void ObjLift_Fall(ObjLift* this, PlayState* play); -ActorInit Obj_Lift_InitVars = { +ActorProfile Obj_Lift_Profile = { /**/ ACTOR_OBJ_LIFT, /**/ ACTORCAT_BG, /**/ FLAGS, 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 bb3bb56331..0ed3b55501 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -35,7 +35,7 @@ void ObjLightswitch_DisappearDelay(ObjLightswitch* this, PlayState* play); void ObjLightswitch_SetupDisappear(ObjLightswitch* this); void ObjLightswitch_Disappear(ObjLightswitch* this, PlayState* play); -ActorInit Obj_Lightswitch_InitVars = { +ActorProfile Obj_Lightswitch_Profile = { /**/ ACTOR_OBJ_LIGHTSWITCH, /**/ ACTORCAT_SWITCH, /**/ FLAGS, 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 2e4abf070e..aebbdc3d28 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c @@ -15,7 +15,7 @@ void ObjMakekinsuta_Update(Actor* thisx, PlayState* play); void func_80B98320(ObjMakekinsuta* this, PlayState* play); void ObjMakekinsuta_DoNothing(ObjMakekinsuta* this, PlayState* play); -ActorInit Obj_Makekinsuta_InitVars = { +ActorProfile Obj_Makekinsuta_Profile = { /**/ ACTOR_OBJ_MAKEKINSUTA, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 98f5d45fbc..234c012c35 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -13,7 +13,7 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play); void ObjMakeoshihiki_Draw(Actor* thisx, PlayState* play); -ActorInit Obj_Makeoshihiki_InitVars = { +ActorProfile Obj_Makeoshihiki_Profile = { /**/ ACTOR_OBJ_MAKEOSHIHIKI, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 7a6f06f9d0..e8c297d3a2 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c @@ -19,7 +19,7 @@ void ObjMure_ActiveState(ObjMure* this, PlayState* play); s32 ObjMure_GetMaxChildSpawns(ObjMure* this); -ActorInit Obj_Mure_InitVars = { +ActorProfile Obj_Mure_Profile = { /**/ ACTOR_OBJ_MURE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 21c3ca6eb4..9cb8cac7d8 100644 --- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c +++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c @@ -28,7 +28,7 @@ void ObjMure2_SetupWait(ObjMure2* this); void func_80B9A658(ObjMure2* this); void func_80B9A6E8(ObjMure2* this); -ActorInit Obj_Mure2_InitVars = { +ActorProfile Obj_Mure2_Profile = { /**/ ACTOR_OBJ_MURE2, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 a535314609..ad4801d1f2 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -19,7 +19,7 @@ void func_80B9AF64(ObjMure3* this, PlayState* play); void func_80B9AFEC(ObjMure3* this); void func_80B9AFFC(ObjMure3* this, PlayState* play); -ActorInit Obj_Mure3_InitVars = { +ActorProfile Obj_Mure3_Profile = { /**/ ACTOR_OBJ_MURE3, /**/ ACTORCAT_BG, /**/ FLAGS, 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 6243acb0bd..d6e825e902 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -24,7 +24,7 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* play); void ObjOshihiki_SetupFall(ObjOshihiki* this, PlayState* play); void ObjOshihiki_Fall(ObjOshihiki* this, PlayState* play); -ActorInit Obj_Oshihiki_InitVars = { +ActorProfile Obj_Oshihiki_Profile = { /**/ ACTOR_OBJ_OSHIHIKI, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 1f52d5c886..3b33a5ac99 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -15,7 +15,7 @@ void ObjRoomtimer_Update(Actor* thisx, PlayState* play); void func_80B9D054(ObjRoomtimer* this, PlayState* play); void func_80B9D0B0(ObjRoomtimer* this, PlayState* play); -ActorInit Obj_Roomtimer_InitVars = { +ActorProfile Obj_Roomtimer_Profile = { /**/ ACTOR_OBJ_ROOMTIMER, /**/ ACTORCAT_ENEMY, /**/ FLAGS, 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 23c0e243b9..fcaf50a340 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -50,7 +50,7 @@ void ObjSwitch_CrystalOn(ObjSwitch* this, PlayState* play); void ObjSwitch_CrystalTurnOffInit(ObjSwitch* this); void ObjSwitch_CrystalTurnOff(ObjSwitch* this, PlayState* play); -ActorInit Obj_Switch_InitVars = { +ActorProfile Obj_Switch_Profile = { /**/ ACTOR_OBJ_SWITCH, /**/ ACTORCAT_SWITCH, /**/ FLAGS, 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 7ea6b73d30..81b969a328 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -16,7 +16,7 @@ void ObjSyokudai_Destroy(Actor* thisx, PlayState* play); void ObjSyokudai_Update(Actor* thisx, PlayState* play2); void ObjSyokudai_Draw(Actor* thisx, PlayState* play); -ActorInit Obj_Syokudai_InitVars = { +ActorProfile Obj_Syokudai_Profile = { /**/ ACTOR_OBJ_SYOKUDAI, /**/ ACTORCAT_PROP, /**/ FLAGS, @@ -283,8 +283,6 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { } flameScale *= 0.0027f; - if (1) {} - Gfx_SetupDL_25Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, 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 a081e363c2..234d903d2f 100644 --- a/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c +++ b/src/overlays/actors/ovl_Obj_Timeblock/z_obj_timeblock.c @@ -25,7 +25,7 @@ void ObjTimeblock_Normal(ObjTimeblock* this, PlayState* play); void ObjTimeblock_AltBehaviorVisible(ObjTimeblock* this, PlayState* play); void ObjTimeblock_AltBehaviourNotVisible(ObjTimeblock* this, PlayState* play); -ActorInit Obj_Timeblock_InitVars = { +ActorProfile Obj_Timeblock_Profile = { /**/ ACTOR_OBJ_TIMEBLOCK, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -152,13 +152,13 @@ u8 ObjTimeblock_PlayerIsInRange(ObjTimeblock* this, PlayState* play) { } if (this->dyna.actor.xzDistToPlayer <= sRanges[(this->dyna.actor.params >> 11) & 7]) { - Vec3f distance; + Vec3f playerRelativePos; f32 blockSize; - func_8002DBD0(&this->dyna.actor, &distance, &GET_PLAYER(play)->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &playerRelativePos, &GET_PLAYER(play)->actor.world.pos); blockSize = this->dyna.actor.scale.x * 50.0f + 6.0f; // Return true if player's xz position is not inside the block - if (blockSize < fabsf(distance.x) || blockSize < fabsf(distance.z)) { + if (blockSize < fabsf(playerRelativePos.x) || blockSize < fabsf(playerRelativePos.z)) { return true; } } 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 7c05c22fa5..d19818c246 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -36,7 +36,7 @@ static s16 D_80BA1B54 = 0; static s16 D_80BA1B58 = 0; static s16 D_80BA1B5C = 0; -ActorInit Obj_Tsubo_InitVars = { +ActorProfile Obj_Tsubo_Profile = { /**/ ACTOR_OBJ_TSUBO, /**/ ACTORCAT_PROP, /**/ FLAGS, 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 73919d7d30..76071db8fe 100644 --- a/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c +++ b/src/overlays/actors/ovl_Obj_Warp2block/z_obj_warp2block.c @@ -28,7 +28,7 @@ void func_80BA24F8(ObjWarp2block* this, PlayState* play); void func_80BA2600(ObjWarp2block* this); void func_80BA2610(ObjWarp2block* this, PlayState* play); -ActorInit Obj_Warp2block_InitVars = { +ActorProfile Obj_Warp2block_Profile = { /**/ ACTOR_OBJ_WARP2BLOCK, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -86,14 +86,14 @@ s32 func_80BA1ECC(ObjWarp2block* this, PlayState* play) { if ((this->dyna.actor.xzDistToPlayer <= sDistances[(((this->dyna.actor.params >> 0xB) & 7))]) || (temp_a3->xzDistToPlayer <= sDistances[(((temp_a3->params >> 0xB) & 7))])) { - func_8002DBD0(&this->dyna.actor, &sp20, &player->actor.world.pos); + Actor_WorldToActorCoords(&this->dyna.actor, &sp20, &player->actor.world.pos); temp_f2 = (this->dyna.actor.scale.x * 50.0f) + 6.0f; if (!(temp_f2 < fabsf(sp20.x)) && !(temp_f2 < fabsf(sp20.z))) { return 0; } - func_8002DBD0(temp_a3, &sp20, &player->actor.world.pos); + Actor_WorldToActorCoords(temp_a3, &sp20, &player->actor.world.pos); temp_f2 = (temp_a3->scale.x * 50.0f) + 6.0f; if (!(temp_f2 < fabsf(sp20.x)) && !(temp_f2 < fabsf(sp20.z))) { 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 5ce4d3b6b6..2bf024ec2b 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -43,7 +43,7 @@ static void* D_80BA5900[] = { gEffSunGraveSpark5Tex, gEffSunGraveSpark6Tex, gEffSunGraveSpark7Tex, gEffSunGraveSpark8Tex, }; -ActorInit Object_Kankyo_InitVars = { +ActorProfile Object_Kankyo_Profile = { /**/ ACTOR_OBJECT_KANKYO, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -692,7 +692,6 @@ void ObjectKankyo_DrawSnow(Actor* thisx, PlayState* play2) { break; } - if (1) {} if (1) {} Matrix_Translate(this->effects[i].base.x + this->effects[i].pos.x, this->effects[i].base.y + this->effects[i].pos.y, @@ -860,8 +859,6 @@ void ObjectKankyo_DrawSunGraveSpark(Actor* thisx, PlayState* play2) { (u8)(255 * this->effects[0].amplitude), 255 - (u8)(255 * this->effects[0].amplitude), this->effects[0].alpha); - if (1) {} - Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_object_kankyo.c", 1416), G_MTX_LOAD); 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 4220f879e4..671325b5b0 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -16,7 +16,7 @@ void OceffSpot_Draw(Actor* thisx, PlayState* play); void OceffSpot_GrowCylinder(OceffSpot* this, PlayState* play); -ActorInit Oceff_Spot_InitVars = { +ActorProfile Oceff_Spot_Profile = { /**/ ACTOR_OCEFF_SPOT, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 0df7ced428..8babfbf40b 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c @@ -18,7 +18,7 @@ void OceffStorm_Draw2(Actor* thisx, PlayState* play); void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play); void OceffStorm_UnkAction(OceffStorm* this, PlayState* play); -ActorInit Oceff_Storm_InitVars = { +ActorProfile Oceff_Storm_Profile = { /**/ ACTOR_OCEFF_STORM, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 b4a696fecd..c717123538 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c +++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c @@ -14,7 +14,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play); void OceffWipe_Update(Actor* thisx, PlayState* play); void OceffWipe_Draw(Actor* thisx, PlayState* play); -ActorInit Oceff_Wipe_InitVars = { +ActorProfile Oceff_Wipe_Profile = { /**/ ACTOR_OCEFF_WIPE, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, @@ -124,7 +124,5 @@ void OceffWipe_Draw(Actor* thisx, PlayState* play) { 32, 1, 0 - scroll, scroll * (-2), 32, 32)); gSPDisplayList(POLY_XLU_DISP++, sFrustumDL); - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_oceff_wipe.c", 398); } 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 1f659aa1d3..6b1419f363 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -14,7 +14,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play); void OceffWipe2_Update(Actor* thisx, PlayState* play); void OceffWipe2_Draw(Actor* thisx, PlayState* play); -ActorInit Oceff_Wipe2_InitVars = { +ActorProfile Oceff_Wipe2_Profile = { /**/ ACTOR_OCEFF_WIPE2, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 f9fdd00cb5..cded21fce0 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c +++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c @@ -14,7 +14,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play); void OceffWipe3_Update(Actor* thisx, PlayState* play); void OceffWipe3_Draw(Actor* thisx, PlayState* play); -ActorInit Oceff_Wipe3_InitVars = { +ActorProfile Oceff_Wipe3_Profile = { /**/ ACTOR_OCEFF_WIPE3, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 954992a60f..2d05d06bf4 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c +++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c @@ -14,7 +14,7 @@ void OceffWipe4_Destroy(Actor* thisx, PlayState* play); void OceffWipe4_Update(Actor* thisx, PlayState* play); void OceffWipe4_Draw(Actor* thisx, PlayState* play); -ActorInit Oceff_Wipe4_InitVars = { +ActorProfile Oceff_Wipe4_Profile = { /**/ ACTOR_OCEFF_WIPE4, /**/ ACTORCAT_ITEMACTION, /**/ FLAGS, 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 a6afa9baa9..c1082be5b7 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -21,7 +21,7 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play); void ShotSun_UpdateFairySpawner(ShotSun* this, PlayState* play); void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play); -ActorInit Shot_Sun_InitVars = { +ActorProfile Shot_Sun_Profile = { /**/ ACTOR_SHOT_SUN, /**/ ACTORCAT_PROP, /**/ FLAGS, diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index aac7839a9f..b8d1a8700e 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -354,22 +354,19 @@ void Player_Action_CsAction(Player* this, PlayState* play); // .bss part 1 -// For retail BSS ordering, the block number of sDogSpawnPos in Player_Update -// must be between 0 and 53 inclusive. - -// TODO: There's probably a way to do this 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 30 +#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" static s32 D_80858AA0; -#pragma increment_block_number 250 +// 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:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" static s32 D_80858AA4; static Vec3f sInteractWallCheckResult; static Input* sControlInput; -#pragma increment_block_number 50 +#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" // .data @@ -9756,7 +9753,7 @@ void Player_Action_80846120(Player* this, PlayState* play) { this->heldActor = &heavyBlock->dyna.actor; this->actor.child = &heavyBlock->dyna.actor; heavyBlock->dyna.actor.parent = &this->actor; - func_8002DBD0(&heavyBlock->dyna.actor, &heavyBlock->unk_164, &this->leftHandPos); + Actor_WorldToActorCoords(&heavyBlock->dyna.actor, &heavyBlock->unk_164, &this->leftHandPos); } else if (LinkAnimation_OnFrame(&this->skelAnime, 229.0f)) { Actor* heldActor = this->heldActor; @@ -11613,8 +11610,6 @@ void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, } } - if (1) {} - CLOSE_DISPS(play->state.gfxCtx, "../z_player.c", 19328); } diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c index dc5eae3c5d..de5b094525 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c +++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c @@ -24,7 +24,7 @@ u32 EffectSsBlast_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsBlast_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Blast_InitVars = { +EffectSsProfile Effect_Ss_Blast_Profile = { EFFECT_SS_BLAST, EffectSsBlast_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c b/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c index 5edefefc22..4fd99e3626 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.c @@ -16,7 +16,7 @@ u32 EffectSsBomb_Init(PlayState* play, u32 index, EffectSs* this, void* initPara void EffectSsBomb_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsBomb_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Bomb_InitVars = { +EffectSsProfile Effect_Ss_Bomb_Profile = { EFFECT_SS_BOMB, EffectSsBomb_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c index 34572a9787..34b9546fce 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c @@ -24,7 +24,7 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this); void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this); void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Bomb2_InitVars = { +EffectSsProfile Effect_Ss_Bomb2_Profile = { EFFECT_SS_BOMB2, EffectSsBomb2_Init, }; @@ -94,8 +94,6 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this) { } if (1) {} - if (1) {} - CLOSE_DISPS(gfxCtx, "../z_eff_ss_bomb2.c", 345); } @@ -160,8 +158,6 @@ void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this) { } if (1) {} - if (1) {} - CLOSE_DISPS(gfxCtx, "../z_eff_ss_bomb2.c", 456); } diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c index 8f6eb2e9fb..70fd02ea01 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c @@ -13,7 +13,7 @@ u32 EffectSsBubble_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsBubble_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Bubble_InitVars = { +EffectSsProfile Effect_Ss_Bubble_Profile = { EFFECT_SS_BUBBLE, EffectSsBubble_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index 1ba2d700ea..5b178002d1 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -22,7 +22,7 @@ u32 EffectSsDFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsDFire_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_D_Fire_InitVars = { +EffectSsProfile Effect_Ss_D_Fire_Profile = { EFFECT_SS_D_FIRE, EffectSsDFire_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c index 167bb6f14d..56b7b4db36 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c @@ -24,7 +24,7 @@ u32 EffectSsDeadDb_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsDeadDb_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsDeadDb_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Dead_Db_InitVars = { +EffectSsProfile Effect_Ss_Dead_Db_Profile = { EFFECT_SS_DEAD_DB, EffectSsDeadDb_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c index dff7cea06f..ac0df1b437 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c @@ -23,7 +23,7 @@ u32 EffectSsDeadDd_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsDeadDd_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsDeadDd_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Dead_Dd_InitVars = { +EffectSsProfile Effect_Ss_Dead_Dd_Profile = { EFFECT_SS_DEAD_DD, EffectSsDeadDd_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c index 002cda2539..780a729c6a 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c @@ -21,7 +21,7 @@ u32 EffectSsDeadDs_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsDeadDs_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsDeadDs_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Dead_Ds_InitVars = { +EffectSsProfile Effect_Ss_Dead_Ds_Profile = { EFFECT_SS_DEAD_DS, EffectSsDeadDs_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.c index dae17d0ff2..b1c92ec972 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.c @@ -12,7 +12,7 @@ u32 EffectSsDeadSound_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx); void EffectSsDeadSound_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Dead_Sound_InitVars = { +EffectSsProfile Effect_Ss_Dead_Sound_Profile = { EFFECT_SS_DEAD_SOUND, EffectSsDeadSound_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c index 80a3d559a3..fb7db2f3ff 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c @@ -26,7 +26,7 @@ void EffectSsDtBubble_Update(PlayState* play, u32 index, EffectSs* this); static Color_RGBA8 sPrimColors[] = { { 255, 255, 100, 255 }, { 150, 255, 255, 255 }, { 100, 255, 255, 255 } }; static Color_RGBA8 sEnvColors[] = { { 170, 0, 0, 255 }, { 0, 100, 0, 255 }, { 0, 0, 255, 255 } }; -EffectSsInit Effect_Ss_Dt_Bubble_InitVars = { +EffectSsProfile Effect_Ss_Dt_Bubble_Profile = { EFFECT_SS_DT_BUBBLE, EffectSsDtBubble_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c index 62dfc4472d..cdb56fc74e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c @@ -26,7 +26,7 @@ void EffectSsDust_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsDust_UpdateFire(PlayState* play, u32 index, EffectSs* this); void EffectSsDust_Draw(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Dust_InitVars = { +EffectSsProfile Effect_Ss_Dust_Profile = { EFFECT_SS_DUST, EffectSsDust_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index 302941ca49..0845e34af9 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -22,7 +22,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsEnFire_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsEnFire_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_En_Fire_InitVars = { +EffectSsProfile Effect_Ss_En_Fire_Profile = { EFFECT_SS_EN_FIRE, EffectSsEnFire_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 16ea95d8de..a1c117bc3e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -26,7 +26,7 @@ void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsEnIce_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_En_Ice_InitVars = { +EffectSsProfile Effect_Ss_En_Ice_Profile = { EFFECT_SS_EN_ICE, EffectSsEnIce_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index 471bed5f7b..0b9ff7c67e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -18,7 +18,7 @@ void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this); static s16 sScores[] = { 30, 60, 100 }; -EffectSsInit Effect_Ss_Extra_InitVars = { +EffectSsProfile Effect_Ss_Extra_Profile = { EFFECT_SS_EXTRA, EffectSsExtra_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c b/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c index c3e7088f1b..296c2f73b2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fcircle/z_eff_ss_fcircle.c @@ -17,7 +17,7 @@ u32 EffectSsFcircle_Init(PlayState* play, u32 index, EffectSs* this, void* initP void EffectSsFcircle_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsFcircle_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Fcircle_InitVars = { +EffectSsProfile Effect_Ss_Fcircle_Profile = { EFFECT_SS_FCIRCLE, EffectSsFcircle_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index c427ddca6b..c637e1a9b8 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -20,7 +20,7 @@ void EffectSsFhgFlash_UpdateLightBall(PlayState* play, u32 index, EffectSs* this void EffectSsFhgFlash_DrawShock(PlayState* play, u32 index, EffectSs* this); void EffectSsFhgFlash_UpdateShock(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Fhg_Flash_InitVars = { +EffectSsProfile Effect_Ss_Fhg_Flash_Profile = { EFFECT_SS_FHG_FLASH, EffectSsFhgFlash_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c index a08d8af131..1fab3c757b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c @@ -25,7 +25,7 @@ u32 EffectSsFireTail_Init(PlayState* play, u32 index, EffectSs* this, void* init void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsFireTail_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Fire_Tail_InitVars = { +EffectSsProfile Effect_Ss_Fire_Tail_Profile = { EFFECT_SS_FIRE_TAIL, EffectSsFireTail_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c index d82c9cb417..351fadab7c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c @@ -11,7 +11,7 @@ u32 EffectSsGFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsGFire_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsGFire_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_G_Fire_InitVars = { +EffectSsProfile Effect_Ss_G_Fire_Profile = { EFFECT_SS_G_FIRE, EffectSsGFire_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c b/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c index 4e9dc378af..f93bb0e7d6 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c @@ -11,7 +11,7 @@ u32 EffectSsGMagma_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsGMagma_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsGMagma_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_G_Magma_InitVars = { +EffectSsProfile Effect_Ss_G_Magma_Profile = { EFFECT_SS_G_MAGMA, EffectSsGMagma_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Magma2/z_eff_ss_g_magma2.c b/src/overlays/effects/ovl_Effect_Ss_G_Magma2/z_eff_ss_g_magma2.c index e3eaaa136a..eb0ae6122c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Magma2/z_eff_ss_g_magma2.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Magma2/z_eff_ss_g_magma2.c @@ -32,7 +32,7 @@ static void* sTextures[] = { object_kingdodongo_Tex_0308E0, }; -EffectSsInit Effect_Ss_G_Magma2_InitVars = { +EffectSsProfile Effect_Ss_G_Magma2_Profile = { EFFECT_SS_G_MAGMA2, EffectSsGMagma2_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c index c629cecbad..48a2eec4f0 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c @@ -24,7 +24,7 @@ u32 EffectSsGRipple_Init(PlayState* play, u32 index, EffectSs* this, void* initP void EffectSsGRipple_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsGRipple_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_G_Ripple_InitVars = { +EffectSsProfile Effect_Ss_G_Ripple_Profile = { EFFECT_SS_G_RIPPLE, EffectSsGRipple_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c index 0b7c5cdd9f..f43f4f3a52 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c @@ -24,7 +24,7 @@ void EffectSsGSpk_Update(PlayState* play, u32 index, EffectSs* this); void EffectSsGSpk_UpdateNoAccel(PlayState* play, u32 index, EffectSs* this); void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_G_Spk_InitVars = { +EffectSsProfile Effect_Ss_G_Spk_Profile = { EFFECT_SS_G_SPK, EffectSsGSpk_Init, }; @@ -101,8 +101,6 @@ void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this) { } if (1) {} - if (1) {} - CLOSE_DISPS(gfxCtx, "../z_eff_ss_g_spk.c", 255); } diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c index fe65984f59..4e7c26308c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c @@ -15,7 +15,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsGSplash_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_G_Splash_InitVars = { +EffectSsProfile Effect_Ss_G_Splash_Profile = { EFFECT_SS_G_SPLASH, EffectSsGSplash_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c index 2085eff571..dac0311068 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c @@ -20,7 +20,7 @@ void EffectSsHahen_DrawGray(PlayState* play, u32 index, EffectSs* this); void EffectSsHahen_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsHahen_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Hahen_InitVars = { +EffectSsProfile Effect_Ss_Hahen_Profile = { EFFECT_SS_HAHEN, EffectSsHahen_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c index 87e1ab5194..8a67d26faf 100644 --- a/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c +++ b/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c @@ -36,7 +36,7 @@ static void* sTextures[] = { gEffHitMark7Tex, gEffHitMark8Tex, }; -EffectSsInit Effect_Ss_HitMark_InitVars = { +EffectSsProfile Effect_Ss_HitMark_Profile = { EFFECT_SS_HITMARK, EffectSsHitMark_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c index 3a1387276b..6c05462586 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c @@ -17,7 +17,7 @@ u32 EffectSsIcePiece_Init(PlayState* play, u32 index, EffectSs* this, void* init void EffectSsIcePiece_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsIcePiece_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Ice_Piece_InitVars = { +EffectSsProfile Effect_Ss_Ice_Piece_Profile = { EFFECT_SS_ICE_PIECE, EffectSsIcePiece_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c index 790d157a71..5801220095 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c @@ -15,7 +15,7 @@ u32 EffectSsIceSmoke_Init(PlayState* play, u32 index, EffectSs* this, void* init void EffectSsIceSmoke_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsIceSmoke_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Ice_Smoke_InitVars = { +EffectSsProfile Effect_Ss_Ice_Smoke_Profile = { EFFECT_SS_ICE_SMOKE, EffectSsIceSmoke_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c index 5a613a2f84..00371cf3c9 100644 --- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c @@ -18,7 +18,7 @@ u32 EffectSsKFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsKFire_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsKFire_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_K_Fire_InitVars = { +EffectSsProfile Effect_Ss_K_Fire_Profile = { EFFECT_SS_K_FIRE, EffectSsKFire_Init, }; 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 29c243f689..d861f234a4 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 @@ -26,7 +26,7 @@ void EffectSsKakera_Update(PlayState* play, u32 index, EffectSs* this); void func_809A9BA8(EffectSs* this, PlayState* play); -EffectSsInit Effect_Ss_Kakera_InitVars = { +EffectSsProfile Effect_Ss_Kakera_Profile = { EFFECT_SS_KAKERA, EffectSsKakera_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c index 09f9e79179..5973ca9e1e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c +++ b/src/overlays/effects/ovl_Effect_Ss_KiraKira/z_eff_ss_kirakira.c @@ -27,7 +27,7 @@ void func_809AABF0(PlayState* play, u32 index, EffectSs* this); void func_809AACAC(PlayState* play, u32 index, EffectSs* this); void func_809AAD6C(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_KiraKira_InitVars = { +EffectSsProfile Effect_Ss_KiraKira_Profile = { EFFECT_SS_KIRAKIRA, EffectSsKiraKira_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c index 14c5389e42..0e2560e34f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c +++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c @@ -24,7 +24,7 @@ u32 EffectSsLightning_Init(PlayState* play, u32 index, EffectSs* this, void* ini void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsLightning_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Lightning_InitVars = { +EffectSsProfile Effect_Ss_Lightning_Profile = { EFFECT_SS_LIGHTNING, EffectSsLightning_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c index 5ee3a70cb8..f22efbbfe2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c @@ -23,7 +23,7 @@ u32 EffectSsSibuki_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsSibuki_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsSibuki_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Sibuki_InitVars = { +EffectSsProfile Effect_Ss_Sibuki_Profile = { EFFECT_SS_SIBUKI, EffectSsSibuki_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c index ae32c1befc..4fbb881e02 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki2/z_eff_ss_sibuki2.c @@ -22,7 +22,7 @@ u32 EffectSsSibuki2_Init(PlayState* play, u32 index, EffectSs* this, void* initP void EffectSsSibuki2_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsSibuki2_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Sibuki2_InitVars = { +EffectSsProfile Effect_Ss_Sibuki2_Profile = { EFFECT_SS_SIBUKI2, EffectSsSibuki2_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c index 1667ac8983..ed1d5edccf 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c +++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c @@ -11,7 +11,7 @@ u32 EffectSsSolderSrchBall_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx); void EffectSsSolderSrchBall_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Solder_Srch_Ball_InitVars = { +EffectSsProfile Effect_Ss_Solder_Srch_Ball_Profile = { EFFECT_SS_SOLDER_SRCH_BALL, EffectSsSolderSrchBall_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index 5a5362bb45..b3dc6e8a40 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -15,7 +15,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsStick_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Stick_InitVars = { +EffectSsProfile Effect_Ss_Stick_Profile = { EFFECT_SS_STICK, EffectSsStick_Init, }; diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c index 45846446fc..29901a3874 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c @@ -13,7 +13,7 @@ u32 EffectSsStone1_Init(PlayState* play, u32 index, EffectSs* this, void* initPa void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this); void EffectSsStone1_Update(PlayState* play, u32 index, EffectSs* this); -EffectSsInit Effect_Ss_Stone1_InitVars = { +EffectSsProfile Effect_Ss_Stone1_Profile = { EFFECT_SS_STONE1, EffectSsStone1_Init, }; diff --git a/src/overlays/gamestates/ovl_file_choose/file_select.h b/src/overlays/gamestates/ovl_file_choose/file_select.h index b4d0db5b24..15f78f1437 100644 --- a/src/overlays/gamestates/ovl_file_choose/file_select.h +++ b/src/overlays/gamestates/ovl_file_choose/file_select.h @@ -157,7 +157,13 @@ typedef enum { typedef enum { /* 0 */ FS_CHAR_PAGE_HIRA, /* 1 */ FS_CHAR_PAGE_KATA, - /* 2 */ FS_CHAR_PAGE_ENG + /* 2 */ FS_CHAR_PAGE_ENG, + /* 3 */ FS_CHAR_PAGE_HIRA_TO_KATA, + /* 4 */ FS_CHAR_PAGE_KATA_TO_HIRA, + /* 5 */ FS_CHAR_PAGE_HIRA_TO_ENG, + /* 6 */ FS_CHAR_PAGE_ENG_TO_HIRA, + /* 7 */ FS_CHAR_PAGE_KATA_TO_ENG, + /* 8 */ FS_CHAR_PAGE_ENG_TO_KATA } CharPage; typedef enum { @@ -214,6 +220,4 @@ void FileSelect_DrawOptions(GameState* thisx); void FileSelect_DrawNameEntry(GameState* thisx); void FileSelect_DrawCharacter(GraphicsContext* gfxCtx, void* texture, s16 vtx); -extern s16 D_808123F0[]; - #endif diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index b17e56ebb5..535e9650be 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -189,7 +189,16 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->configMode = CM_ROTATE_TO_NAME_ENTRY; this->kbdButton = FS_KBD_BTN_NONE; + +#if OOT_NTSC + this->charPage = FS_CHAR_PAGE_HIRA; + if (gSaveContext.language != LANGUAGE_JPN) { + this->charPage = FS_CHAR_PAGE_ENG; + } +#else this->charPage = FS_CHAR_PAGE_ENG; +#endif + this->kbdX = 0; this->kbdY = 0; this->charIndex = 0; @@ -224,7 +233,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) { this->nextTitleLabel = FS_TITLE_ERASE_FILE; } else { this->configMode = CM_MAIN_TO_OPTIONS; - this->kbdButton = 0; + this->kbdButton = FS_KBD_BTN_HIRA; this->kbdX = 0; this->kbdY = 0; this->charBgAlpha = 0; @@ -801,6 +810,11 @@ static s16 sQuestItemFlags[] = { QUEST_KOKIRI_EMERALD, QUEST_GORON_RUBY, QUEST_ZORA_SAPPHIRE, QUEST_MEDALLION_FOREST, QUEST_MEDALLION_FIRE, QUEST_MEDALLION_WATER, QUEST_MEDALLION_SPIRIT, QUEST_MEDALLION_SHADOW, QUEST_MEDALLION_LIGHT, }; + +#if OOT_NTSC && OOT_VERSION < OOT_GC_JP_CE +static void* sSaveXTextures[] = { gFileSelSaveXJPNTex, gFileSelSaveXENGTex }; +#endif + static s16 sNamePrimColors[2][3] = { { 255, 255, 255 }, { 100, 100, 100 } }; static void* sHeartTextures[] = { gHeartFullTex, gDefenseHeartFullTex }; static s16 sHeartPrimColors[2][3] = { { 255, 70, 50 }, { 200, 0, 0 } }; @@ -1732,9 +1746,11 @@ void FileSelect_Main(GameState* thisx) { void FileSelect_InitContext(GameState* thisx) { FileSelectState* this = (FileSelectState*)thisx; EnvironmentContext* envCtx = &this->envCtx; +#if OOT_PAL SramContext* sramCtx = &this->sramCtx; +#endif - Sram_Alloc(&this->state, sramCtx); + Sram_Alloc(&this->state, &this->sramCtx); ZREG(7) = 32; ZREG(8) = 22; @@ -1891,6 +1907,7 @@ void FileSelect_InitContext(GameState* thisx) { this->n64ddFlags[0] = this->n64ddFlags[1] = this->n64ddFlags[2] = this->defense[0] = this->defense[1] = this->defense[2] = 0; +#if OOT_PAL SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ); gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE]; @@ -1898,6 +1915,7 @@ void FileSelect_InitContext(GameState* thisx) { if (gSaveContext.language >= LANGUAGE_MAX) { sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language = LANGUAGE_ENG; } +#endif } void FileSelect_Destroy(GameState* thisx) { diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c index b6f452546b..f369ce7f32 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset.c @@ -3,6 +3,31 @@ #include "assets/textures/title_static/title_static.h" #include "assets/overlays/ovl_file_choose/ovl_file_choose.h" +void FileSelect_DrawCharacter(GraphicsContext* gfxCtx, void* texture, s16 vtx) { + OPEN_DISPS(gfxCtx, "../z_file_nameset_PAL.c", 110); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_I, 16, 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); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + CLOSE_DISPS(gfxCtx, "../z_file_nameset_PAL.c", 119); +} + +#if OOT_NTSC +void FileSelect_DrawCharacterTransition(GraphicsContext* gfxCtx, void* texture1, void* texture2, s16 vtx) { + OPEN_DISPS(gfxCtx, "", 0); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture1, G_IM_FMT_I, 16, 16, 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); + gDPLoadMultiBlock_4b(POLY_OPA_DISP++, texture2, 0x0080, 1, G_IM_FMT_I, 16, 16, 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); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + CLOSE_DISPS(gfxCtx, "", 0); +} +#endif + +#if OOT_PAL static s16 D_808124C0[] = { 0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0002, 0x0000, 0x0001, 0x0001, 0x0002, 0x0001, 0x0001, 0x0004, 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0000, 0x0002, 0x0000, 0x0001, @@ -18,20 +43,10 @@ static s16 D_80812544[] = { 0x0002, 0x0002, 0x0001, 0x0001, 0x0002, 0x0002, 0x0003, 0x0002, 0x0002, 0x0000, 0x0002, 0x0002, 0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0003, }; - -void FileSelect_DrawCharacter(GraphicsContext* gfxCtx, void* texture, s16 vtx) { - OPEN_DISPS(gfxCtx, "../z_file_nameset_PAL.c", 110); - - gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_I, 16, 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); - gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); - - CLOSE_DISPS(gfxCtx, "../z_file_nameset_PAL.c", 119); -} +#endif void FileSelect_SetKeyboardVtx(GameState* thisx) { FileSelectState* this = (FileSelectState*)thisx; - s16 val; s16 phi_t2; s16 phi_t0; s16 phi_t3; @@ -43,14 +58,49 @@ void FileSelect_SetKeyboardVtx(GameState* thisx) { phi_s1 = 0x26; +#if OOT_NTSC for (phi_t2 = 0, phi_s2 = 0, phi_t3 = 0; phi_s2 < 5; phi_s2++) { - phi_t0 = -0x60; + for (phi_t0 = -0x60, phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4) { + this->keyboardVtx[phi_t3].v.ob[0] = this->keyboardVtx[phi_t3 + 2].v.ob[0] = phi_t0; + this->keyboardVtx[phi_t3 + 1].v.ob[0] = this->keyboardVtx[phi_t3 + 3].v.ob[0] = phi_t0 + 12; - for (phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4, phi_t2++) { - //! @bug D_80812544 is accessed out of bounds when drawing the empty space character (value of 64). Under - //! normal circumstances it reads a halfword from sNameLabelTextures. + this->keyboardVtx[phi_t3].v.ob[1] = this->keyboardVtx[phi_t3 + 1].v.ob[1] = phi_s1; + + this->keyboardVtx[phi_t3 + 2].v.ob[1] = this->keyboardVtx[phi_t3 + 3].v.ob[1] = phi_s1 - 12; + + this->keyboardVtx[phi_t3].v.ob[2] = this->keyboardVtx[phi_t3 + 1].v.ob[2] = + this->keyboardVtx[phi_t3 + 2].v.ob[2] = this->keyboardVtx[phi_t3 + 3].v.ob[2] = 0; + + this->keyboardVtx[phi_t3].v.flag = this->keyboardVtx[phi_t3 + 1].v.flag = + this->keyboardVtx[phi_t3 + 2].v.flag = this->keyboardVtx[phi_t3 + 3].v.flag = 0; + + this->keyboardVtx[phi_t3].v.tc[0] = this->keyboardVtx[phi_t3].v.tc[1] = + this->keyboardVtx[phi_t3 + 1].v.tc[1] = this->keyboardVtx[phi_t3 + 2].v.tc[0] = 0; + + this->keyboardVtx[phi_t3 + 1].v.tc[0] = this->keyboardVtx[phi_t3 + 2].v.tc[1] = + this->keyboardVtx[phi_t3 + 3].v.tc[0] = this->keyboardVtx[phi_t3 + 3].v.tc[1] = 0x200; + + this->keyboardVtx[phi_t3].v.cn[0] = this->keyboardVtx[phi_t3 + 1].v.cn[0] = + this->keyboardVtx[phi_t3 + 2].v.cn[0] = this->keyboardVtx[phi_t3 + 3].v.cn[0] = + this->keyboardVtx[phi_t3].v.cn[1] = this->keyboardVtx[phi_t3 + 1].v.cn[1] = + this->keyboardVtx[phi_t3 + 2].v.cn[1] = this->keyboardVtx[phi_t3 + 3].v.cn[1] = + this->keyboardVtx[phi_t3].v.cn[2] = this->keyboardVtx[phi_t3 + 1].v.cn[2] = + this->keyboardVtx[phi_t3 + 2].v.cn[2] = this->keyboardVtx[phi_t3 + 3].v.cn[2] = + this->keyboardVtx[phi_t3].v.cn[3] = this->keyboardVtx[phi_t3 + 1].v.cn[3] = + this->keyboardVtx[phi_t3 + 2].v.cn[3] = this->keyboardVtx[phi_t3 + 3].v.cn[3] = + 255; + + phi_t0 += 0x10; + } + + phi_s1 -= 0x10; + } +#else + for (phi_t2 = 0, phi_s2 = 0, phi_t3 = 0; phi_s2 < 5; phi_s2++) { + for (phi_t0 = -0x60, phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4, phi_t2++) { + //! @bug D_80812544 is accessed out of bounds when drawing the empty space character (value + //! of 64). Under normal circumstances it reads a halfword from sNameLabelTextures. this->keyboardVtx[phi_t3].v.ob[0] = this->keyboardVtx[phi_t3 + 2].v.ob[0] = D_80812544[phi_t2] + phi_t0; - this->keyboardVtx[phi_t3 + 1].v.ob[0] = this->keyboardVtx[phi_t3 + 3].v.ob[0] = D_80812544[phi_t2] + phi_t0 + 12; @@ -85,6 +135,7 @@ void FileSelect_SetKeyboardVtx(GameState* thisx) { phi_s1 -= 0x10; } +#endif } static void* sNameLabelTextures[] = @@ -124,7 +175,9 @@ void FileSelect_SetNameEntryVtx(GameState* thisx) { Font* font = &this->font; s16 phi_s0; s16 phi_t1; +#if OOT_PAL u8 temp; +#endif s16 phi_v0; if (1) {} @@ -143,26 +196,55 @@ void FileSelect_SetNameEntryVtx(GameState* thisx) { gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_OPA_DISP++); +#if OOT_NTSC + for (phi_t1 = 0, phi_s0 = 4; phi_t1 < 5; phi_t1++, phi_s0 += 4) { + if (gSaveContext.language == LANGUAGE_JPN) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, sButtonTextures[phi_t1], G_IM_FMT_IA, G_IM_SIZ_16b, + sButtonWidths[phi_t1], 16, 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); + + gSP1Quadrangle(POLY_OPA_DISP++, phi_s0, phi_s0 + 2, phi_s0 + 3, phi_s0 + 1, 0); + } else if (phi_t1 >= 3) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, sButtonTextures[phi_t1], G_IM_FMT_IA, G_IM_SIZ_16b, + sButtonWidths[phi_t1], 16, 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); + + gSP1Quadrangle(POLY_OPA_DISP++, phi_s0, phi_s0 + 2, phi_s0 + 3, phi_s0 + 1, 0); + } + } +#else phi_s0 = 0x10; for (phi_t1 = 0; phi_t1 < 2; phi_t1++, phi_s0 += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); -#if OOT_NTSC - // TODO: implement NTSC version - gDPLoadTextureBlock(POLY_OPA_DISP++, sButtonTextures[phi_t1], G_IM_FMT_IA, G_IM_SIZ_16b, sButtonWidths[phi_t1], - 16, 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); -#else + gDPLoadTextureBlock(POLY_OPA_DISP++, sButtonTextures[gSaveContext.language][phi_t1], G_IM_FMT_IA, G_IM_SIZ_16b, sButtonWidths[phi_t1], 16, 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); -#endif + gSP1Quadrangle(POLY_OPA_DISP++, phi_s0, phi_s0 + 2, phi_s0 + 3, phi_s0 + 1, 0); } +#endif this->nameEntryVtx = GRAPH_ALLOC(this->state.gfxCtx, 44 * sizeof(Vtx)); for (phi_s0 = 0, phi_t1 = 0; phi_t1 < 44; phi_t1 += 4, phi_s0++) { +#if OOT_NTSC + this->nameEntryVtx[phi_t1].v.ob[0] = this->nameEntryVtx[phi_t1 + 2].v.ob[0] = + D_808125EC[phi_s0] + this->nameEntryBoxPosX; + + this->nameEntryVtx[phi_t1 + 1].v.ob[0] = this->nameEntryVtx[phi_t1 + 3].v.ob[0] = + this->nameEntryVtx[phi_t1].v.ob[0] + 0xA; +#else if ((phi_s0 > 0) && (phi_s0 < 9)) { temp = this->fileNames[this->buttonIndex][phi_s0 - 1]; @@ -178,6 +260,7 @@ void FileSelect_SetNameEntryVtx(GameState* thisx) { this->nameEntryVtx[phi_t1 + 1].v.ob[0] = this->nameEntryVtx[phi_t1 + 3].v.ob[0] = this->nameEntryVtx[phi_t1].v.ob[0] + 0xA; } +#endif this->nameEntryVtx[phi_t1].v.ob[1] = this->nameEntryVtx[phi_t1 + 1].v.ob[1] = D_80812604[phi_s0]; @@ -237,9 +320,9 @@ void FileSelect_SetNameEntryVtx(GameState* thisx) { this->nameEntryVtx[0x27].v.tc[1] = this->nameEntryVtx[0x29].v.tc[0] = this->nameEntryVtx[0x2A].v.tc[1] = this->nameEntryVtx[0x2B].v.tc[0] = this->nameEntryVtx[0x2B].v.tc[1] = 0x300; - if ((this->kbdButton == 0) || (this->kbdButton == 1) || (this->kbdButton == 4)) { + if (this->kbdButton == FS_KBD_BTN_HIRA || this->kbdButton == FS_KBD_BTN_KATA || this->kbdButton == FS_KBD_BTN_END) { this->nameEntryVtx[0x29].v.tc[0] = this->nameEntryVtx[0x2B].v.tc[0] = 0x700; - } else if ((this->kbdButton == 2) || (this->kbdButton == 3)) { + } else if (this->kbdButton == FS_KBD_BTN_ENG || this->kbdButton == FS_KBD_BTN_BACKSPACE) { this->nameEntryVtx[0x29].v.tc[0] = this->nameEntryVtx[0x2B].v.tc[0] = 0x500; } @@ -264,22 +347,189 @@ void FileSelect_DrawKeyboard(GameState* thisx) { 0, 0, COMBINED); gDPSetPrimColor(POLY_OPA_DISP++, 0, this->charBgAlpha, 255, 255, 255, 255); - while (vtx < 0x100) { +#if OOT_NTSC + if (this->charPage == FS_CHAR_PAGE_HIRA || this->charPage == FS_CHAR_PAGE_HIRA_TO_KATA || + this->charPage == FS_CHAR_PAGE_HIRA_TO_ENG) { + if (this->charPage != FS_CHAR_PAGE_HIRA_TO_ENG) { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, 0); + } else { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, 0); + } + } else if (this->charPage == FS_CHAR_PAGE_KATA || this->charPage == FS_CHAR_PAGE_KATA_TO_HIRA || + this->charPage == FS_CHAR_PAGE_KATA_TO_ENG) { + if (this->charPage != FS_CHAR_PAGE_KATA_TO_ENG) { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, 0); + } else { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, 0); + } + } else { + if (this->charPage != FS_CHAR_PAGE_ENG_TO_KATA) { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageHira[i] * FONT_CHAR_TEX_SIZE, 0); + } else { + for (; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawCharacterTransition(this->state.gfxCtx, + font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawCharacterTransition(this->state.gfxCtx, font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, + font->fontBuf + gCharPageKata[i] * FONT_CHAR_TEX_SIZE, 0); + } + } +#else + for (; vtx < 0x100; vtx += 32) { gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); for (tmp = 0; tmp < 32; i++, tmp += 4) { - FileSelect_DrawCharacter(this->state.gfxCtx, font->fontBuf + D_808123F0[i] * FONT_CHAR_TEX_SIZE, tmp); + FileSelect_DrawCharacter(this->state.gfxCtx, font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, tmp); } - - vtx += 32; } gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); - FileSelect_DrawCharacter(this->state.gfxCtx, font->fontBuf + D_808123F0[i] * FONT_CHAR_TEX_SIZE, 0); + FileSelect_DrawCharacter(this->state.gfxCtx, font->fontBuf + gCharPageEng[i] * FONT_CHAR_TEX_SIZE, 0); +#endif CLOSE_DISPS(this->state.gfxCtx, "../z_file_nameset_PAL.c", 347); } +#if OOT_NTSC +// Tables for applying or removing Japanese diacritics (dakuten and handakuten) to filename characters. +// For the range of characters between RangeMin[i] and RangeMax[i], the modified character can be found +// by adding RangeOffset[i]. +static s16 sRemoveDiacriticRangeMin[12] = { 0x0F, 0x23, 0x41, 0x50, 0x55, 0x5F, 0x73, 0x91, 0xA0, 0xA5, 0x5C, 0xAA }; +static s16 sRemoveDiacriticRangeMax[12] = { 0x1D, 0x27, 0x4F, 0x54, 0x59, 0x6D, 0x77, 0x9F, 0xA4, 0xA9, 0x5C, 0xAA }; +static s16 sRemoveDiacriticRangeOffset[12] = { 0x32, 0x2D, -0x32, 0x05, -0x32, 0x32, + 0x2D, -0x32, 0x05, -0x32, 0x4E, -0x4E }; +static s16 sDakutenDiacriticRangeMin[8] = { 0x0F, 0x23, 0x55, 0x5F, 0x73, 0xA5, 0x5C, 0xAA }; +static s16 sDakutenDiacriticRangeMax[8] = { 0x1D, 0x27, 0x59, 0x6D, 0x77, 0xA9, 0x5C, 0xAA }; +static s16 sDakutenDiacriticRangeOffset[8] = { 0x32, 0x2D, -0x05, 0x32, 0x2D, -0x05, 0x4E, -0x4E }; +static s16 sHandakutenDiacriticRangeMin[4] = { 0x23, 0x50, 0x73, 0xA0 }; +static s16 sHandakutenDiacriticRangeMax[4] = { 0x27, 0x54, 0x77, 0xA4 }; +static s16 sHandakutenDiacriticRangeOffset[4] = { 0x32, 0x05, 0x32, 0x05 }; + +/** + * Apply a Japanese diacritic to a character in the filename. The diacritic can be + * FILENAME_DAKUTEN, FILENAME_HANDAKUTEN, or FILENAME_SPACE (which removes any + * diacritic). Returns true if the diacritic was successfully applied (or removed). + */ +s32 FileSelect_ApplyDiacriticToCharacter(GameState* thisx, s16 diacritic, s16 charIndex) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + + if (diacritic == FILENAME_SPACE) { + for (i = 0; i < ARRAY_COUNTU(sRemoveDiacriticRangeOffset); i++) { + if (sRemoveDiacriticRangeMin[i] <= this->fileNames[this->buttonIndex][charIndex] && + this->fileNames[this->buttonIndex][charIndex] <= sRemoveDiacriticRangeMax[i]) { + this->fileNames[this->buttonIndex][charIndex] += sRemoveDiacriticRangeOffset[i]; + return true; + } + } + } else if (diacritic == FILENAME_DAKUTEN) { + for (i = 0; i < ARRAY_COUNTU(sDakutenDiacriticRangeOffset); i++) { + if (sDakutenDiacriticRangeMin[i] <= this->fileNames[this->buttonIndex][charIndex] && + this->fileNames[this->buttonIndex][charIndex] <= sDakutenDiacriticRangeMax[i]) { + this->fileNames[this->buttonIndex][charIndex] += sDakutenDiacriticRangeOffset[i]; + return true; + } + } + } else if (diacritic == FILENAME_HANDAKUTEN) { + for (i = 0; i < ARRAY_COUNTU(sHandakutenDiacriticRangeOffset); i++) { + if (sHandakutenDiacriticRangeMin[i] <= this->fileNames[this->buttonIndex][charIndex] && + this->fileNames[this->buttonIndex][charIndex] <= sHandakutenDiacriticRangeMax[i]) { + this->fileNames[this->buttonIndex][charIndex] += sHandakutenDiacriticRangeOffset[i]; + return true; + } + } + } + return false; +} + +/** + * Apply a Japanese diacritic to the filename, either replacing the current + * character or the previous character in the filename. The diacritic can be + * FILENAME_DAKUTEN, FILENAME_HANDAKUTEN, or FILENAME_SPACE (which removes any + * diacritic). Returns true if the diacritic was successfully applied (or removed). + */ +s32 FileSelect_ApplyDiacriticToFilename(GameState* thisx, s16 diacritic) { + FileSelectState* this = (FileSelectState*)thisx; + s32 pad; + + if (!FileSelect_ApplyDiacriticToCharacter(&this->state, diacritic, this->newFileNameCharCount)) { + if (this->newFileNameCharCount != 0) { + if (!FileSelect_ApplyDiacriticToCharacter(&this->state, diacritic, this->newFileNameCharCount - 1)) { + return false; + } + } else { + return false; + } + } + return true; +} +#endif + void FileSelect_DrawNameEntry(GameState* thisx) { FileSelectState* this = (FileSelectState*)thisx; Font* font = &this->font; @@ -323,8 +573,13 @@ void FileSelect_DrawNameEntry(GameState* thisx) { this->kbdButton); } +#if OOT_NTSC + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboardVtx[this->charIndex * 4].v.ob[0] - 6; +#else this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = this->keyboardVtx[this->charIndex * 4].v.ob[0] - D_80812544[this->charIndex] - 6; +#endif this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 24; this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = this->keyboardVtx[this->charIndex * 4].v.ob[1] + 6; @@ -399,18 +654,208 @@ void FileSelect_DrawNameEntry(GameState* thisx) { } } else { if (this->charPage <= FS_CHAR_PAGE_ENG) { +#if OOT_NTSC if (this->kbdY != 5) { // draw the character the cursor is hovering over in yellow gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, 255); + + if (this->charPage == FS_CHAR_PAGE_HIRA) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[(this->charIndex * 4)], 4, 0); + FileSelect_DrawCharacter( + this->state.gfxCtx, font->fontBuf + gCharPageHira[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + if ((gCharPageHira[this->charIndex] == FILENAME_DAKUTEN) || + (gCharPageHira[this->charIndex] == FILENAME_HANDAKUTEN)) { + if (!FileSelect_ApplyDiacriticToFilename(&this->state, + gCharPageHira[this->charIndex])) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_ERROR, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } else { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } + } else { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = + gCharPageHira[this->charIndex]; + this->newFileNameCharCount++; + if (this->newFileNameCharCount >= 8) { + this->newFileNameCharCount = 7; + } + } + } + } else if (this->charPage == FS_CHAR_PAGE_KATA) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[(this->charIndex * 4)], 4, 0); + FileSelect_DrawCharacter( + this->state.gfxCtx, font->fontBuf + gCharPageKata[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + if ((gCharPageHira[this->charIndex] == FILENAME_DAKUTEN) || + (gCharPageHira[this->charIndex] == FILENAME_HANDAKUTEN)) { + if (!FileSelect_ApplyDiacriticToFilename(&this->state, + gCharPageHira[this->charIndex])) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_ERROR, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } else { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } + } else { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = + gCharPageKata[this->charIndex]; + this->newFileNameCharCount++; + if (this->newFileNameCharCount >= 8) { + this->newFileNameCharCount = 7; + } + } + } + } else { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[this->charIndex * 4], 4, 0); + + FileSelect_DrawCharacter(this->state.gfxCtx, + font->fontBuf + gCharPageEng[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = + gCharPageEng[this->charIndex]; + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_A) && (this->charPage != this->kbdButton)) { + if (this->kbdButton == FS_KBD_BTN_HIRA) { + if (this->charPage == FS_CHAR_PAGE_KATA) { + this->charPage = FS_CHAR_PAGE_KATA_TO_HIRA; + } else { + this->charPage = FS_CHAR_PAGE_ENG_TO_HIRA; + } + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else if (this->kbdButton == FS_KBD_BTN_KATA) { + if (this->charPage == FS_CHAR_PAGE_HIRA) { + this->charPage = FS_CHAR_PAGE_HIRA_TO_KATA; + } else { + this->charPage = FS_CHAR_PAGE_ENG_TO_KATA; + } + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else if (this->kbdButton == FS_KBD_BTN_ENG) { + if (this->charPage == FS_CHAR_PAGE_HIRA) { + this->charPage = FS_CHAR_PAGE_HIRA_TO_ENG; + } else { + this->charPage = FS_CHAR_PAGE_KATA_TO_ENG; + } + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else { + if (this->kbdButton == FS_KBD_BTN_BACKSPACE) { + if ((this->newFileNameCharCount == 7) && + (this->fileNames[this->buttonIndex][7] != FILENAME_SPACE)) { + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = FILENAME_SPACE; + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } else { + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = FILENAME_SPACE; + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } + } else if (this->kbdButton == FS_KBD_BTN_END) { + validName = false; + + for (i = 0; i < 8; i++) { + if (this->fileNames[this->buttonIndex][i] != FILENAME_SPACE) { + validName = true; + break; + } + } + + if (validName) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_L, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + gSaveContext.fileNum = this->buttonIndex; + dayTime = ((void)0, gSaveContext.save.dayTime); + Sram_InitSave(this, &this->sramCtx); + gSaveContext.save.dayTime = dayTime; + this->configMode = CM_NAME_ENTRY_TO_MAIN; + this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200; + this->connectorAlpha[this->buttonIndex] = 255; + Rumble_Request(300.0f, 180, 20, 100); + } else { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_ERROR, &gSfxDefaultPos, 4, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultReverb); + } + } + } + } + + if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_Z)) { + if (FileSelect_ApplyDiacriticToFilename(&this->state, FILENAME_SPACE)) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } + } +#else + if (this->kbdY != 5) { + // draw the character the cursor is hovering over in yellow + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, 255); + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[this->charIndex * 4], 4, 0); FileSelect_DrawCharacter(this->state.gfxCtx, - font->fontBuf + D_808123F0[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + font->fontBuf + gCharPageEng[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); if (CHECK_BTN_ALL(input->press.button, BTN_A)) { Audio_PlaySfxGeneral(NA_SE_SY_FSEL_DECIDE_S, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - this->fileNames[this->buttonIndex][this->newFileNameCharCount] = D_808123F0[this->charIndex]; + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = gCharPageEng[this->charIndex]; this->newFileNameCharCount++; if (this->newFileNameCharCount > 7) { @@ -491,6 +936,7 @@ void FileSelect_DrawNameEntry(GameState* thisx) { this->newFileNameCharCount = 0; } } +#endif } } } @@ -522,7 +968,7 @@ void FileSelect_StartNameEntry(GameState* thisx) { this->nameEntryBoxAlpha = 255; this->kbdX = 0; this->kbdY = 0; - this->kbdButton = 99; + this->kbdButton = FS_KBD_BTN_NONE; this->configMode = CM_NAME_ENTRY; } } @@ -537,7 +983,199 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { FileSelectState* this = (FileSelectState*)thisx; s16 prevKbdX; - this->kbdButton = 99; +#if OOT_NTSC + Input* input = &this->state.input[0]; + s32 pad; + + if (this->charPage <= FS_CHAR_PAGE_ENG) { + if (CHECK_BTN_ALL(input->press.button, BTN_R)) { + if (gSaveContext.language == LANGUAGE_JPN) { + if (this->charPage == FS_CHAR_PAGE_HIRA) { + this->charPage = FS_CHAR_PAGE_HIRA_TO_KATA; + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else if (this->charPage == FS_CHAR_PAGE_KATA) { + this->charPage = FS_CHAR_PAGE_KATA_TO_ENG; + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else if (this->charPage == FS_CHAR_PAGE_ENG) { + this->charPage = FS_CHAR_PAGE_ENG_TO_HIRA; + Audio_PlaySfxGeneral(NA_SE_SY_WIN_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } + } + } else { + this->kbdButton = FS_KBD_BTN_NONE; + + if (this->kbdY != 5) { + if (this->stickAdjX < -30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->charIndex--; + this->kbdX--; + if (this->kbdX < 0) { + this->kbdX = 12; + this->charIndex = this->kbdY * 13 + this->kbdX; + } + } else if (this->stickAdjX > 30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->charIndex++; + this->kbdX++; + if (this->kbdX >= 13) { + this->kbdX = 0; + this->charIndex = this->kbdY * 13 + this->kbdX; + } + } + } else if (gSaveContext.language == LANGUAGE_JPN) { + if (this->stickAdjX < -30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdX--; + if (this->kbdX < 0) { + this->kbdX = 4; + } + } else if (this->stickAdjX > 30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdX++; + if (this->kbdX >= 5) { + this->kbdX = 0; + } + } + } else { + if (this->stickAdjX < -30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdX--; + if (this->kbdX < 3) { + this->kbdX = 4; + } + } else if (this->stickAdjX > 30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdX++; + if (this->kbdX >= 5) { + this->kbdX = 3; + } + } + } + + if (this->stickAdjY > 30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdY--; + if (this->kbdY < 0) { + if (gSaveContext.language == LANGUAGE_JPN) { + this->kbdY = 5; + this->charIndex += 52; + prevKbdX = this->kbdX; + if (this->kbdX < 3) { + this->kbdX = 0; + } else if (this->kbdX < 6) { + this->kbdX = 1; + } else if (this->kbdX < 8) { + this->kbdX = 2; + } else if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + + this->unk_1CAD6[this->kbdX] = prevKbdX; + } else { + // don't go to bottom row + if (this->kbdX < 8) { + this->kbdY = 4; + this->charIndex = this->kbdX + 52; + } else { + this->kbdY = 5; + this->charIndex += 52; + prevKbdX = this->kbdX; + if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + + this->unk_1CAD6[this->kbdX] = prevKbdX; + } + } + } else { + this->charIndex -= 13; + if (this->kbdY == 4) { + this->charIndex = 52; + this->kbdX = this->unk_1CAD6[this->kbdX]; + this->charIndex += this->kbdX; + } + } + } else if (this->stickAdjY < -30) { + Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + this->kbdY++; + + if (this->kbdY >= 6) { + this->kbdY = 0; + this->kbdX = this->unk_1CAD6[this->kbdX]; + this->charIndex = this->kbdX; + } else { + this->charIndex += 13; + + if (this->kbdY == 5) { + if (gSaveContext.language != LANGUAGE_JPN) { + if (this->kbdX < 8) { + this->kbdY = 0; + this->charIndex = this->kbdX; + } else { + prevKbdX = this->kbdX; + + if (this->kbdX < 3) { + this->kbdX = 0; + } else if (this->kbdX < 6) { + this->kbdX = 1; + } else if (this->kbdX < 8) { + this->kbdX = 2; + } else if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + + this->unk_1CAD6[this->kbdX] = prevKbdX; + } + } else { + prevKbdX = this->kbdX; + + if (this->kbdX < 3) { + this->kbdX = 0; + } else if (this->kbdX < 6) { + this->kbdX = 1; + } else if (this->kbdX < 8) { + this->kbdX = 2; + } else if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + + this->unk_1CAD6[this->kbdX] = prevKbdX; + } + } + } + } + if (this->kbdY == 5) { + this->kbdButton = this->kbdX; + } + } + } else { + this->charBgAlpha += ZREG(9); + if (this->charBgAlpha >= 255) { + this->charBgAlpha = 0; + this->charPage = gNextCharPage[this->charPage]; + } + } +#else + this->kbdButton = FS_KBD_BTN_NONE; if (this->kbdY != 5) { if (this->stickAdjX < -30) { @@ -547,16 +1185,16 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { this->kbdX--; if (this->kbdX < 0) { this->kbdX = 12; - this->charIndex = (this->kbdY * 13) + this->kbdX; + this->charIndex = this->kbdY * 13 + this->kbdX; } } else if (this->stickAdjX > 30) { Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->charIndex++; this->kbdX++; - if (this->kbdX > 12) { + if (this->kbdX >= 13) { this->kbdX = 0; - this->charIndex = (this->kbdY * 13) + this->kbdX; + this->charIndex = this->kbdY * 13 + this->kbdX; } } } else { @@ -571,7 +1209,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->kbdX++; - if (this->kbdX > 4) { + if (this->kbdX >= 5) { this->kbdX = 3; } } @@ -581,17 +1219,15 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->kbdY--; - if (this->kbdY < 0) { // don't go to bottom row if (this->kbdX < 8) { this->kbdY = 4; - this->charIndex = (s32)(this->kbdX + 52); + this->charIndex = this->kbdX + 52; } else { this->kbdY = 5; this->charIndex += 52; prevKbdX = this->kbdX; - if (this->kbdX < 10) { this->kbdX = 3; } else if (this->kbdX < 13) { @@ -602,7 +1238,6 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { } } else { this->charIndex -= 13; - if (this->kbdY == 4) { this->charIndex = 52; this->kbdX = this->unk_1CAD6[this->kbdX]; @@ -614,7 +1249,7 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->kbdY++; - if (this->kbdY > 5) { + if (this->kbdY >= 6) { this->kbdY = 0; this->kbdX = this->unk_1CAD6[this->kbdX]; this->charIndex = this->kbdX; @@ -645,10 +1280,10 @@ void FileSelect_UpdateKeyboardCursor(GameState* thisx) { } } } - if (this->kbdY == 5) { this->kbdButton = this->kbdX; } +#endif } /** @@ -748,33 +1383,50 @@ void FileSelect_UpdateOptionsMenu(GameState* thisx) { } } +#if OOT_NTSC +typedef struct { + /* 0x00 */ void* texture[2]; + /* 0x08 */ u16 width; + /* 0x0A */ u16 height; +} OptionsMenuTextureInfo; // size = 0x0C + +#define OPTIONS_MENU_TEXTURE_WIDTHS(jpn, eng, ger, fra) jpn +#define OPTIONS_MENU_TEXTURE_WIDTH(info) info.width +#define OPTIONS_MENU_TEXTURE_HEIGHT(info) info.height +#else typedef struct { /* 0x00 */ void* texture[3]; /* 0x0C */ u16 width[3]; /* 0x12 */ u16 height; } OptionsMenuTextureInfo; // size = 0x14 +#define OPTIONS_MENU_TEXTURE_WIDTHS(jpn, eng, ger, fra) \ + { eng, ger, fra } +#define OPTIONS_MENU_TEXTURE_WIDTH(info) info.width[gSaveContext.language] +#define OPTIONS_MENU_TEXTURE_HEIGHT(info) info.height +#endif + static OptionsMenuTextureInfo sOptionsMenuHeaders[] = { { LANGUAGE_ARRAY(gFileSelOptionsJPNTex, gFileSelOptionsENGTex, gFileSelOptionsGERTex, gFileSelOptionsENGTex), - { 128, 128, 128 }, + OPTIONS_MENU_TEXTURE_WIDTHS(128, 128, 128, 128), 16, }, { LANGUAGE_ARRAY(gFileSelSOUNDENGTex, gFileSelSOUNDENGTex, gFileSelSOUNDENGTex, gFileSelSOUNDFRATex), - { 64, 64, 64 }, + OPTIONS_MENU_TEXTURE_WIDTHS(64, 64, 64, 64), 16, }, { LANGUAGE_ARRAY(gFileSelLTargetingJPNTex, gFileSelLTargetingENGTex, gFileSelLTargetingGERTex, gFileSelLTargetingFRATex), - { 64, 144, 64 }, + OPTIONS_MENU_TEXTURE_WIDTHS(64, 64, 144, 64), 16, }, { LANGUAGE_ARRAY(gFileSelCheckBrightnessJPNTex, gFileSelCheckBrightnessENGTex, gFileSelCheckBrightnessGERTex, gFileSelCheckBrightnessFRATex), - { 128, 128, 128 }, + OPTIONS_MENU_TEXTURE_WIDTHS(96, 128, 128, 128), 16, }, }; @@ -782,32 +1434,32 @@ static OptionsMenuTextureInfo sOptionsMenuHeaders[] = { static OptionsMenuTextureInfo sOptionsMenuSettings[] = { { LANGUAGE_ARRAY(gFileSelStereoJPNTex, gFileSelStereoENGTex, gFileSelStereoENGTex, gFileSelStereoFRATex), - { 48, 48, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 48, 48), 16, }, { LANGUAGE_ARRAY(gFileSelMonoJPNTex, gFileSelMonoENGTex, gFileSelMonoENGTex, gFileSelMonoENGTex), - { 48, 48, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 48, 48), 16, }, { LANGUAGE_ARRAY(gFileSelHeadsetJPNTex, gFileSelHeadsetENGTex, gFileSelHeadsetGERTex, gFileSelHeadsetFRATex), - { 48, 48, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 48, 48), 16, }, { LANGUAGE_ARRAY(gFileSelSurroundJPNTex, gFileSelSurroundENGTex, gFileSelSurroundENGTex, gFileSelSurroundENGTex), - { 48, 48, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 48, 48), 16, }, { LANGUAGE_ARRAY(gFileSelSwitchJPNTex, gFileSelSwitchENGTex, gFileSelSwitchGERTex, gFileSelSwitchFRATex), - { 48, 80, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 80, 48), 16, }, { LANGUAGE_ARRAY(gFileSelHoldJPNTex, gFileSelHoldENGTex, gFileSelHoldGERTex, gFileSelHoldFRATex), - { 48, 80, 48 }, + OPTIONS_MENU_TEXTURE_WIDTHS(48, 48, 80, 48), 16, }, }; @@ -917,9 +1569,9 @@ void FileSelect_DrawOptionsImpl(GameState* thisx) { for (i = 0, vtx = 0; i < 4; i++, vtx += 4) { gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuHeaders[i].texture[gSaveContext.language], G_IM_FMT_IA, - G_IM_SIZ_8b, sOptionsMenuHeaders[i].width[gSaveContext.language], - sOptionsMenuHeaders[i].height, 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); + G_IM_SIZ_8b, OPTIONS_MENU_TEXTURE_WIDTH(sOptionsMenuHeaders[i]), + OPTIONS_MENU_TEXTURE_HEIGHT(sOptionsMenuHeaders[i]), 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); gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); } @@ -952,9 +1604,9 @@ void FileSelect_DrawOptionsImpl(GameState* thisx) { //! @bug Mistakenly using sOptionsMenuHeaders instead of sOptionsMenuSettings for the height. //! This works out anyway because all heights are 16. gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA, - G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language], - sOptionsMenuHeaders[i].height, 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); + G_IM_SIZ_8b, OPTIONS_MENU_TEXTURE_WIDTH(sOptionsMenuSettings[i]), + OPTIONS_MENU_TEXTURE_HEIGHT(sOptionsMenuHeaders[i]), 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); gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); } @@ -979,9 +1631,9 @@ void FileSelect_DrawOptionsImpl(GameState* thisx) { //! This is also an OOB read that happens to access the height of the first two elements in //! sOptionsMenuSettings, and since all heights are 16, it works out anyway. gDPLoadTextureBlock(POLY_OPA_DISP++, sOptionsMenuSettings[i].texture[gSaveContext.language], G_IM_FMT_IA, - G_IM_SIZ_8b, sOptionsMenuSettings[i].width[gSaveContext.language], - sOptionsMenuHeaders[i].height, 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); + G_IM_SIZ_8b, OPTIONS_MENU_TEXTURE_WIDTH(sOptionsMenuSettings[i]), + OPTIONS_MENU_TEXTURE_HEIGHT(sOptionsMenuHeaders[i]), 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); gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); } diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c index d6bc09c282..2fc9670b89 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c @@ -1,11 +1 @@ -#include "file_select.h" - #include "assets/overlays/ovl_file_choose/ovl_file_choose.c" - -s16 D_808123F0[] = { - 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, - 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, - 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, - 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, - 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0040, 0x003F, 0x003E, -}; diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 78d4058ee3..ad8f3d884a 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -170,7 +170,17 @@ void ConsoleLogo_Init(GameState* thisx) { this->state.main = ConsoleLogo_Main; this->state.destroy = ConsoleLogo_Destroy; this->exit = false; + +#if OOT_VERSION < OOT_GC_US + if (!(gPadMgr.validCtrlrsMask & 1)) { + gSaveContext.fileNum = 0xFEDC; + } else { + gSaveContext.fileNum = 0xFF; + } +#else gSaveContext.fileNum = 0xFF; +#endif + Sram_Alloc(&this->state, &this->sramCtx); this->ult = 0; this->unk_1D4 = 0x14; 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 71715c47a8..7e05599d2a 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c @@ -377,20 +377,49 @@ static void* sGameOverTexs[] = { gPauseSave24Tex, }; -static void* sEquipPageBgQuadsTexs[] = - LANGUAGE_ARRAY(sEquipmentJPNTexs, sEquipPageBgQuadsENGTexs, sEquipPageBgQuadsGERTexs, sEquipPageBgQuadsFRATexs); +#if OOT_NTSC +#define EQUIPMENT_TEXS(language) ((language) != LANGUAGE_JPN ? sEquipPageBgQuadsENGTexs : sEquipmentJPNTexs) +#define SELECT_ITEM_TEXS(language) ((language) != LANGUAGE_JPN ? sItemPageBgQuadsENGTexs : sSelectItemJPNTexs) +#define MAP_TEXS(language) ((language) != LANGUAGE_JPN ? sMapPageBgQuadsENGTexs : sMapJPNTexs) +#define QUEST_STATUS_TEXS(language) ((language) != LANGUAGE_JPN ? sQuestPageBgQuadsENGTexs : sQuestStatusJPNTexs) +#define SAVE_TEXS(language) ((language) != LANGUAGE_JPN ? sSavePromptBgQuadsENGTexs : sSaveJPNTexs) +#else +static void* sEquipPageBgQuadsTexs[] = { + sEquipPageBgQuadsENGTexs, + sEquipPageBgQuadsGERTexs, + sEquipPageBgQuadsFRATexs, +}; -static void* sItemPageBgQuadsTexs[] = - LANGUAGE_ARRAY(sSelectItemJPNTexs, sItemPageBgQuadsENGTexs, sItemPageBgQuadsGERTexs, sItemPageBgQuadsFRATexs); +static void* sItemPageBgQuadsTexs[] = { + sItemPageBgQuadsENGTexs, + sItemPageBgQuadsGERTexs, + sItemPageBgQuadsFRATexs, +}; -static void* sMapPageBgQuadsTexs[] = - LANGUAGE_ARRAY(sMapJPNTexs, sMapPageBgQuadsENGTexs, sMapPageBgQuadsGERTexs, sMapPageBgQuadsFRATexs); +static void* sMapPageBgQuadsTexs[] = { + sMapPageBgQuadsENGTexs, + sMapPageBgQuadsGERTexs, + sMapPageBgQuadsFRATexs, +}; -static void* sQuestPageBgQuadsTexs[] = - LANGUAGE_ARRAY(sQuestStatusJPNTexs, sQuestPageBgQuadsENGTexs, sQuestPageBgQuadsGERTexs, sQuestPageBgQuadsFRATexs); +static void* sQuestPageBgQuadsTexs[] = { + sQuestPageBgQuadsENGTexs, + sQuestPageBgQuadsGERTexs, + sQuestPageBgQuadsFRATexs, +}; -static void* sSavePromptBgQuadsTexs[] = - LANGUAGE_ARRAY(sSaveJPNTexs, sSavePromptBgQuadsENGTexs, sSavePromptBgQuadsGERTexs, sSavePromptBgQuadsFRATexs); +static void* sSavePromptBgQuadsTexs[] = { + sSavePromptBgQuadsENGTexs, + sSavePromptBgQuadsGERTexs, + sSavePromptBgQuadsFRATexs, +}; + +#define EQUIPMENT_TEXS(language) (sEquipPageBgQuadsTexs[(language)]) +#define SELECT_ITEM_TEXS(language) (sItemPageBgQuadsTexs[(language)]) +#define MAP_TEXS(language) (sMapPageBgQuadsTexs[(language)]) +#define QUEST_STATUS_TEXS(language) (sQuestPageBgQuadsTexs[(language)]) +#define SAVE_TEXS(language) (sSavePromptBgQuadsTexs[(language)]) +#endif s16 gVtxPageMapWorldQuadsWidth[VTX_PAGE_MAP_WORLD_QUADS] = { 32, // QUAD_MAP_WORLD_CLOUDS_SACRED_FOREST_MEADOW @@ -898,6 +927,9 @@ void KaleidoScope_SetupPageSwitch(PauseContext* pauseCtx, u8 pt) { pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; } +#if OOT_NTSC + gSaveContext.buttonStatus[0] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][0]; +#endif gSaveContext.buttonStatus[1] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][1]; gSaveContext.buttonStatus[2] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][2]; gSaveContext.buttonStatus[3] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + pt][3]; @@ -1182,7 +1214,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, - sItemPageBgQuadsTexs[gSaveContext.language]); + SELECT_ITEM_TEXS(gSaveContext.language)); KaleidoScope_DrawItemSelect(play); } @@ -1201,7 +1233,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, - sEquipPageBgQuadsTexs[gSaveContext.language]); + EQUIPMENT_TEXS(gSaveContext.language)); KaleidoScope_DrawEquipment(play); } @@ -1221,7 +1253,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, - sQuestPageBgQuadsTexs[gSaveContext.language]); + QUEST_STATUS_TEXS(gSaveContext.language)); KaleidoScope_DrawQuestStatus(play, gfxCtx); } @@ -1240,8 +1272,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { gSPMatrix(POLY_OPA_DISP++, MATRIX_NEW(gfxCtx, "../z_kaleido_scope_PAL.c", 1243), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, - sMapPageBgQuadsTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language)); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play, gfxCtx); @@ -1273,7 +1305,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, - sItemPageBgQuadsTexs[gSaveContext.language]); + SELECT_ITEM_TEXS(gSaveContext.language)); KaleidoScope_DrawItemSelect(play); break; @@ -1288,8 +1320,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { gSPMatrix(POLY_OPA_DISP++, MATRIX_NEW(gfxCtx, "../z_kaleido_scope_PAL.c", 1303), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, - sMapPageBgQuadsTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language)); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play, gfxCtx); @@ -1322,7 +1354,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, - sQuestPageBgQuadsTexs[gSaveContext.language]); + QUEST_STATUS_TEXS(gSaveContext.language)); KaleidoScope_DrawQuestStatus(play, gfxCtx); @@ -1342,7 +1374,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, - sEquipPageBgQuadsTexs[gSaveContext.language]); + EQUIPMENT_TEXS(gSaveContext.language)); KaleidoScope_DrawEquipment(play); @@ -1401,8 +1433,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if (IS_PAUSE_STATE_GAMEOVER(pauseCtx)) { POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, sGameOverTexs); } else { // PAUSE_STATE_SAVE_PROMPT - POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, - sSavePromptBgQuadsTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->promptPageVtx, SAVE_TEXS(gSaveContext.language)); } //! @bug Loads 32 vertices, but there are only 20 to load @@ -1512,9 +1544,9 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { LANGUAGE_ARRAY(gPauseToSelectItemJPNTex, gPauseToSelectItemENGTex, gPauseToSelectItemGERTex, gPauseToSelectItemFRATex), }; - static u16 D_8082ADD8_toEquipTextWidth_[3] = { 56, 88, 80 }; - static u16 D_8082ADE0_toDecideTextWidth_[3] = { 64, 88, 72 }; - static u16 D_8082ADE8_toPlayMelodyTextWidth_[3] = { 80, 104, 112 }; + static u16 D_8082ADD8_toEquipTextWidth_[] = LANGUAGE_ARRAY(56, 56, 88, 80); + static u16 D_8082ADE0_toDecideTextWidth_[] = LANGUAGE_ARRAY(48, 64, 88, 72); + static u16 D_8082ADE8_toPlayMelodyTextWidth_[] = LANGUAGE_ARRAY(96, 80, 104, 112); static s16 sCursorLeftRightSelectedPrimColors[][4] = { { 180, 210, 255, 220 }, { 100, 100, 150, 220 }, @@ -1831,13 +1863,14 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); if (pauseCtx->state == PAUSE_STATE_SAVE_PROMPT) { - pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(61 + gSaveContext.language); + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = + R_KALEIDO_UNK5(gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = - pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); + pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADE0_toDecideTextWidth_[gSaveContext.language]; @@ -1880,13 +1913,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { } else { if ((u32)pauseCtx->pageIndex == PAUSE_ITEM) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = - WREG(49 + gSaveContext.language); + R_KALEIDO_UNK1(gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 48; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = - pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(58 + gSaveContext.language); + pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK4(gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8_toEquipTextWidth_[gSaveContext.language]; @@ -1913,13 +1946,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { // The cursor is on a learned song pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = - WREG(55 + gSaveContext.language); + R_KALEIDO_UNK3(gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = - pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); + pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language); #if OOT_PAL if (gSaveContext.language == LANGUAGE_GER) { @@ -1947,13 +1980,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { } } else if (pauseCtx->pageIndex == PAUSE_EQUIP) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = - WREG(64 + gSaveContext.language); + R_KALEIDO_UNK6(gSaveContext.language); pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = pauseCtx->infoPanelVtx[16].v.ob[0] + 24; pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = - pauseCtx->infoPanelVtx[16].v.ob[0] + WREG(52 + gSaveContext.language); + pauseCtx->infoPanelVtx[16].v.ob[0] + R_KALEIDO_UNK2(gSaveContext.language); pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = pauseCtx->infoPanelVtx[20].v.ob[0] + D_8082ADD8_toEquipTextWidth_[gSaveContext.language]; @@ -3456,7 +3489,9 @@ void KaleidoScope_UpdateCursorVtx(PlayState* play) { void KaleidoScope_LoadDungeonMap(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; +#if OOT_PAL s32 pad; +#endif DMA_REQUEST_SYNC(interfaceCtx->mapSegment, (uintptr_t)_map_48x85_staticSegmentRomStart + ((R_MAP_TEX_INDEX + 0) * MAP_48x85_TEX_SIZE), @@ -3960,6 +3995,9 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->state = PAUSE_STATE_CLOSING; R_PAUSE_OFFSET_VERTICAL = -6240; func_800F64E0(0); +#if OOT_NTSC + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); +#endif } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { pauseCtx->nextPageMode = 0; pauseCtx->promptChoice = 0; @@ -4115,6 +4153,9 @@ void KaleidoScope_Update(PlayState* play) { R_PAUSE_OFFSET_VERTICAL = -6240; YREG(8) = pauseCtx->rollRotSavePrompt_; func_800F64E0(0); +#if OOT_NTSC + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); +#endif } else { Audio_PlaySfxGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, @@ -4141,6 +4182,9 @@ void KaleidoScope_Update(PlayState* play) { gSaveContext.buttonStatus[3] = BTN_ENABLED; gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE; Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL); +#if OOT_NTSC + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); +#endif } break; diff --git a/tools/Makefile b/tools/Makefile index c4688f6646..62bc881e17 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -20,13 +20,16 @@ endif all: $(PROGRAMS) $(MAKE) -C ZAPD $(MAKE) -C fado + $(MAKE) -C audio clean: $(RM) $(PROGRAMS) $(addsuffix .exe,$(PROGRAMS)) $(MAKE) -C ZAPD clean $(MAKE) -C fado clean + $(MAKE) -C audio clean distclean: clean + $(MAKE) -C audio distclean .PHONY: all clean distclean diff --git a/tools/ZAPDConfigs/gc-jp-ce/Config.xml b/tools/ZAPDConfigs/gc-jp-ce/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp-ce/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/gc-jp-ce/SymbolMap.txt b/tools/ZAPDConfigs/gc-jp-ce/SymbolMap.txt new file mode 100644 index 0000000000..12d96f7aa2 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp-ce/SymbolMap.txt @@ -0,0 +1,2 @@ +800FE2A0 gMtxClear +80A74120 sShadowTex diff --git a/tools/ZAPDConfigs/gc-jp-mq/Config.xml b/tools/ZAPDConfigs/gc-jp-mq/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp-mq/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/gc-jp-mq/SymbolMap.txt b/tools/ZAPDConfigs/gc-jp-mq/SymbolMap.txt new file mode 100644 index 0000000000..8dcd14d673 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp-mq/SymbolMap.txt @@ -0,0 +1,2 @@ +800FE2A0 gMtxClear +80A740D0 sShadowTex diff --git a/tools/ZAPDConfigs/gc-jp/Config.xml b/tools/ZAPDConfigs/gc-jp/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/gc-jp/SymbolMap.txt b/tools/ZAPDConfigs/gc-jp/SymbolMap.txt new file mode 100644 index 0000000000..2062d21792 --- /dev/null +++ b/tools/ZAPDConfigs/gc-jp/SymbolMap.txt @@ -0,0 +1,2 @@ +800FE2C0 gMtxClear +80A74150 sShadowTex diff --git a/tools/ZAPDConfigs/gc-us-mq/Config.xml b/tools/ZAPDConfigs/gc-us-mq/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/gc-us-mq/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/gc-us-mq/SymbolMap.txt b/tools/ZAPDConfigs/gc-us-mq/SymbolMap.txt new file mode 100644 index 0000000000..3ea1df6ccf --- /dev/null +++ b/tools/ZAPDConfigs/gc-us-mq/SymbolMap.txt @@ -0,0 +1,2 @@ +800FE280 gMtxClear +80A740B0 sShadowTex diff --git a/tools/ZAPDConfigs/ntsc-1.2/Config.xml b/tools/ZAPDConfigs/ntsc-1.2/Config.xml new file mode 100644 index 0000000000..b2f4e3e4d3 --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.2/Config.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/ZAPDConfigs/ntsc-1.2/SymbolMap.txt b/tools/ZAPDConfigs/ntsc-1.2/SymbolMap.txt new file mode 100644 index 0000000000..2b9bac5cb0 --- /dev/null +++ b/tools/ZAPDConfigs/ntsc-1.2/SymbolMap.txt @@ -0,0 +1,2 @@ +800FF3F0 gMtxClear +80AE0FE0 sShadowTex diff --git a/tools/audio/Makefile b/tools/audio/Makefile new file mode 100644 index 0000000000..69ffccbb4e --- /dev/null +++ b/tools/audio/Makefile @@ -0,0 +1,14 @@ + +.PHONY: all clean distclean format + +all: + $(MAKE) -C sampleconv + +clean: + $(MAKE) -C sampleconv clean + +distclean: clean + $(MAKE) -C sampleconv distclean + +format: + $(MAKE) -C sampleconv format diff --git a/tools/audio/extraction/audio_extract.py b/tools/audio/extraction/audio_extract.py new file mode 100644 index 0000000000..ea4f8612c3 --- /dev/null +++ b/tools/audio/extraction/audio_extract.py @@ -0,0 +1,320 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Extract audio files +# + +import os, shutil, time +from dataclasses import dataclass +from enum import auto, Enum +from multiprocessing.pool import ThreadPool +from typing import Dict, List, Tuple, Union +from xml.etree import ElementTree +from xml.etree.ElementTree import Element + +from .audio_tables import AudioCodeTable, AudioCodeTableEntry, AudioStorageMedium +from .audiotable import AudioTableData, AudioTableFile, AudioTableSample +from .audiobank_file import AudiobankFile +from .util import align, debugm, error, incbin, program_get + +class MMLVersion(Enum): + OOT = auto() + MM = auto() + +@dataclass +class GameVersionInfo: + # Music Macro Language Version + mml_version : MMLVersion + # Soundfont table code offset + soundfont_table : int + # Sequence font table code offset + seq_font_table : int + # Sequence table code offset + seq_table : int + # Sample bank table code offset + sample_bank_table : int + # Sequence enum names + seq_enum_names : Tuple[str] + # List of indices corresponding to handwritten sequences + handwritten_sequences : Tuple[int] + # Some soundfonts report the wrong samplebank, map them to the correct samplebank for proper sample discovery + fake_banks : Dict[int, int] + # Contains audiotable indices that suffer from a buffer clearing bug + audiotable_buffer_bugs : Tuple[int] + +SAMPLECONV_PATH = f"{os.path.dirname(os.path.realpath(__file__))}/../sampleconv/sampleconv" + +BASEROM_DEBUG = False + +# ====================================================================================================================== +# Run +# ====================================================================================================================== + +def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, + table : AudioCodeTable, samplebank_xmls : Dict[int, Tuple[str, Element]]): + sample_banks : List[Union[AudioTableFile, int]] = [] + + for i,entry in enumerate(table): + entry : AudioCodeTableEntry + + assert entry.short_data1 == 0 and entry.short_data2 == 0 and entry.short_data3 == 0, \ + "Bad data for Sample Bank entry, all short data should be 0" + assert entry.medium == AudioStorageMedium.MEDIUM_CART , \ + "Bad data for Sample Bank entry, medium should be CART" + + if entry.size == 0: + # Pointer to other entry, in this case the rom address is a table index + + entry_dst = table.entries[entry.rom_addr] + sample_banks[entry.rom_addr].register_ptr(i) + sample_banks.append(entry_dst.rom_addr) + else: + # Check whether this samplebank suffers from the buffer bug + # TODO it should be possible to detect this automatically by checking padding following sample discovery + bug = i in version_info.audiotable_buffer_bugs + + bank = AudioTableFile(i, audiotable_seg, entry, table.rom_addr, buffer_bug=bug, + extraction_xml=samplebank_xmls.get(i, None)) + + if BASEROM_DEBUG: + bank.dump_bin(f"{extracted_dir}/baserom_audiotest/audiotable_files/{bank.file_name}.bin") + + sample_banks.append(bank) + + return sample_banks + +def bank_data_lookup(sample_banks : List[Union[AudioTableFile, int]], e : Union[AudioTableFile, int]) -> AudioTableFile: + if isinstance(e, int): + if e == 255: + return None + return bank_data_lookup(sample_banks, sample_banks[e]) + else: + return e + +def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, + sound_font_table : AudioCodeTable, soundfont_xmls : Dict[int, Tuple[str, Element]], + sample_banks : List[Union[AudioTableFile, int]]): + soundfonts = [] + + for i,entry in enumerate(sound_font_table): + entry : AudioCodeTableEntry + + # Lookup the samplebanks used by this soundfont + bank1 = bank_data_lookup(sample_banks, version_info.fake_banks.get(i, entry.sample_bank_id_1)) + bank2 = bank_data_lookup(sample_banks, entry.sample_bank_id_2) + + # Read the data + soundfont = AudiobankFile(audiobank_seg, i, entry, sound_font_table.rom_addr, bank1, bank2, + entry.sample_bank_id_1, entry.sample_bank_id_2, + extraction_xml=soundfont_xmls.get(i, None)) + soundfonts.append(soundfont) + + if BASEROM_DEBUG: + # Write the individual file for debugging and comparison + soundfont.dump_bin(f"{extracted_dir}/baserom_audiotest/audiobank_files/{soundfont.file_name}.bin") + + return soundfonts + +def aifc_extract_one_sample(base_path : str, sample : AudioTableSample): + aifc_path = f"{base_path}/aifc/{sample.filename}" + ext_compressed = sample.codec_file_extension_compressed() + ext_decompressed = sample.codec_file_extension_decompressed() + wav_path = f"{base_path}/{sample.filename.replace(ext_compressed, ext_decompressed)}" + # export to AIFC + sample.to_file(aifc_path) + # decode to AIFF/WAV + program_get(f"{SAMPLECONV_PATH} --matching pcm16 {aifc_path} {wav_path}") + +def aifc_extract_one_bin(base_path : str, sample : AudioTableData): + # export to BIN + if BASEROM_DEBUG: + sample.to_file(f"{base_path}/aifc/{sample.filename}") + # copy to correct location + shutil.copyfile(f"{base_path}/aifc/{sample.filename}", f"{base_path}/{sample.filename}") + else: + sample.to_file(f"{base_path}/{sample.filename}") + +def extract_samplebank(pool : ThreadPool, extracted_dir : str, sample_banks : List[Union[AudioTableFile, int]], + bank : AudioTableFile, write_xml : bool): + # deal with remaining gaps, have to blob them unless we can find an exact match in another bank + bank.finalize_coverage(sample_banks) + # assign names + bank.assign_names() + + base_path = f"{extracted_dir}/assets/audio/samples/{bank.name}" + + # write xml + with open(f"{extracted_dir}/assets/audio/samplebanks/{bank.file_name}.xml", "w") as outfile: + outfile.write(bank.to_xml(f"assets/audio/samples/{bank.name}")) + + # write the extraction xml if specified + if write_xml: + bank.write_extraction_xml(f"assets/xml/audio/samplebanks/{bank.file_name}.xml") + + # write sample sand blobs + + os.makedirs(f"{base_path}/aifc", exist_ok=True) + + aifc_samples = [sample for sample in bank.samples_final if isinstance(sample, AudioTableSample)] + bin_samples = [sample for sample in bank.samples_final if not isinstance(sample, AudioTableSample)] + + t_start = time.time() + + # we assume the number of bin samples are very small and don't multiprocess it + for sample in bin_samples: + aifc_extract_one_bin(base_path, sample) + + # multiprocess aifc extraction + decompression + async_results = [pool.apply_async(aifc_extract_one_sample, args=(base_path, sample)) for sample in aifc_samples] + # block until done + [res.get() for res in async_results] + + dt = time.time() - t_start + print(f"Samplebank {bank.name} extraction took {dt:.3f}s") + + # drop aifc dir if not in debug mode + if not BASEROM_DEBUG: + shutil.rmtree(f"{base_path}/aifc") + +def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : str, read_xml : bool, write_xml : bool): + print("Setting up...") + + # Open baserom segments + + code_seg = None + audiotable_seg = None + audiobank_seg = None + + with open(f"{extracted_dir}/baserom/code", "rb") as infile: + code_seg = memoryview(infile.read()) + + with open(f"{extracted_dir}/baserom/Audiotable", "rb") as infile: + audiotable_seg = memoryview(infile.read()) + + with open(f"{extracted_dir}/baserom/Audiobank", "rb") as infile: + audiobank_seg = memoryview(infile.read()) + + # ================================================================================================================== + # Collect audio tables + # ================================================================================================================== + + seq_font_tbl_len = version_info.seq_table - version_info.seq_font_table + + sound_font_table = AudioCodeTable(code_seg, version_info.soundfont_table) + sample_bank_table = AudioCodeTable(code_seg, version_info.sample_bank_table) + sequence_table = AudioCodeTable(code_seg, version_info.seq_table) + sequence_font_table = incbin(code_seg, version_info.seq_font_table, seq_font_tbl_len) + + if BASEROM_DEBUG: + # Extract Table Binaries + + os.makedirs(f"{extracted_dir}/baserom_audiotest/audio_code_tables/", exist_ok=True) + + with open(f"{extracted_dir}/baserom_audiotest/audio_code_tables/samplebank_table.bin", "wb") as outfile: + outfile.write(sample_bank_table.data) + + with open(f"{extracted_dir}/baserom_audiotest/audio_code_tables/soundfont_table.bin", "wb") as outfile: + outfile.write(sound_font_table.data) + + with open(f"{extracted_dir}/baserom_audiotest/audio_code_tables/sequence_table.bin", "wb") as outfile: + outfile.write(sequence_table.data) + + with open(f"{extracted_dir}/baserom_audiotest/audio_code_tables/sequence_font_table.bin", "wb") as outfile: + outfile.write(sequence_font_table) + + # ================================================================================================================== + # Collect extraction xmls + # ================================================================================================================== + + samplebank_xmls : Dict[int, Tuple[str, Element]] = {} + soundfont_xmls : Dict[int, Tuple[str, Element]] = {} + sequence_xmls : Dict[int, Tuple[str, Element]] = {} + + if read_xml: + # Read all present xmls + + def walk_xmls(out_dict : Dict[int, Tuple[str, Element]], path : str, typename : str): + for root,_,files in os.walk(path): + for f in files: + fullpath = os.path.join(root, f) + xml = ElementTree.parse(fullpath) + xml_root = xml.getroot() + + if xml_root.tag != typename or "Name" not in xml_root.attrib or "Index" not in xml_root.attrib: + error(f"Malformed {typename} extraction xml: \"{fullpath}\"") + out_dict[int(xml_root.attrib["Index"])] = (f.replace(".xml", ""), xml_root) + + walk_xmls(samplebank_xmls, f"assets/xml/audio/samplebanks", "SampleBank") + walk_xmls(soundfont_xmls, f"assets/xml/audio/soundfonts", "SoundFont") + walk_xmls(sequence_xmls, f"assets/xml/audio/sequences", "Sequence") + + # TODO warn about any missing xmls or xmls with a bad index + + # ================================================================================================================== + # Collect samplebanks + # ================================================================================================================== + + if BASEROM_DEBUG: + os.makedirs(f"{extracted_dir}/baserom_audiotest/audiotable_files", exist_ok=True) + sample_banks = collect_sample_banks(audiotable_seg, extracted_dir, version_info, sample_bank_table, samplebank_xmls) + + # ================================================================================================================== + # Collect soundfonts + # ================================================================================================================== + + if BASEROM_DEBUG: + os.makedirs(f"{extracted_dir}/baserom_audiotest/audiobank_files", exist_ok=True) + soundfonts = collect_soundfonts(audiobank_seg, extracted_dir, version_info, sound_font_table, soundfont_xmls, + sample_banks) + + # ================================================================================================================== + # Finalize samplebanks + # ================================================================================================================== + + for i,bank in enumerate(sample_banks): + if isinstance(bank, AudioTableFile): + bank.finalize_samples() + + # ================================================================================================================== + # Extract samplebank contents + # ================================================================================================================== + + print("Extracting samplebanks...") + + # Check that the sampleconv binary is available + assert os.path.isfile(SAMPLECONV_PATH) , "Compile sampleconv" + + os.makedirs(f"{extracted_dir}/assets/audio/samplebanks", exist_ok=True) + if write_xml: + os.makedirs(f"assets/xml/audio/samplebanks", exist_ok=True) + + with ThreadPool(processes=os.cpu_count()) as pool: + for bank in sample_banks: + if isinstance(bank, AudioTableFile): + extract_samplebank(pool, extracted_dir, sample_banks, bank, write_xml) + + # ================================================================================================================== + # Extract soundfonts + # ================================================================================================================== + + print("Extracting soundfonts...") + + os.makedirs(f"{extracted_dir}/assets/audio/soundfonts", exist_ok=True) + if write_xml: + os.makedirs(f"assets/xml/audio/soundfonts", exist_ok=True) + + for i,sf in enumerate(soundfonts): + sf : AudiobankFile + + # Finalize instruments/drums/etc. + # This step includes assigning the final samplerate and basenote for the instruments, which may be different + # from the samplerate and basenote assigned to their sample prior. + sf.finalize() + + # write the soundfont xml itself + with open(f"{extracted_dir}/assets/audio/soundfonts/{sf.file_name}.xml", "w") as outfile: + outfile.write(sf.to_xml(f"Soundfont_{i}", "assets/audio/samplebanks")) + + # write the extraction xml if specified + if write_xml: + sf.write_extraction_xml(f"assets/xml/audio/soundfonts/{sf.file_name}.xml") diff --git a/tools/audio/extraction/audio_tables.py b/tools/audio/extraction/audio_tables.py new file mode 100644 index 0000000000..d288b92629 --- /dev/null +++ b/tools/audio/extraction/audio_tables.py @@ -0,0 +1,107 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Implements code tables structure and related enums +# + +import struct +from enum import IntEnum + +from .util import incbin + +class AudioStorageMedium(IntEnum): + MEDIUM_RAM = 0 + MEDIUM_UNK = 1 + MEDIUM_CART = 2 + MEDIUM_DISK_DRIVE = 3 + +class AudioCachePolicy(IntEnum): + CACHE_LOAD_PERMANENT = 0 + CACHE_LOAD_PERSISTENT = 1 + CACHE_LOAD_TEMPORARY = 2 + CACHE_LOAD_EITHER = 3 + CACHE_LOAD_EITHER_NOSYNC = 4 + +class AudioCodeTableEntry: + """ + typedef struct { + /* 0x00 */ u32 romAddr; + /* 0x04 */ u32 size; + /* 0x08 */ s8 medium; + /* 0x09 */ s8 cachePolicy; + /* 0x0A */ s16 shortData1; + /* 0x0C */ s16 shortData2; + /* 0x0E */ s16 shortData3; + } AudioTableEntry; // size = 0x10 + """ + def __init__(self, data): + self.rom_addr, self.size, self.medium, self.cache_policy, self.short_data1, self.short_data2, \ + self.short_data3 = struct.unpack(">IIbbhhh", data[:0x10]) + + self.medium = AudioStorageMedium(self.medium) + self.cache_policy = AudioCachePolicy(self.cache_policy) + + self.sample_bank_id_1 = (self.short_data1 >> 8) & 0xFF + self.sample_bank_id_2 = (self.short_data1 >> 0) & 0xFF + + self.num_instruments = (self.short_data2 >> 8) & 0xFF + self.num_drums = (self.short_data2 >> 0) & 0xFF + + self.num_sfx = self.short_data3 + + def __str__(self): + out = "{\n" + out += f" .romAddr = 0x{self.rom_addr:X}\n" + out += f" .size = 0x{self.size:X}\n" + out += f" .medium = {self.medium.name}\n" + out += f" .cachePolicy = {self.cache_policy.name}\n" + out += f" .shortData1 = ({self.sample_bank_id_1} << 8) | {self.sample_bank_id_2}\n" + out += f" .shortData2 = ({self.num_instruments} << 8) | {self.num_drums}\n" + out += f" .shortData3 = {self.num_sfx}\n" + out += "}\n" + return out + + def data(self, segment_data : memoryview, segment_offset : int) -> memoryview: + return incbin(segment_data, self.rom_addr + segment_offset, self.size) + +class AudioCodeTable: + """ + typedef struct { + /* 0x00 */ s16 numEntries; + /* 0x02 */ s16 unkMediumParam; + /* 0x04 */ u32 romAddr; + /* 0x08 */ char pad[0x8]; + /* 0x10 */ AudioTableEntry entries[1/* numEntries */]; + } AudioTable; // size = 0x10 + 0x10 * numEntries + """ + + def __init__(self, rom_image : memoryview, rom_start : int): + header = incbin(rom_image, rom_start, 0x10) + + self.num_entries, self.unk_medium_param, self.rom_addr = struct.unpack(">hhI", header[:8]) + assert all([b == 0 for b in header[8:]]) + + self.data = incbin(rom_image, rom_start, 0x10 + 0x10 * self.num_entries) + + self.entries = [] + for i in range(self.num_entries): + self.entries.append(AudioCodeTableEntry(self.data[0x10 + 0x10 * i:][:0x10])) + + def __iter__(self) -> AudioCodeTableEntry: + for e in self.entries: + yield e + + def __len__(self): + return len(self.entries) + + def __str__(self): + out = "{\n" + out += f" .numEntries = {self.num_entries}\n" + out += f" .unkMediumParam = {self.unk_medium_param}\n" + out += f" .romAddr = 0x{self.rom_addr:X}\n" + out += " .entries = {\n" + for entry in self.entries: + out += str(entry) + "\n" + out += " }\n" + out += "}\n" + return out diff --git a/tools/audio/extraction/audiobank_file.py b/tools/audio/extraction/audiobank_file.py new file mode 100644 index 0000000000..83efbc71c7 --- /dev/null +++ b/tools/audio/extraction/audiobank_file.py @@ -0,0 +1,956 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Implements audiobank file +# + +import struct +from typing import Optional, Tuple +from xml.etree.ElementTree import Element + +from .audio_tables import AudioCodeTableEntry +from .audiobank_structs import AdpcmBook, AdpcmLoop, Drum, Instrument, SoundFontSample, SoundFontSound +from .envelope import Envelope +from .audiotable import AudioTableFile, AudioTableSample +from .tuning import pitch_names +from .util import XMLWriter, align, debugm, merge_like_ranges, merge_ranges + +# Debug settings +PLOT_DRUM_TUNING = False +LOG_COVERAGE = False + +def coverage_log(str): + if LOG_COVERAGE: debugm(str) + +if PLOT_DRUM_TUNING: + import matplotlib.pyplot as plt + + + +# dummy types for coverage labeling + +class Padding: + pass + +class SfxListPtr: + SIZE = 4 + +class DrumsListPtr: + SIZE = 4 + +class InstrumentPtr: + SIZE = 4 + +class DrumPtr: + SIZE = 4 + + + + + +class DrumGroup: + + def __init__(self): + self.drums = [] + self.start = None + self.end = None + self.sample_header_offset = None + self.sample = None + + # Filled in at finalize + self.envelope_offset = None + self.envelope = None + self.release_rate = None + self.pan = None + self.sample_header_offset = None + self.sample_rate = None + self.base_note = None + self.needs_rate_override = None + self.needs_note_override = None + + def __len__(self): + return len(self.drums) + + def __iter__(self): + for drum in self.drums: + yield drum + + def append(self, drum): + self.drums.append(drum) + + def set_range(self, start, end): + self.start, self.end = start, end + + def finalize(self, envelopes, sample_lookup_fn): + # A drum group should use the same envelope for all entries + env_offsets = set(drum.envelope for drum in self.drums) + assert len(env_offsets) == 1 + self.envelope_offset = env_offsets.pop() + self.envelope : Envelope = envelopes[self.envelope_offset] + + # A drum group should use the same release rate + release_rates = set(drum.release_rate for drum in self.drums) + assert len(release_rates) == 1 + self.release_rate = release_rates.pop() + + # The release rate used should belong to the envelope used + assert self.release_rate in self.envelope.release_rates + + # A drum group should always contain a single pan value + pans = set(drum.pan for drum in self.drums) + assert len(pans) == 1 + self.pan = pans.pop() + + # A drum group should be the same sample repeated + sample_header_offsets = set(drum.sample for drum in self.drums) + assert len(sample_header_offsets) == 1 + sample_header_offset = sample_header_offsets.pop() + + # Fetch sample header + self.sample_header_offset = sample_header_offset + sample = sample_lookup_fn(sample_header_offset) + sample : AudioTableSample + + # Collect final samplerate and basenotes for each drum in the group + final_rate = None + notes = [] + for drum in self: + drum : Drum + + tuning = drum.tuning + assert tuning in sample.tuning_map + # Get from sample + rate, note = sample.tuning_map[tuning] + + if final_rate is None: + final_rate = rate + # This should never occur as drum groups are split when the samplerate changes + assert final_rate == rate + + notes.append(note) + + # Note values should increase monotonically in a drum group + note_indices = [pitch_names.index(note) + 21 for note in notes] + assert all(v == note_indices[0] + i for i,v in enumerate(note_indices)) + + # Assign final rate and note. + # Use first note in the group as the basenote for the whole group, the rest will be filled in during build. + self.sample_rate = final_rate + self.base_note = notes[0] + + assert sample.sample_rate is not None + assert sample.base_note is not None + + # Needs override if they do not agree with the final values in the sample + self.needs_rate_override = sample.sample_rate != self.sample_rate + self.needs_note_override = sample.base_note != self.base_note + + def to_xml(self, xml : XMLWriter, name : str, sample_name_func, envelope_name_func): + attributes = { + "Name" : name, + "Envelope" : envelope_name_func(self.envelope_offset), + } + + if self.release_rate != self.envelope.release_rate(): + attributes["Release"] = self.release_rate + + attributes["Pan"] = self.pan + + if self.start == self.end: + attributes["Note"] = pitch_names[self.start] + else: + attributes["NoteStart"] = pitch_names[self.start] + attributes["NoteEnd"] = pitch_names[self.end] + + attributes["Sample"] = sample_name_func(self.sample_header_offset) + + if self.needs_rate_override: + attributes["SampleRate"] = self.sample_rate + if self.needs_note_override: + attributes["BaseNote"] = self.base_note + + xml.write_element("Drum", attributes) + + + + + + + +class AudiobankFile: + """ + """ + + def __init__(self, audiobank_seg : memoryview, index : int, table_entry : AudioCodeTableEntry, + seg_offset : int, bank1 : AudioTableFile, bank2 : AudioTableFile, bank1_num : int, bank2_num : int, + extraction_xml : Tuple[str, Element] = None): + self.bank_num = index + self.table_entry : AudioCodeTableEntry = table_entry + self.num_instruments = self.table_entry.num_instruments + self.data = self.table_entry.data(audiobank_seg, seg_offset) + self.bank1 : AudioTableFile = bank1 + self.bank2 : AudioTableFile = bank2 + self.bank1_num = bank1_num + self.bank2_num = bank2_num + + if extraction_xml is None: + self.file_name = f"Soundfont_{self.bank_num}" + self.name = f"Soundfont_{self.bank_num}" + + self.extraction_envelopes_info = None + self.extraction_instruments_info = None + self.extraction_drums_info = None + self.extraction_effects_info = None + else: + self.file_name = extraction_xml[0] + self.name = extraction_xml[1].attrib["Name"] + + self.extraction_envelopes_info = [] + self.extraction_instruments_info = {} + self.extraction_drums_info = [] + self.extraction_effects_info = [] + + for item in extraction_xml[1]: + if item.tag == "Envelopes": + for env in item: + assert env.tag == "Envelope" + self.extraction_envelopes_info.append(env.attrib["Name"]) + elif item.tag == "Instruments": + for instr in item: + assert instr.tag == "Instrument" + self.extraction_instruments_info[int(instr.attrib["ProgramNumber"])] = instr.attrib["Name"] + elif item.tag == "Drums": + for drum in item: + self.extraction_drums_info.append(drum.attrib["Name"]) + elif item.tag == "Effects": + for effect in item: + self.extraction_effects_info.append(effect.attrib["Name"]) + else: + assert False, item.tag + + # Coverage consists of a list of itervals of the form [[start,type],[end,type]] + self.coverage = [] + self.envelopes = {} + self.sample_headers = {} + self.books = {} + self.loops = {} + self.loops_have_frames = False + + # Read Drums + + self.collect_drums() + self.group_drums() + + # Read Sfx + + self.collect_sfx() + + # Read Instruments + + self.collect_instruments() + + + # Check Coverage + + self.cvg_log() + self.coverage = merge_ranges(self.coverage) + + self.resolve_cvg_gaps() + self.coverage = merge_ranges(self.coverage) + + coverage_log("Final Coverage:") + coverage_log([[[interval[0][0], interval[0][1].__name__], [interval[1][0], interval[1][1].__name__]] for interval in self.coverage]) + coverage_log(f"[[{0}, {len(self.data)}]]") + assert len(self.coverage) == 1 + coverage_log("OK") + + # Check End of File + + self.check_end() + + def collect_drums(self): + # Read structures + + self.drums_ptr_list_ptr = self.read_pointer(0, DrumsListPtr) + assert self.drums_ptr_list_ptr % 16 == 0 + self.drums_ptr_list = self.read_pointer_list(self.drums_ptr_list_ptr, self.table_entry.num_drums, DrumPtr) + self.drums = self.read_list_from_offset_list(self.drums_ptr_list, Drum) + + # Process structures + + for drum in self.drums: + if drum is None: + # NULL pointer in drums pointer list + continue + + # Read envelope + self.read_envelope(drum.envelope, drum.release_rate) + + # Read sample if it exists + if drum.tuning != 0 and drum.sample != 0: + self.read_sample_header(drum.sample, drum.tuning, drum) + + def group_drums(self): + self.drum_groups = [] + + first = True + last_drum = None + for drum in self.drums: + if drum is None: + if last_drum is None and not first: + self.drum_groups[-1].append(None) + else: + self.drum_groups.append([None]) + last_drum = None + else: + drum : Drum + + if not drum.group_continuation(last_drum): + # group changed + self.drum_groups.append(DrumGroup()) + + self.drum_groups[-1].append(drum) + last_drum = drum + + first = False + + note_start = 0 + for drum_grp in self.drum_groups: + note_end = note_start + len(drum_grp) - 1 + + if any(d is not None for d in drum_grp): + drum_grp : DrumGroup + drum_grp.set_range(note_start, note_end) + + note_start = note_end + 1 + + def collect_sfx(self): + # Read structures + + self.sfx_list_ptr = self.read_pointer(4, SfxListPtr) + assert self.sfx_list_ptr % 16 == 0 + self.sfx = self.read_list(self.sfx_list_ptr, self.table_entry.num_sfx, SoundFontSound) + + # Process structures + + for sfx in self.sfx: + # Read sample if it exists + if sfx.tuning != 0 and sfx.sample != 0: + self.read_sample_header(sfx.sample, sfx.tuning, sfx) + + def collect_instruments(self): + # Read structures + self.instrument_offset_list = self.read_pointer_list(8, self.table_entry.num_instruments, InstrumentPtr) + self.instruments = self.read_list_from_offset_list(self.instrument_offset_list, Instrument) + + # Record order information + for i,instr in enumerate(self.instruments): + if instr is None: + # NULL entry in pointer list + continue + instr.program_number = i + instr.offset = self.instrument_offset_list[i] + + # Get rid of NULL entries, these correspond to program numbers with no assigned instrument. + self.instruments = [instr for instr in self.instruments if instr is not None] + + # Build index map for sequence checking + self.instrument_index_map = { instr.program_number : instr for instr in self.instruments } + + # The struct index records the order of the instrument structures themselves. This is often different than the + # order they appear in the pointer table, since the pointer table is indexed by program number. We want to emit + # xml entries in struct order with a property stating their program number as this seems most user-friendly. + for i,instr in enumerate(sorted(self.instruments, key=lambda instr : instr.offset)): + instr : Instrument + instr.struct_index = i + + # Read data that this structure references + + for i,instr in enumerate(self.instruments): + # Read the envelope + self.read_envelope(instr.envelope, instr.release_rate) + + # Read the samples, if they exist + if instr.low_notes_tuning != 0 and instr.low_notes_sample != 0: + self.read_sample_header(instr.low_notes_sample, instr.low_notes_tuning, instr) + + if instr.normal_notes_tuning != 0 and instr.normal_notes_sample != 0: + self.read_sample_header(instr.normal_notes_sample, instr.normal_notes_tuning, instr) + + if instr.high_notes_tuning != 0 and instr.high_notes_sample != 0: + self.read_sample_header(instr.high_notes_sample, instr.high_notes_tuning, instr) + + def cvg_log(self): + if not LOG_COVERAGE: + return + + types_ranges = merge_like_ranges(self.coverage) + + for type_range in types_ranges: + interval_start, interval_start_type = type_range[0] + interval_end, _ = type_range[1] + + if interval_start == interval_end: + continue + + interval_length = interval_end - interval_start + + if interval_start_type == int: + sizeof_type = 4 + elif interval_start_type == Padding: + sizeof_type = interval_end - interval_start + elif interval_start_type == AdpcmBook: + sizeof_type = self.read_book_size(interval_start) + elif interval_start_type == AdpcmLoop: + sizeof_type = self.read_loop_size(interval_start) + elif interval_start_type == Envelope.EnvelopePoint: + sizeof_type = 4 + else: + sizeof_type = interval_start_type.SIZE + + array_size = interval_length // sizeof_type + + output_str = f"0x{interval_start:04X} - 0x{interval_end:04X} : {interval_start_type.__name__}" + if array_size != 1 or interval_start_type == Envelope.EnvelopePoint: + output_str += f"[{array_size}]" + + coverage_log(output_str) + + def resolve_cvg_gaps(self): + if len(self.coverage) < 2: + # There are already no gaps, nothing to do + return + + # Resolve gaps in coverage with heuristics + + for i in range(len(self.coverage) - 1): + prev_interval = self.coverage[i] + next_interval = self.coverage[i + 1] + + unref_start_offset, unref_start_type = prev_interval[1] + unref_end_offset, unref_end_type = next_interval[0] + + unaccounted_data = self.data[unref_start_offset:unref_end_offset] + + if unref_end_type in [AdpcmBook, AdpcmLoop] and all(b == 0 for b in unaccounted_data) and \ + unref_end_offset - unref_start_offset < 16 and (unref_end_offset % 16) == 0: + # Book and Loop structures are aligned to 16 byte boundaries, silently mark padding + self.coverage.append([[unref_start_offset, Padding], [unref_end_offset, Padding]]) + continue + + coverage_log(f"Unaccounted: 0x{unref_start_offset:04X}({unref_start_type.__name__}) " + \ + f"to 0x{unref_end_offset:04X}({unref_end_type.__name__})") + coverage_log([f"0x{b:02X}" for b in unaccounted_data]) + + try: + if unref_start_type == Envelope.EnvelopePoint: + # Assume it is an envelope if it follows an envelope + assert unref_start_offset not in self.envelopes + coverage_log("Unaccounted follows an envelope, assume it is an envelope") + st = self.read_envelope(unref_start_offset, None, is_zero=all(b == 0 for b in unaccounted_data)) + + elif unref_start_type in [SoundFontSample, AdpcmLoop]: + # Orphaned loops are unlikely, it's more likely a SoundFontSample + coverage_log("Unaccounted follows a SoundFontSample or AdpcmLoop, assuming SoundFontSample") + st = self.read_sample_header(unref_start_offset, None, None) + + elif unref_start_type == Instrument: + coverage_log("Unaccounted follows an Instrument, assume it is an Instrument") + st : Instrument = self.read_structure(unref_start_offset, unref_start_type) + # Check that we already saw the sample header this instrument wants + assert st.normal_notes_sample in self.sample_headers + assert st.normal_range_hi == 127 or st.high_notes_sample in self.sample_headers + assert st.normal_range_lo == 0 or st.low_notes_sample in self.sample_headers + # Insert into instrument list in the appropriate location, mark it as unused so that sfc knows not + # to add it to the instrument pointer list when recompiling + st.offset = unref_start_offset + st.unused = True + + # Assign struct index for this unreferenced instrument + new_index = -1 + for instr in sorted(self.instruments, key= lambda instr : instr.struct_index): + instr : Instrument + + if instr.offset > unref_start_offset: + if new_index == -1: + # Record struct index for the unused instrument + new_index = instr.struct_index + # Increment struct indices for every structure that occurs after this one + instr.struct_index += 1 + else: + # Give it a new index at the end + if new_index == -1: + new_index = len(self.instruments) + + st.struct_index = new_index + self.instruments.append(st) + else: + st = self.read_structure(unref_start_offset, unref_start_type) + coverage_log(st) + assert False, "Unhandled coverage case" # handle more structures if they appear + + coverage_log(st) + except Exception as e: + coverage_log("FAILED") + if all(b == 0 for b in unaccounted_data): + coverage_log("Probably padding or an empty file?") + raise e + + def check_end(self): + self.pad_to_size = None + + end = self.coverage[-1][1][0] + end_aligned = align(end, 16) + if end_aligned != len(self.data): + print(f"[Soundfont {self.bank_num:2}] Did not reach end of the file?", + f"0x{end_aligned:X} vs 0x{len(self.data):X}") + assert all(b == 0 for b in self.data[end_aligned:]) + self.pad_to_size = len(self.data) + + self.file_padding = None + + if not all(b == 0 for b in self.data[end:]): + print(f"[Soundfont {self.bank_num:2}] Non-zero unaccounted data at the end of the file?", + f"From 0x{end:X} to 0x{len(self.data):X}") + self.file_padding = self.data[end:] + + def dump_bin(self, path): + with open(path, "wb") as outfile: + outfile.write(self.data) + + def read_loop_size(self, offset): + loop_count, = struct.unpack(">I", self.data[offset+8:offset+0xC]) + return 0x30 if loop_count != 0 else 0x10 + + def read_loop_struct(self, offset): + return AdpcmLoop(self.logged_read(offset, self.read_loop_size(offset), AdpcmLoop)) + + def read_book_size(self, offset): + order, npredictors = struct.unpack(">ii", self.data[offset:offset+8]) + return 8 + 2 * 8 * order * npredictors + + def read_sample_header(self, offset, tuning, ob): + assert offset % 16 == 0 + + if offset in self.sample_headers: + # Don't re-read a sample header structure if it was already read + sample_header = self.sample_headers[offset] + sample_header : SoundFontSample + else: + # Read the new sample header and cache it + sample_header = self.read_structure(offset, SoundFontSample) + self.sample_headers[offset] = sample_header + + # Samples must always have an associated book + assert sample_header.book != 0 + + if sample_header.book in self.books: + # Lookup the book, samples may share books if they are identical + book = self.books[sample_header.book] + else: + # Read the new book + book_size = self.read_book_size(sample_header.book) + book = AdpcmBook(self.logged_read(sample_header.book, book_size, AdpcmBook)) + + # Books are `8 + 16 * n` bytes large and should start on an 0x10 byte boundary. + # Check that we get 8 bytes of padding following the book. + book_end = sample_header.book + book_size + assert sample_header.book % 16 == 0 + assert book_end % 16 == 8 + assert all(b == 0 for b in self.logged_read(book_end, 8, Padding)) + + # Cache it + self.books[sample_header.book] = book + + # Read the loop, if there is one + if sample_header.loop == 0: + # No loop + loop = None + elif sample_header.loop in self.loops: + # Already seen, look it up + loop = self.loops[sample_header.loop] + else: + # Read new loop structure + loop = self.read_loop_struct(sample_header.loop) + + # If loops were determined to store the sample's total frame count, require that all loops with nonzero + # count all have the same behavior within the same soundfont + if self.loops_have_frames and loop.count != 0: + assert loop.num_frames != 0, loop + + # If the numFrames field is nonzero anywhere, record this + # TODO this may miss some checks, fix? + if loop.num_frames != 0: + self.loops_have_frames = True + + # Add the sample to the appropriate samplebank + bank = self.bank1 if sample_header.medium == 0 else self.bank2 + if tuning is not None: + bank.add_sample(sample_header, book, loop, tuning, ob) + else: + # If we found unreferenced sample data that was not discovered elsewhere there is no tuning value to recover + # the samplerate from. These need to be handled manually, but this is currently unsupported as this does not + # occur in zelda64 audio banks. + assert sample_header.sample_addr in bank.samples , \ + "Unreferenced sample header refers to sample that was not otherwise discovered, cannot " + \ + "automatically recover sample rate" + + return sample_header + + def read_envelope_points(self, offset, is_zero=False): + size = 0 + + if not is_zero: + points = [] + + while True: + point = Envelope.EnvelopePoint(*struct.unpack(">hh", self.data[offset + size:][:4])) + assert point.delay >= -3 # TODO this could be used to determine whether data is really an envelope + points.append(point) + size += 4 + if point.delay < 0: + break + + # pad to 0x10 byte boundary + while (size % 16) != 0: + point = Envelope.EnvelopePoint(*struct.unpack(">hh", self.data[offset + size:][:4])) + assert point.delay == 0 and point.arg == 0 + points.append(point) + size += 4 + else: + size = 16 + points = [Envelope.EnvelopePoint(0, 0), Envelope.EnvelopePoint(0, 0), + Envelope.EnvelopePoint(0, 0), Envelope.EnvelopePoint(0, 0)] + + return points, size + + def read_envelope(self, offset, release_rate, is_zero=False): + assert offset % 16 == 0 + + if offset in self.envelopes: + # Look it up if it was already seen + env = self.envelopes[offset] + else: + # Read new + points, size = self.read_envelope_points(offset, is_zero) + env = Envelope(points, is_zero=is_zero) + + # Cache it + self.envelopes[offset] = env + # Mark coverage + self.coverage.append([[offset, Envelope.EnvelopePoint], [offset + size, Envelope.EnvelopePoint]]) + + # Add release rate if there was one + if release_rate is not None: + env.release_rates.append(release_rate) + + return env + + def logged_read(self, start, length, dtype): + """ + Read data while also recording coverage information + """ + end = start + length + self.coverage.append([[start, dtype], [end, dtype]]) + return self.data[start:end] + + def read_structure(self, offset, dtype): + return dtype(self.logged_read(offset, dtype.SIZE, dtype)) + + def read_list(self, offset, num, dtype): + return [dtype(i, self.logged_read(offset + i * dtype.SIZE, dtype.SIZE, dtype)) for i in range(num)] + + def read_pointer(self, offset, ptr_type): + return struct.unpack('>I', self.logged_read(offset, 4, ptr_type))[0] + + def read_list_from_offset_list(self, offset_list, dtype): + assert all([b % 0x10 == 0 for b in offset_list]) + return [dtype(self.logged_read(offset, dtype.SIZE, dtype)) if offset != 0 else None for offset in offset_list] + + def read_pointer_list(self, offset, count, ptr_type): + # May be NULL, but only if the count is 0 + assert (count == 0 and offset == 0) or offset != 0 + + if count == 0: + # No data + return [] + + # Read pointer list contents + ptr_list = [i[0] for i in struct.iter_unpack('>I', self.logged_read(offset, 4 * count, ptr_type))] + assert len(ptr_list) == count + + # Pointer lists seem to always pad to the next 0x10 byte boundary + pointers_end = offset + 4 * count + possible_pad = self.logged_read(pointers_end, align(pointers_end, 16) - pointers_end, Padding) + assert all(b == 0 for b in possible_pad) + + return ptr_list + + def sorted_envelopes(self): + # sort by offset + for i,(offset,env) in enumerate(sorted(self.envelopes.items(), key=lambda x : x[0])): + yield i,(offset,env) + + def envelope_name_func(self, offset): + return self.envelopes[offset].name + + def sorted_sample_headers(self): + for i,offset in enumerate(sorted(self.sample_headers)): + yield i,(offset,self.sample_headers[offset]) + + def lookup_sample(self, header_offset : int) -> Optional[AudioTableSample]: + if header_offset == 0: + return None + header : SoundFontSample = self.sample_headers[header_offset] + bank = self.bank1 if header.medium == 0 else self.bank2 + return bank.lookup_sample(header.sample_addr) + + def lookup_sample_name(self, sample_header : SoundFontSample): + bank = self.bank1 if sample_header.medium == 0 else self.bank2 + name = bank.lookup_sample(sample_header.sample_addr).name + assert name is not None + return name + + def sample_name_func(self, offset): + return self.lookup_sample_name(self.sample_headers[offset]) + + def finalize(self): + # Assign envelope names + for i,(offset,env) in self.sorted_envelopes(): + env : Envelope + env.name = self.envelope_name(i) + + # Link Instruments + for instr in self.instruments: + instr.finalize(self.lookup_sample) + + # Final Drum Groups + + if PLOT_DRUM_TUNING: + plt.clf() + plt.cla() + plt.title(f"Drums in soundfont {self.bank_num}") + plt.xlabel("Drum index") + plt.ylabel("Tuning value") + + for drum_grp in self.drum_groups: + if all(d is None for d in drum_grp): + continue + + if PLOT_DRUM_TUNING: + plt.plot( range(drum_grp.start,drum_grp.end), [drum.tuning for drum in drum_grp]) + plt.scatter(range(drum_grp.start,drum_grp.end), [drum.tuning for drum in drum_grp]) + + drum_grp : DrumGroup + drum_grp.finalize(self.envelopes, self.lookup_sample) + + if PLOT_DRUM_TUNING: + if len(self.drum_groups) != 0: + plt.savefig(f"figures/drums_{self.bank_num}.png") + + # Link SFX + for sfx in self.sfx: + sfx.finalize(self.lookup_sample) + + # TODO resolve decay/release index overrides? + + def envelope_name(self, index): + if self.extraction_envelopes_info is not None: + return self.extraction_envelopes_info[index] + else: + return f"Env{index}" + + def instrument_name(self, program_number): + if self.extraction_instruments_info is not None: + return self.extraction_instruments_info[program_number] + else: + return f"INST_{program_number}" + + def drum_grp_name(self, index): + if self.extraction_drums_info is not None: + return self.extraction_drums_info[index] + else: + return f"DRUM_{index}" + + def effect_name(self, index): + if self.extraction_effects_info is not None: + return self.extraction_effects_info[index] + else: + return f"EFFECT_{index}" + + def envelopes_to_xml(self, xml : XMLWriter): + if len(self.envelopes) == 0: + return + + xml.write_start_tag("Envelopes") + + for i,(offset,env) in self.sorted_envelopes(): + env : Envelope + env.to_xml(xml, self.envelope_name(i)) + + xml.write_end_tag() + + def samples_to_xml(self, xml : XMLWriter): + if len(self.sample_headers) == 0: + return + + xml.write_start_tag("Samples") + + # Emit these in the order the sample headers appear in the soundfont + for i,(offset,sample_header) in self.sorted_sample_headers(): + sample_header : SoundFontSample + sample_header.to_xml(xml, self.lookup_sample_name(sample_header)) + + xml.write_end_tag() + + def sfx_to_xml(self, xml : XMLWriter): + if len(self.sfx) == 0: + return + + xml.write_start_tag("Effects") + + for i,sfx in enumerate(self.sfx): + sfx.to_xml(xml, self.effect_name(i), self.sample_name_func) + + xml.write_end_tag() + + def drums_to_xml(self, xml : XMLWriter): + if len(self.drums) == 0: + return + + xml.write_start_tag("Drums") + + for i,drum_grp in enumerate(self.drum_groups): + if isinstance(drum_grp, list): + for _ in range(len(drum_grp)): + xml.write_element("Drum") + else: + drum_grp : DrumGroup + drum_grp.to_xml(xml, self.drum_grp_name(i), self.sample_name_func, self.envelope_name_func) + + xml.write_end_tag() + + def instruments_to_xml(self, xml : XMLWriter): + if len(self.instruments) == 0: + return + + xml.write_start_tag("Instruments") + + # Write in struct order + for instr in sorted(self.instruments, key=lambda instr : instr.struct_index): + instr : Instrument + name = self.instrument_name(instr.program_number) if not instr.unused else None + instr.to_xml(xml, name, self.sample_name_func, self.envelope_name_func) + + xml.write_end_tag() + + def to_xml(self, name, samplebanks_base): + xml = XMLWriter() + + start = { + "Name" : name, + "Index" : self.bank_num, + "Medium" : self.table_entry.medium.name, + "CachePolicy" : self.table_entry.cache_policy.name, + "SampleBank" : f"$(BUILD_DIR)/{samplebanks_base}/{self.bank1.file_name}.xml", + } + + # If the samplebank1 index is not the true index (that is it's a pointer), write an Indirect + if self.bank1_num != self.bank1.bank_num: + start["Indirect"] = self.bank1_num + + if self.bank2_num != 255: # bank2 is not None if bank2_num != 255 + start["SampleBankDD"] = f"$(BUILD_DIR)/{samplebanks_base}/{self.bank2.file_name}.xml", + # TODO we should really write an indirect for DD banks too if bank2_num != bank2.bank_num + + if self.loops_have_frames: + # Some MM banks have sample frame counts embedded in loop headers, but not all soundfonts do this + start["LoopsHaveFrames"] = "true" + + if max(instr.program_number or 0 for instr in self.instruments) + 1 != self.table_entry.num_instruments: + # Some banks have trailing NULLs in their instrument pointer tables, record the max length for matching + start["NumInstruments"] = self.table_entry.num_instruments + + if self.pad_to_size is not None: + # The final soundfont typically has extra zeros at the end + start["PadToSize"] = f"0x{self.pad_to_size:X}" + + xml.write_start_tag("Soundfont", start) + + self.envelopes_to_xml(xml) + self.samples_to_xml(xml) + + self.sfx_to_xml(xml) + self.drums_to_xml(xml) + self.instruments_to_xml(xml) + + if self.file_padding is not None: + # Some soundfonts may have garbage data in the final 16-byte file padding + xml.write_start_tag("MatchPadding") + xml.write_raw(", ".join(f"0x{b:02X}" for b in self.file_padding)) + xml.write_end_tag() + + xml.write_end_tag() + return str(xml) + + def write_extraction_xml(self, path): + xml = XMLWriter() + + xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/soundfonts/") + + xml.write_start_tag("SoundFont", { + "Name" : self.name, + "Index" : self.bank_num, + }) + + # add contents for names + + if len(self.envelopes) != 0: + xml.write_start_tag("Envelopes") + + for i in range(len(self.envelopes)): + xml.write_element("Envelope", { + "Name" : self.envelope_name(i) + }) + + xml.write_end_tag() + + if len(self.instruments) != 0: + xml.write_start_tag("Instruments") + + # Write in struct order + for instr in sorted(self.instruments, key=lambda instr : instr.struct_index): + instr : Instrument + if not instr.unused: + xml.write_element("Instrument", { + "ProgramNumber" : instr.program_number, + "Name" : self.instrument_name(instr.program_number), + }) + + xml.write_end_tag() + + if any(isinstance(dg, DrumGroup) for dg in self.drum_groups): + xml.write_start_tag("Drums") + + for i,drum_grp in enumerate(self.drum_groups): + if isinstance(drum_grp, DrumGroup): + xml.write_element("Drum", { + "Name" : self.drum_grp_name(i) + }) + + xml.write_end_tag() + + if len(self.sfx) != 0: + xml.write_start_tag("Effects") + + for i,sfx in enumerate(self.sfx): + xml.write_element("Effect", { + "Name" : self.effect_name(i) + }) + + xml.write_end_tag() + + xml.write_end_tag() + + with open(path, "w") as outfile: + outfile.write(str(xml)) diff --git a/tools/audio/extraction/audiobank_structs.py b/tools/audio/extraction/audiobank_structs.py new file mode 100644 index 0000000000..fa6afa37d0 --- /dev/null +++ b/tools/audio/extraction/audiobank_structs.py @@ -0,0 +1,406 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# This file implements reading various structures resident to the Audiobank files. +# Additionally handles: +# - Linking with finalized samples +# - Writing xml elements representing these structures in soundfont xmls +# + +import struct +from enum import IntEnum + +from .audio_tables import AudioStorageMedium +from .tuning import rate_from_tuning, pitch_names +from .util import XMLWriter + +VADPCM_VERSTAMP = 1 + +class AudioSampleCodec(IntEnum): + CODEC_ADPCM = 0 + CODEC_S8 = 1 + CODEC_S16_INMEMORY = 2 + CODEC_SMALL_ADPCM = 3 + CODEC_REVERB = 4 + CODEC_S16 = 5 + + + +class SoundFontSample: # SampleHeader ? + """ + typedef struct { + /* 0x00 */ u32 codec : 4; + /* 0x00 */ u32 medium : 2; // storage medium determines which of the two sample bank ids to use when relocating sampleAddr + /* 0x00 */ u32 cached : 1; + /* 0x00 */ u32 isRelocated : 1; + /* 0x01 */ u32 size : 24; + /* 0x04 */ u8* sampleAddr; // offset into the sample bank associated with this soundfont + /* 0x08 */ AdpcmLoop* loop; + /* 0x0C */ AdpcmBook* book; + } SoundFontSample; // size = 0x10 + """ + SIZE = 0x10 + + def __init__(self, data): + bits, self.sample_addr, self.loop, self.book = struct.unpack(">IIII", data[:0x10]) + + self.codec = AudioSampleCodec((bits >> 28) & 0b1111) + self.medium = AudioStorageMedium((bits >> 26) & 0b11) + self.cached = bool((bits >> 25) & 1) + self.is_relocated = bool((bits >> 24) & 1) + self.size = (bits >> 0) & 0b111111111111111111111111 + + assert self.book != 0 + assert self.loop != 0 + assert self.codec in [AudioSampleCodec.CODEC_ADPCM, AudioSampleCodec.CODEC_SMALL_ADPCM] + assert self.medium == 0 + assert not self.is_relocated # Not relocated in ROM + + def to_xml(self, xml : XMLWriter, name : str, rate_override = None, note_override = None): + # Example xml output: + # + + attrs = { "Name" : name } + if rate_override is not None: + attrs["SampleRate"] = rate_override + if note_override is not None: + attrs["BaseNote"] = note_override + if self.medium != 0: + attrs["IsDD"] = "true" + if self.cached: + attrs["Cached"] = str(self.cached).lower() + + xml.write_element("Sample", attrs) + + def __str__(self): + out = "(SoundFontSample){\n" + out += f" .codec = {self.codec.name}\n" + out += f" .medium = {self.medium.name}\n" + out += f" .cached = {self.cached}\n" + out += f" .is_relocated = {self.is_relocated}\n" + out += f" .size = 0x{self.size:X}\n" + out += f" .sampleAddr = 0x{self.sample_addr:X}\n" + out += f" .loop = 0x{self.loop:X}\n" + out += f" .book = 0x{self.book:X}\n" + out += "}\n" + return out + + + +class AdpcmLoop: + """ + typedef struct { + /* 0x00 */ u32 start; + /* 0x04 */ u32 end; + /* 0x08 */ u32 count; + /* 0x0C */ u32 numFrames; + /* 0x10 */ s16 state[16]; // only exists if count != 0. 8-byte aligned + } AdpcmLoop; // size = 0x30 (or 0x10) + """ + + def __init__(self, data): + self.start, self.end, self.count, self.num_frames = struct.unpack(">IIII", data[:0x10]) + + # We expect loops to be either "no loop" or "infinite", as these are all that vadpcm_enc could handle. + assert self.count in (0,0xFFFFFFFF) + + if self.count != 0: + self.state = tuple(s[0] for s in struct.iter_unpack(">h", data[0x10:0x30])) + else: + # A count of 0 indicates "no loop", but a loop structure is mandatory for all samples so something had to + # be emitted. Ensure the start is at 0, later we will ensure that the end is at the last frame of the sample + # once we have the sample data. + assert self.start == 0 + self.state = tuple([0] * 16) + assert len(self.state) == 16 + + def serialize(self): + """ + Creates VADPCMLOOPS section data for aifc files + """ + NUM_LOOPS = 1 + + return struct.pack(">HHIII16h", + VADPCM_VERSTAMP, NUM_LOOPS, + self.start, self.end, self.count, + *self.state) + + def __eq__(self, other): + if not isinstance(other, AdpcmLoop): + return False + other : AdpcmLoop + + start_matches = self.start == other.start + end_matches = self.end == other.end + count_matches = self.count == other.count + # We don't check num_frames in loop equality since loops in different soundfonts referring to the same + # sample data may not have this field filled out + return start_matches and end_matches and count_matches and self.state == other.state + + def __str__(self): + out = "(AdpcmLoop){\n" + out += f" .start = {self.start},\n" + out += f" .end = {self.end},\n" + out += f" .count = {self.count},\n" + out += f" .numFrames = {self.num_frames},\n" + out += f" .state = {self.state},\n" + out += "}\n" + return out + +class AdpcmBook: + """ + typedef struct { + /* 0x00 */ s32 order; + /* 0x04 */ s32 npredictors; + /* 0x08 */ s16 book[1]; // size 8 * order * npredictors. 8-byte aligned + } AdpcmBook; // size >= 0x8 + """ + + def __init__(self, data): + self.order, self.n_predictors = struct.unpack(">ii", data[:8]) + self.book = tuple(s[0] for s in struct.iter_unpack(">h", data[8:][:2 * 8 * self.order * self.n_predictors])) + assert len(self.book) == 8 * self.order * self.n_predictors , (len(self.book), 8 * self.order * self.n_predictors) + + def serialize(self): + header = struct.pack(">hhh", VADPCM_VERSTAMP, self.order, self.n_predictors) + data = b"".join(struct.pack(">h", x) for x in self.book) + return header + data + + def __eq__(self, other): + if not isinstance(other, AdpcmBook): + return False + other : AdpcmBook + + order_matches = self.order == other.order + npredictors_matches = self.n_predictors == other.n_predictors + return order_matches and npredictors_matches and self.book == other.book + + def __str__(self): + out = "(AdpcmBook){\n" + out += f" .order = {self.order},\n" + out += f" .npredictors = {self.n_predictors},\n" + out += f" .book = {self.book},\n" + out += "}\n" + return out + + + +class SoundFontSound: + """ + typedef struct { + /* 0x00 */ SoundFontSample* sample; + /* 0x04 */ f32 tuning; // frequency scale factor + } SoundFontSound; // size = 0x8 + """ + SIZE = 8 + + def __init__(self, index, data): + self.index = index + self.sample, self.tuning = struct.unpack(">If", data[:8]) + + def finalize(self, sample_lookup_fn): + from .audiotable import AudioTableSample + + sample = sample_lookup_fn(self.sample) + if sample is None: + return + + assert isinstance(sample, AudioTableSample) + sample : AudioTableSample + + assert self.tuning in sample.tuning_map + rate,note = sample.tuning_map[self.tuning] + + self.sample_rate = rate + self.needs_rate_override = self.sample_rate != sample.sample_rate + + self.base_note = note + self.needs_note_override = self.base_note != sample.base_note + + def __str__(self) -> str: + out = "(SoundFontSound}{\n" + out += f" .sample = 0x{self.sample:X}\n" + out += f" .tuning = {self.tuning:.7f}f\n" + out += "}\n" + return out + + def to_xml(self, xml : XMLWriter, name : str, sample_name_func): + if self.sample == 0 and self.tuning == 0: + xml.write_element("Effect") + else: + attrs = { + "Name" : name, + "Sample" : sample_name_func(self.sample), + } + if self.needs_rate_override: + attrs["SampleRate"] = self.sample_rate + if self.needs_note_override: + attrs["BaseNote"] = self.base_note + + xml.write_element("Effect", attrs) + + + +class Drum: + """ + typedef struct { + /* 0x00 */ u8 releaseRate; + /* 0x01 */ u8 pan; + /* 0x02 */ u8 isRelocated; + /* 0x04 */ SoundFontSound sound; + /* 0x0C */ AdsrEnvelope* envelope; + } Drum; // size = 0x10 + """ + SIZE = 0x10 + + def __init__(self, data): + self.release_rate, self.pan, self.is_relocated, self.sample, self.tuning, self.envelope = \ + struct.unpack(">BBBxIfI", data[:0x10]) + + assert self.is_relocated == 0 + + def group_continuation(self, other): + """ + Determine if self is a continuation of the drum group containing other, the last drum added. + """ + # If there is no previous drum or the previous drum was an empty entry, always begin a new group + if other is None: + return False + + assert isinstance(other, Drum) + + # Check general agreement, if these attributes do not match it is certainly not part of the same group + if self.sample == other.sample and self.pan == other.pan and self.envelope == other.envelope and \ + self.release_rate == other.release_rate: + # If there is any intersection in the samplerates, assume these are in the same drum group + samplerates1 = set(rate for _,rate in rate_from_tuning(self.tuning)) + samplerates2 = set(rate for _,rate in rate_from_tuning(other.tuning)) + return len(samplerates1.intersection(samplerates2)) != 0 + + return False + + def __str__(self): + out = "(Drum){\n" + out += f" .releaseRate = {self.release_rate},\n" + out += f" .pan = {self.pan},\n" + out += f" .isRelocated = {self.is_relocated},\n" + out += f" .sound.sample = 0x{self.sample:X},\n" + out += f" .sound.tuning = {self.tuning:.7f}f,\n" + out += f" .envelope = 0x{self.envelope:X},\n" + out += "}\n" + return out + + + +class Instrument: + """ + typedef struct { + /* 0x00 */ u8 isRelocated; + /* 0x01 */ u8 normalRangeLo; + /* 0x02 */ u8 normalRangeHi; + /* 0x03 */ u8 releaseRate; + /* 0x04 */ AdsrEnvelope* envelope; + /* 0x08 */ SoundFontSound lowNotesSound; + /* 0x10 */ SoundFontSound normalNotesSound; + /* 0x18 */ SoundFontSound highNotesSound; + } Instrument; // size = 0x20 + """ + SIZE = 0x20 + + def __init__(self, data): + self.is_relocated, self.normal_range_lo, self.normal_range_hi, self.release_rate, self.envelope, \ + self.low_notes_sample, self.low_notes_tuning, \ + self.normal_notes_sample, self.normal_notes_tuning, \ + self.high_notes_sample, self.high_notes_tuning = struct.unpack(">BBBBIIfIfIf", data[:0x20]) + + self.program_number = None + self.offset = None + self.struct_index = None + self.unused = False + + assert self.is_relocated == 0 + + # Sample is either present or the split point is at the start/end + assert not (self.low_notes_sample == 0 and self.low_notes_tuning == 0.0) or self.normal_range_lo == 0 + assert not (self.high_notes_sample == 0 and self.high_notes_tuning == 0.0) or self.normal_range_hi == 127 + + def __str__(self): + out = "(Instrument){\n" + out += f" .isRelocated = {self.is_relocated},\n" + out += f" .normalRangeLo = {self.normal_range_lo},\n" + out += f" .normalRangeHi = {self.normal_range_hi},\n" + out += f" .releaseRate = {self.release_rate},\n" + out += f" .envelope = 0x{self.envelope:X},\n" + out += f" .lowNotesSound.sample = {self.low_notes_sample},\n" + out += f" .lowNotesSound.tuning = {self.low_notes_tuning},\n" + out += f" .normalNotesSound.sample = {self.normal_notes_sample},\n" + out += f" .normalNotesSound.tuning = {self.normal_notes_tuning},\n" + out += f" .highNotesSound.sample = {self.high_notes_sample},\n" + out += f" .highNotesSound.tuning = {self.high_notes_tuning},\n" + out += "}\n" + return out + + def finalize(self, sample_lookup_fn): + from .audiotable import AudioTableSample + + self.sample_rate = [None] * 3 + self.base_note = [None] * 3 + self.needs_rate_override = [False] * 3 + self.needs_note_override = [False] * 3 + + sample_offsets = (self.low_notes_sample, self.normal_notes_sample, self.high_notes_sample) + tunings = (self.low_notes_tuning, self.normal_notes_tuning, self.high_notes_tuning) + for i,(sample_offset,tuning) in enumerate(zip(sample_offsets, tunings)): + sample = sample_lookup_fn(sample_offset) + if sample is None: + continue + assert isinstance(sample, AudioTableSample) + sample : AudioTableSample + + assert tuning in sample.tuning_map + rate,note = sample.tuning_map[tuning] + + self.sample_rate[i] = rate + self.needs_rate_override[i] = self.sample_rate[i] != sample.sample_rate + + self.base_note[i] = note + self.needs_note_override[i] = self.base_note[i] != sample.base_note + + def to_xml(self, xml : XMLWriter, name : str, sample_names_func, envelope_name_func): + attributes = {} + + if not self.unused: + attributes["ProgramNumber"] = self.program_number + attributes["Name"] = name + + # TODO release rate overrides? + attributes.update({ + "Envelope" : envelope_name_func(self.envelope), + #"Release" : self.release_rate, + "Sample" : sample_names_func(self.normal_notes_sample), + }) + + if self.needs_rate_override[1]: + attributes["SampleRate"] = self.sample_rate[1] + if self.needs_note_override[1]: + attributes["BaseNote"] = self.base_note[1] + + if self.normal_range_lo != 0: + attributes["RangeLo"] = pitch_names[self.normal_range_lo] + attributes["SampleLo"] = sample_names_func(self.low_notes_sample) + + if self.needs_rate_override[0]: + attributes["SampleRateLo"] = self.sample_rate[0] + if self.needs_note_override[0]: + attributes["BaseNoteLo"] = self.base_note[0] + + if self.normal_range_hi != 127: + attributes["RangeHi"] = pitch_names[self.normal_range_hi] + attributes["SampleHi"] = sample_names_func(self.high_notes_sample) + + if self.needs_rate_override[2]: + attributes["SampleRateHi"] = self.sample_rate[2] + if self.needs_note_override[2]: + attributes["BaseNoteHi"] = self.base_note[2] + + xml.write_element("Instrument" if not self.unused else "InstrumentUnused", attributes) diff --git a/tools/audio/extraction/audiotable.py b/tools/audio/extraction/audiotable.py new file mode 100644 index 0000000000..9511acecda --- /dev/null +++ b/tools/audio/extraction/audiotable.py @@ -0,0 +1,692 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# +# + +import math, struct +from typing import Dict, Tuple +from xml.etree.ElementTree import Element + +from .audio_tables import AudioCodeTableEntry +from .audiobank_structs import AudioSampleCodec, SoundFontSample, AdpcmBook, AdpcmLoop +from .tuning import pitch_names, note_z64_to_midi, recalc_tuning, rate_from_tuning, rank_rates_notes, BAD_FLOATS +from .util import align, error, XMLWriter, f32_to_u32 + +class AIFCFile: + + def __init__(self): + self.sections = [] + self.total_size = 0 + + @staticmethod + def pstring(data): + return bytes([len(data)]) + data + (b"" if len(data) % 2 else b"\0") + + @staticmethod + def serialize_f80(num): + """ + Convert num to 80-bit float. Does not accept denormal/infinity/nan but these should never appear anyway. + """ + num = float(num) + if num == 0.0: + return b"\0" * 10 + elif num == -0.0: + return b"\x80" + b"\0" * 9 + + f64_bits, = struct.unpack(">Q", struct.pack(">d", num)) + + f64_sign_bit = f64_bits & (2 ** 63) + + f64_exponent = (f64_bits ^ f64_sign_bit) >> 52 + assert f64_exponent != 0, "can't handle denormals" + assert f64_exponent != 0x7FF, "can't handle infinity/nan" + f64_exponent -= 1023 + + f64_mantissa = f64_bits & (2 ** 52 - 1) + + f80_sign_bit = f64_sign_bit << (80 - 64) + f80_exponent = (f64_exponent + 0x3FFF) << 64 + f80_mantissa = (2 ** 63) | (f64_mantissa << (63 - 52)) + + f80 = f80_sign_bit | f80_exponent | f80_mantissa + + return struct.pack(">HQ", f80 >> 64, f80 & (2 ** 64 - 1)) + + def add_section(self, tp, data): + assert isinstance(tp, bytes) + assert isinstance(data, bytes) + + self.sections.append((tp, data)) + self.total_size += align(len(data),2) + 8 + + def add_custom_section(self, tp, data): + self.add_section(b"APPL", b"stoc" + self.pstring(tp) + data) + + def remove_section(self, tp): + assert isinstance(tp, bytes) + + for s_tp, s_data in self.sections: + if s_tp == tp: + self.sections.remove((s_tp, s_data)) + self.total_size -= align(len(s_data),2) + 8 + return + + def commit(self, outpath): + self.total_size += 4 + + with open(outpath, "wb") as outfile: + outfile.write(b"FORM" + struct.pack(">I", self.total_size) + b"AIFC") + + for tp, data in self.sections: + outfile.write(tp + struct.pack(">I", len(data))) + outfile.write(data) + + if len(data) % 2: + outfile.write(b"\0") + +class AudioTableData: + """ + Unaccounted data in the Audiotable + """ + + def __init__(self, start, end, data): + self.start : int = start + self.end : int = end + self.data = data + assert len(self.data) % 2 == 0 + + self.name : str = None + self.filename : str = None + + def __len__(self): + return len(self.data) + + def to_asm(self, name): + out = f"# {name} [0x{self.start:X}:0x{self.end:X}](0x{self.end-self.start:X})\n\n" + out += " .byte " + for i,b in enumerate(self.data): + if i != 0 and i % 32 == 0: + out = out[:-2] + "\n .byte " + out += f"0x{b:02X}, " + out = out[:-2] + "\n\n" + return out + + def to_file(self, outpath : str): + # Output as binary blob + + with open(outpath, "wb") as outfile: + outfile.write(self.data) + + + +PCM16_SAMPLE_SIZE = 16 + +class AudioTableSample(AudioTableData): + """ + Sample in the Audiotable + """ + + def __init__(self, start : int, end : int, header : SoundFontSample, data, book : AdpcmBook, loop : AdpcmLoop, padding=None): + super().__init__(start, end, data) + + self.header : SoundFontSample = header + self.book : AdpcmBook = book + self.loop : AdpcmLoop = loop + self.padding = padding + + self.notes_rates = set() + self.sample_rate = None + self.base_note = None + self.tuning_map = None + + if self.loop.count == 0: + # If a count is 0 the loop end must be the (bugged, vadpcm_enc computed it wrong originally) frame count + num_frames_bugged = (len(self.data) * PCM16_SAMPLE_SIZE) // self.frame_size() + assert self.loop.end == num_frames_bugged, f"{self.loop.end}, {num_frames_bugged}" + + def clone(self, start, end, padding): + new_sample = AudioTableSample(start, end, self.header, self.data, self.book, self.loop, padding) + new_sample.notes_rates = self.notes_rates + return new_sample + + def frame_size(self): + return { + AudioSampleCodec.CODEC_ADPCM : 9, + AudioSampleCodec.CODEC_S8 : 16, + AudioSampleCodec.CODEC_S16_INMEMORY : 32, + AudioSampleCodec.CODEC_SMALL_ADPCM : 5, + AudioSampleCodec.CODEC_REVERB : 0, + AudioSampleCodec.CODEC_S16 : 32 + }[self.header.codec] + + def codec_id(self): + return { + AudioSampleCodec.CODEC_ADPCM : b'ADP9', + AudioSampleCodec.CODEC_S8 : b'HPCM', + AudioSampleCodec.CODEC_S16_INMEMORY : b'NONE', + AudioSampleCodec.CODEC_SMALL_ADPCM : b'ADP5', + AudioSampleCodec.CODEC_REVERB : b'RVRB', + AudioSampleCodec.CODEC_S16 : b'NONE', + }[self.header.codec] + + def codec_name(self): + return { + AudioSampleCodec.CODEC_ADPCM : b"Nintendo/SGI VADPCM 9-bytes/frame", + AudioSampleCodec.CODEC_S8 : b"Half-frame PCM", + AudioSampleCodec.CODEC_S16_INMEMORY : b"Uncompressed", + AudioSampleCodec.CODEC_SMALL_ADPCM : b"Nintendo/SGI VADPCM 5-bytes/frame", + AudioSampleCodec.CODEC_REVERB : b"Nintendo Reverb format", + AudioSampleCodec.CODEC_S16 : b"Uncompressed" + }[self.header.codec] + + def codec_file_extension_compressed(self): + ext = { + AudioSampleCodec.CODEC_ADPCM : ".aifc", + AudioSampleCodec.CODEC_S8 : None, + AudioSampleCodec.CODEC_S16_INMEMORY : None, + AudioSampleCodec.CODEC_SMALL_ADPCM : ".half.aifc", + AudioSampleCodec.CODEC_REVERB : None, + AudioSampleCodec.CODEC_S16 : ".aiff", + }[self.header.codec] + assert ext is not None + return ext + + def codec_file_extension_decompressed(self): + ext = { + AudioSampleCodec.CODEC_ADPCM : ".wav", + AudioSampleCodec.CODEC_S8 : None, + AudioSampleCodec.CODEC_S16_INMEMORY : None, + AudioSampleCodec.CODEC_SMALL_ADPCM : ".half.wav", + AudioSampleCodec.CODEC_REVERB : None, + AudioSampleCodec.CODEC_S16 : ".wav", + }[self.header.codec] + assert ext is not None + return ext + + def base_note_number(self): + return note_z64_to_midi(pitch_names.index(self.base_note)) + + def resolve_basenote_rate(self, extraction_sample_info : Dict[int, Dict[str,str]]): + assert len(self.notes_rates) != 0 + + # rate_3ds = None + # if SAMPLERATES_3DS is not None: + # rate_3ds = SAMPLERATES_3DS[self.bank_num].get(i, None) + + tuning_map = {} + def update_tuning_map(tuning, rate, note): + tuning_map.update({ tuning : (rate, note) }) + + # check + tuning_bits = f32_to_u32(tuning) + ntuning = recalc_tuning(rate, note) + assert ntuning == tuning or tuning_bits in BAD_FLOATS, \ + f"Got: {ntuning}(0x{f32_to_u32(ntuning):X}), Expected: {tuning}(0x{f32_to_u32(tuning):X})" + + if len(self.notes_rates) == 1: + # only need to match one tuning value + + notes_rates,tuning = self.notes_rates.pop() + + # if rate_3ds is not None and rate_3ds not in [rate for _,rate in notes_rates]: + # print(f"NONMATCHING: 3DS={rate_3ds} N64={[rate for _,rate in notes_rates]}") + + if len(notes_rates) == 1: + # only one possible combination of samplerate and basenote + final_note,final_rate = notes_rates[0] + else: + # Several possible combinations of samplerate and basenote that result in the same tuning value, + # choose just one by arbitrary ranking + final_rate,(final_note,) = rank_rates_notes(tuple((rate, (note,)) for note,rate in notes_rates)) + + update_tuning_map(tuning, final_rate, final_note) + else: + # need to match for multiple tuning values + + # produce a list of samplerates that are common to all entries, the correct samplerate is most likely in + # this intersection + rate_cands = set.intersection(*(set(rate for note,rate in nrs) for nrs,t in self.notes_rates)) + + # if rate_3ds is not None and rate_3ds not in rate_cands: + # print(f"NONMATCHING: 3DS={rate_3ds} N64={rate_cands}") + + if len(rate_cands) == 0: + # no common samplerates, arbitrarily rank each separately to get best candidate for each tuning, then + # rank those again to find the one we should associate with the sample itself + + finalists = [] + for all_layout,tuning in self.notes_rates: + best_rate,(best_note,) = rank_rates_notes([(rate, (note,)) for note, rate in all_layout]) + + update_tuning_map(tuning, best_rate, best_note) + + finalists.append((best_rate,(best_note,))) + + final_rate,(final_note,) = rank_rates_notes(finalists) + else: + tunings = [t for nrs,t in self.notes_rates] + # Found one or more common samplerate, select just one by arbitrary ranking + + # build a map from samplerate -> note value for each entry + dicts = tuple(dict((rate,note) for note,rate in nrs) for nrs,t in self.notes_rates) + + # list of tuples (rate, (notes for each entry)) for each candidate samplerate + final_rate,final_notes = rank_rates_notes([(rate, tuple(D[rate] for D in dicts)) for rate in rate_cands]) + + finalists = [] + + # map the result of this stage to the tunings + for tuning,note in zip(tunings,final_notes): + update_tuning_map(tuning, final_rate, note) + finalists.append((final_rate,(note,))) + + # select best note to go in the sample + final_rate,(final_note,) = rank_rates_notes(finalists) + + if extraction_sample_info is not None: + if self.start in extraction_sample_info: + entry = extraction_sample_info[self.start] + if "SampleRate" in entry and "BaseNote" in entry: + final_rate = int(entry["SampleRate"]) + final_note = entry["BaseNote"] + else: + print(f"WARNING: Missing extraction xml entry for sample at offset=0x{self.start:X}") + + # print(" ",len(FINAL_NOTES_RATES), FINAL_NOTES_RATES) + # if rate_3ds is not None and len(FINAL_NOTES_RATES) == 1: + # print(f"3DS : {rate_3ds} N64 : {FINAL_NOTES_RATES[0][0]}") + # if rate_3ds != FINAL_NOTES_RATES[0][0]: + # print("NONMATCHING AFTER RANKING") + # else: + # print("No 3DS comparison") + + self.notes_rates = None + self.sample_rate = final_rate + self.base_note = final_note + self.tuning_map = tuning_map + + def to_file(self, outpath : str): + assert self.sample_rate is not None and self.base_note is not None,\ + f"The sample must have been assigned a samplerate and basenote to be extracted to AIFC: [0x{self.start:X}:0x{self.end:X}]\n{self.header}" + + NUM_CHANNELS = 1 + + # Note this computes the correct number of frames, The original sdk tool vadpcm_enc contained a bug where aifc + # files would sometimes be 1-off in the reported number of frames. We do not reproduce this. + num_frames = (len(self.data) // self.frame_size()) * PCM16_SAMPLE_SIZE + + aifc = AIFCFile() + + aifc.add_section(b"COMM", + struct.pack(">hIh", NUM_CHANNELS, num_frames, PCM16_SAMPLE_SIZE) + + AIFCFile.serialize_f80(self.sample_rate) + + self.codec_id() + + AIFCFile.pstring(self.codec_name()) + ) + + aifc.add_section(b"INST", + struct.pack(">bbbbbbhhhhhhh", + self.base_note_number(), + 0, # detune + # TODO fill in the rest? with what? + 0, # lownote + 0, # highnote + 0, # lowvel + 0, # highvel + 0, # gain + 0,0,0, # sustain(mode,start,end) + 0,0,0, # release(mode,start,end) + ) + ) + + aifc.add_custom_section(b"VADPCMCODES", self.book.serialize()) + if self.loop.count != 0: + # We don't need to write a VADPCMLOOPS chunk if the count is 0 as we can represent these by the absence of + # a VADPCMLOOPS chunk; a count of 0 indicates the sample has no loop, the start and end of a loop with + # count=0 are always 0 and the end of the sample respectively. + aifc.add_custom_section(b"VADPCMLOOPS", self.loop.serialize()) + + aifc.add_section(b"SSND", struct.pack(">II", 0, 0) + bytes(self.data)) + + aifc.commit(outpath) + + def to_asm(self, name): + out = f"# {name} [0x{self.start:X}:0x{self.end:X}](0x{self.end-self.start:X})\n" + out += "\n" + out += f".global {name}\n" + out += f"{name}:\n" + out += f".global {name}_OFF\n" + out += f".set {name}_OFF, . - $start\n" + out += "\n" + out += " .byte " + for i,b in enumerate(self.data): + if i != 0 and i % 32 == 0: + out = out[:-2] + "\n .byte " + out += f"0x{b:02X}, " + out = out[:-2] + "\n" + if len(self.padding) == 0 or all(b == 0 for b in self.padding): + out += " .balign 16\n" + else: + out += f"# PADDING\n" + out += " .byte " + ", ".join(f"0x{b:02X}" for b in self.padding) + "\n" + out += "\n" + return out + + + + + + + +class AudioTableFile: + """ + Single sample bank in the Audiotable + """ + + def __init__(self, bank_num : int, audiotable_seg : memoryview, table_entry : AudioCodeTableEntry, + seg_offset : int, buffer_bug : bool = False, extraction_xml : Tuple[str, Element] = None): + self.bank_num = bank_num + self.table_entry : AudioCodeTableEntry = table_entry + self.data = self.table_entry.data(audiotable_seg, seg_offset) + self.buffer_bug = buffer_bug + + self.samples_final = None + + if extraction_xml is None: + self.file_name = f"SampleBank_{self.bank_num}" + self.name = f"SampleBank_{self.bank_num}" + self.extraction_sample_info = None + self.extraction_blob_info = None + else: + self.file_name = extraction_xml[0] + self.name = extraction_xml[1].attrib["Name"] + + self.extraction_sample_info = {} + self.extraction_blob_info = {} + for item in extraction_xml[1]: + if item.tag == "Sample": + self.extraction_sample_info[int(item.attrib["Offset"], 16)] = item.attrib + elif item.tag == "Blob": + self.extraction_blob_info[int(item.attrib["Offset"], 16)] = item.attrib + else: + assert False + + self.pointer_indices = [] + + self.samples = {} + self.coverage = set() + + def register_ptr(self, index): + self.pointer_indices.append(index) + + def dump_bin(self, path): + with open(path, "wb") as outfile: + outfile.write(self.data) + + def __len__(self): + return len(self.data) + + def add_sample(self, sample_header : SoundFontSample, book : AdpcmBook, loop : AdpcmLoop, tuning : float, ob): + # collect sample data + sample_start = sample_header.sample_addr + sample_end = sample_header.sample_addr + sample_header.size + sample_end_aligned = align(sample_end, 16) + sample_data = self.data[sample_start:sample_end] + sample_padding = self.data[sample_end:sample_end_aligned] + notes_rates = rate_from_tuning(tuning) + + # update coverage + self.coverage.add((sample_start, sample_end_aligned, sample_end)) + + if sample_start in self.samples: + # if this sample start was already recorded, compare with previous + prev_sample : AudioTableSample = self.samples[sample_start] + + # check data integrity, these should not change if the same is the same + assert prev_sample.end == sample_end + assert prev_sample.header.codec == sample_header.codec + assert prev_sample.book == book + assert prev_sample.loop == loop + + # add notes/rates candidates + prev_sample.notes_rates.add((notes_rates, tuning)) + else: + # if this sample start was not recorded, add it + new_sample = AudioTableSample(sample_start, sample_end, sample_header, sample_data, book, loop, sample_padding) + new_sample.notes_rates.add((notes_rates, tuning)) + self.samples[sample_start] = new_sample + + def lookup_sample(self, offset : int) -> AudioTableSample: + return self.samples[offset] + + def sample_name(self, sample : AudioTableSample, index : int): + if self.extraction_sample_info is not None: + if sample.start in self.extraction_sample_info: + return self.extraction_sample_info[sample.start]["Name"] + print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}") + return f"SAMPLE_{self.bank_num}_{index}" + + def sample_filename(self, sample : AudioTableSample, index : int): + ext = sample.codec_file_extension_compressed() + + if self.extraction_sample_info is not None: + if sample.start in self.extraction_sample_info: + return self.extraction_sample_info[sample.start]["FileName"] + ext + print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}") + + npad = int(math.floor(1 + math.log10(len(self.samples)))) if len(self.samples) != 0 else 0 + return f"Sample{index:0{npad}}{ext}" + + def blob_filename(self, start, end): + if self.extraction_blob_info is not None: + if start in self.extraction_blob_info: + return self.extraction_blob_info[start]["Name"] + print(f"WARNING: Missing extraction xml entry for blob at offset=0x{start:X}") + return f"UNACCOUNTED_{start:X}_{end:X}" + + def finalize_samples(self): + self.samples_final = list(sorted(self.samples.values(), key = lambda sample : sample.start)) + + for i,sample in enumerate(self.samples_final): + sample : AudioTableSample + sample.resolve_basenote_rate(self.extraction_sample_info) + + def finalize_coverage(self, all_sample_banks): + if len(self.coverage) != 0: + # merge ranges if there are any + self.coverage = list(sorted(self.coverage)) + + merged = [list(self.coverage.pop(0))] + + while len(self.coverage) != 0: + next = self.coverage.pop(0) + if merged[-1][1] == next[0]: + merged[-1][1] = next[1] + merged[-1][2] = next[2] + else: + merged.append(list(next)) + + self.coverage = merged + + # check fully covered + if len(self.coverage) == 1 and self.coverage[0][0] == 0 and self.coverage[0][1] == len(self.data): + return # all accounted + + # not fully covered, determine ranges of unaccounted data + if len(self.coverage) == 0: + # absolutely nothing is accounted for + unaccounted_ranges = [(0, len(self))] + else: + unaccounted_ranges = [] + # deal with gap at the start + if self.coverage[0][0] != 0: + unaccounted_ranges.append((0, self.coverage[0][0])) + # deal with gaps in the middle + for j,cvg in enumerate(self.coverage[:-1]): + start = cvg[1] + end = self.coverage[j + 1][0] + if start != end: + unaccounted_ranges.append((start, end)) + # deal with gap at the end + if self.coverage[-1][1] != len(self): + unaccounted_ranges.append((self.coverage[-1][1], len(self))) + + # TODO if an unaccounted range is in the extraction xml, trust it before searching other banks + + unaccounted_str = "[" + ", ".join(f"(0x{start:06X}, 0x{end:06X})" for start,end in unaccounted_ranges) + "]" + print(f"Sample Bank {self.bank_num} has incomplete coverage. Unaccounted: {unaccounted_str}") + + # search other banks for matches + for start,end in unaccounted_ranges: + while start != end: + found = False + + for j,bank in enumerate(all_sample_banks): + if not isinstance(bank, AudioTableFile): + # Ignore pointer entries + continue + + for sample in bank.samples_final: + sample : AudioTableSample + + sample_end = start + len(sample) + sample_end_aligned = align(sample_end, 16) + + if self.data[start:sample_end] == sample.data: + print(f" Located match for range [0x{start:X}:0x{sample_end:X}] in bank {j} at 0x{sample.start:X}") + new_sample = sample.clone(start, sample_end, self.data[sample_end:sample_end_aligned]) + new_sample.start = start + new_sample.end = sample_end + new_sample.sample_rate = sample.sample_rate + new_sample.base_note = sample.base_note + self.samples_final.append(new_sample) + found = True + start = sample_end_aligned + break + if found: + break + else: + # found no matches, blob it + print(f" No match found in other banks for range [0x{start:X}:0x{end:X}], leaving as binary blob") + self.samples_final.append(AudioTableData(start, end, self.data[start:end])) + break + + # Final sort + self.samples_final.sort(key = lambda sample : sample.start) + + def assign_names(self): + i = 0 + for sample in self.samples_final: + if isinstance(sample, AudioTableSample): + sample : AudioTableSample + + sample.name = self.sample_name(sample, i) + sample.filename = self.sample_filename(sample, i) + i += 1 + else: + sample : AudioTableData + + name = self.blob_filename(sample.start, sample.end) + sample.name = name + sample.filename = f"{name}.bin" + + def to_xml(self, base_path): + xml = XMLWriter() + + start = { + "Name" : self.name, + "Index" : self.bank_num, + "Medium" : self.table_entry.medium.name, + "CachePolicy" : self.table_entry.cache_policy.name, + } + if self.buffer_bug: + start["BufferBug"] = "true" + + xml.write_start_tag("SampleBank", start) + + # write pointers + for index in self.pointer_indices: + xml.write_element("Pointer", { "Index" : index }) + + # write samples/blobs + for sample in self.samples_final: + if isinstance(sample, AudioTableSample): + sample : AudioTableSample + + xml.write_element("Sample", { + "Name" : sample.name, + "Path" : f"$(BUILD_DIR)/{base_path}/{sample.filename}", + }) + else: + sample : AudioTableData + + xml.write_element("Blob", { + "Name" : sample.name, + "Path" : f"$(BUILD_DIR)/{base_path}/{sample.filename}", + }) + + xml.write_end_tag() + + return str(xml) + + def write_extraction_xml(self, path): + xml = XMLWriter() + + xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/") + + start = { + "Name" : self.name, + "Index" : self.bank_num, + } + xml.write_start_tag("SampleBank", start) + + i = 0 + for sample in self.samples_final: + if isinstance(sample, AudioTableSample): + sample : AudioTableSample + + xml.write_element("Sample", { + "Name" : sample.name, + "FileName" : sample.filename.replace(sample.codec_file_extension_compressed(), ""), + "Offset" : f"0x{sample.start:06X}", + "SampleRate" : sample.sample_rate, + "BaseNote" : sample.base_note, + }) + i += 1 + else: + sample : AudioTableData + + xml.write_element("Blob", { + "Name" : sample.name, + "Offset" : f"0x{sample.start:06X}", + "Size" : f"0x{sample.end - sample.start:X}", + }) + + xml.write_end_tag() + + with open(path, "w") as outfile: + outfile.write(str(xml)) + + def write_s_file(self, name, path): + with open(path, "w") as outfile: + out = ".rdata\n" + out += "\n" + out += ".balign 16\n" + out += "\n" + out += f".global {name}\n" + out += f"{name}_Start:\n" + out += "$start:\n" + out += "\n" + + outfile.write(out) + + i = 0 + for sample in self.samples: + if isinstance(sample, AudioTableSample): + sample : AudioTableSample + outfile.write(sample.to_asm(self.sample_name(i))) + i += 1 + else: + sample : AudioTableData + outfile.write(sample.to_asm("__UNACCOUNTED__")) diff --git a/tools/audio/extraction/envelope.py b/tools/audio/extraction/envelope.py new file mode 100644 index 0000000000..0dab8c8d99 --- /dev/null +++ b/tools/audio/extraction/envelope.py @@ -0,0 +1,119 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Implements envelopes and envelope point structures +# + +import collections + +from .util import XMLWriter + +class EnvDelay(int): + def __str__(self): + return { + 0 : "ADSR_DISABLE", + -1 : "ADSR_HANG", + -2 : "ADSR_GOTO", + -3 : "ADSR_RESTART", + }.get(self, super().__str__()) + +class Envelope: + """ + Array of envelope points + """ + + class EnvelopePoint: + """ + typedef struct { + /* 0x0 */ s16 delay; + /* 0x2 */ s16 arg; + } EnvelopePoint; // size = 0x4 + """ + + def __init__(self, delay, arg): + self.delay = EnvDelay(delay) + self.arg = arg + + def __repr__(self): + return str(self) + + def __str__(self): + return f"{{ {self.delay}, {self.arg} }}" + + def is_disable(self): + return self.delay == 0 and self.arg == 0 + + def is_hang(self): + return self.delay == -1 and self.arg == 0 + + def to_xml(self, xml : XMLWriter): + if self.delay == 0: # Disable + assert self.arg == 0 + xml.write_element("Disable") + elif self.delay == -1: # Hang + assert self.arg == 0 + xml.write_element("Hang") + elif self.delay == -2: # Goto + xml.write_element("Goto", + { "Arg" : self.arg } + ) + elif self.delay == -3: # Restart + assert self.arg == 0 + xml.write_element("Restart") + else: + assert self.delay >= 0 + xml.write_element("Point", + { + "Delay" : self.delay, + "Arg" : self.arg, + } + ) + + def __init__(self, points, is_zero=False): + self.name = None # Assigned when bank is finalized + + self.is_zero = is_zero + self.release_rates = [] + self._release_rate = None # cached + + assert len(points) != 0 + assert type(points[0]) == Envelope.EnvelopePoint + self.points = points + + if not self.is_zero: + while self.points[-1].is_disable(): + self.points.pop() + + assert self.points[-1].is_hang() + + def __str__(self): + out = "{\n" + out += " " + ", ".join([str(point) for point in self.points]) + "\n" + out += "}\n" + return out + + def release_rate(self): + if self._release_rate is not None: + return self._release_rate + + rates = collections.Counter(self.release_rates).most_common() + assert len(rates) in [0, 1], rates # TODO handle ties? + + self._release_rate = 0 if len(rates) == 0 else rates[0][0] + return self._release_rate + + def to_xml(self, xml : XMLWriter, name : str): + if self.is_zero: + return xml.write_element("Envelope") + + xml.write_start_tag("Envelope", + { + "Name" : name, + "Release" : self.release_rate(), + } + ) + + for point in self.points[:-1]: # exclude final hang command, will be added by the soundfont compiler on build + point.to_xml(xml) + + xml.write_end_tag() diff --git a/tools/audio/extraction/tuning.py b/tools/audio/extraction/tuning.py new file mode 100644 index 0000000000..b538c68e8d --- /dev/null +++ b/tools/audio/extraction/tuning.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Estimate (samplerate, basenote) from tuning +# +# tuning = samplerate * 2 ** basenote +# + +from typing import List, Tuple + +from .util import f32, u32_to_f32, f32_to_u32 + +# Mirrors gPitchFrequencies in audio driver source. +# Indexed by z64 note numbers, g_pitch_frequencies[C4] = 1.0 (0x3F800000) +# Converted to their IEEE-754 binary representation to avoid any string -> float parser trouble as we need exact values. +g_pitch_frequencies = ( + 0x3DD744F6, 0x3DE411C3, 0x3DF1A198, 0x3E000000, 0x3E079C84, 0x3E0FACE6, 0x3E1837F8, 0x3E21450F, + 0x3E2ADC0A, 0x3E350508, 0x3E3FC86D, 0x3E4B2FEC, 0x3E5744F6, 0x3E641206, 0x3E71A1DC, 0x3E800000, + 0x3E879C84, 0x3E8FACE6, 0x3E9837F8, 0x3EA1450F, 0x3EAADC0A, 0x3EB504E6, 0x3EBFC88E, 0x3ECB2FEC, + 0x3ED744F6, 0x3EE411E4, 0x3EF1A1BA, 0x3F000000, 0x3F079C84, 0x3F0FACD6, 0x3F1837F8, 0x3F214520, + 0x3F2ADC0A, 0x3F3504F7, 0x3F3FC88E, 0x3F4B2FFD, 0x3F574507, 0x3F6411F5, 0x3F71A1CB, 0x3F800000, + 0x3F879C7C, 0x3F8FACD6, 0x3F9837EF, 0x3FA14517, 0x3FAADC0A, 0x3FB504F7, 0x3FBFC886, 0x3FCB2FF5, + 0x3FD744FE, 0x3FE411F5, 0x3FF1A1C2, 0x40000000, 0x40079C7C, 0x400FACD6, 0x401837EF, 0x40214517, + 0x402ADC0A, 0x403504F7, 0x403FC88A, 0x404B2FF9, 0x405744FE, 0x406411F5, 0x4071A1C2, 0x40800000, + 0x40879C7E, 0x408FACD8, 0x409837F1, 0x40A14519, 0x40AADC0A, 0x40B504F5, 0x40BFC888, 0x40CB2FF9, + 0x40D74500, 0x40E411F5, 0x40F1A1C2, 0x41000000, 0x41079C7D, 0x410FACD7, 0x411837F1, 0x41214519, + 0x412ADC0A, 0x413504F5, 0x413FC889, 0x414B2FF8, 0x41574500, 0x416411F4, 0x4171A1C3, 0x41800000, + 0x41879C7D, 0x418FACD7, 0x419837F1, 0x41A14519, 0x41AADC0A, 0x41B504F5, 0x41BFC889, 0x41CB2FF8, + 0x41D74500, 0x41E411F4, 0x41F1A1C3, 0x42000000, 0x42079C7D, 0x420FACD7, 0x421837F1, 0x42214519, + 0x422ADC0A, 0x423504F5, 0x423FC889, 0x424B2FF8, 0x42574500, 0x426411F4, 0x4271A1C3, 0x42800000, + 0x42879C7D, 0x428FACD7, 0x429837F1, 0x42A14519, 0x42AADC0A, 0x3D6411C3, 0x3D71A198, 0x3D800000, + 0x3D879C41, 0x3D8FACE6, 0x3D9837B5, 0x3DA1450F, 0x3DAADBC6, 0x3DB504C5, 0x3DBFC86D, 0x3DCB302F, +) + +# Names for pitch values indexed by z64 note numbers, pitch_names[39] = C4 +pitch_names = ( + "A0", "BF0", "B0", + "C1", "DF1", "D1", "EF1", "E1", "F1", "GF1", "G1", "AF1", "A1", "BF1", "B1", + "C2", "DF2", "D2", "EF2", "E2", "F2", "GF2", "G2", "AF2", "A2", "BF2", "B2", + "C3", "DF3", "D3", "EF3", "E3", "F3", "GF3", "G3", "AF3", "A3", "BF3", "B3", + "C4", "DF4", "D4", "EF4", "E4", "F4", "GF4", "G4", "AF4", "A4", "BF4", "B4", + "C5", "DF5", "D5", "EF5", "E5", "F5", "GF5", "G5", "AF5", "A5", "BF5", "B5", + "C6", "DF6", "D6", "EF6", "E6", "F6", "GF6", "G6", "AF6", "A6", "BF6", "B6", + "C7", "DF7", "D7", "EF7", "E7", "F7", "GF7", "G7", "AF7", "A7", "BF7", "B7", + "C8", "DF8", "D8", "EF8", "E8", "F8", "GF8", "G8", "AF8", "A8", "BF8", "B8", + "C9", "DF9", "D9", "EF9", "E9", "F9", "GF9", "G9", "AF9", "A9", "BF9", "B9", + "C10", "DF10", "D10", "EF10", "E10", "F10", + "BFNEG1", "BNEG1", + "C0", "DF0", "D0", "EF0", "E0", "F0", "GF0", "G0", "AF0", +) + +# Floats that are encountered in extraction but cannot be resolved to a match. +BAD_FLOATS = [0x3E7319E3] + +def note_z64_to_midi(note : int) -> int: + """ + Convert a z64 note number to MIDI note number. + + Middle C is 39 in z64, while it is 60 in MIDI. + We want MIDI note numbers to store in the extracted sample files (aiff or wav) + """ + return (21 + note) % 128 + +def recalc_tuning(rate : int, note : str) -> float: + return f32(f32(rate / 32000.0) * u32_to_f32(g_pitch_frequencies[pitch_names.index(note)])) + +def rate_from_tuning(tuning : float) -> Tuple[Tuple[str,int]]: + """ + Decompose a tuning value into a pair (samplerate, basenote) that round-trips when ran through `recalc_tuning` + """ + matches : List[Tuple[str,int]] = [] + diffs : List[Tuple[int, Tuple[str,int]]] = [] + + tuning_bits : int = f32_to_u32(tuning) + + def test_value(note_val : int, nominal_rate : int, freq : float): + if nominal_rate > 48000: + # reject samplerate if too high + return + + # recalc tuning and compare to original + + tuning2 : float = f32(f32(nominal_rate / 32000.0) * freq) + + diff : int = abs(f32_to_u32(tuning2) - tuning_bits) + + if diff == 0: + matches.append((pitch_names[note_val], nominal_rate)) + else: + diffs.append((diff, (pitch_names[note_val], nominal_rate))) + + # search gPitchFrequencies LUT one by one. We don't exit as soon as a match is found as in general this procedure + # only recovers the correct (rate,note) pair up to multiples of 2, to get the final value we want to select the + # "best" of these pairs by an essentially arbitrary ranking (cf `rank_rates_notes`) + for note_val,freq_bits in enumerate(g_pitch_frequencies): + freq : float = u32_to_f32(freq_bits) + + # compute the "nominal" samplerate for a given basenote by R = 32000 * (t / f) + nominal_rate : int = int(f32(tuning / freq) * 32000.0) + + # test nominal value and +/-1 + test_value(note_val, nominal_rate, freq) + test_value(note_val, nominal_rate + 1, freq) + test_value(note_val, nominal_rate - 1, freq) + + if len(matches) != 0: + return tuple(matches) + + # no matches found... check if we expected this, otherwise flag it for special handling + assert tuning_bits in BAD_FLOATS , f"0x{tuning_bits:08X}" + + # just take the closest match and hack it in the soundfont compiler + hack_rate = sorted(diffs, key=lambda e : e[0])[0] + return (hack_rate[1],) + +def rank_rates_notes(layouts): + + def rank_rate_note(rate, notes): + """ + Arbitrarily rank the input samplerate + note numbers, based on what is most likely. + """ + rank = 0 + + if 'C4' in notes and rate > 10000: + rank += 10000 + elif 'C2' in notes and rate > 10000: + rank += 9500 + elif 'D3' in notes and rate > 10000: + rank += 8500 + elif 'D4' in notes and rate > 10000: + rank += 8000 + elif 'G3' in notes: + rank += 2000 + elif 'F3' in notes: + rank += 25 + elif 'C0' in notes: + rank += 50 + elif 'BF2' in notes: + rank += 30 + elif 'B3' in notes: + rank += 25 + elif 'BF1' in notes: + rank += 25 + elif 'E2' in notes: + rank += 20 + elif 'F6' in notes: + rank += 15 + elif 'GF2' in notes: + rank += 10 + + rank += { + 32000 : 200, + 16000 : 100, + 24000 : 50, + 22050 : 30, + 20000 : 28, + 44100 : 25, + 12000 : 15, + 8000 : 10, + 15950 : 5, + 20050 : 5, + 31800 : 5, + }.get(rate, 0) + + return rank + + # Input should not be empty + assert len(layouts) != 0 + + if len(layouts) == 1: + # No ranking needed, there is only one possible option + return layouts[0] + + # Ranking is needed, rank each layout + ranked = list(sorted(layouts, key=lambda L : rank_rate_note(*L), reverse=True)) + + # Ensure the ranking produced a unique best option + assert rank_rate_note(*ranked[0]) != rank_rate_note(*ranked[1]) , ranked + + # Output best + return ranked[0] + +if __name__ == '__main__': + import argparse + + parser = argparse.ArgumentParser(description="Given either a (rate,note) or a tuning, compute all matching rates/notes.") + parser.add_argument("-t", dest="tuning", required=False, default=None, type=float, help="Tuning value (float)") + parser.add_argument("-r", dest="rate", required=False, default=None, type=int, help="Sample rate (integer)") + parser.add_argument("-n", dest="note", required=False, default=None, type=str, help="Base note (note name)") + parser.add_argument("--show-result", required=False, default=False, action="store_true", help="Show recalculated tuning value") + args = parser.parse_args() + + if args.tuning is not None: + # Take input tuning + tuning = args.tuning + elif args.rate is not None and args.note is not None: + # Calculate target tuning from input rate and note + tuning : float = recalc_tuning(args.rate, args.note) + else: + # Insufficient arguments + parser.print_help() + raise SystemExit("Must specify either -t or both -r and -n.") + + notes_rates : Tuple[Tuple[str,int]] = rate_from_tuning(tuning) + + for note,rate in notes_rates: + if args.show_result: + print(rate, note, "->", recalc_tuning(rate, note)) + else: + print(rate, note) diff --git a/tools/audio/extraction/util.py b/tools/audio/extraction/util.py new file mode 100644 index 0000000000..20891810cc --- /dev/null +++ b/tools/audio/extraction/util.py @@ -0,0 +1,126 @@ +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Misc utilities +# + +import struct, subprocess, sys + +def debugm(msg): + """ + Debug message on stderr + """ + print(msg, file=sys.stderr) + +def error(msg): + """ + Debug message + exit + """ + debugm(msg) + sys.exit(1) + +def incbin(rom, offset, size): + return rom[offset:offset+size] + +def f32(f): + """ + Reduces precision of f to a 32-bit float for correct intermediate calculations + """ + return struct.unpack("f", struct.pack("f", f))[0] + +def u32_to_f32(u): + """ + Convert IEEE-754 binary rep to float + """ + return struct.unpack(">f", struct.pack(">I", u))[0] + +def f32_to_u32(f): + """ + Convert float to IEEE-754 binary rep + """ + return struct.unpack(">I", struct.pack(">f", f))[0] + +def align(x, n): + """ + Align to next n (power of 2) + """ + return (x + (n - 1)) & ~(n - 1) + +def merge_ranges(intervals): + if len(intervals) == 0: + return [] + + intervals = sorted(intervals, key=lambda x: x[0][0]) + + stack = [intervals[0]] + for i in range(1, len(intervals)): + last_element = stack[len(stack) - 1] + if last_element[1][0] >= intervals[i][0][0]: + last_element[1] = max(intervals[i][1], last_element[1], key=lambda x: x[0]) + stack.pop(len(stack) - 1) + stack.append(last_element) + else: + stack.append(intervals[i]) + return stack + +def merge_like_ranges(intervals): + if len(intervals) == 0: + return [] + + intervals = sorted(intervals, key=lambda x: x[0][0]) + + stack = [intervals[0]] + for i in range(1, len(intervals)): + last_element = stack[len(stack) - 1] + if last_element[1][0] >= intervals[i][0][0] and last_element[1][1] == intervals[i][1][1]: + last_element[1] = max(intervals[i][1], last_element[1], key=lambda x: x[0]) + stack.pop(len(stack) - 1) + stack.append(last_element) + else: + stack.append(intervals[i]) + return stack + +def list_is_in_order(l): + return all(l[i] <= l[i + 1] for i in range(len(l) - 1)) + +def program_call(cmd): + subprocess.check_call(cmd, shell=True) + +def program_get(cmd): + return subprocess.check_output(cmd, shell=True).decode("ascii") + +class XMLWriter: + """ + Simple XML builder for writing with desired formatting characteristics (no tabs, 4 space indent) + """ + + def __init__(self): + self.contents = "" + self.tag_stack = [] + + def __str__(self): + return self.contents + + def write_line(self, name, open, close, attributes): + indent = " " * len(self.tag_stack) + if attributes is None: + self.contents += f"{indent}{open}{name}{close}\n" + else: + attributes_str = " ".join(f"{k}=\"{v}\"" for k,v in attributes.items()) + self.contents += f"{indent}{open}{name} {attributes_str}{close}\n" + + def write_comment(self, comment): + self.write_line(comment, "", None) + + def write_start_tag(self, name, attributes=None): + self.write_line(name, "<", ">", attributes) + self.tag_stack.append(name) + + def write_end_tag(self): + self.write_line(self.tag_stack.pop(), "", None) + + def write_element(self, name, attributes=None): + self.write_line(name, "<", "/>", attributes) + + def write_raw(self, contents): + self.write_line(contents, "", "", None) diff --git a/tools/audio/sampleconv/.clang-format b/tools/audio/sampleconv/.clang-format new file mode 100644 index 0000000000..20dda610d7 --- /dev/null +++ b/tools/audio/sampleconv/.clang-format @@ -0,0 +1,29 @@ +IndentWidth: 4 +Language: Cpp +UseTab: Never +ColumnLimit: 120 +PointerAlignment: Right +BreakBeforeBraces: Linux +AlwaysBreakAfterReturnType: TopLevel +AlignArrayOfStructures: Left +SpaceAfterCStyleCast: false +SpaceBeforeParens: ControlStatementsExceptControlMacros +Cpp11BracedListStyle: false +IndentCaseLabels: true +BinPackArguments: true +BinPackParameters: true +AlignAfterOpenBracket: Align +AlignOperands: true +BreakBeforeTernaryOperators: true +BreakBeforeBinaryOperators: None +AllowShortBlocksOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AllowShortEnumsOnASingleLine: false +AlignEscapedNewlines: Left +AlignTrailingComments: true +SortIncludes: false +AlignConsecutiveMacros: Consecutive +ForEachMacros: ['LL_FOREACH'] diff --git a/tools/audio/sampleconv/.gitignore b/tools/audio/sampleconv/.gitignore new file mode 100644 index 0000000000..468e4e0371 --- /dev/null +++ b/tools/audio/sampleconv/.gitignore @@ -0,0 +1,2 @@ +build/ +sampleconv diff --git a/tools/audio/sampleconv/Makefile b/tools/audio/sampleconv/Makefile new file mode 100644 index 0000000000..a023b237e1 --- /dev/null +++ b/tools/audio/sampleconv/Makefile @@ -0,0 +1,36 @@ + +CC := gcc +CFLAGS := -Wall -Wextra -MMD +OPTFLAGS := -Og -g3 +LDFLAGS := + +CLANG_FORMAT := clang-format-14 +FORMAT_ARGS := -i -style=file + +SRC_DIRS := $(shell find src -type d) +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +O_FILES := $(foreach f,$(C_FILES:.c=.o),build/$f) + +DEP_FILES := $(foreach f,$(C_FILES:.c=.d),build/$f) + +$(shell mkdir -p build $(foreach dir,$(SRC_DIRS),build/$(dir))) + +.PHONY: all clean distclean format + +all: sampleconv + +clean: + $(RM) -rf build sampleconv + +distclean: clean + +format: + $(CLANG_FORMAT) $(FORMAT_ARGS) $(C_FILES) $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h)) + +sampleconv: $(O_FILES) + $(CC) $(LDFLAGS) $(O_FILES) -lm -o $@ + +build/src/%.o: src/%.c + $(CC) -c $(CFLAGS) $(OPTFLAGS) $< -o $@ + +-include $(DEP_FILES) diff --git a/tools/audio/sampleconv/src/codec/codec.h b/tools/audio/sampleconv/src/codec/codec.h new file mode 100644 index 0000000000..5ebaae855a --- /dev/null +++ b/tools/audio/sampleconv/src/codec/codec.h @@ -0,0 +1,38 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef CODEC_H_ +#define CODEC_H_ + +#include + +#include "../container/container.h" + +#include "vadpcm.h" +#include "uncompressed.h" + +typedef struct enc_dec_opts { + // Matching + bool matching; + + // VADPCM options + bool truncate; + uint32_t min_loop_length; + table_design_spec design; +} enc_dec_opts; + +typedef struct codec_spec { + const char *name; + sample_data_type type; + int frame_size; + bool compressed; + int (*decode)(container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + int (*encode)(container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); +} codec_spec; + +#endif diff --git a/tools/audio/sampleconv/src/codec/uncompressed.c b/tools/audio/sampleconv/src/codec/uncompressed.c new file mode 100644 index 0000000000..ccd37f3813 --- /dev/null +++ b/tools/audio/sampleconv/src/codec/uncompressed.c @@ -0,0 +1,56 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include +#include +#include +#include + +#include "../util.h" + +#include "codec.h" +#include "../container/container.h" + +int +pcm16_enc_dec(UNUSED container_data *ctnr, UNUSED const codec_spec *codec, UNUSED const enc_dec_opts *opts) +{ + // Since we decode to and encode from pcm16, there's nothing to do. + return 0; +} + +// TODO +int +pcm8_dec(UNUSED container_data *ctnr, UNUSED const codec_spec *codec, UNUSED const enc_dec_opts *opts) +{ +#if 0 + for (size_t i = 0; i < num_samples; i++) { + uint8_t insamp = ((uint8_t *)in)[i]; + + int16_t outsamp = insamp << 8; // - 0x80 before shift ? + + ((int16_t *)out)[i] = outsamp; + } +#endif + return 0; +} + +// TODO +int +pcm8_enc(UNUSED container_data *ctnr, UNUSED const codec_spec *codec, UNUSED const enc_dec_opts *opts) +{ +#if 0 + for (size_t i = 0; i < num_samples; i++) { + uint16_t insamp = ((uint16_t *)in)[i]; + + uint8_t outsamp = insamp >> 8; + + ((uint8_t *)out)[i] = outsamp; + } +#endif + return 0; +} diff --git a/tools/audio/sampleconv/src/codec/uncompressed.h b/tools/audio/sampleconv/src/codec/uncompressed.h new file mode 100644 index 0000000000..41ef2f11d5 --- /dev/null +++ b/tools/audio/sampleconv/src/codec/uncompressed.h @@ -0,0 +1,21 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef CODEC_UNCOMPRESSED_H +#define CODEC_UNCOMPRESSED_H + +int +pcm16_dec(struct container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + +int +pcm16_enc(struct container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + +int +pcm16_enc_dec(struct container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + +#endif diff --git a/tools/audio/sampleconv/src/codec/vadpcm.c b/tools/audio/sampleconv/src/codec/vadpcm.c new file mode 100644 index 0000000000..a77c4948c8 --- /dev/null +++ b/tools/audio/sampleconv/src/codec/vadpcm.c @@ -0,0 +1,1319 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: CC0-1.0 + */ +#include +#include +#include +#include +#include +#include +#include + +#include "../util.h" + +#include "codec.h" + +int +expand_codebook(int16_t *book_data, int32_t ****table_out, int32_t order, int32_t npredictors) +{ + int32_t ***table = MALLOC_CHECKED_INFO(npredictors * sizeof(int32_t **), "npredictors=%d", npredictors); + + for (int32_t i = 0; i < npredictors; i++) { + table[i] = MALLOC_CHECKED(8 * sizeof(int32_t *)); + for (int32_t j = 0; j < 8; j++) + table[i][j] = MALLOC_CHECKED_INFO((order + 8) * sizeof(int32_t), "order=%d", order); + } + + for (int32_t i = 0; i < npredictors; i++) { + int32_t **table_entry = table[i]; + + for (int32_t j = 0; j < order; j++) { + for (int32_t k = 0; k < 8; k++) + table_entry[k][j] = *(book_data++); + } + + for (int32_t k = 1; k < 8; k++) + table_entry[k][order] = table_entry[k - 1][order - 1]; + + table_entry[0][order] = 1 << 11; + + for (int32_t k = 1; k < 8; k++) { + int32_t j = 0; + + for (; j < k; j++) + table_entry[j][k + order] = 0; + for (; j < 8; j++) + table_entry[j][k + order] = table_entry[j - k][order]; + } + } + + *table_out = table; + return 0; +} + +int +compressed_expanded_codebook(int16_t **book_data_out, int32_t ***table, int order, int npredictors) +{ + int16_t *book_data = + MALLOC_CHECKED_INFO(sizeof(int16_t) * 8 * order * npredictors, "order=%d, npredictors=%d", order, npredictors); + + int n = 0; + for (int32_t i = 0; i < npredictors; i++) { + for (int32_t j = 0; j < order; j++) { + for (int32_t k = 0; k < 8; k++) + book_data[n++] = table[i][k][j]; + } + } + *book_data_out = book_data; + return 0; +} + +int +destroy_expanded_codebook(int32_t ***table, int npredictors) +{ + for (int i = 0; i < npredictors; i++) { + for (int j = 0; j < 8; j++) + free(table[i][j]); + free(table[i]); + } + free(table); + return 0; +} + +static uint32_t +myrand(void) +{ + static uint64_t state = 1619236481962341ull; + state *= 3123692312237ull; + state++; + return state >> 33; +} + +static int16_t +qsample(float x, int32_t scale) +{ + if (x > 0.0f) + return (int16_t)((x / scale) + 0.4999999); + else + return (int16_t)((x / scale) - 0.4999999); +} + +/** + * Round all ('fs' many) values in 'e' to the nearest 'bits'-bit integer, + * outputting to 'ie'. + */ +static void +clamp(int32_t fs, float *e, int32_t *ie, int32_t bits) +{ + int32_t i; + float ulevel; + float llevel; + + llevel = -(float)(1 << (bits - 1)); + ulevel = -llevel - 1.0f; + for (i = 0; i < fs; i++) { + if (e[i] > ulevel) + e[i] = ulevel; + if (e[i] < llevel) + e[i] = llevel; + + if (e[i] > 0.0f) + ie[i] = (int32_t)(e[i] + 0.5); + else + ie[i] = (int32_t)(e[i] - 0.5); + } +} + +static void +clamp_to_s16(float *in, int32_t *out) +{ + for (int i = 0; i < 16; i++) { + if (in[i] > 0x7fff) + in[i] = 0x7fff; + if (in[i] < -0x8000) + in[i] = -0x8000; + + if (in[i] > 0.0f) + out[i] = (int32_t)(in[i] + 0.5); + else + out[i] = (int32_t)(in[i] - 0.5); + } +} + +static int16_t +clamp_bits(int32_t x, int32_t bits) +{ + int32_t lim = 1 << (bits - 1); + + if (x < -lim) + return -lim; + if (x > lim - 1) + return lim - 1; + return x; +} + +static int32_t +inner_product(int32_t length, int32_t *v1, int32_t *v2) +{ + int32_t out = 0; + for (int32_t i = 0; i < length; i++) + out += v1[i] * v2[i]; + + // Compute "out / 2^11", rounded down. + int32_t dout = out / (1 << 11); + int32_t fiout = dout * (1 << 11); + return dout - (out - fiout < 0); +} + +static void +vdecodeframe(uint8_t *frame, int32_t *prescaled, int32_t *state, int32_t order, int32_t ***coef_tbl, int frame_size) +{ + uint8_t header = frame[0]; + int32_t scale = 1 << ((header >> 4) & 0xF); + int32_t optimalp = (header >> 0) & 0xF; + + int32_t ix[16]; + + // Unpack + if (frame_size == 5) { + for (int32_t i = 0; i < 16; i += 4) { + uint8_t c = frame[1 + i / 4]; + ix[i + 0] = (c >> 6) & 0b11; + ix[i + 1] = (c >> 4) & 0b11; + ix[i + 2] = (c >> 2) & 0b11; + ix[i + 3] = (c >> 0) & 0b11; + } + } else { + for (int32_t i = 0; i < 16; i += 2) { + uint8_t c = frame[1 + i / 2]; + ix[i + 0] = (c >> 4) & 0xF; + ix[i + 1] = (c >> 0) & 0xF; + } + } + + // Sign-extend and scale + for (int32_t i = 0; i < 16; i++) { + if (frame_size == 5) { + if (ix[i] >= 2) // 2-bit sign extension + ix[i] -= 4; + } else { + if (ix[i] >= 8) // 4-bit sign extension + ix[i] -= 16; + } + prescaled[i] = ix[i]; // save decompressed frame data before scaling + ix[i] *= scale; + } + + int32_t **coef_page = coef_tbl[optimalp]; + + // Inner product with predictor coefficients + for (int32_t j = 0; j < 2; j++) { + int32_t in_vec[16]; + + for (int32_t i = 0; i < order; i++) + in_vec[i] = state[(2 - j) * 8 - order + i]; + + for (int32_t i = 0; i < 8; i++) { + int32_t ind = j * 8 + i; + + in_vec[order + i] = ix[ind]; + state[ind] = inner_product(order + i, coef_page[i], in_vec) + ix[ind]; + } + } +} + +/** + * Similar to vencodeframe but sources data differently and doubles up certain operations. This is used during + * brute-force decoding of compressed data to decompressed data that matches on round-trip. + */ +static void +my_encodeframe(uint8_t *out, int16_t *in_buf, int32_t *orig_state, int32_t ***coef_tbl, int32_t order, + int32_t npredictors, int frame_size) +{ + int16_t ix[16]; + int32_t prediction[16]; + int32_t in_vec[16]; + int32_t optimalp = 0; + int32_t scale; + int32_t encBits = (frame_size == 5) ? 2 : 4; + int32_t llevel = -(1 << (encBits - 1)); + int32_t ulevel = -llevel - 1; + int32_t ie[16]; + float e[16]; + + // Determine the best-fitting predictor. + float min = 1e30; + int32_t scale_factor = 16 - encBits; + + for (int32_t k = 0; k < npredictors; k++) { + for (int32_t j = 0; j < 2; j++) { + // Copy over the last 'order' samples from the previous output. + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : in_buf[8 - order + i]; + + // For 8 samples... + for (int32_t i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous errors in this chunk, as an inner product with the + // coefficient table. + prediction[j * 8 + i] = inner_product(order + i, coef_tbl[k][i], in_vec); + // Record the error in in_vec (thus, its first 'order' samples + // will contain actual values, the rest will be error terms), and + // in floating point form in e (for no particularly good reason). + in_vec[i + order] = in_buf[j * 8 + i] - prediction[j * 8 + i]; + e[j * 8 + i] = (float)in_vec[i + order]; + } + } + + // Compute the L2 norm of the errors; the lowest norm decides which + // predictor to use. + float se = 0.0f; + for (int32_t j = 0; j < 16; j++) + se += e[j] * e[j]; + + if (se < min) { + min = se; + optimalp = k; + } + } + + // Do exactly the same thing again, for real. + for (int32_t j = 0; j < 2; j++) { + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : in_buf[8 - order + i]; + + for (int32_t i = 0; i < 8; i++) { + prediction[j * 8 + i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + e[j * 8 + i] = in_vec[i + order] = in_buf[j * 8 + i] - prediction[j * 8 + i]; + } + } + + // Clamp the errors to 16-bit signed ints, and put them in ie. + clamp_to_s16(e, ie); + + // Find a value with highest absolute value. + // @bug If this first finds -2^n and later 2^n, it should set 'max' to the + // latter, which needs a higher value for 'scale'. + int32_t max = 0; + for (int32_t i = 0; i < 16; i++) { + if (abs(ie[i]) > abs(max)) + max = ie[i]; + } + + // Compute which power of two we need to scale down by in order to make + // all values representable as 4-bit signed integers (i.e. be in [-8, 7]). + // The worst-case 'max' is -2^15, so this will be at most 12. + for (scale = 0; scale <= scale_factor; scale++) { + if (max <= ulevel && max >= llevel) + break; + max /= 2; + } + + int32_t state[16]; + for (int32_t i = 0; i < 16; i++) + state[i] = orig_state[i]; + + // Try with the computed scale, but if it turns out we don't fit in 4 bits + // (if some |cV| >= 2), use scale + 1 instead (i.e. downscaling by another + // factor of 2). + bool again = true; + for (int32_t nIter = 0; nIter < 2 && again; nIter++) { + again = false; + + if (nIter == 1) + scale++; + + if (scale > scale_factor) + scale = scale_factor; + + for (int32_t j = 0; j < 2; j++) { + int32_t base = j * 8; + + // Copy over the last 'order' samples from the previous output. + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : state[8 - order + i]; + + // For 8 samples... + for (int32_t i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous *quantized* errors in this chunk (because that's + // all the decoder will have available). + prediction[base + i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + + // Compute the error, and divide it by 2^scale, rounding to the + // nearest integer. This should ideally result in a 4-bit integer. + float se = (float)in_buf[base + i] - (float)prediction[base + i]; + ix[base + i] = qsample(se, 1 << scale); + + // Clamp the error to a 4-bit signed integer, and record what delta + // was needed for that. + int32_t cV = clamp_bits(ix[base + i], encBits) - ix[base + i]; + if (cV > 1 || cV < -1) + again = true; + ix[base + i] += cV; + + // Record the quantized error in in_vec for later predictions, + // and the quantized (decoded) output in state (for use in the next + // batch of 8 samples). + in_vec[i + order] = ix[base + i] * (1 << scale); + state[base + i] = prediction[base + i] + in_vec[i + order]; + } + } + } + + // Write 1-byte header + out[0] = ((scale & 0xF) << 4) | ((optimalp & 0xF) << 0); + + // Write 4/8-byte frame + if (frame_size == 5) { + for (int32_t i = 0; i < 16; i += 4) { + uint8_t c = ((ix[i + 0] & 0b11) << 6) | ((ix[i + 1] & 0b11) << 4) | ((ix[i + 2] & 0b11) << 2) | + ((ix[i + 3] & 0b11) << 0); + out[1 + i / 4] = c; + } + } else { + for (int32_t i = 0; i < 16; i += 2) { + uint8_t c = ((ix[i + 0] & 0xF) << 4) | ((ix[i + 1] & 0xF) << 0); + out[1 + i / 2] = c; + } + } +} + +static void +permute(int32_t *out, int32_t *in, int32_t *prescaled, int32_t scale, int frame_size) +{ + bool normal = myrand() % 3 == 0; + + for (int32_t i = 0; i < 16; i++) { + int32_t lo = in[i] - scale / 2; + int32_t hi = in[i] + scale / 2; + + if (frame_size == 9) { + if (prescaled[i] == -8 && myrand() % 10 == 0) + lo -= scale * 3 / 2; + else if (prescaled[i] == 7 && myrand() % 10 == 0) + hi += scale * 3 / 2; + } else if (prescaled[i] == -2 && myrand() % 7 == 0) { + lo -= scale * 3 / 2; + } else if (prescaled[i] == 1 && myrand() % 10 == 0) { + hi += scale * 3 / 2; + } else if (normal) { + // + } else if (prescaled[i] == 0) { + if (myrand() % 3) { + lo = in[i] - scale / 5; + hi = in[i] + scale / 5; + } else if (myrand() % 2) { + lo = in[i] - scale / 3; + hi = in[i] + scale / 3; + } + } else if (myrand() % 3) { + if (prescaled[i] < 0) + lo = in[i] + scale / 4; + if (prescaled[i] > 0) + hi = in[i] - scale / 4; + } else if (myrand() % 2) { + if (prescaled[i] < 0) + lo = in[i] - scale / 4; + if (prescaled[i] > 0) + hi = in[i] + scale / 4; + } + + out[i] = clamp_bits(lo + myrand() % (hi - lo + 1), 16); + } +} + +/** + * Like vencodeframe/my_encodeframe but assigns a score to the output for informing brute-force decoding + */ +static int64_t +scored_encode(int32_t *in_buf, int32_t *orig_state, int32_t ***coef_tbl, int32_t order, int32_t npredictors, + int32_t wanted_predictor, int32_t wanted_scale, int32_t wanted_ix[16], int frame_size) +{ + int32_t prediction[16]; + int32_t in_vec[16]; + int32_t optimalp = 0; + int32_t scale; + int32_t enc_bits = (frame_size == 5) ? 2 : 4; + int32_t llevel = -(1 << (enc_bits - 1)); + int32_t ulevel = -llevel - 1; + int32_t ie[16]; + float e[16]; + float errs[4]; + + // Determine the best-fitting predictor. + float min = 1e30; + int32_t scale_factor = 16 - enc_bits; + + int64_t scoreA = 0, scoreB = 0, scoreC = 0; + + for (int32_t k = 0; k < npredictors; k++) { + for (int32_t j = 0; j < 2; j++) { + // Copy over the last 'order' samples from the previous output. + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : in_buf[8 - order + i]; + + // For 8 samples... + for (int32_t i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous errors in this chunk, as an inner product with the + // coefficient table. + prediction[j * 8 + i] = inner_product(order + i, coef_tbl[k][i], in_vec); + // Record the error in in_vec (thus, its first 'order' samples + // will contain actual values, the rest will be error terms), and + // in floating point form in e (for no particularly good reason). + in_vec[i + order] = in_buf[j * 8 + i] - prediction[j * 8 + i]; + e[j * 8 + i] = (float)in_vec[i + order]; + } + } + + // Compute the L2 norm of the errors; the lowest norm decides which + // predictor to use. + float se = 0.0f; + for (int32_t j = 0; j < 16; j++) + se += e[j] * e[j]; + + errs[k] = se; + + if (se < min) { + min = se; + optimalp = k; + } + } + + for (int32_t k = 0; k < npredictors; k++) { + if (errs[k] < errs[wanted_predictor]) + scoreA += (int64_t)(errs[wanted_predictor] - errs[k]); + } + + if (optimalp != wanted_predictor) { + // probably penalized above, but add extra penalty in case the error + // values were the exact same + scoreA++; + } + optimalp = wanted_predictor; + + int32_t **coefPage = coef_tbl[optimalp]; + + // Do exactly the same thing again, for real. + for (int32_t j = 0; j < 2; j++) { + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0 ? orig_state[16 - order + i] : in_buf[8 - order + i]); + + for (int32_t i = 0; i < 8; i++) { + prediction[j * 8 + i] = inner_product(order + i, coefPage[i], in_vec); + e[j * 8 + i] = in_vec[i + order] = in_buf[j * 8 + i] - prediction[j * 8 + i]; + } + } + + // Clamp the errors to 16-bit signed ints, and put them in ie. + clamp_to_s16(e, ie); + + // Find a value with highest absolute value. + // @bug If this first finds -2^n and later 2^n, it should set 'max' to the + // latter, which needs a higher value for 'scale'. + int32_t max = 0; + for (int32_t i = 0; i < 16; i++) { + if (abs(ie[i]) > abs(max)) + max = ie[i]; + } + + // Compute which power of two we need to scale down by in order to make + // all values representable as 4-bit signed integers (i.e. be in [-8, 7]). + // The worst-case 'max' is -2^15, so this will be at most 12. + for (scale = 0; scale <= scale_factor; scale++) { + if (max <= ulevel && max >= llevel) + break; + max /= 2; + } + + // Preliminary ix computation, computes whether scale needs to be incremented + int32_t state[16]; + + // Try with the computed scale, but if it turns out we don't fit in 4 bits + // (if some |cV| >= 2), use scale + 1 instead (i.e. downscaling by another + // factor of 2). + bool again = false; + for (int32_t j = 0; j < 2; j++) { + int32_t base = j * 8; + + // Copy over the last 'order' samples from the previous output. + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : state[8 - order + i]; + + // For 8 samples... + for (int32_t i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous *quantized* errors in this chunk (because that's + // all the decoder will have available). + prediction[base + i] = inner_product(order + i, coefPage[i], in_vec); + + // Compute the error, and divide it by 2^scale, rounding to the + // nearest integer. This should ideally result in a 4-bit integer. + float se = (float)in_buf[base + i] - (float)prediction[base + i]; + int32_t ix = qsample(se, 1 << scale); + int32_t clampedIx = clamp_bits(ix, enc_bits); + + // Clamp the error to a 4-bit signed integer, and record what delta + // was needed for that. + int32_t cV = clampedIx - ix; + if (cV > 1 || cV < -1) + again = true; + + // Record the quantized error in in_vec for later predictions, + // and the quantized (decoded) output in state (for use in the next + // batch of 8 samples). + in_vec[i + order] = clampedIx * (1 << scale); + state[base + i] = prediction[base + i] + in_vec[i + order]; + } + } + + if (again && scale < scale_factor) + scale++; + + if (scale != wanted_scale) { + // We could do math to penalize scale mismatches accurately, but it's + // simpler to leave it as a constraint by setting an infinite penalty. + scoreB += 100000000; + scale = wanted_scale; + } + + // Then again for real, but now also with penalty computation + for (int32_t j = 0; j < 2; j++) { + int32_t base = j * 8; + + // Copy over the last 'order' decoded samples from the above chunk. + for (int32_t i = 0; i < order; i++) + in_vec[i] = (j == 0) ? orig_state[16 - order + i] : state[8 - order + i]; + + // ... and do the same thing as before. + for (int32_t i = 0; i < 8; i++) { + prediction[base + i] = inner_product(order + i, coefPage[i], in_vec); + + int64_t ise = (int64_t)in_buf[base + i] - (int64_t)prediction[base + i]; + float se = (float)in_buf[base + i] - (float)prediction[base + i]; + int32_t ix = qsample(se, 1 << scale); + int32_t clampedIx = clamp_bits(ix, enc_bits); + int32_t val = wanted_ix[base + i] * (1 << scale); + + if (clampedIx != wanted_ix[base + i]) { + assert(ix != wanted_ix[base + i]); + + int32_t lo = val - (1 << scale) / 2; + int32_t hi = val + (1 << scale) / 2; + + int64_t diff = 0; + if (ise < lo) + diff = lo - ise; + else if (ise > hi) + diff = ise - hi; + + scoreC += diff * diff + 1; + } + in_vec[i + order] = val; + state[base + i] = prediction[base + i] + val; + } + } + + // Penalties for going outside int16_t + for (int32_t i = 0; i < 16; i++) { + int64_t diff = 0; + + if (in_buf[i] < -0x8000) + diff = -0x8000 - in_buf[i]; + if (in_buf[i] > 0x7fff) + diff = in_buf[i] - 0x7fff; + + scoreC += diff * diff; + } + + return scoreA + scoreB + 10 * scoreC; +} + +static bool +descent(int32_t guess[16], int32_t min_vals[16], int32_t max_vals[16], int32_t prev_state[16], int32_t ***coef_tbl, + int32_t order, int32_t npredictors, int32_t wanted_predictor, int32_t wanted_scale, int32_t wanted_ix[16], + int frame_size) +{ + const double inf = 1e100; + + int64_t curScore = scored_encode(guess, prev_state, coef_tbl, order, npredictors, wanted_predictor, wanted_scale, + wanted_ix, frame_size); + + while (true) { + double delta[16]; + + if (curScore == 0) + return true; + + // Compute gradient, and how far to move along it at most. + double maxMove = inf; + for (int32_t i = 0; i < 16; i++) { + guess[i]++; + int64_t scoreUp = scored_encode(guess, prev_state, coef_tbl, order, npredictors, wanted_predictor, + wanted_scale, wanted_ix, frame_size); + guess[i] -= 2; + int64_t scoreDown = scored_encode(guess, prev_state, coef_tbl, order, npredictors, wanted_predictor, + wanted_scale, wanted_ix, frame_size); + guess[i]++; + + if (scoreUp >= curScore && scoreDown >= curScore) { + // Don't touch this coordinate + delta[i] = 0; + continue; + } + + int32_t val = (scoreDown < scoreUp) ? min_vals[i] : max_vals[i]; + double ds = (scoreDown < scoreUp) ? (scoreDown - curScore) : (curScore - scoreUp); + + if (guess[i] == val) { + delta[i] = 0; + } else { + delta[i] = ds; + maxMove = fmin(maxMove, (val - guess[i]) / delta[i]); + } + } + if (maxMove == inf || maxMove <= 0) { + return false; + } + + // Try exponentially spaced candidates along the gradient. + int32_t nguess[16]; + int32_t bestGuess[16]; + int64_t bestScore = curScore; + while (true) { + bool changed = false; + + for (int32_t i = 0; i < 16; i++) { + nguess[i] = (int32_t)round(guess[i] + delta[i] * maxMove); + + if (nguess[i] != guess[i]) + changed = true; + } + + if (!changed) + break; + + int64_t score = scored_encode(nguess, prev_state, coef_tbl, order, npredictors, wanted_predictor, + wanted_scale, wanted_ix, frame_size); + if (score < bestScore) { + bestScore = score; + memcpy(bestGuess, nguess, sizeof(nguess)); + } + maxMove *= 0.7; + } + + if (bestScore == curScore) + return false; // No improvements along that line, give up. + + curScore = bestScore; + memcpy(guess, bestGuess, sizeof(bestGuess)); + } +} + +static void +get_bounds(int32_t *in, int32_t *prescaled, int32_t scale, int32_t *min_vals, int32_t *max_vals, int frame_size) +{ + int32_t minv, maxv; + + if (frame_size == 9) { + minv = -8; + maxv = 8 - 1; + } else { + minv = -2; + maxv = 2 - 1; + } + + for (int32_t i = 0; i < 16; i++) { + int32_t lo = in[i] - scale / 2 - scale; + int32_t hi = in[i] + scale / 2 + scale; + + if (prescaled[i] == minv) + lo -= scale; + else if (prescaled[i] == maxv) + hi += scale; + + min_vals[i] = lo; + max_vals[i] = hi; + } +} + +#define VADPCM_BRUTEFORCE_LIMIT 100000 + +static int32_t +bruteforce(int32_t guess[16], uint8_t input[9], int32_t decoded[16], int32_t prescaled[16], int32_t prev_state[16], + int32_t ***coef_tbl, int32_t order, int32_t npredictors, int frame_size) +{ + int32_t scale = (input[0] >> 4) & 0xF; + int32_t predictor = (input[0] >> 0) & 0xF; + + int32_t min_vals[16]; + int32_t max_vals[16]; + get_bounds(decoded, prescaled, 1 << scale, min_vals, max_vals, frame_size); + + int i = 0; + while (true) { + int64_t bestScore = -1; + int32_t bestGuess[16]; + + for (int tries = 0; tries < 100; tries++) { + permute(guess, decoded, prescaled, 1 << scale, frame_size); + + int64_t score = + scored_encode(guess, prev_state, coef_tbl, order, npredictors, predictor, scale, prescaled, frame_size); + if (score == 0) + return true; + + if (bestScore == -1 || score < bestScore) { + bestScore = score; + memcpy(bestGuess, guess, sizeof(bestGuess)); + } + } + + memcpy(guess, bestGuess, sizeof(bestGuess)); + + if (descent(guess, min_vals, max_vals, prev_state, coef_tbl, order, npredictors, predictor, scale, prescaled, + frame_size)) + return true; + + i++; + if (i == VADPCM_BRUTEFORCE_LIMIT) + error("Bruteforce decoding failed"); + } +} + +/** + * vadpcm encoder used when encoding data + */ +static void +vencodeframe(uint8_t *out_buf, int16_t *in_buf, int32_t *state, int32_t ***coef_tbl, int32_t order, int32_t npredictors, + int frame_size) +{ + int32_t in_vec[16]; + int32_t prediction[16]; + int32_t optimalp; + float e[16]; + float se; + float min = 1e30; + int32_t i; + int32_t j; + int32_t k; + + // Determine the best-fitting predictor. + + optimalp = 0; + for (k = 0; k < npredictors; k++) { + // Copy over the last 'order' samples from the previous output. + for (i = 0; i < order; i++) + in_vec[i] = state[16 - order + i]; + + // For 8 samples... + for (i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous *quantized* errors in this chunk (because that's + // all the decoder will have available). + prediction[i] = inner_product(order + i, coef_tbl[k][i], in_vec); + + // Record the error in in_vec (thus, its first 'order' samples + // will contain actual values, the rest will be error terms), and + // in floating point form in e (for no particularly good reason). + in_vec[i + order] = in_buf[i] - prediction[i]; + e[i] = (float)in_vec[i + order]; + } + + // For the next 8 samples, start with 'order' values from the end of + // the previous 8-sample chunk of in_buf. (The code is equivalent to + // in_vec[i] = in_buf[8 - order + i].) + for (i = 0; i < order; i++) + in_vec[i] = prediction[8 - order + i] + in_vec[8 + i]; + + // ... and do the same thing as before to get predictions. + for (i = 0; i < 8; i++) { + prediction[8 + i] = inner_product(order + i, coef_tbl[k][i], in_vec); + in_vec[i + order] = in_buf[8 + i] - prediction[8 + i]; + e[8 + i] = (float)in_vec[i + order]; + } + + // Compute the L2 norm of the errors; the lowest norm decides which predictor to use. + se = 0.0f; + for (j = 0; j < 16; j++) + se += e[j] * e[j]; + + if (se < min) { + min = se; + optimalp = k; + } + } + + // Do exactly the same thing again, for real. + + for (i = 0; i < order; i++) + in_vec[i] = state[16 - order + i]; + + for (i = 0; i < 8; i++) { + prediction[i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + in_vec[i + order] = in_buf[i] - prediction[i]; + e[i] = (float)in_vec[i + order]; + } + + for (i = 0; i < order; i++) + in_vec[i] = prediction[8 - order + i] + in_vec[8 + i]; + + for (i = 0; i < 8; i++) { + prediction[8 + i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + in_vec[i + order] = in_buf[8 + i] - prediction[8 + i]; + e[8 + i] = (float)in_vec[i + order]; + } + + int32_t ie[16]; + int32_t max = 0; + + // Clamp the errors to 16-bit signed ints, and put them in ie. + clamp(16, e, ie, 16); + + // Find a value with highest absolute value. + // Reproduce original tool bug: + // If this first finds -2^n and later 2^n, it should set 'max' to the + // latter, which needs a higher value for 'scale'. + for (i = 0; i < 16; i++) { + if (abs(ie[i]) > abs(max)) + max = ie[i]; + } + + // Compute which power of two we need to scale down by in order to make + // all values representable as 4-bit (resp. 2-bit) signed integers + // (i.e. be in [-8, 7] (resp. [-2, 1])). + // The worst-case 'max' is -2^15, so this will be at most 12 (resp. 14). + // Depends on whether we are encoding for long or short VADPCM. + + int32_t enc_bits = (frame_size == 5) ? 2 : 4; + int32_t scale_factor = 16 - enc_bits; + int32_t llevel = -(1 << (enc_bits - 1)); + int32_t ulevel = -llevel - 1; + int32_t scale; + + for (scale = 0; scale <= scale_factor; scale++) { + if (max <= ulevel && max >= llevel) + break; + max /= 2; + } + + int32_t saveState[16]; + memcpy(saveState, state, sizeof(saveState)); + + int16_t ix[16]; + int32_t nIter; + int32_t cV; + int32_t maxClip; + + // Try with the computed scale, but if it turns out we don't fit in 4 bits + // (if some |cV| >= 2), use scale + 1 instead (i.e. downscaling by another + // factor of 2). + scale--; + nIter = 0; + do { + nIter++; + maxClip = 0; + scale++; + + if (scale > scale_factor) + scale = scale_factor; + + // Copy over the last 'order' samples from the previous output. + for (i = 0; i < order; i++) + in_vec[i] = saveState[16 - order + i]; + + // For 8 samples... + for (i = 0; i < 8; i++) { + // Compute a prediction based on 'order' values from the old state, + // plus previous *quantized* errors in this chunk (because that's + // all the decoder will have available). + prediction[i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + + // Compute the error, and divide it by 2^scale, rounding to the + // nearest integer. This should ideally result in a 4-bit integer. + se = (float)in_buf[i] - (float)prediction[i]; + ix[i] = qsample(se, 1 << scale); + + // Clamp the error to a 4-bit signed integer, and record what delta + // was needed for that. + cV = clamp_bits(ix[i], enc_bits) - ix[i]; + if (maxClip < abs(cV)) + maxClip = abs(cV); + ix[i] += cV; + + // Record the quantized error in in_vec for later predictions, + // and the quantized (decoded) output in state (for use in the next + // batch of 8 samples). + in_vec[i + order] = ix[i] * (1 << scale); + state[i] = prediction[i] + in_vec[i + order]; + } + + // Copy over the last 'order' decoded samples from the above chunk. + for (i = 0; i < order; i++) + in_vec[i] = state[8 - order + i]; + + // ... and do the same thing as before. + for (i = 0; i < 8; i++) { + prediction[8 + i] = inner_product(order + i, coef_tbl[optimalp][i], in_vec); + + se = (float)in_buf[8 + i] - (float)prediction[8 + i]; + ix[8 + i] = qsample(se, 1 << scale); + + cV = clamp_bits(ix[8 + i], enc_bits) - ix[8 + i]; + if (maxClip < abs(cV)) + maxClip = abs(cV); + + ix[8 + i] += cV; + in_vec[i + order] = ix[8 + i] * (1 << scale); + state[8 + i] = prediction[8 + i] + in_vec[i + order]; + } + } while (maxClip >= 2 && nIter < 2); + + // The scale, the predictor index, and the 16 computed outputs are now all + // 4-bit numbers. Write them out as either 1 + 8 bytes or 1 + 4 bytes depending + // on whether we are encoding for long or short VADPCM. + + *(out_buf++) = ((scale & 0b1111) << 4) | ((optimalp & 0b1111) << 0); + + switch (frame_size) { + case 5: + for (i = 0; i < 16; i += 4) + *(out_buf++) = ((ix[i + 0] & 0b11) << 6) | ((ix[i + 1] & 0b11) << 4) | ((ix[i + 2] & 0b11) << 2) | + ((ix[i + 3] & 0b11) << 0); + break; + case 9: + for (i = 0; i < 16; i += 2) + *(out_buf++) = ((ix[i + 0] & 0b1111) << 4) | ((ix[i + 1] & 0b1111) << 0); + break; + } +} + +int +vadpcm_enc(container_data *ctnr, const codec_spec *codec, const enc_dec_opts *opts) +{ + if (ctnr->num_channels != 1) + error("Only mono input can be converted to vadpcm, was %u-channel", ctnr->num_channels); + if (ctnr->bit_depth != 16) + error("Only 16-bit samples can be converted to vadpcm, was %u-bit", ctnr->bit_depth); + + int frame_size = codec->frame_size; + + int32_t state[16]; + memset(state, 0, sizeof(state)); + + unsigned int nloops = ctnr->num_loops; + if (nloops > 1) + error("Only 1 loop supported"); + + unsigned i; + unsigned j; + + // synthesize ADPCM loop structures, state will be filled later + ALADPCMloop *aloops = NULL; + if (nloops != 0) { + container_loop *loops = ctnr->loops; + aloops = MALLOC_CHECKED_INFO(nloops * sizeof(ALADPCMloop), "nloops=%u", nloops); + + for (i = 0; i < nloops; i++) { + aloops[i].start = loops[i].start; + aloops[i].end = loops[i].end; + aloops[i].count = loops[i].num; + } + ctnr->vadpcm.loop_version = 1; + ctnr->vadpcm.loops = aloops; + ctnr->vadpcm.num_loops = nloops; + } + + ctnr->vadpcm.book_version = 1; + if (!ctnr->vadpcm.has_book) { + // If there is no prediction codebook embedded in the input file, design one for the data + tabledesign_run(&ctnr->vadpcm.book_header.order, &ctnr->vadpcm.book_header.npredictors, &ctnr->vadpcm.book_data, + ctnr->data, ctnr->num_samples, &opts->design); + ctnr->vadpcm.has_book = true; + } + + uint32_t currentPos = 0; + int nRepeats; + uint32_t nBytes = 0; + + int order = ctnr->vadpcm.book_header.order; + int npredictors = ctnr->vadpcm.book_header.npredictors; + + int32_t ***coef_tbl; + expand_codebook(ctnr->vadpcm.book_data, &coef_tbl, ctnr->vadpcm.book_header.order, + ctnr->vadpcm.book_header.npredictors); + + int16_t in_buf[16]; + + uint16_t *indata = ctnr->data; + uint8_t *outdata = MALLOC_CHECKED_INFO(ctnr->data_size, "data_size=%lu", ctnr->data_size); + + unsigned nFrames = ctnr->num_samples; + /* printf("Num samples: %u\n", nFrames); */ + + for (i = 0; i < nloops; i++) { + // printf("Process loop: start=%u end=%u count=%u\n", aloops[i].start, aloops[i].end, aloops[i].count); + + // Duplicate the loop until it's longer than the minimum loop length + nRepeats = 0; + uint32_t newEnd = aloops[i].end; + while (newEnd - aloops[i].start < opts->min_loop_length) { + newEnd += aloops[i].end - aloops[i].start; + nRepeats++; + } + + // Encode [current, loop_start) + while (currentPos <= aloops[i].start) { + // printf(" pre-loop %u / %u\n", currentPos, aloops[i].start); + + memcpy(in_buf, &indata[currentPos], sizeof(in_buf)); + currentPos += 16; + + vencodeframe(&outdata[nBytes], in_buf, state, coef_tbl, order, npredictors, frame_size); + nBytes += frame_size; + } + + // Emplace loop state + // printf(" wr loop state\n"); + for (j = 0; j < 16; j++) { + if (state[j] > 0x7FFF) + state[j] = 0x7FFF; + if (state[j] < -0x7FFF) + state[j] = -0x7FFF; + aloops[i].state[j] = state[j]; + } + + aloops[i].count = -1; + + // Encode the loop for n repeats + while (nRepeats > 0) { + // printf(" repeat #%u\n", nRepeats); + // Encode [loop_start, loop_end] + while (currentPos + 16 < aloops[i].end) { + // printf(" loop-repeat %u / %u\n", currentPos, aloops[i].end); + + memcpy(in_buf, &indata[currentPos], sizeof(in_buf)); + currentPos += 16; + + vencodeframe(&outdata[nBytes], in_buf, state, coef_tbl, order, npredictors, frame_size); + nBytes += frame_size; + } + + // Handling for when loop_end is halfway through a frame + + uint32_t left = aloops[i].end - currentPos; + // printf(" rem=%u\n", left); + + memcpy(in_buf, &indata[currentPos], left * sizeof(int16_t)); + + currentPos = aloops[i].start * 2; + + memcpy(in_buf + left, &indata[currentPos], (16 - left) * sizeof(int16_t)); + + vencodeframe(&outdata[nBytes], in_buf, state, coef_tbl, order, npredictors, frame_size); + nBytes += frame_size; + + // Return to loop start + + currentPos = aloops[i].start - left + 16; + nRepeats--; + } + aloops[i].end = newEnd; + } + + // Get frame count, truncate to loop end if desired + if (nloops > 0 && opts->truncate) + nFrames = MIN(aloops[nloops - 1].end + 16, nFrames); + + // Encode remaining data + + while (currentPos < nFrames) { + uint32_t nsam = MIN(nFrames - currentPos, 16); + // printf(" post-loop: %u / %u (%u)\n", currentPos, nFrames, nsam); + + memcpy(in_buf, &indata[currentPos], sizeof(int16_t) * nsam); + currentPos += nsam; + + memset(in_buf, 0, (16 - nsam) * sizeof(int16_t)); + + vencodeframe(&outdata[nBytes], in_buf, state, coef_tbl, order, npredictors, frame_size); + nBytes += frame_size; + } + + // Pad to even number + if (nBytes % 2 != 0) + outdata[nBytes++] = 0; + + assert(nBytes <= ctnr->data_size); + + // Write out + + ctnr->num_loops = 0; + if (ctnr->loops != NULL) + free(ctnr->loops); + ctnr->loops = NULL; + + free(ctnr->data); + + ctnr->data = outdata; + ctnr->data_size = nBytes; + ctnr->data_type = (frame_size == 5) ? SAMPLE_TYPE_VADPCM_HALF : SAMPLE_TYPE_VADPCM; + + destroy_expanded_codebook(coef_tbl, npredictors); + + return 0; +} + +int +vadpcm_dec(container_data *ctnr, UNUSED const codec_spec *codec, const enc_dec_opts *opts) +{ + if (ctnr->num_channels != 1) + error("vadpcm can only be mono, was %u-channel", ctnr->num_channels); + if (ctnr->bit_depth != 16) + error("vadpcm can only be converted to 16-bit samples, was %u-bit", ctnr->bit_depth); + + if (!ctnr->vadpcm.has_book) + error("Codebook missing from bitstream"); + + int16_t order = ctnr->vadpcm.book_header.order; + int16_t npredictors = ctnr->vadpcm.book_header.npredictors; + int16_t nloops = ctnr->vadpcm.num_loops; + + if (nloops > 1) + error("AIFC should only have at most 1 loop"); + + ALADPCMloop *aloops = ctnr->vadpcm.loops; + + int32_t ***coef_tbl = NULL; + expand_codebook(ctnr->vadpcm.book_data, &coef_tbl, order, npredictors); + + int32_t state[16]; + int32_t prescaled[16]; + int32_t in_pos = 0; + int32_t cur_pos = 0; + uint32_t nSamples = (ctnr->num_samples + 15) & ~15; + + int frame_size = (ctnr->data_type == SAMPLE_TYPE_VADPCM_HALF) ? 5 : 9; + + uint8_t *input_buf = ctnr->data; + + for (int32_t i = 0; i < order; i++) + state[15 - i] = 0; + + // Align to (decoded) frame size, the original undecompressed sample may have had only a fraction of a frame at the + // end but we always decompress to entire frames. + size_t output_size = nSamples * sizeof(int16_t); + uint8_t *output_buf = MALLOC_CHECKED_INFO(output_size, "output_size=%lu", output_size); + + int fails = 0; + + for (size_t frame_number = 0; frame_number * 16 < nSamples; frame_number++) { + uint8_t input[9]; + uint8_t encoded[9]; + int32_t prev_state[16]; + int32_t decoded[16]; + int16_t guess[16]; + int16_t origGuess[16]; + + memcpy(prev_state, state, sizeof(state)); + + memcpy(input, &input_buf[in_pos], frame_size); + in_pos += frame_size; + + // Initial decode using the standard decoder + vdecodeframe(input, prescaled, state, order, coef_tbl, frame_size); + + // Create a guess from that, by clamping to 16 bits + for (int32_t i = 0; i < 16; i++) + guess[i] = clamp_bits(state[i], 16); + + // If we aren't going for matching, the initial decode is sufficient and we skip re-encoding and bruteforcing + if (opts->matching) { + memcpy(decoded, state, sizeof(state)); + memcpy(origGuess, guess, sizeof(guess)); + + // Encode the guess + my_encodeframe(encoded, guess, prev_state, coef_tbl, order, npredictors, frame_size); + + if (memcmp(input, encoded, frame_size) != 0) { + // If it doesn't match, bruteforce the matching. + + int32_t guess32[16]; + if (bruteforce(guess32, input, decoded, prescaled, prev_state, coef_tbl, order, npredictors, + frame_size)) { + for (int i = 0; i < 16; i++) { + assert(-0x8000 <= guess32[i] && guess32[i] <= 0x7fff); + guess[i] = guess32[i]; + } + + my_encodeframe(encoded, guess, prev_state, coef_tbl, order, npredictors, frame_size); + assert(memcmp(input, encoded, frame_size) == 0); + } else { + fails++; + error("FAIL [%d/%d]\n", cur_pos, nSamples); + } + + // Bring the match closer to the original decode (not strictly + // necessary, but it will move us closer to the target on average). + for (int32_t failures = 0; failures < 50; failures++) { + int32_t ind = myrand() % 16; + int32_t old = guess[ind]; + + if (old == origGuess[ind]) + continue; + + guess[ind] = origGuess[ind]; + + if (myrand() % 2) + guess[ind] += (old - origGuess[ind]) / 2; + + my_encodeframe(encoded, guess, prev_state, coef_tbl, order, npredictors, frame_size); + + if (memcmp(input, encoded, frame_size) == 0) + failures = -1; + else + guess[ind] = old; + } + } + } + + memcpy(output_buf + cur_pos * 2, guess, sizeof(guess)); + cur_pos += 16; + } + + if (fails != 0) + error("Decoding failures: %d\n", fails); + + // Convert VADPCM loop to regular loop, if it exists + + if (nloops != 0) { + container_loop *loop = MALLOC_CHECKED(sizeof(container_loop)); + *loop = (container_loop){ + .id = 0, + .type = LOOP_FORWARD, + .start = aloops[0].start, + .end = aloops[0].end, + .fraction = 0, + .num = aloops[0].count, + }; + ctnr->num_loops = 1; + ctnr->loops = loop; + + ctnr->vadpcm.num_loops = 0; + free(ctnr->vadpcm.loops); + ctnr->vadpcm.loops = NULL; + } + + // Assign new data + + free(ctnr->data); + ctnr->data = output_buf; + ctnr->data_size = output_size; + ctnr->data_type = SAMPLE_TYPE_PCM16; + ctnr->num_samples = nSamples; + + destroy_expanded_codebook(coef_tbl, npredictors); + return 0; +} diff --git a/tools/audio/sampleconv/src/codec/vadpcm.h b/tools/audio/sampleconv/src/codec/vadpcm.h new file mode 100644 index 0000000000..f6a080bf84 --- /dev/null +++ b/tools/audio/sampleconv/src/codec/vadpcm.h @@ -0,0 +1,50 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: CC0-1.0 + */ +#ifndef CODEC_VADPCM_H +#define CODEC_VADPCM_H + +#include +#include + +#define VADPCM_BOOK_SIZE(order, npredictors) (8 * (order) * (npredictors)) +#define VADPCM_BOOK_SIZE_BYTES(order, npredictors) (sizeof(int16_t) * VADPCM_BOOK_SIZE(order, npredictors)) + +typedef struct { + int16_t order; + int16_t npredictors; +} ALADPCMbookhead; + +typedef int16_t ALADPCMbookstate[]; + +typedef struct { + uint32_t start; + uint32_t end; + uint32_t count; + int16_t state[16]; +} ALADPCMloop; + +typedef struct { + unsigned int order; + unsigned int bits; + unsigned int refine_iters; + double thresh; + unsigned int frame_size; +} table_design_spec; + +int +tabledesign_run(int16_t *order_out, int16_t *npredictors_out, int16_t **book_data_out, void *sample_data, + size_t num_samples, const table_design_spec *design); + +struct container_data; +struct codec_spec; +struct enc_dec_opts; + +int +vadpcm_enc(struct container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + +int +vadpcm_dec(struct container_data *ctnr, const struct codec_spec *codec, const struct enc_dec_opts *opts); + +#endif diff --git a/tools/audio/sampleconv/src/codec/vadpcm_tabledesign.c b/tools/audio/sampleconv/src/codec/vadpcm_tabledesign.c new file mode 100644 index 0000000000..90bad83499 --- /dev/null +++ b/tools/audio/sampleconv/src/codec/vadpcm_tabledesign.c @@ -0,0 +1,655 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: CC0-1.0 + */ +#include +#include +#include +#include + +#include "../util.h" +#include "vadpcm.h" + +// Levinson-Durbin algorithm for iteratively solving for prediction coefficients +// https://en.wikipedia.org/wiki/Levinson_recursion +static int +durbin(double *acvec, int order, double *reflection_coeffs, double *prediction_coeffs, double *error) +{ + int i, j; + double sum, E; + int ret; + + prediction_coeffs[0] = 1.0; + E = acvec[0]; // E[0] = r{xx}[0] + ret = 0; + + for (i = 1; i <= order; i++) { + // SUM(j, a[i-1][j] * r{xx}[i - j] ) + sum = 0.0; + for (j = 1; j <= i - 1; j++) { + sum += prediction_coeffs[j] * acvec[i - j]; + } + + // a[i][i] = -Delta[i-1] / E[i-1] + prediction_coeffs[i] = (E > 0.0) ? (-(acvec[i] + sum) / E) : 0.0; + // k[i] = a[i][i] + reflection_coeffs[i] = prediction_coeffs[i]; + + if (fabs(reflection_coeffs[i]) > 1.0) { + // incr when a predictor coefficient is > 1 (indicates numerical instability) + ret++; + } + + for (j = 1; j < i; j++) { + // a[i][j] = a[i-1][j] + a[i-1][i - j] * a[i][i] + prediction_coeffs[j] += prediction_coeffs[i - j] * prediction_coeffs[i]; + } + + // E[i] = E[i-1] * (1.0 - k[i] ** 2) + // = E[i-1] * (1.0 - a[i][i] ** 2) + E *= 1.0 - prediction_coeffs[i] * prediction_coeffs[i]; + } + *error = E; + return ret; +} + +// Reflection coefficients (k) -> Predictor coefficients (a) +// A subset of Levinson-Durbin that only computes predictors from known reflection coefficients and previous predictors +static void +afromk(double *k, double *ai, int order) +{ + int i, j; + + ai[0] = 1.0; + + for (i = 1; i <= order; i++) { + // a[i][i] = k[i] + ai[i] = k[i]; + + for (j = 1; j <= i - 1; j++) { + // a[i][j] = a[i-1][j] + a[i-1][i - j] * k[i] = a[i-1][j] + a[i-1][i - j] * a[i][i] + ai[j] += ai[i - j] * ai[i]; + } + } +} + +// Prediction coefficients (a) -> Reflection coefficients (k) +// Performs afromk in reverse? +// Returns 0 if numerically stable, otherwise returns non-zero +static int +kfroma(double *in, double *out, int order) +{ + int i, j; + double div; + double temp; + double next[(order + 1)]; + int ret = 0; + + out[order] = in[order]; + + for (i = order - 1; i >= 1; i--) { + for (j = 0; j <= i; j++) { + temp = out[i + 1]; + div = 1.0 - temp * temp; + + if (div == 0.0) { + return 1; + } + + next[j] = (in[j] - in[i - j + 1] * temp) / div; + } + + for (j = 0; j <= i; j++) { + in[j] = next[j]; + } + + out[i] = next[i]; + if (fabs(out[i]) > 1.0) { + // Not numerically stable + ret++; + } + } + + return ret; +} + +// autocorrelation (r{xx}) from predictors (a) ? +static void +rfroma(double *in, int n, double *out) +{ + int i, j; + double mat[n + 1][n + 1]; + double div; + + mat[n][0] = 1.0; + for (i = 1; i <= n; i++) { + mat[n][i] = -in[i]; + } + + for (i = n; i >= 1; i--) { + div = 1.0 - mat[i][i] * mat[i][i]; + + for (j = 1; j <= i - 1; j++) { + mat[i - 1][j] = (mat[i][i - j] * mat[i][i] + mat[i][j]) / div; + } + } + + out[0] = 1.0; + for (i = 1; i <= n; i++) { + out[i] = 0.0; + for (j = 1; j <= i; j++) { + out[i] += mat[i][j] * out[i - j]; + } + } +} + +static double +model_dist(double *predictors, double *data, int order) +{ + double autocorrelation_data[order + 1]; + double autocorrelation_predictors[order + 1]; + double ret; + int i, j; + + // autocorrelation from data + rfroma(data, order, autocorrelation_data); + + // autocorrelation from predictors + for (i = 0; i <= order; i++) { + autocorrelation_predictors[i] = 0.0; + for (j = 0; j <= order - i; j++) { + autocorrelation_predictors[i] += predictors[j] * predictors[i + j]; + } + } + + // compute "model distance" (scaled L2 norm: 2 * inner(ac1, ac2) ) + ret = autocorrelation_data[0] * autocorrelation_predictors[0]; + for (i = 1; i <= order; i++) { + ret += 2 * autocorrelation_data[i] * autocorrelation_predictors[i]; + } + + return ret; +} + +// Calculate the autocorrelation matrix of two vectors at x and x - xlen +// https://en.wikipedia.org/wiki/Autocorrelation +static void +acmat(int16_t *x, int order, int xlen, double **ac) +{ + int i, j, k; + + for (i = 1; i <= order; i++) { + for (j = 1; j <= order; j++) { + // R{xx}[i,j] = E[X[i] * X[j]] + + ac[i][j] = 0.0; + for (k = 0; k < xlen; k++) { + ac[i][j] += x[k - i] * x[k - j]; + } + } + } +} + +// Computes the autocorrelation vector of two vectors at x and x - xlen +static void +acvect(int16_t *x, int order, int xlen, double *ac) +{ + int i, j; + + for (i = 0; i <= order; i++) { + ac[i] = 0.0; + // r{xx} = E(x(m)x) = SUM(j, x[j - i] * x[j]) + for (j = 0; j < xlen; j++) { + ac[i] -= x[j - i] * x[j]; + } + } +} + +/** + * Lower-Upper (with Permutation vector) (LUP) Decomposition + * + * Replaces a real n-by-n matrix "a" with the LU decomposition of a row-wise + * permutation of itself. + * + * Input parameters: + * a: The matrix which is operated on. 1-indexed; it should be of size + * (n+1) x (n+1), and row/column index 0 is not used. + * n: The size of the matrix. + * + * Output parameters: + * indx: The row permutation performed. 1-indexed; it should be of size n+1, + * and index 0 is not used. + * d: the determinant of the permutation matrix. + * + * Returns 1 to indicate failure if the matrix is singular or has zeroes on the + * diagonal, 0 on success. + * + * Derived from ludcmp in "Numerical Recipes in C: The Art of Scientific Computing", + * with modified error handling. + */ +static int +lud(double **a, int n, int *perm, int *d) +{ + int i, imax = 0, j, k; + double big, dum, sum, temp; + double min, max; + double vv[n + 1]; + + *d = 1; + for (i = 1; i <= n; i++) { + big = 0.0; + for (j = 1; j <= n; j++) + if ((temp = fabs(a[i][j])) > big) + big = temp; + + if (big == 0.0) + return 1; + + vv[i] = 1.0 / big; + } + + for (j = 1; j <= n; j++) { + for (i = 1; i < j; i++) { + sum = a[i][j]; + for (k = 1; k < i; k++) + sum -= a[i][k] * a[k][j]; + + a[i][j] = sum; + } + + big = 0.0; + + for (i = j; i <= n; i++) { + sum = a[i][j]; + for (k = 1; k < j; k++) + sum -= a[i][k] * a[k][j]; + + a[i][j] = sum; + + if ((dum = vv[i] * fabs(sum)) >= big) { + big = dum; + imax = i; + } + } + + if (j != imax) { + for (k = 1; k <= n; k++) { + dum = a[imax][k]; + a[imax][k] = a[j][k]; + a[j][k] = dum; + } + + *d = -(*d); + vv[imax] = vv[j]; + } + + perm[j] = imax; + + if (a[j][j] == 0.0) + return 1; + + if (j != n) { + dum = 1.0 / (a[j][j]); + for (i = j + 1; i <= n; i++) + a[i][j] *= dum; + } + } + + min = 1e10; + max = 0.0; + for (i = 1; i <= n; i++) { + temp = fabs(a[i][i]); + if (temp < min) + min = temp; + if (temp > max) + max = temp; + } + return (min / max < 1e-10) ? 1 : 0; +} + +/** + * Solves the set of n linear equations Ax = b, using LU decomposition back-substitution. + * + * Input parameters: + * a: The LU decomposition of a matrix, created by "lud". + * n: The size of the matrix. + * indx: Row permutation vector, created by "lud". + * b: The vector b in the equation. 1-indexed; is should be of size n+1, and index 0 is not used. + * + * Output parameters: + * b: The output vector x. 1-indexed. + * + * From "Numerical Recipes in C: The Art of Scientific Computing". + */ +static void +lubksb(double **a, int n, int *perm, double *b) +{ + int i, ii = 0, ip, j; + double sum; + + for (i = 1; i <= n; i++) { + ip = perm[i]; + sum = b[ip]; + b[ip] = b[i]; + + if (ii) { + for (j = ii; j <= i - 1; j++) + sum -= a[i][j] * b[j]; + } else if (sum) { + ii = i; + } + + b[i] = sum; + } + + for (i = n; i >= 1; i--) { + sum = b[i]; + for (j = i + 1; j <= n; j++) + sum -= a[i][j] * b[j]; + b[i] = sum / a[i][i]; + } +} + +static void +split(double **predictors, double *delta, int order, int npredictors, double scale) +{ + int i, j; + + for (i = 0; i < npredictors; i++) { + for (j = 0; j <= order; j++) { + predictors[i + npredictors][j] = predictors[i][j] + delta[j] * scale; + } + } +} + +static void +refine(double **predictors, int order, int npredictors, double *data, int data_size, int refine_iters) +{ + int iter; + double dist; + double dummy; + double best_value; + int best_index; + int i, j; + + double rsums[npredictors][order + 1]; + int counts[npredictors]; + double vec[order + 1]; + + for (iter = 0; iter < refine_iters; iter++) { + // For some number of refinement iterations + + // Initialize averages + memset(counts, 0, npredictors * sizeof(int)); + memset(rsums, 0, npredictors * (order + 1) * sizeof(double)); + + // Sum autocorrelations + for (i = 0; i < data_size; i++) { + best_value = 1e30; + best_index = 0; + + // Find index that minimizes the "model distance" + for (j = 0; j < npredictors; j++) { + dist = model_dist(predictors[j], &data[(order + 1) * i], order); + + if (dist < best_value) { + best_value = dist; + best_index = j; + } + } + + counts[best_index]++; + rfroma(&data[(order + 1) * i], order, vec); // compute autocorrelation from predictors + + for (j = 0; j <= order; j++) + rsums[best_index][j] += vec[j]; // add to average autocorrelation + } + + // finalize average autocorrelations + for (i = 0; i < npredictors; i++) { + if (counts[i] > 0) { + for (j = 0; j <= order; j++) { + rsums[i][j] /= counts[i]; + } + } + } + + for (i = 0; i < npredictors; i++) { + // compute predictors from average autocorrelation + durbin(rsums[i], order, vec, predictors[i], &dummy); + // vec is reflection coeffs + + // clamp reflection coeffs + for (j = 1; j <= order; j++) { + if (vec[j] >= 1.0) + vec[j] = 0.9999999999; + if (vec[j] <= -1.0) + vec[j] = -0.9999999999; + } + + // clamped reflection coeffs -> predictors + afromk(vec, predictors[i], order); + } + } +} + +static int +read_row(int16_t *p, double *row, int order) +{ + double fval; + int ival; + int i, j, k; + int overflows; + double table[8][order]; + + for (i = 0; i < order; i++) { + for (j = 0; j < i; j++) + table[i][j] = 0.0; + + for (j = i; j < order; j++) + table[i][j] = -row[order - j + i]; + } + + for (i = order; i < 8; i++) + for (j = 0; j < order; j++) + table[i][j] = 0.0; + + for (i = 1; i < 8; i++) + for (j = 1; j <= order; j++) + if (i - j >= 0) + for (k = 0; k < order; k++) + table[i][k] -= row[j] * table[i - j][k]; + + overflows = 0; + + for (i = 0; i < order; i++) { + for (j = 0; j < 8; j++) { + fval = table[j][i] * (double)(1 << 11); + if (fval < 0.0) { + ival = (int)(fval - 0.5); + if (ival < -0x8000) + overflows++; + } else { + ival = (int)(fval + 0.5); + if (ival >= 0x8000) + overflows++; + } + + *(p++) = ival; + } + } + + return overflows; +} + +int +tabledesign_run(int16_t *order_out, int16_t *npredictors_out, int16_t **book_data_out, void *sample_data, + size_t num_samples, const table_design_spec *design) +{ + static const table_design_spec default_design = { + .order = 2, + .bits = 2, + .refine_iters = 2, + .thresh = 10.0, + .frame_size = 16, + }; + + if (design == NULL) + design = &default_design; + + int16_t order = design->order; + int16_t npredictors = 1 << design->bits; + unsigned int frame_size = design->frame_size; + + int num_order = order + 1; + + double vec[num_order]; + int perm[num_order]; + double reflection_coeffs[num_order]; + + int16_t *buffer = MALLOC_CHECKED_INFO(2 * frame_size * sizeof(int16_t), "frame_size=%u", frame_size); + + double **predictors = MALLOC_CHECKED_INFO(npredictors * sizeof(double *), "npredictors=%d", npredictors); + for (int i = 0; i < npredictors; i++) + predictors[i] = MALLOC_CHECKED_INFO(num_order * sizeof(double), "npredictors=%d", npredictors); + + double **autocorrelation_matrix = MALLOC_CHECKED_INFO(num_order * sizeof(double *), "num_order=%d", num_order); + for (int i = 0; i < num_order; i++) + autocorrelation_matrix[i] = MALLOC_CHECKED_INFO(num_order * sizeof(double), "num_order=%d", num_order); + + size_t nframes = num_samples - (num_samples % frame_size); + + double *data = + MALLOC_CHECKED_INFO(nframes * num_order * sizeof(double), "nframes=%lu, num_order=%d", nframes, num_order); + uint32_t data_size = 0; + + int16_t *sample = sample_data; + // (back-)align to a multiple of the frame size + int16_t *sample_end = sample + nframes; + + memset(buffer, 0, frame_size * sizeof(int16_t)); + + for (; sample < sample_end; sample += frame_size) { + // Copy sample data into second half of buffer, during the first iteration the first half is 0 while in + // later iterations the second half of the previous iteration is shifted into the first half. + memcpy(&buffer[frame_size], sample, frame_size * sizeof(int16_t)); + + // Compute autocorrelation vector of the two vectors in the buffer + acvect(&buffer[frame_size], order, frame_size, vec); + + // First element is the largest(?) + if (fabs(vec[0]) > design->thresh) { + // Over threshold + + // Computes the autocorrelation matrix of the two vectors in the buffer + acmat(&buffer[frame_size], order, frame_size, autocorrelation_matrix); + + // Compute the LUP decomposition of the autocorrelation matrix + int perm_det; + if (lud(autocorrelation_matrix, order, perm, &perm_det) == 0) { // Continue only if numerically stable + // Back-substitution to solve the linear equation Ra = r + // where + // R = autocorrelation matrix + // r = autocorrelation vector + // a = linear prediction coefficients + // After this vec contains the prediction coefficients + lubksb(autocorrelation_matrix, order, perm, vec); + vec[0] = 1.0; + + // Compute reflection coefficients from prediction coefficients + if (kfroma(vec, reflection_coeffs, order) == 0) { // Continue only if numerically stable + data[data_size * num_order + 0] = 1.0; + + // clamp the reflection coefficients + for (int i = 1; i < num_order; i++) { + if (reflection_coeffs[i] >= 1.0) + reflection_coeffs[i] = 0.9999999999; + if (reflection_coeffs[i] <= -1.0) + reflection_coeffs[i] = -0.9999999999; + } + + // Compute prediction coefficients from reflection coefficients + afromk(reflection_coeffs, &data[data_size * num_order], order); + data_size++; + } + } + } + + // Move second vector to first vector + memcpy(&buffer[0], &buffer[frame_size], frame_size * sizeof(int16_t)); + } + + // Create a vector [1.0, 0.0, ..., 0.0] + vec[0] = 1.0; + for (int i = 1; i < num_order; i++) + vec[i] = 0.0; + + for (uint32_t i = 0; i < data_size; i++) { + // Compute autocorrelation from predictors + rfroma(&data[i * num_order], order, predictors[0]); + + for (int k = 1; k < num_order; k++) + vec[k] += predictors[0][k]; + } + + for (int i = 1; i < num_order; i++) + vec[i] /= data_size; + + // vec is the average autocorrelation + + // Compute predictors for average autocorrelation using Levinson-Durbin algorithm + double dummy; + durbin(vec, order, reflection_coeffs, predictors[0], &dummy); + + // clamp results + for (int i = 1; i < num_order; i++) { + if (reflection_coeffs[i] >= 1.0) + reflection_coeffs[i] = 0.9999999999; + if (reflection_coeffs[i] <= -1.0) + reflection_coeffs[i] = -0.9999999999; + } + + // Convert clamped reflection coefficients to predictors + afromk(reflection_coeffs, predictors[0], order); + + // Split and refine predictors + for (unsigned cur_bits = 0; cur_bits < design->bits; cur_bits++) { + double split_delta[num_order]; + + for (int i = 0; i < num_order; i++) + split_delta[i] = 0.0; + split_delta[order - 1] = -1.0; + + split(predictors, split_delta, order, 1 << cur_bits, 0.01); + refine(predictors, order, 1 << (1 + cur_bits), data, data_size, design->refine_iters); + } + + int16_t *book_data = MALLOC_CHECKED_INFO((8 * order * npredictors + 2) * sizeof(int16_t), + "order=%d, npredictors=%d", order, npredictors); + + *order_out = order; + *npredictors_out = npredictors; + + int num_oflow = 0; + for (int i = 0; i < npredictors; i++) + num_oflow += read_row(&book_data[8 * order * i], predictors[i], order); + + if (num_oflow) { + error("overflow detected in tabledesign"); + } + + *book_data_out = book_data; + + free(buffer); + free(data); + + for (int i = 0; i < num_order; i++) + free(autocorrelation_matrix[i]); + free(autocorrelation_matrix); + + for (int i = 0; i < npredictors; i++) + free(predictors[i]); + free(predictors); + + return 0; +} diff --git a/tools/audio/sampleconv/src/container/aiff.c b/tools/audio/sampleconv/src/container/aiff.c new file mode 100644 index 0000000000..d550e80055 --- /dev/null +++ b/tools/audio/sampleconv/src/container/aiff.c @@ -0,0 +1,837 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include +#include +#include +#include +#include +#include + +#include "../util.h" +#include "../codec/vadpcm.h" +#include "aiff.h" + +typedef struct { + int16_t numChannels; + uint16_t numFramesH; + uint16_t numFramesL; + int16_t sampleSize; + uint8_t sampleRate[10]; // 80-bit float + // Followed by compression type + compression name pstring +} aiff_COMM; + +typedef struct { + uint16_t nMarkers; +} aiff_MARK; + +typedef struct { + uint16_t MarkerID; + uint16_t positionH; + uint16_t positionL; +} Marker; + +typedef enum { + LOOP_PLAYMODE_NONE = 0, + LOOP_PLAYMODE_FWD = 1, + LOOP_PLAYMODE_FWD_BWD = 2 +} aiff_loop_playmode; + +typedef struct { + int16_t playMode; // aiff_loop_playmode + // Marker IDs + int16_t beginLoop; + int16_t endLoop; +} Loop; + +typedef struct { + int8_t baseNote; + int8_t detune; + int8_t lowNote; + int8_t highNote; + int8_t lowVelocity; + int8_t highVelocity; + int16_t gain; + Loop sustainLoop; + Loop releaseLoop; +} aiff_INST; + +typedef struct { + int32_t offset; + int32_t blockSize; +} aiff_SSND; + +static void +read_pstring(FILE *f, char *out) +{ + unsigned char len; + + // read string length + FREAD(f, &len, sizeof(len)); + + // read string and null-terminate it + FREAD(f, out, len); + out[len] = '\0'; + + // pad to 2-byte boundary + if (!(len & 1)) + FREAD(f, &len, 1); +} + +static char * +read_pstring_alloc(FILE *f) +{ + unsigned char len; + + // read string length + FREAD(f, &len, sizeof(len)); + + // alloc + char *out = MALLOC_CHECKED_INFO(len + 1, "len=%u", len); + + // read string and null-terminate it + FREAD(f, out, len); + out[len] = '\0'; + + // pad to 2-byte boundary + if (!(len & 1)) + FREAD(f, &len, 1); + + return out; +} + +static void +write_pstring(FILE *f, const char *in) +{ + unsigned char zr = 0; + size_t inlen = strlen(in); + + if (inlen > 255) + error("Invalid pstring length."); + + unsigned char len = inlen; + + CHUNK_WRITE(f, &len); + CHUNK_WRITE_RAW(f, in, len); + if (!(len & 1)) + CHUNK_WRITE(f, &zr); +} + +static_assert(sizeof(double) == sizeof(uint64_t), "Double is assumed to be 64-bit"); + +#define F64_GET_SGN(bits) (((bits) >> 63) & 1) // 1-bit +#define F64_GET_EXP(bits) ((((bits) >> 52) & 0x7FF) - 0x3FF) // 15-bit +#define F64_GET_MANT_H(bits) (((bits) >> 32) & 0xFFFFF) // 20-bit +#define F64_GET_MANT_L(bits) ((bits)&0xFFFFFFFF) // 32-bit + +static void +f64_to_f80(double f64, uint8_t *f80) +{ + union { + uint32_t w[3]; + uint8_t b[12]; + } f80tmp; + + // get f64 bits + + uint64_t f64_bits = *(uint64_t *)&f64; + + int f64_sgn = F64_GET_SGN(f64_bits); + int f64_exponent = F64_GET_EXP(f64_bits); + uint32_t f64_mantissa_hi = F64_GET_MANT_H(f64_bits); + uint32_t f64_mantissa_lo = F64_GET_MANT_L(f64_bits); + + // build f80 words + + f80tmp.w[0] = (f64_sgn << 15) | (f64_exponent + 0x3FFF); + f80tmp.w[1] = (1 << 31) | (f64_mantissa_hi << 11) | (f64_mantissa_lo >> 21); + f80tmp.w[2] = f64_mantissa_lo << 11; + + // byteswap to BE + + f80tmp.w[0] = htobe32(f80tmp.w[0]); + f80tmp.w[1] = htobe32(f80tmp.w[1]); + f80tmp.w[2] = htobe32(f80tmp.w[2]); + + // write bytes + + for (size_t i = 0; i < 10; i++) + f80[i] = f80tmp.b[i + 2]; +} + +static void +f80_to_f64(double *f64, uint8_t *f80) +{ + union { + uint32_t w[3]; + uint8_t b[12]; + } f80tmp; + + // read bytes + + f80tmp.b[0] = f80tmp.b[1] = 0; + for (size_t i = 0; i < 10; i++) + f80tmp.b[i + 2] = f80[i]; + + // byteswap from BE + + f80tmp.w[0] = be32toh(f80tmp.w[0]); + f80tmp.w[1] = be32toh(f80tmp.w[1]); + f80tmp.w[2] = be32toh(f80tmp.w[2]); + + // get f64 parts + + int f64_sgn = (f80tmp.w[0] >> 15) & 1; + int f64_exponent = (f80tmp.w[0] & 0x7FFF) - 0x3FFF; + uint32_t f64_mantissa_hi = (f80tmp.w[1] >> 11) & 0xFFFFF; + uint32_t f64_mantissa_lo = ((f80tmp.w[1] & 0x7FF) << 21) | (f80tmp.w[2] >> 11); + + // build bitwise f64 + + uint64_t f64_bits = ((uint64_t)f64_sgn << 63) | ((((uint64_t)f64_exponent + 0x3FF) & 0x7FF) << 52) | + ((uint64_t)f64_mantissa_hi << 32) | ((uint64_t)f64_mantissa_lo); + + // write double + + *f64 = *(double *)&f64_bits; +} + +int +aiff_aifc_common_read(container_data *out, FILE *in, UNUSED bool matching, uint32_t size) +{ + bool has_comm = false; + bool has_inst = false; + bool has_ssnd = false; + + size_t num_markers = 0; + container_marker *markers = NULL; + + memset(out, 0, sizeof(*out)); + + while (true) { + long start = ftell(in); + if (start > 8 + size) { + error("Overran file"); + } + if (start == 8 + size) { + break; + } + + char cc4[4]; + uint32_t chunk_size; + + FREAD(in, cc4, 4); + FREAD(in, &chunk_size, 4); + chunk_size = be32toh(chunk_size); + + chunk_size++; + chunk_size &= ~1; + + switch (CC4(cc4[0], cc4[1], cc4[2], cc4[3])) { + case CC4('C', 'O', 'M', 'M'): { + aiff_COMM comm; + FREAD(in, &comm, sizeof(comm)); + comm.numChannels = be16toh(comm.numChannels); + comm.numFramesH = be16toh(comm.numFramesH); + comm.numFramesL = be16toh(comm.numFramesL); + comm.sampleSize = be16toh(comm.sampleSize); + + uint32_t num_samples = (comm.numFramesH << 16) | comm.numFramesL; + double sample_rate; + f80_to_f64(&sample_rate, comm.sampleRate); + + uint32_t comp_type = CC4('N', 'O', 'N', 'E'); + if (chunk_size > sizeof(aiff_COMM)) { + uint32_t compressionType; + FREAD(in, &compressionType, sizeof(compressionType)); + comp_type = be32toh(compressionType); + } + + out->num_channels = comm.numChannels; + out->sample_rate = sample_rate; + out->bit_depth = comm.sampleSize; + out->num_samples = num_samples; + + switch (comp_type) { + case CC4('N', 'O', 'N', 'E'): + out->data_type = SAMPLE_TYPE_PCM16; + break; + + case CC4('H', 'P', 'C', 'M'): + out->data_type = SAMPLE_TYPE_PCM8; + break; + + case CC4('A', 'D', 'P', '9'): + out->data_type = SAMPLE_TYPE_VADPCM; + break; + + case CC4('A', 'D', 'P', '5'): + out->data_type = SAMPLE_TYPE_VADPCM_HALF; + break; + + default: + error("Unrecognized aiff/aifc compression type"); + break; + } + + if (chunk_size > sizeof(aiff_COMM) + 4) { + char compression_name[257]; + read_pstring(in, compression_name); + } + has_comm = true; + } break; + + case CC4('I', 'N', 'S', 'T'): { + aiff_INST inst; + FREAD(in, &inst, sizeof(inst)); + inst.gain = be16toh(inst.gain); + inst.sustainLoop.playMode = be16toh(inst.sustainLoop.playMode); + inst.sustainLoop.beginLoop = be16toh(inst.sustainLoop.beginLoop); + inst.sustainLoop.endLoop = be16toh(inst.sustainLoop.endLoop); + inst.releaseLoop.playMode = be16toh(inst.releaseLoop.playMode); + inst.releaseLoop.beginLoop = be16toh(inst.releaseLoop.beginLoop); + inst.releaseLoop.endLoop = be16toh(inst.releaseLoop.endLoop); + + out->base_note = inst.baseNote; + out->fine_tune = inst.detune; + out->key_low = inst.lowNote; + out->key_hi = inst.highNote; + out->vel_low = inst.lowVelocity; + out->vel_hi = inst.highVelocity; + out->gain = inst.gain; + + size_t nloops = 0; + nloops += inst.sustainLoop.playMode != LOOP_PLAYMODE_NONE; + nloops += inst.releaseLoop.playMode != LOOP_PLAYMODE_NONE; + + if (nloops != 0) { + out->loops = MALLOC_CHECKED_INFO(nloops * sizeof(container_loop), "nloops=%lu", nloops); + + size_t i = 0; + + if (inst.sustainLoop.playMode != LOOP_PLAYMODE_NONE) { + out->loops[i].id = 0; + + switch (inst.sustainLoop.playMode) { + case LOOP_PLAYMODE_FWD: + out->loops[i].type = LOOP_FORWARD; + break; + + case LOOP_PLAYMODE_FWD_BWD: + out->loops[i].type = LOOP_FORWARD_BACKWARD; + break; + + default: + error("Unrecognized PlayMode in sustainLoop"); + break; + } + out->loops[i].start = inst.sustainLoop.beginLoop; + out->loops[i].end = inst.sustainLoop.endLoop; + out->loops[i].num = 0xFFFFFFFF; + out->loops[i].fraction = 0; + + i++; + } + + if (inst.releaseLoop.playMode != LOOP_PLAYMODE_NONE) { + out->loops[i].id = 1; + + switch (inst.sustainLoop.playMode) { + case LOOP_PLAYMODE_FWD: + out->loops[i].type = LOOP_FORWARD; + break; + + case LOOP_PLAYMODE_FWD_BWD: + out->loops[i].type = LOOP_FORWARD_BACKWARD; + break; + + default: + error("Unrecognized PlayMode in releaseLoop"); + break; + } + out->loops[i].start = inst.releaseLoop.beginLoop; + out->loops[i].end = inst.releaseLoop.endLoop; + out->loops[i].num = 0xFFFFFFFF; + out->loops[i].fraction = 0; + + i++; + } + } + + has_inst = true; + } break; + + case CC4('M', 'A', 'R', 'K'): { + aiff_MARK mark; + FREAD(in, &mark, sizeof(mark)); + mark.nMarkers = be16toh(mark.nMarkers); + + num_markers = mark.nMarkers; + markers = MALLOC_CHECKED_INFO(num_markers * sizeof(container_marker), "num_markers=%lu", num_markers); + + for (size_t i = 0; i < num_markers; i++) { + Marker marker; + char *name; + FREAD(in, &marker, sizeof(marker)); + name = read_pstring_alloc(in); + + markers[i].id = be16toh(marker.MarkerID); + markers[i].frame_number = (be16toh(marker.positionH) << 16) | be16toh(marker.positionL); + markers[i].name = name; + } + } break; + + case CC4('A', 'P', 'P', 'L'): { + char subcc4[4]; + + FREAD(in, subcc4, 4); + + switch (CC4(subcc4[0], subcc4[1], subcc4[2], subcc4[3])) { + case CC4('s', 't', 'o', 'c'): { + char chunk_name[257]; + read_pstring(in, chunk_name); + + if (strequ(chunk_name, "VADPCMCODES")) { + int16_t version; + uint16_t order; + uint16_t npredictors; + + FREAD(in, &version, sizeof(version)); + version = be16toh(version); + FREAD(in, &order, sizeof(order)); + order = be16toh(order); + FREAD(in, &npredictors, sizeof(npredictors)); + npredictors = be16toh(npredictors); + + size_t book_size_bytes = VADPCM_BOOK_SIZE_BYTES(order, npredictors); + int16_t *book_state = + MALLOC_CHECKED_INFO(book_size_bytes, "order=%u, npredictors=%u", order, npredictors); + FREAD(in, book_state, book_size_bytes); + + out->vadpcm.book_version = version; + out->vadpcm.book_header.order = order; + out->vadpcm.book_header.npredictors = npredictors; + out->vadpcm.book_data = book_state; + + for (size_t i = 0; i < VADPCM_BOOK_SIZE(order, npredictors); i++) + out->vadpcm.book_data[i] = be16toh(out->vadpcm.book_data[i]); + + out->vadpcm.has_book = true; + } else if (strequ(chunk_name, "VADPCMLOOPS")) { + int16_t version; + int16_t nloops; + + FREAD(in, &version, sizeof(version)); + version = be16toh(version); + FREAD(in, &nloops, sizeof(nloops)); + nloops = be16toh(nloops); + + out->vadpcm.loop_version = version; + out->vadpcm.num_loops = nloops; + + if (out->vadpcm.num_loops) + out->vadpcm.loops = MALLOC_CHECKED_INFO(out->vadpcm.num_loops * sizeof(ALADPCMloop), + "num_loops=%u", out->vadpcm.num_loops); + + for (size_t i = 0; i < out->vadpcm.num_loops; i++) { + FREAD(in, &out->vadpcm.loops[i], sizeof(ALADPCMloop)); + out->vadpcm.loops[i].start = be32toh(out->vadpcm.loops[i].start); + out->vadpcm.loops[i].end = be32toh(out->vadpcm.loops[i].end); + out->vadpcm.loops[i].count = be32toh(out->vadpcm.loops[i].count); + for (size_t j = 0; j < ARRAY_COUNT(out->vadpcm.loops[i].state); j++) + out->vadpcm.loops[i].state[j] = be16toh(out->vadpcm.loops[i].state[j]); + } + } else { + warning("Skipping unknown APPL::stoc subchunk: \"%s\"", chunk_name); + } + } break; + + default: + warning("Skipping unknown APPL subchunk: \"%c%c%c%c\"", subcc4[0], subcc4[1], subcc4[2], + subcc4[3]); + break; + } + } break; + + case CC4('S', 'S', 'N', 'D'): { + aiff_SSND ssnd; + FREAD(in, &ssnd, sizeof(ssnd)); + ssnd.offset = be32toh(ssnd.offset); + ssnd.blockSize = be32toh(ssnd.blockSize); + + size_t data_size = chunk_size - sizeof(ssnd); + + void *data = MALLOC_CHECKED_INFO(data_size, "SSND chunk size = %lu", data_size); + FREAD(in, data, data_size); + + if (ssnd.offset != 0 || ssnd.blockSize != 0) + error("Bad SSND chunk in aiff/aifc, offset/blockSize != 0"); + + out->data = data; + out->data_size = data_size; + + has_ssnd = true; + } break; + + default: + warning("Skipping unknown aiff chunk: \"%c%c%c%c\"", cc4[0], cc4[1], cc4[2], cc4[3]); + break; + } + + long read_size = ftell(in) - start - 8; + + if (read_size > chunk_size) + error("overran chunk: %lu vs %u\n", read_size, chunk_size); + else if (read_size < chunk_size) + warning("did not read entire %.*s chunk: %lu vs %u", 4, cc4, read_size, chunk_size); + + fseek(in, start + 8 + chunk_size, SEEK_SET); + } + + if (!has_comm) + error("aiff/aifc has no COMM chunk"); + if (!has_inst) + error("aiff/aifc has no INST chunk"); + if (!has_ssnd) + error("aiff/aifc has no SSND chunk"); + + if (out->data_type == SAMPLE_TYPE_PCM16) { + assert(out->data_size % 2 == 0); + assert(out->bit_depth == 16); + + for (size_t i = 0; i < out->data_size / 2; i++) + ((uint16_t *)(out->data))[i] = be16toh(((uint16_t *)(out->data))[i]); + } + + for (size_t i = 0; i < out->num_loops; i++) { + container_marker *marker; + + marker = NULL; + for (size_t j = 0; j < num_markers; j++) { + if (markers[j].id == out->loops[i].start) { + marker = &markers[j]; + break; + } + } + if (marker == NULL) + error("AIFF/C loop references non-existent marker"); + + out->loops[i].start = marker->frame_number; + + marker = NULL; + for (size_t j = 0; j < num_markers; j++) { + if (markers[j].id == out->loops[i].end) { + marker = &markers[j]; + break; + } + } + if (marker == NULL) + error("AIFF/C loop references non-existent marker"); + + out->loops[i].end = marker->frame_number; + } + + fclose(in); + return 0; +} + +int +aifc_read(container_data *out, const char *path, bool matching) +{ + FILE *in = fopen(path, "rb"); + if (in == NULL) + error("Failed to open \"%s\" for reading", path); + + char form[4]; + uint32_t size; + char aifc[4]; + + FREAD(in, form, 4); + FREAD(in, &size, 4); + size = be32toh(size); + FREAD(in, aifc, 4); + + if (!CC4_CHECK(form, "FORM") || !CC4_CHECK(aifc, "AIFC")) + error("Not an aifc file?"); + + return aiff_aifc_common_read(out, in, matching, size); +} + +int +aiff_read(container_data *out, const char *path, bool matching) +{ + FILE *in = fopen(path, "rb"); + if (in == NULL) + error("Failed to open \"%s\" for reading", path); + + char form[4]; + uint32_t size; + char aiff[4]; + + FREAD(in, form, 4); + FREAD(in, &size, 4); + size = be32toh(size); + FREAD(in, aiff, 4); + + if (!CC4_CHECK(form, "FORM") || !CC4_CHECK(aiff, "AIFF")) + error("Not an aiff file?"); + + return aiff_aifc_common_read(out, in, matching, size); +} + +static int +aiff_aifc_common_write(container_data *in, const char *path, bool aifc, bool matching) +{ + FILE *out = fopen(path, "wb"); + if (out == NULL) + error("Failed to open %s for writing\n", path); + + const char *aifc_head = "FORM\0\0\0\0AIFC"; + const char *aiff_head = "FORM\0\0\0\0AIFF"; + FWRITE(out, (aifc) ? aifc_head : aiff_head, 12); + + long chunk_start; + + uint32_t compression_type; + const char *compression_name; + + switch (in->data_type) { + case SAMPLE_TYPE_PCM16: + compression_type = CC4('N', 'O', 'N', 'E'); + compression_name = NULL; + break; + + case SAMPLE_TYPE_PCM8: + compression_type = CC4('H', 'P', 'C', 'M'); + compression_name = "Half-frame PCM"; + break; + + case SAMPLE_TYPE_VADPCM: + compression_type = CC4('A', 'D', 'P', '9'); + compression_name = "Nintendo/SGI VADPCM 9-bytes/frame"; + break; + + case SAMPLE_TYPE_VADPCM_HALF: + compression_type = CC4('A', 'D', 'P', '5'); + compression_name = "Nintendo/SGI VADPCM 5-bytes/frame"; + break; + + default: + error("Unhandled data type for aiff/aifc container"); + break; + } + + if (compression_type != CC4('N', 'O', 'N', 'E') && !aifc) { + error("Compressed data types must use aifc output"); + } + + aiff_COMM comm = { + .numChannels = htobe16(in->num_channels), + .numFramesH = htobe16(in->num_samples >> 16), + .numFramesL = htobe16(in->num_samples), + .sampleSize = htobe16(in->bit_depth), + .sampleRate = { 0 }, + }; + f64_to_f80(in->sample_rate, comm.sampleRate); + CHUNK_BEGIN(out, "COMM", &chunk_start); + CHUNK_WRITE(out, &comm); + if (compression_name != NULL) { + uint32_t compressionType = htobe32(compression_type); + CHUNK_WRITE(out, &compressionType); + write_pstring(out, compression_name); + } + CHUNK_END(out, chunk_start, htobe32); + + if (in->num_loops > 2) + error("Only up to two loops are supported for AIFF/C"); + + size_t num_markers = 0; + container_marker markers[4]; + static char *marker_names[4] = { + "start", + "end", + "start", + "end", + }; + Loop sustainLoop = { 0 }; + Loop releaseLoop = { 0 }; + + for (size_t i = 0; i < in->num_loops; i++) { + Loop *target; + + switch (in->loops[i].id) { + case 0: + target = &sustainLoop; + break; + + case 1: + target = &releaseLoop; + break; + + default: + continue; + } + + unsigned type; + switch (in->loops[i].type) { + case LOOP_FORWARD: + type = LOOP_PLAYMODE_FWD; + break; + + case LOOP_FORWARD_BACKWARD: + type = LOOP_PLAYMODE_FWD_BWD; + break; + + default: + error("Unsupported loop type in aiff/aifc"); + break; + } + + target->playMode = htobe16(type); + + markers[num_markers].id = num_markers + 1; + markers[num_markers].name = marker_names[num_markers]; + markers[num_markers].frame_number = in->loops[i].start; + target->beginLoop = htobe16(1 + num_markers++); + + markers[num_markers].id = num_markers + 1; + markers[num_markers].name = marker_names[num_markers]; + markers[num_markers].frame_number = in->loops[i].end; + target->endLoop = htobe16(1 + num_markers++); + } + + if (num_markers != 0) { + CHUNK_BEGIN(out, "MARK", &chunk_start); + + aiff_MARK mark = { + .nMarkers = htobe16(num_markers), + }; + CHUNK_WRITE(out, &mark); + + for (size_t i = 0; i < num_markers; i++) { + Marker marker = { + .MarkerID = htobe16(markers[i].id), + .positionH = htobe16(markers[i].frame_number >> 16), + .positionL = htobe16(markers[i].frame_number), + }; + CHUNK_WRITE(out, &marker); + write_pstring(out, markers[i].name); + } + + CHUNK_END(out, chunk_start, htobe32); + } + + aiff_INST inst = { + .baseNote = in->base_note, + .detune = in->fine_tune, + .lowNote = in->key_low, + .highNote = in->key_hi, + .lowVelocity = in->vel_low, + .highVelocity = in->vel_hi, + .gain = htobe16(in->gain), + .sustainLoop = sustainLoop, + .releaseLoop = releaseLoop, + }; + CHUNK_BEGIN(out, "INST", &chunk_start); + CHUNK_WRITE(out, &inst); + CHUNK_END(out, chunk_start, htobe32); + + if (aifc || matching) { + // If we're writing an aifc, or we want to match on round-trip, emit an application-specific chunk for the + // vadpcm codebook. + if (in->vadpcm.has_book) { + // APPL::stoc::VADPCMCODES + CHUNK_BEGIN(out, "APPL", &chunk_start); + CHUNK_WRITE_RAW(out, "stoc", 4); + write_pstring(out, "VADPCMCODES"); + + int16_t version = htobe16(in->vadpcm.book_version); + int16_t order = htobe16(in->vadpcm.book_header.order); + int16_t npredictors = htobe16(in->vadpcm.book_header.npredictors); + + CHUNK_WRITE(out, &version); + CHUNK_WRITE(out, &order); + CHUNK_WRITE(out, &npredictors); + + size_t book_size = VADPCM_BOOK_SIZE(in->vadpcm.book_header.order, in->vadpcm.book_header.npredictors); + + int16_t book_data_out[book_size]; + for (size_t i = 0; i < book_size; i++) + book_data_out[i] = htobe16(in->vadpcm.book_data[i]); + + CHUNK_WRITE_RAW(out, book_data_out, sizeof(int16_t) * book_size); + + CHUNK_END(out, chunk_start, htobe32); + } + + // Only write a vadpcm loop structure for compressed output. Loop states match on round-trip so we need not + // save them in uncompressed output. + if (aifc && in->vadpcm.num_loops != 0) { + // APPL::stoc::VADPCMLOOPS + CHUNK_BEGIN(out, "APPL", &chunk_start); + CHUNK_WRITE_RAW(out, "stoc", 4); + write_pstring(out, "VADPCMLOOPS"); + + int16_t version = htobe16(in->vadpcm.loop_version); + int16_t nloops = htobe16(in->vadpcm.num_loops); + + CHUNK_WRITE(out, &version); + CHUNK_WRITE(out, &nloops); + + for (size_t i = 0; i < in->vadpcm.num_loops; i++) { + ALADPCMloop outloop = in->vadpcm.loops[i]; + outloop.start = htobe32(outloop.start); + outloop.end = htobe32(outloop.end); + outloop.count = htobe32(outloop.count); + for (size_t i = 0; i < ARRAY_COUNT(outloop.state); i++) + outloop.state[i] = htobe16(outloop.state[i]); + + CHUNK_WRITE(out, &outloop); + } + + CHUNK_END(out, chunk_start, htobe32); + } + } + + if (in->data_type == SAMPLE_TYPE_PCM16) { + assert(in->data_size % 2 == 0); + assert(in->bit_depth == 16); + + for (size_t i = 0; i < in->data_size / 2; i++) { + ((uint16_t *)in->data)[i] = htobe16(((uint16_t *)in->data)[i]); + } + } + + aiff_SSND ssnd = { + .offset = 0, + .blockSize = 0, + }; + CHUNK_BEGIN(out, "SSND", &chunk_start); + CHUNK_WRITE(out, &ssnd); + CHUNK_WRITE_RAW(out, in->data, in->data_size); + CHUNK_END(out, chunk_start, htobe32); + + uint32_t size = htobe32(ftell(out) - 8); + fseek(out, 4, SEEK_SET); + fwrite(&size, 4, 1, out); + fclose(out); + + return 0; +} + +int +aifc_write(container_data *data, const char *path, bool matching) +{ + return aiff_aifc_common_write(data, path, true, matching); +} + +int +aiff_write(container_data *data, const char *path, bool matching) +{ + return aiff_aifc_common_write(data, path, false, matching); +} diff --git a/tools/audio/sampleconv/src/container/aiff.h b/tools/audio/sampleconv/src/container/aiff.h new file mode 100644 index 0000000000..757a57e749 --- /dev/null +++ b/tools/audio/sampleconv/src/container/aiff.h @@ -0,0 +1,28 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef AIFF_H +#define AIFF_H + +#include +#include + +#include "../codec/vadpcm.h" +#include "container.h" + +int +aifc_read(container_data *out, const char *path, bool matching); +int +aiff_read(container_data *out, const char *path, bool matching); + +int +aifc_write(container_data *in, const char *path, bool matching); +int +aiff_write(container_data *in, const char *path, bool matching); + +#endif diff --git a/tools/audio/sampleconv/src/container/container.c b/tools/audio/sampleconv/src/container/container.c new file mode 100644 index 0000000000..f2df3448e6 --- /dev/null +++ b/tools/audio/sampleconv/src/container/container.c @@ -0,0 +1,25 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include + +#include "container.h" + +int +container_destroy(container_data *data) +{ + if (data->data != NULL) + free(data->data); + if (data->loops != NULL) + free(data->loops); + if (data->vadpcm.book_data != NULL) + free(data->vadpcm.book_data); + if (data->vadpcm.loops != NULL) + free(data->vadpcm.loops); + return 0; +} diff --git a/tools/audio/sampleconv/src/container/container.h b/tools/audio/sampleconv/src/container/container.h new file mode 100644 index 0000000000..680b64012d --- /dev/null +++ b/tools/audio/sampleconv/src/container/container.h @@ -0,0 +1,99 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef CONTAINER_H +#define CONTAINER_H + +#include +#include + +#include "../codec/vadpcm.h" + +typedef enum { + // Uncompressed + SAMPLE_TYPE_PCM16, + SAMPLE_TYPE_PCM8, + + // Compressed + SAMPLE_TYPE_VADPCM, + SAMPLE_TYPE_VADPCM_HALF +} sample_data_type; + +typedef struct { + const char *fext; + int (*read)(struct container_data *out, const char *path, bool matching); + int (*write)(struct container_data *out, const char *path, bool matching); +} container_spec; + +typedef enum { + LOOP_NONE = 0, + LOOP_FORWARD = 1, + LOOP_FORWARD_BACKWARD = 2, + LOOP_BACKWARD = 3 +} loop_type; + +typedef struct { + uint16_t id; + loop_type type; + uint32_t start; + uint32_t end; + uint32_t fraction; + uint32_t num; +} container_loop; + +typedef struct { + uint16_t id; + uint32_t frame_number; + char *name; +} container_marker; + +typedef struct container_data { + // Sample details + double sample_rate; + unsigned int num_channels; + uint32_t byte_rate; + uint16_t block_align; + uint16_t bit_depth; // also called sample_size + uint32_t num_samples; // also apparently called num_frames? but that's wrong + + // Instrument details + int8_t base_note; + int8_t fine_tune; + int8_t gain; + int8_t key_low; + int8_t key_hi; + int8_t vel_low; + int8_t vel_hi; + + // Sample data, possibly compressed + sample_data_type data_type; + void *data; + size_t data_size; + + unsigned num_loops; + container_loop *loops; + + // VADPCM-specific data + struct { + // VADPCM codebook + int16_t book_version; + ALADPCMbookhead book_header; + int16_t *book_data; + bool has_book; + + // VADPCM loop data + int16_t loop_version; + unsigned num_loops; + ALADPCMloop *loops; + } vadpcm; +} container_data; + +int +container_destroy(container_data *data); + +#endif diff --git a/tools/audio/sampleconv/src/container/wav.c b/tools/audio/sampleconv/src/container/wav.c new file mode 100644 index 0000000000..885acb35eb --- /dev/null +++ b/tools/audio/sampleconv/src/container/wav.c @@ -0,0 +1,552 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include +#include +#include +#include +#include +#include + +#include "../util.h" +#include "../codec/vadpcm.h" +#include "wav.h" + +typedef enum { + WAVE_TYPE_PCM = 1, + WAVE_TYPE_FLOAT = 3, + WAVE_TYPE_ALAW = 6, + WAVE_TYPE_MULAW = 7, + WAVE_TYPE_EXTENSIBLE = 0xFFFE, +} wav_type; + +typedef struct { + uint16_t type; + uint16_t num_channels; + uint32_t sample_rate; + uint32_t byte_rate; + uint16_t block_align; + uint16_t bit_depth; +} wav_fmt; + +typedef struct { + uint32_t num_samples; +} wav_fact; + +typedef struct { + int8_t base_note; + int8_t fine_tune; + int8_t gain; + int8_t key_low; + int8_t key_hi; + int8_t vel_low; + int8_t vel_hi; + char _pad[1]; +} wav_inst; + +typedef struct { + uint32_t manufacturer; + uint32_t product; + uint32_t sample_period; + uint32_t unity_note; + char _pad[3]; + uint8_t fine_tune; + uint32_t format; + uint32_t offset; + uint32_t num_sample_loops; + uint32_t sampler_data; +} wav_smpl; + +typedef struct { + uint32_t cue_point_index; + uint32_t type; + uint32_t start; + uint32_t end; + uint32_t fraction; + uint32_t num; +} wav_loop; + +static const char * +wav_type_name(int type) +{ + switch (type) { + case WAVE_TYPE_PCM: + return "PCM"; + case WAVE_TYPE_FLOAT: + return "Float"; + case WAVE_TYPE_ALAW: + return "ALAW"; + case WAVE_TYPE_MULAW: + return "MULAW"; + case WAVE_TYPE_EXTENSIBLE: + return "Extensible"; + default: + return "Unknown (should never be here)"; + } +} + +int +wav_read(container_data *out, const char *path, UNUSED bool matching) +{ + bool has_fmt = false; + bool has_fact = false; + bool has_data = false; + bool has_inst = false; + bool has_smpl = false; + memset(out, 0, sizeof(*out)); + + FILE *in = fopen(path, "rb"); + if (in == NULL) + error("Failed to open \"%s\" for reading", path); + + char riff[4]; + uint32_t size; + char wave[4]; + + FREAD(in, riff, 4); + FREAD(in, &size, 4); + size = le32toh(size); + FREAD(in, wave, 4); + + if (!CC4_CHECK(riff, "RIFF") || !CC4_CHECK(wave, "WAVE")) + error("Not a wav file?"); + + while (true) { + bool skipped = false; + + long start = ftell(in); + if (start > 8 + size) { + error("Overran file"); + } + if (start == 8 + size) { + break; + } + + char cc4[4]; + uint32_t chunk_size; + + FREAD(in, cc4, 4); + FREAD(in, &chunk_size, 4); + chunk_size = le32toh(chunk_size); + + switch (CC4(cc4[0], cc4[1], cc4[2], cc4[3])) { + case CC4('f', 'm', 't', ' '): { + wav_fmt fmt; + FREAD(in, &fmt, sizeof(fmt)); + fmt.type = le16toh(fmt.type); + fmt.num_channels = le16toh(fmt.num_channels); + fmt.sample_rate = le32toh(fmt.sample_rate); + fmt.byte_rate = le32toh(fmt.byte_rate); + fmt.block_align = le16toh(fmt.block_align); + fmt.bit_depth = le16toh(fmt.bit_depth); + + if (fmt.bit_depth != 16) + error("Wav input format should be 16-bit PCM, was %u-bit", fmt.bit_depth); + + switch (fmt.type) { + case WAVE_TYPE_PCM: + out->data_type = SAMPLE_TYPE_PCM16; + break; + + case WAVE_TYPE_FLOAT: + case WAVE_TYPE_MULAW: + case WAVE_TYPE_ALAW: + case WAVE_TYPE_EXTENSIBLE: + error("Unhandled sample type: %s, should be PCM", wav_type_name(fmt.type)); + break; + + default: + error("Unrecognized sample type: %d, should be PCM", fmt.type); + break; + } + + out->num_channels = fmt.num_channels; + out->sample_rate = fmt.sample_rate; + out->byte_rate = fmt.byte_rate; + out->block_align = fmt.block_align; + out->bit_depth = fmt.bit_depth; + + has_fmt = true; + } break; + + case CC4('f', 'a', 'c', 't'): { + wav_fact fact; + FREAD(in, &fact, sizeof(fact)); + fact.num_samples = le32toh(fact.num_samples); + + out->num_samples = fact.num_samples; + + has_fact = true; + } break; + + case CC4('d', 'a', 't', 'a'): { + void *data = MALLOC_CHECKED_INFO(chunk_size, "data size = %u", chunk_size); + FREAD(in, data, chunk_size); + + out->data = data; + out->data_size = chunk_size; + + has_data = true; + } break; + + case CC4('i', 'n', 's', 't'): { + wav_inst inst; + FREAD(in, &inst, sizeof(inst)); + + out->base_note = inst.base_note; + out->fine_tune = inst.fine_tune; + out->gain = inst.gain; + out->key_low = inst.key_low; + out->key_hi = inst.key_hi; + out->vel_low = inst.vel_low; + out->vel_hi = inst.vel_hi; + + has_inst = true; + } break; + + case CC4('s', 'm', 'p', 'l'): { + wav_smpl smpl; + FREAD(in, &smpl, sizeof(smpl)); + smpl.manufacturer = le32toh(smpl.manufacturer); + smpl.product = le32toh(smpl.product); + smpl.sample_period = le32toh(smpl.sample_period); + smpl.unity_note = le32toh(smpl.unity_note); + smpl.format = le32toh(smpl.format); + smpl.offset = le32toh(smpl.offset); + smpl.num_sample_loops = le32toh(smpl.num_sample_loops); + smpl.sampler_data = le32toh(smpl.sampler_data); + + out->num_loops = smpl.num_sample_loops; + if (out->num_loops != 0) { + out->loops = + MALLOC_CHECKED_INFO(out->num_loops * sizeof(container_loop), "num_loops=%u", out->num_loops); + + for (size_t i = 0; i < out->num_loops; i++) { + wav_loop loop; + FREAD(in, &loop, sizeof(loop)); + loop.cue_point_index = le32toh(loop.cue_point_index); + loop.type = le32toh(loop.type); + loop.start = le32toh(loop.start); + loop.end = le32toh(loop.end); + loop.fraction = le32toh(loop.fraction); + loop.num = le32toh(loop.num); + + loop_type type; + switch (loop.type) { + case 0: + type = LOOP_FORWARD; + break; + + case 1: + type = LOOP_FORWARD_BACKWARD; + break; + + case 2: + type = LOOP_BACKWARD; + break; + + default: + error("Unrecognized loop type in wav"); + } + + out->loops[i].id = i; + out->loops[i].type = type; + out->loops[i].start = loop.start; + out->loops[i].end = loop.end; + out->loops[i].fraction = loop.fraction; + out->loops[i].num = loop.num; + } + } + has_smpl = true; + } break; + + case CC4('z', 'z', 'b', 'k'): { + char vadpcmcodes[12]; + uint16_t version; + uint16_t order; + uint16_t npredictors; + + FREAD(in, vadpcmcodes, sizeof(vadpcmcodes)); + FREAD(in, &version, sizeof(version)); + version = le16toh(version); + FREAD(in, &order, sizeof(order)); + order = le16toh(order); + FREAD(in, &npredictors, sizeof(npredictors)); + npredictors = le16toh(npredictors); + + size_t book_size = VADPCM_BOOK_SIZE(order, npredictors); + size_t book_data_size = sizeof(int16_t) * book_size; + int16_t *book_data = + MALLOC_CHECKED_INFO(book_data_size, "order=%u, npredictors=%u", order, npredictors); + FREAD(in, book_data, book_data_size); + + out->vadpcm.book_header.order = order; + out->vadpcm.book_header.npredictors = npredictors; + out->vadpcm.book_data = book_data; + + for (size_t i = 0; i < book_size; i++) { + out->vadpcm.book_data[i] = le16toh(out->vadpcm.book_data[i]); + } + + out->vadpcm.has_book = true; + } break; + + case CC4('z', 'z', 'l', 'p'): { + uint16_t version; + uint16_t nloops; + + FREAD(in, &version, sizeof(version)); + version = le16toh(version); + FREAD(in, &nloops, sizeof(nloops)); + nloops = le16toh(nloops); + + if (nloops != 0) + out->vadpcm.loops = MALLOC_CHECKED_INFO(nloops * sizeof(ALADPCMloop), "nloops=%u", nloops); + + for (size_t i = 0; i < nloops; i++) { + uint32_t loop_start; + uint32_t loop_end; + uint32_t loop_num; + + FREAD(in, &loop_start, sizeof(loop_start)); + loop_start = le32toh(loop_start); + FREAD(in, &loop_end, sizeof(loop_end)); + loop_end = le32toh(loop_end); + FREAD(in, &loop_num, sizeof(loop_num)); + loop_num = le32toh(loop_num); + + out->vadpcm.loops[i].start = loop_start; + out->vadpcm.loops[i].end = loop_end; + out->vadpcm.loops[i].count = loop_num; + + if (out->vadpcm.loops[i].count != 0) { + FREAD(in, out->vadpcm.loops[i].state, sizeof(out->vadpcm.loops[i].state)); + + for (size_t j = 0; j < ARRAY_COUNT(out->vadpcm.loops[i].state); j++) { + out->vadpcm.loops[i].state[j] = le16toh(out->vadpcm.loops[i].state[j]); + } + } + } + } break; + + default: + warning("Skipping unknown wav chunk: \"%c%c%c%c\"", cc4[0], cc4[1], cc4[2], cc4[3]); + skipped = true; + break; + } + + long read_size = ftell(in) - start - 8; + + if (read_size > chunk_size) + error("overran chunk"); + else if (!skipped && read_size < chunk_size) + warning("did not read entire %*s chunk: %lu vs %u", 4, cc4, read_size, chunk_size); + + fseek(in, start + 8 + chunk_size, SEEK_SET); + } + + if (!has_fmt) + error("wav has no fmt chunk"); + if (!has_data) + error("wav has no data chunk"); + + if (!has_fact) { + out->num_samples = out->data_size / (out->bit_depth / 8); + } + + if (!has_inst) { + out->base_note = 60; // C4 + out->fine_tune = 0; + out->gain = 0; + out->key_low = 0; + out->key_hi = 0; + out->vel_low = 0; + out->vel_hi = 0; + } + + if (!has_smpl) { + out->num_loops = 0; + out->loops = NULL; + } + + if (out->data_type == SAMPLE_TYPE_PCM16) { + if (out->data_size % 2 != 0) + error("wav data size is not a multiple of 2 despite being pcm16-formatted?"); + + for (size_t i = 0; i < out->data_size / 2; i++) + ((uint16_t *)(out->data))[i] = le16toh(((uint16_t *)(out->data))[i]); + } + + fclose(in); + return 0; +} + +int +wav_write(container_data *in, const char *path, bool matching) +{ + long chunk_start; + + FILE *out = fopen(path, "wb"); + FWRITE(out, "RIFF\0\0\0\0WAVE", 12); + + uint16_t fmt_type; + switch (in->data_type) { + case SAMPLE_TYPE_PCM16: + fmt_type = WAVE_TYPE_PCM; + break; + + default: + error("Unrecognized sample type for wav output"); + break; + } + + wav_fmt fmt = { + .type = htole16(fmt_type), + .num_channels = htole16(in->num_channels), + .sample_rate = htole32(in->sample_rate), + .byte_rate = htole32(in->sample_rate * (in->bit_depth / 8)), + .block_align = htole16(in->num_channels * (in->bit_depth / 8)), + .bit_depth = htole16(in->bit_depth), + }; + CHUNK_BEGIN(out, "fmt ", &chunk_start); + CHUNK_WRITE(out, &fmt); + CHUNK_END(out, chunk_start, htole32); + + wav_fact fact = { + .num_samples = htole32(in->num_samples), + }; + CHUNK_BEGIN(out, "fact", &chunk_start); + CHUNK_WRITE(out, &fact); + CHUNK_END(out, chunk_start, htole32); + + if (in->data_type == SAMPLE_TYPE_PCM16) { + assert(in->bit_depth == 16); + assert(in->data_size % 2 == 0); + + for (size_t i = 0; i < in->data_size / 2; i++) { + ((uint16_t *)in->data)[i] = htole16(((uint16_t *)in->data)[i]); + } + } + + CHUNK_BEGIN(out, "data", &chunk_start); + CHUNK_WRITE_RAW(out, in->data, in->data_size); + CHUNK_END(out, chunk_start, htole32); + + wav_inst inst = { + .base_note = in->base_note, + .fine_tune = in->fine_tune, + .gain = in->gain, + .key_low = in->key_low, + .key_hi = in->key_hi, + .vel_low = in->vel_low, + .vel_hi = in->vel_hi, + ._pad = { 0 }, + }; + CHUNK_BEGIN(out, "inst", &chunk_start); + CHUNK_WRITE(out, &inst); + CHUNK_END(out, chunk_start, htole32); + + wav_smpl smpl = { + .manufacturer = 0, + .product = 0, + .sample_period = 0, + .unity_note = 0, + ._pad = {0, 0, 0}, + .fine_tune = 0, + .format = 0, + .offset = 0, + .num_sample_loops = htole32(in->num_loops), + .sampler_data = 0, + }; + CHUNK_BEGIN(out, "smpl", &chunk_start); + CHUNK_WRITE(out, &smpl); + for (size_t i = 0; i < in->num_loops; i++) { + uint32_t wav_loop_type; + switch (in->loops[i].type) { + case LOOP_FORWARD: + wav_loop_type = 0; + break; + + case LOOP_FORWARD_BACKWARD: + wav_loop_type = 1; + break; + + case LOOP_BACKWARD: + wav_loop_type = 2; + break; + + default: + error("Unrecognized loop type for wav output"); + } + + wav_loop loop = { + .cue_point_index = 0, + .type = htole32(wav_loop_type), + .start = htole32(in->loops[i].start), + .end = htole32(in->loops[i].end), + .fraction = htole32(in->loops[i].fraction), + .num = htole32(in->loops[i].num), + }; + CHUNK_WRITE(out, &loop); + } + CHUNK_END(out, chunk_start, htole32); + + // Books generally don't match on round-trip, if matching we should write a vadpcm book chunk to the uncompressed + // output so it may be read back when re-encoding. + if (in->vadpcm.has_book && matching) { + uint32_t book_size = VADPCM_BOOK_SIZE(in->vadpcm.book_header.order, in->vadpcm.book_header.npredictors); + + uint16_t version = htole16(in->vadpcm.book_version); + uint16_t order = htole16(in->vadpcm.book_header.order); + uint16_t npredictors = htole16(in->vadpcm.book_header.npredictors); + + int16_t book_state[book_size]; + for (size_t i = 0; i < book_size; i++) { + book_state[i] = htole16(in->vadpcm.book_data[i]); + } + + CHUNK_BEGIN(out, "zzbk", &chunk_start); + CHUNK_WRITE_RAW(out, "VADPCMCODES", sizeof("VADPCMCODES")); + CHUNK_WRITE(out, &version); + CHUNK_WRITE(out, &order); + CHUNK_WRITE(out, &npredictors); + CHUNK_WRITE_RAW(out, book_state, sizeof(int16_t) * book_size); + CHUNK_END(out, chunk_start, htole32); + } + + // Loop states match on round-trip while books don't, so don't write a vadpcm loop chunk if the output format + // is uncompressed. + if (in->vadpcm.num_loops != 0 && in->data_type != SAMPLE_TYPE_PCM16) { + CHUNK_BEGIN(out, "zzlp", &chunk_start); + + for (size_t i = 0; i < in->vadpcm.num_loops; i++) { + uint32_t loop_start = htole32(in->vadpcm.loops[i].start); + uint32_t loop_end = htole32(in->vadpcm.loops[i].end); + uint32_t loop_count = htole32(in->vadpcm.loops[i].count); + + int16_t loop_state[16]; + for (size_t j = 0; j < ARRAY_COUNT(in->vadpcm.loops[i].state); j++) { + loop_state[j] = htole16(in->vadpcm.loops[i].state[j]); + } + + CHUNK_WRITE(out, &loop_start); + CHUNK_WRITE(out, &loop_end); + CHUNK_WRITE(out, &loop_count); + CHUNK_WRITE_RAW(out, loop_state, sizeof(loop_state)); + } + + CHUNK_END(out, chunk_start, htole32); + } + + uint32_t size = htole32(ftell(out) - 8); + fseek(out, 4, SEEK_SET); + fwrite(&size, 4, 1, out); + fclose(out); + + return 0; +} diff --git a/tools/audio/sampleconv/src/container/wav.h b/tools/audio/sampleconv/src/container/wav.h new file mode 100644 index 0000000000..71e6416909 --- /dev/null +++ b/tools/audio/sampleconv/src/container/wav.h @@ -0,0 +1,20 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef WAV_H +#define WAV_H + +#include "../codec/vadpcm.h" +#include "container.h" + +int +wav_write(container_data *in, const char *path, bool matching); +int +wav_read(container_data *out, const char *path, bool matching); + +#endif diff --git a/tools/audio/sampleconv/src/main.c b/tools/audio/sampleconv/src/main.c new file mode 100644 index 0000000000..6c839bd828 --- /dev/null +++ b/tools/audio/sampleconv/src/main.c @@ -0,0 +1,209 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" + +#include "codec/codec.h" +#include "codec/uncompressed.h" +#include "codec/vadpcm.h" + +#include "container/container.h" +#include "container/wav.h" +#include "container/aiff.h" + +static const codec_spec codecs[] = { + {"pcm16", SAMPLE_TYPE_PCM16, 16, false, pcm16_enc_dec, pcm16_enc_dec}, + { "vadpcm", SAMPLE_TYPE_VADPCM, 9, true, vadpcm_dec, vadpcm_enc }, + { "vadpcm-half", SAMPLE_TYPE_VADPCM_HALF, 5, true, vadpcm_dec, vadpcm_enc }, + // { "pcm8", SAMPLE_TYPE_PCM8, TODO, TODO, pcm8_dec, pcm8_enc }, +}; + +static const container_spec containers[] = { + {".wav", wav_read, wav_write }, + { ".aiff", aiff_read, aiff_write}, + { ".aifc", aifc_read, aifc_write}, +}; + +static bool +str_endswith(const char *str1, const char *str2) +{ + size_t len1 = strlen(str1); + size_t len2 = strlen(str2); + + if (len2 > len1) + return false; + return strequ(str1 + len1 - len2, str2); +} + +NORETURN static void +help(const char *progname) +{ + fprintf(stderr, "%s [--matching] out_codec_name in_path out_path\n", progname); + fprintf(stderr, "Supported codecs:\n"); + fprintf(stderr, " pcm16\n"); + fprintf(stderr, " vadpcm\n"); + fprintf(stderr, " vadpcm-half\n"); + fprintf(stderr, "Possible input/output formats with supported codecs, automatically selected by file extension:\n"); + fprintf(stderr, " wav [pcm16]\n"); + fprintf(stderr, " aiff [pcm16]\n"); + fprintf(stderr, " aifc [vadpcm, vadpcm-half]\n"); + exit(EXIT_FAILURE); +} + +NORETURN static void +usage(const char *progname) +{ + fprintf(stderr, "%s [--matching] out_codec_name in_path out_path\n", progname); + exit(EXIT_FAILURE); +} + +static const codec_spec * +codec_from_name(const char *name) +{ + for (size_t i = 0; i < ARRAY_COUNT(codecs); i++) { + if (strequ(name, codecs[i].name)) + return &codecs[i]; + } + return NULL; +} + +static const codec_spec * +codec_from_type(sample_data_type type) +{ + for (size_t i = 0; i < ARRAY_COUNT(codecs); i++) { + if (type == codecs[i].type) + return &codecs[i]; + } + return NULL; +} + +static const container_spec * +container_from_name(const char *name) +{ + for (size_t i = 0; i < ARRAY_COUNT(containers); i++) { + if (str_endswith(name, containers[i].fext)) + return &containers[i]; + } + return NULL; +} + +int +main(int argc, char **argv) +{ + const char *progname = argv[0]; + // Required arguments + const char *in_path = NULL; + const char *out_path = NULL; + const char *out_codec_name = NULL; + // Optional arguments + enc_dec_opts opts = { + .matching = false, + // VADPCM + .truncate = false, + .min_loop_length = 800, + .design.order = 2, + .design.bits = 2, + .design.refine_iters = 2, + .design.thresh = 10.0, + .design.frame_size = 16, + }; + + // parse args + +#define arg_error(fmt, ...) \ + do { \ + fprintf(stderr, fmt "\n", ##__VA_ARGS__); \ + usage(progname); \ + } while (0) + + int argn = 0; + for (int i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + // Optional args + + if (strequ(argv[i], "--help")) { + help(progname); + } else if (strequ(argv[i], "--matching")) { + if (opts.matching) + arg_error("Received --matching option twice"); + + opts.matching = true; + continue; + } + arg_error("Unknown option \"%s\"", argv[i]); + } else { + // Required args + + switch (argn) { + case 0: + out_codec_name = argv[i]; + break; + case 1: + in_path = argv[i]; + break; + case 2: + out_path = argv[i]; + break; + default: + arg_error("Unknown positional argument \"%s\"", argv[i]); + break; + } + argn++; + } + } + if (argn != 3) + arg_error("Not enough positional arguments"); + +#undef arg_error + + const container_spec *in_container = container_from_name(in_path); + if (in_container == NULL) + error("Unsupported input format"); + + const container_spec *out_container = container_from_name(out_path); + if (out_container == NULL) + error("Unsupported output format"); + + const codec_spec *out_codec = codec_from_name(out_codec_name); + if (out_codec == NULL) + error("Unrecognized output codec: \"%s\"", out_codec_name); + + container_data ctnr; + + // Read input from container + if (in_container->read(&ctnr, in_path, opts.matching)) + error("Error reading input file"); + + // Determine input codec from input container automatically + const codec_spec *in_codec = codec_from_type(ctnr.data_type); + if (in_codec == NULL) + error("Unrecognized input codec: type=%d", ctnr.data_type); + + // Decode to PCM16 (this does nothing if in_codec is PCM16) + if (in_codec->decode(&ctnr, in_codec, &opts)) + error("Error in decoding"); + + // Encode to output (this does nothing if out_codec is PCM16) + if (out_codec->encode(&ctnr, out_codec, &opts)) + error("Error in encoding"); + + // Write output to container + if (out_container->write(&ctnr, out_path, opts.matching)) + error("Error reading output file"); + + container_destroy(&ctnr); + return EXIT_SUCCESS; +} diff --git a/tools/audio/sampleconv/src/util.c b/tools/audio/sampleconv/src/util.c new file mode 100644 index 0000000000..43219db74c --- /dev/null +++ b/tools/audio/sampleconv/src/util.c @@ -0,0 +1,43 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include +#include +#include + +#include "util.h" + +NORETURN void +error(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "\x1b[91m" + "Error: " + "\x1b[97m"); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\x1b[0m" + "\n"); + va_end(ap); + + exit(EXIT_FAILURE); +} + +void +warning(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "\x1b[95m" + "Warning: " + "\x1b[97m"); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\x1b[0m" + "\n"); + va_end(ap); +} diff --git a/tools/audio/sampleconv/src/util.h b/tools/audio/sampleconv/src/util.h new file mode 100644 index 0000000000..0c1c0e1792 --- /dev/null +++ b/tools/audio/sampleconv/src/util.h @@ -0,0 +1,116 @@ +/** + * SPDX-FileCopyrightText: Copyright (C) 2024 ZeldaRET + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#ifndef UTIL_H +#define UTIL_H + +#include + +// Endian + +#if defined(__linux__) || defined(__CYGWIN__) +#include +#elif defined(__APPLE__) +#include + +#define htobe16(x) OSSwapHostToBigInt16(x) +#define htole16(x) OSSwapHostToLittleInt16(x) +#define be16toh(x) OSSwapBigToHostInt16(x) +#define le16toh(x) OSSwapLittleToHostInt16(x) + +#define htobe32(x) OSSwapHostToBigInt32(x) +#define htole32(x) OSSwapHostToLittleInt32(x) +#define be32toh(x) OSSwapBigToHostInt32(x) +#define le32toh(x) OSSwapLittleToHostInt32(x) + +#define htobe64(x) OSSwapHostToBigInt64(x) +#define htole64(x) OSSwapHostToLittleInt64(x) +#define be64toh(x) OSSwapBigToHostInt64(x) +#define le64toh(x) OSSwapLittleToHostInt64(x) +#else +#error "Endian conversion unsupported, add it" +#endif + +#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof((arr)[0])) + +#define NORETURN __attribute__((noreturn)) +#define UNUSED __attribute__((unused)) + +#define strequ(s1, s2) ((__builtin_constant_p(s2) ? strncmp(s1, s2, sizeof(s2) - 1) : strcmp(s1, s2)) == 0) + +#define MALLOC_CHECKED(length) \ + ({ \ + size_t malloc_len_ = (size_t)(length); \ + void *result_ = malloc(malloc_len_); \ + if (result_ == NULL) \ + error("[malloc] Failed to allocate %lu bytes @ [%s:%u]", malloc_len_, __FILE__, __LINE__); \ + result_; \ + }) + +#define MALLOC_CHECKED_INFO(length, fmt, ...) \ + ({ \ + size_t malloc_len_ = (size_t)(length); \ + void *result_ = malloc(malloc_len_); \ + if (result_ == NULL) \ + error("[malloc] Failed to allocate %lu bytes @ [%s:%u] (" fmt ")", malloc_len_, __FILE__, __LINE__, \ + ##__VA_ARGS__); \ + result_; \ + }) + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) + +#define ABS(x) (((x) < 0) ? (-(x)) : (x)) + +#define FWRITE(file, data, size) \ + do { \ + if (fwrite((data), (size), 1, (file)) != 1) { \ + error("[%s:%d] Could not write %lu bytes to file", __FILE__, __LINE__, (size_t)(size)); \ + } \ + } while (0) + +#define FREAD(file, data, size) \ + do { \ + if (fread((data), (size), 1, (file)) != 1) { \ + error("[%s:%d] Could not read %lu bytes from file", __FILE__, __LINE__, (size_t)(size)); \ + } \ + } while (0) + +#define CC4_CHECK(buf, str) \ + ((buf)[0] == (str)[0] && (buf)[1] == (str)[1] && (buf)[2] == (str)[2] && (buf)[3] == (str)[3]) + +#define CC4(c1, c2, c3, c4) (((c1) << 24) | ((c2) << 16) | ((c3) << 8) | (c4)) + +#define CHUNK_BEGIN(file, name, start) \ + do { \ + *(start) = ftell(out); \ + FWRITE(file, name "\0\0\0\0", 8); \ + } while (0) + +#define CHUNK_WRITE(file, structure) \ + do { \ + FWRITE(file, structure, sizeof(*(structure))); \ + } while (0) + +#define CHUNK_WRITE_RAW(file, data, length) FWRITE(file, data, length) + +#define CHUNK_END(file, start, endian_func) \ + do { \ + long end = ftell(out); \ + uint32_t size = endian_func(end - (start)-8); \ + fseek(out, (start) + 4, SEEK_SET); \ + FWRITE(out, &size, 4); \ + fseek(out, end, SEEK_SET); \ + } while (0) + +__attribute__((format(printf, 1, 2))) NORETURN void +error(const char *fmt, ...); + +__attribute__((format(printf, 1, 2))) void +warning(const char *fmt, ...); + +#endif diff --git a/tools/audio_extraction.py b/tools/audio_extraction.py new file mode 100644 index 0000000000..da30273b75 --- /dev/null +++ b/tools/audio_extraction.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: © 2024 ZeldaRET +# SPDX-License-Identifier: CC0-1.0 +# +# Configures and runs baserom audio extraction +# + +import argparse + +import version_config + +from audio.extraction.audio_extract import extract_audio_for_version, GameVersionInfo, MMLVersion + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="baserom audio asset extractor") + parser.add_argument("-o", "--extracted-dir", required=True, help="path to extracted directory") + parser.add_argument("-v", "--version", required=True, help="version name") + parser.add_argument("--read-xml", required=False, action="store_true", help="Read extraction xml files") + parser.add_argument("--write-xml", required=False, action="store_true", help="Write extraction xml files") + args = parser.parse_args() + + version = args.version + + config = version_config.load_version_config(version) + + code_vram = config.dmadata_segments["code"].vram + soundfont_table_code_offset = config.variables["gSoundFontTable"] - code_vram + seq_font_table_code_offset = config.variables["gSequenceFontTable"] - code_vram + seq_table_code_offset = config.variables["gSequenceTable"] - code_vram + sample_bank_table_code_offset = config.variables["gSampleBankTable"] - code_vram + + # List any sequences that are "handwritten", we don't extract these by + # default as we want these checked in for documentation. + handwritten_sequences = (0, 1, 2, 109) + + # Sequence enum names for extraction purposes. + seq_enum_names = ( + "NA_BGM_GENERAL_SFX", + "NA_BGM_NATURE_AMBIENCE", + "NA_BGM_FIELD_LOGIC", + "NA_BGM_FIELD_INIT", + "NA_BGM_FIELD_DEFAULT_1", + "NA_BGM_FIELD_DEFAULT_2", + "NA_BGM_FIELD_DEFAULT_3", + "NA_BGM_FIELD_DEFAULT_4", + "NA_BGM_FIELD_DEFAULT_5", + "NA_BGM_FIELD_DEFAULT_6", + "NA_BGM_FIELD_DEFAULT_7", + "NA_BGM_FIELD_DEFAULT_8", + "NA_BGM_FIELD_DEFAULT_9", + "NA_BGM_FIELD_DEFAULT_A", + "NA_BGM_FIELD_DEFAULT_B", + "NA_BGM_FIELD_ENEMY_INIT", + "NA_BGM_FIELD_ENEMY_1", + "NA_BGM_FIELD_ENEMY_2", + "NA_BGM_FIELD_ENEMY_3", + "NA_BGM_FIELD_ENEMY_4", + "NA_BGM_FIELD_STILL_1", + "NA_BGM_FIELD_STILL_2", + "NA_BGM_FIELD_STILL_3", + "NA_BGM_FIELD_STILL_4", + "NA_BGM_DUNGEON", + "NA_BGM_KAKARIKO_ADULT", + "NA_BGM_ENEMY", + "NA_BGM_BOSS", + "NA_BGM_INSIDE_DEKU_TREE", + "NA_BGM_MARKET", + "NA_BGM_TITLE", + "NA_BGM_LINK_HOUSE", + "NA_BGM_GAME_OVER", + "NA_BGM_BOSS_CLEAR", + "NA_BGM_ITEM_GET", + "NA_BGM_OPENING_GANON", + "NA_BGM_HEART_GET", + "NA_BGM_OCA_LIGHT", + "NA_BGM_JABU_JABU", + "NA_BGM_KAKARIKO_KID", + "NA_BGM_GREAT_FAIRY", + "NA_BGM_ZELDA_THEME", + "NA_BGM_FIRE_TEMPLE", + "NA_BGM_OPEN_TRE_BOX", + "NA_BGM_FOREST_TEMPLE", + "NA_BGM_COURTYARD", + "NA_BGM_GANON_TOWER", + "NA_BGM_LONLON", + "NA_BGM_GORON_CITY", + "NA_BGM_FIELD_MORNING", + "NA_BGM_SPIRITUAL_STONE", + "NA_BGM_OCA_BOLERO", + "NA_BGM_OCA_MINUET", + "NA_BGM_OCA_SERENADE", + "NA_BGM_OCA_REQUIEM", + "NA_BGM_OCA_NOCTURNE", + "NA_BGM_MINI_BOSS", + "NA_BGM_SMALL_ITEM_GET", + "NA_BGM_TEMPLE_OF_TIME", + "NA_BGM_EVENT_CLEAR", + "NA_BGM_KOKIRI", + "NA_BGM_OCA_FAIRY_GET", + "NA_BGM_SARIA_THEME", + "NA_BGM_SPIRIT_TEMPLE", + "NA_BGM_HORSE", + "NA_BGM_HORSE_GOAL", + "NA_BGM_INGO", + "NA_BGM_MEDALLION_GET", + "NA_BGM_OCA_SARIA", + "NA_BGM_OCA_EPONA", + "NA_BGM_OCA_ZELDA", + "NA_BGM_OCA_SUNS", + "NA_BGM_OCA_TIME", + "NA_BGM_OCA_STORM", + "NA_BGM_NAVI_OPENING", + "NA_BGM_DEKU_TREE_CS", + "NA_BGM_WINDMILL", + "NA_BGM_HYRULE_CS", + "NA_BGM_MINI_GAME", + "NA_BGM_SHEIK", + "NA_BGM_ZORA_DOMAIN", + "NA_BGM_APPEAR", + "NA_BGM_ADULT_LINK", + "NA_BGM_MASTER_SWORD", + "NA_BGM_INTRO_GANON", + "NA_BGM_SHOP", + "NA_BGM_CHAMBER_OF_SAGES", + "NA_BGM_FILE_SELECT", + "NA_BGM_ICE_CAVERN", + "NA_BGM_DOOR_OF_TIME", + "NA_BGM_OWL", + "NA_BGM_SHADOW_TEMPLE", + "NA_BGM_WATER_TEMPLE", + "NA_BGM_BRIDGE_TO_GANONS", + "NA_BGM_OCARINA_OF_TIME", + "NA_BGM_GERUDO_VALLEY", + "NA_BGM_POTION_SHOP", + "NA_BGM_KOTAKE_KOUME", + "NA_BGM_ESCAPE", + "NA_BGM_UNDERGROUND", + "NA_BGM_GANONDORF_BOSS", + "NA_BGM_GANON_BOSS", + "NA_BGM_END_DEMO", + "NA_BGM_STAFF_1", + "NA_BGM_STAFF_2", + "NA_BGM_STAFF_3", + "NA_BGM_STAFF_4", + "NA_BGM_FIRE_BOSS", + "NA_BGM_TIMED_MINI_GAME", + "NA_BGM_CUTSCENE_EFFECTS", + ) + + # Some bugged soundfonts report the wrong samplebank. Map them to the correct samplebank for proper sample discovery. + fake_banks = { 37 : 2 } + + # Some audiotable banks have a buffer clearing bug. Indicate which banks suffer from this. + audiotable_buffer_bugs = (0,) + + version_info = GameVersionInfo(MMLVersion.OOT, + soundfont_table_code_offset, + seq_font_table_code_offset, + seq_table_code_offset, + sample_bank_table_code_offset, + seq_enum_names, + handwritten_sequences, + fake_banks, + audiotable_buffer_bugs) + + extract_audio_for_version(version_info, args.extracted_dir, args.read_xml, args.write_xml) diff --git a/tools/check_ordering.py b/tools/check_ordering.py deleted file mode 100755 index 0af2d9a949..0000000000 --- a/tools/check_ordering.py +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/env python3 - -# SPDX-FileCopyrightText: 2024 zeldaret -# SPDX-License-Identifier: CC0-1.0 - - -from __future__ import annotations - -import argparse -import dataclasses -import enum -from pathlib import Path -import sys -from typing import BinaryIO - -import elftools.elf.elffile -import mapfile_parser.mapfile - - -@dataclasses.dataclass -class Reloc: - name: str - offset_32: int | None - offset_hi16: int | None - offset_lo16: int | None - addend: int - - -@dataclasses.dataclass -class Pointer: - name: str - addend: int - base_value: int - build_value: int - - -def read_relocs(object_path: Path, section_name: str) -> list[Reloc]: - with open(object_path, "rb") as f: - elffile = elftools.elf.elffile.ELFFile(f) - symtab = elffile.get_section_by_name(".symtab") - data = elffile.get_section_by_name(section_name).data() - - reloc_section = elffile.get_section_by_name(f".rel{section_name}") - if reloc_section is None: - return [] - - relocs = [] - offset_hi16 = 0 - for reloc in reloc_section.iter_relocations(): - reloc_offset = reloc.entry["r_offset"] - reloc_type = reloc.entry["r_info_type"] - reloc_name = symtab.get_symbol(reloc.entry["r_info_sym"]).name - - if reloc_type == 2: # R_MIPS_32 - offset_32 = reloc_offset - addend = int.from_bytes( - data[reloc_offset : reloc_offset + 4], "big", signed=True - ) - relocs.append(Reloc(reloc_name, offset_32, None, None, addend)) - elif reloc_type == 4: # R_MIPS_26 - pass - elif reloc_type == 5: # R_MIPS_HI16 - offset_hi16 = reloc_offset - elif reloc_type == 6: # R_MIPS_LO16 - offset_lo16 = reloc_offset - addend_hi16 = int.from_bytes( - data[offset_hi16 + 2 : offset_hi16 + 4], "big", signed=False - ) - addend_lo16 = int.from_bytes( - data[offset_lo16 + 2 : offset_lo16 + 4], "big", signed=True - ) - addend = (addend_hi16 << 16) + addend_lo16 - relocs.append(Reloc(reloc_name, None, offset_hi16, offset_lo16, addend)) - else: - raise NotImplementedError(f"Unsupported relocation type: {reloc_type}") - - return relocs - - -def read_u32(f: BinaryIO, offset: int) -> int: - f.seek(offset) - return int.from_bytes(f.read(4), "big") - - -def read_u16(f: BinaryIO, offset: int) -> int: - f.seek(offset) - return int.from_bytes(f.read(2), "big") - - -def read_s16(f: BinaryIO, offset: int) -> int: - f.seek(offset) - return int.from_bytes(f.read(2), "big", signed=True) - - -def main(): - parser = argparse.ArgumentParser( - description="Report bss reorderings between the baserom and the current build " - "by parsing relocations from the built object files and comparing their final values " - "between the baserom and the current build. " - "Assumes that the only differences are due to ordering and that the text sections of the " - "ROMS are not shifted." - ) - parser.add_argument( - "--oot-version", - "-v", - type=str, - default="gc-eu-mq-dbg", - help="OOT version (default: gc-eu-mq-dbg)", - ) - parser.add_argument( - "--segment", - type=str, - help="ROM segment to check, e.g. 'boot', 'code', or 'ovl_player_actor' (default: all)", - ) - parser.add_argument( - "--all-sections", - action="store_true", - help="Check ordering for all section types, not just .bss", - ) - - args = parser.parse_args() - version = args.oot_version - - mapfile = mapfile_parser.mapfile.MapFile() - mapfile.readMapFile(f"build/{version}/oot-{version}.map") - - # Segments built from source code (filtering out assets) - source_code_segments = [] - for mapfile_segment in mapfile: - if ( - args.segment - and mapfile_segment.name != f"..{args.segment}" - and mapfile_segment.name != f"..{args.segment}.bss" - ): - continue - if not ( - mapfile_segment.name.startswith("..boot") - or mapfile_segment.name.startswith("..code") - or mapfile_segment.name.startswith("..buffers") - or mapfile_segment.name.startswith("..ovl_") - ): - continue - source_code_segments.append(mapfile_segment) - - base = open(f"baseroms/{version}/baserom-decompressed.z64", "rb") - build = open(f"build/{version}/oot-{version}.z64", "rb") - - # Find all pointers with different values - pointers = [] - for mapfile_segment in source_code_segments: - for file in mapfile_segment: - if not str(file.filepath).endswith(".o"): - continue - if file.sectionType == ".bss": - continue - for reloc in read_relocs(file.filepath, file.sectionType): - if reloc.offset_32 is not None: - base_value = read_u32(base, file.vrom + reloc.offset_32) - build_value = read_u32(build, file.vrom + reloc.offset_32) - elif reloc.offset_hi16 is not None and reloc.offset_lo16 is not None: - if ( - read_u16(base, file.vrom + reloc.offset_hi16) - != read_u16(build, file.vrom + reloc.offset_hi16) - ) or ( - read_u16(base, file.vrom + reloc.offset_lo16) - != read_u16(build, file.vrom + reloc.offset_lo16) - ): - print( - f"Error: Reference to {reloc.name} in {file.filepath} is in a shifted (or non-matching even ignoring relocs) portion of the ROM.\n" - "Please ensure that the only differences between the baserom and the current build are due to data ordering.", - file=sys.stderr, - ) - sys.exit(1) - - base_value = ( - read_u16(base, file.vrom + reloc.offset_hi16 + 2) << 16 - ) + read_s16(base, file.vrom + reloc.offset_lo16 + 2) - build_value = ( - read_u16(build, file.vrom + reloc.offset_hi16 + 2) << 16 - ) + read_s16(build, file.vrom + reloc.offset_lo16 + 2) - else: - assert False, "Invalid relocation" - - pointers.append( - Pointer(reloc.name, reloc.addend, base_value, build_value) - ) - - # Remove duplicates and sort by baserom address - pointers = list({p.base_value: p for p in pointers}.values()) - pointers.sort(key=lambda p: p.base_value) - - # Go through sections and report differences - for mapfile_segment in source_code_segments: - for file in mapfile_segment: - if not args.all_sections and not file.sectionType == ".bss": - continue - - pointers_in_section = [ - p - for p in pointers - if file.vram <= p.build_value < file.vram + file.size - ] - if not pointers_in_section: - continue - - # Try to detect if the section is shifted by comparing the lowest - # address among any pointer into the section between base and build - base_min_address = min(p.base_value for p in pointers_in_section) - build_min_address = min(p.build_value for p in pointers_in_section) - section_shift = build_min_address - base_min_address - if all( - p.build_value == p.base_value + section_shift - for p in pointers_in_section - ): - continue - - print(f"{file.filepath} {file.sectionType} is reordered:") - for i, p in enumerate(pointers_in_section): - if p.addend > 0: - addend_str = f"+0x{p.addend:X}" - elif p.addend < 0: - addend_str = f"-0x{-p.addend:X}" - else: - addend_str = "" - - if i > 0 and p.build_value < pointers_in_section[i - 1].build_value: - print(" --------------------") # BSS wraps around - print( - f" {p.base_value:08X} -> {p.build_value:08X} {p.name}{addend_str}" - ) - - -if __name__ == "__main__": - main() diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index 1d6c862195..d0affdd485 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -91,8 +91,6 @@ def main(): context.addBannedSymbolRange(0x0000F000, 0x00010100) context.addBannedSymbolRange(0x10000000, 0x80000300) context.addBannedSymbolRange(0xA0000000, 0xFFFFFFFF) - context.addBannedSymbol(0x80100000) # z_kaleido_equipment.c - context.addBannedSymbol(0x80112200) # z_message.c spimdisasm.mips.InstructionConfig.parseArgs(args) spimdisasm.common.GlobalConfig.parseArgs(args) diff --git a/tools/disasm/gc-us/file_addresses.csv b/tools/disasm/gc-us/file_addresses.csv deleted file mode 100644 index d0d5f562ee..0000000000 --- a/tools/disasm/gc-us/file_addresses.csv +++ /dev/null @@ -1,7 +0,0 @@ -name,vrom_start,vrom_end,rom_start,rom_end,vram_start,overlay_dir -code,A86000,B8AA60,A62500,AFDAA0,80010EE0, -ovl_file_choose,B8E090,B9DFF0,AFFCF0,B08BF0,80803630,gamestates -ovl_kaleido_scope,B9DFF0,BBA770,B08BF0,B17940,808135B0,misc -ovl_player_actor,BBA770,BE0E80,B17940,B30C90,8082FDA0,actors -ovl_En_Mag,DFA080,DFC9B0,C8E1E0,C8FEA0,80A884E0,actors -ovl_Fishing,EB6810,ECA2E0,D061D0,D13750,80B44FE0,actors diff --git a/tools/disasm/gc-us/files_code.csv b/tools/disasm/gc-us/files_code.csv deleted file mode 100644 index 8e0d572b16..0000000000 --- a/tools/disasm/gc-us/files_code.csv +++ /dev/null @@ -1,467 +0,0 @@ -offset,vram,.text -0,80010EE0,src/code/z_en_a_keep -AA0,80011980,src/code/z_en_item00 -2EA0,80013D80,src/code/z_eff_blure -62D0,800171B0,src/code/z_eff_shield_particle -7930,80018810,src/code/z_eff_spark -8FE0,80019EC0,src/code/z_eff_ss_dead -9790,8001A670,src/code/z_effect -9F10,8001ADF0,src/code/z_effect_soft_sprite -A9B0,8001B890,src/code/z_effect_soft_sprite_old_init -D4D0,8001E3B0,src/code/flg_set -D8F0,8001E7D0,src/code/z_DLF -DB40,8001EA20,src/code/z_actor -1A0E0,8002AFC0,src/code/z_actor_dlftbls -1A230,8002B110,src/code/z_bgcheck -23E10,80034CF0,src/code/code_800430A0 -24130,80035010,src/code/code_80043480 -244C0,800353A0,src/code/z_camera -38AF0,800499D0,src/code/z_collision_btltbls -38B50,80049A30,src/code/z_collision_check -407D0,800516B0,src/code/z_common_data -40860,80051740,src/code/z_debug -40B70,80051A50,src/code/z_debug_display -41030,80051F10,src/code/z_demo -45D10,80056BF0,src/code/code_80069420 -45DA0,80056C80,src/code/z_draw -47CA0,80058B80,src/code/z_sfx_source -47E60,80058D40,src/code/z_elf_message -48540,80059420,src/code/z_face_reaction -48590,80059470,src/code/code_8006C3A0 -48710,800595F0,src/code/z_fcurve_data -48950,80059830,src/code/z_fcurve_data_skelanime -49160,8005A040,src/code/z_horse -49E40,8005AD20,src/code/z_jpeg -4A600,8005B4E0,src/code/z_kaleido_setup -4A9D0,8005B8B0,src/code/z_kanfont -4ABE0,8005BAC0,src/code/z_kankyo -523F0,800632D0,src/code/z_lib -53590,80064470,src/code/z_lifemeter -54930,80065810,src/code/z_lights -559D0,800668B0,src/code/z_malloc -55BB0,80066A90,src/code/z_map_mark -561B0,80067090,src/code/z_prenmi_buff -56270,80067150,src/code/z_nulltask -562F0,800671D0,src/code/z_olib -569E0,800678C0,src/code/z_onepointdemo -5A980,8006B860,src/code/z_map_exp -5C520,8006D400,src/code/z_parameter -67BF0,80078AD0,src/code/z_path -67DC0,80078CA0,src/code/z_frame_advance -67E70,80078D50,src/code/z_player_lib -6B8E0,8007C7C0,src/code/z_prenmi -6BA80,8007C960,src/code/z_quake -6C8F0,8007D7D0,src/code/z_rcp -6E1B0,8007F090,src/code/z_room -6F9A0,80080880,src/code/z_sample -6FDA0,80080C80,src/code/code_80097A00 -6FF60,80080E40,src/code/z_scene -71410,800822F0,src/code/z_scene_table -77C10,80088AF0,src/code/z_skelanime -7C600,8008D4E0,src/code/z_skin -7D1A0,8008E080,src/code/z_skin_awb -7DAB0,8008E990,src/code/z_skin_matrix -7EE50,8008FD30,src/code/z_sram -80190,80091070,src/code/z_ss_sram -80360,80091240,src/code/z_rumble -805E0,800914C0,src/code/z_view -81CE0,80092BC0,src/code/z_vimode -82850,80093730,src/code/z_viscvg -829F0,800938D0,src/code/z_vismono -83210,800940F0,src/code/z_viszbuf -834A0,80094380,src/code/z_vr_box -85D70,80096C50,src/code/z_vr_box_draw -86450,80097330,src/code/z_player_call -865C0,800974A0,src/code/z_fbdemo -86FE0,80097EC0,src/code/z_fbdemo_triforce -875A0,80098480,src/code/z_fbdemo_wipe1 -87A10,800988F0,src/code/z_fbdemo_circle -880D0,80098FB0,src/code/z_fbdemo_fade -88430,80099310,src/code/shrink_window -885A0,80099480,src/code/code_800BB0A0 -88A70,80099950,src/code/z_kaleido_manager -88CA0,80099B80,src/code/z_kaleido_scope_call -88F80,80099E60,src/code/z_play -8C9E0,8009D8C0,src/code/PreRender -8EAD0,8009F9B0,src/code/TwoHeadGfxArena -8ECE0,8009FBC0,src/code/TwoHeadArena -8EEA0,8009FD80,src/code/audio_stop_all_sfx -8EEF0,8009FDD0,src/code/audio_thread_manager -8F300,800A01E0,src/code/title_setup -8F370,800A0250,src/code/game -8FAF0,800A09D0,src/code/gamealloc -8FC30,800A0B10,src/code/graph -905D0,800A14B0,src/code/gfxalloc -90630,800A1510,src/code/listalloc -90780,800A1660,src/code/main -90AE0,800A19C0,src/code/padmgr -915E0,800A24C0,src/code/sched -92260,800A3140,src/code/speed_meter -92CA0,800A3B80,src/code/sys_cfb -92DC0,800A3CA0,src/code/sys_math -93060,800A3F40,src/code/sys_math3d -98E30,800A9D10,src/code/sys_math_atan -99060,800A9F40,src/code/sys_matrix -9B460,800AC340,src/code/sys_ucode -9B4B0,800AC390,src/code/sys_rumble -9B810,800AC6F0,src/code/code_800D31A0 -9B840,800AC720,src/code/irqmgr -9BE60,800ACD40,src/code/fault -9E6B0,800AF590,src/code/fault_drawer -9F130,800B0010,src/code/kanread -9FC20,800B0B00,src/audio/lib/synthesis -A2D80,800B3C60,src/audio/lib/heap -A6150,800B7030,src/audio/lib/load -A9F40,800BAE20,src/audio/lib/thread -AB7A0,800BC680,src/audio/lib/dcache -AB820,800BC700,src/audio/lib/aisetnextbuf -AB8A0,800BC780,src/audio/lib/playback -AD820,800BE700,src/audio/lib/effects -AE2A0,800BF180,src/audio/lib/seqplayer -B18C0,800C27A0,src/audio/general -B7A50,800C8930,src/audio/sfx -B98B0,800CA790,src/audio/sequence -BB4D0,800CC3B0,src/code/gfxprint -BC240,800CD120,src/code/rcp_utils -BC2A0,800CD180,src/code/loadfragment2 -BC300,800CD1E0,src/code/relocation -BC540,800CD420,src/code/load -BC610,800CD4F0,src/code/code_800FC620 -BC950,800CD830,src/code/padutils -BCB40,800CDA20,src/code/padsetup -BCC80,800CDB60,src/code/fp_math -BD190,800CE070,src/code/fp -BD2F0,800CE1D0,src/code/system_malloc -BD4C0,800CE3A0,src/code/rand -BD680,800CE560,src/code/__osMalloc -BE430,800CF310,src/libultra/libc/sprintf -BE500,800CF3E0,src/code/printutils -BE560,800CF440,src/code/sleep -BE700,800CF5E0,src/code/jpegutils -BEC10,800CFAF0,src/code/jpegdecoder -BF200,800D00E0,src/libultra/mgu/scale -BF2B0,800D0190,src/libultra/gu/sinf -BF470,800D0350,src/libultra/gu/sins -BF4E0,800D03C0,src/libultra/io/sptask -BF7A0,800D0680,src/libultra/io/motor -BFB70,800D0A50,src/libultra/io/siacs -BFC30,800D0B10,src/libultra/io/controller -BFF10,800D0DF0,src/libultra/io/contreaddata -C00F0,800D0FD0,src/libultra/gu/perspective -C0380,800D1260,src/libultra/io/sprawdma -C0410,800D12F0,src/libultra/io/sirawdma -C04C0,800D13A0,src/libultra/io/sptaskyield -C04E0,800D13C0,src/libultra/mgu/mtxidentf -C0530,800D1410,src/libultra/gu/lookat -C0850,800D1730,src/libultra/os/stoptimer -C0940,800D1820,src/libultra/gu/sqrtf -C0950,800D1830,src/libultra/os/afterprenmi -C0970,800D1850,src/libultra/io/contquery -C0A10,800D18F0,src/libultra/gu/lookathil -C1290,800D2170,src/libultra/libc/xprintf -C1F70,800D2E50,src/libultra/libc/string -C2010,800D2EF0,src/libultra/io/sp -C2040,800D2F20,src/libultra/mgu/mtxident -C2090,800D2F70,src/libultra/gu/position -C22A0,800D3180,src/libultra/io/sptaskyielded -C2300,800D31E0,src/libultra/gu/rotate -C24D0,800D33B0,src/libultra/io/aisetfreq -C2620,800D3500,src/libultra/os/getactivequeue -C2640,800D3520,src/libultra/mgu/normalize -C26A0,800D3580,src/libultra/io/dpgetstat -C26B0,800D3590,src/libultra/io/dpsetstat -C26C0,800D35A0,src/libultra/gu/ortho -C2880,800D3760,src/libultra/gu/cosf -C29F0,800D38D0,src/libultra/gu/coss -C2A20,800D3900,src/libultra/io/visetevent -C2A80,800D3960,src/libultra/gu/us2dex -C2C00,800D3AE0,src/libultra/io/pfsselectbank -C2C80,800D3B60,src/libultra/io/contsetch -C2CE0,800D3BC0,src/libultra/io/aigetlen -C2D00,800D3BE0,src/libultra/mgu/translate -C2DD0,800D3CB0,src/libultra/io/contramwrite -C3020,800D3F00,src/libultra/io/pfsgetstatus -C3250,800D4130,src/libultra/io/contpfs -C3DD0,800D4CB0,src/libultra/io/contramread -C4000,800D4EE0,src/libultra/io/crc -C4170,800D5050,src/libultra/io/pfsisplug -C4460,800D5340,src/libultra/os/settimer -C45F0,800D54D0,src/libultra/libc/xldtob -C5100,800D5FE0,src/libultra/libc/ldiv -C5290,800D6170,src/libultra/libc/xlitob -C5530,800D6410,src/libultra/io/spgetstat -C5540,800D6420,src/libultra/io/spsetstat -C5550,800D6430,src/libultra/os/writebackdcacheall -C5580,800D6460,src/libultra/os/getcurrfaultedthread -C55A0,800D6480,src/libultra/mgu/mtxf2l -C5610,800D64F0,src/libultra/libc/llcvt -C5820,800D6700,src/libultra/io/vigetcurrframebuf -C5860,800D6740,src/libultra/io/spsetpc -C5890,800D6770,src/libultra/libc/sqrt -C58A0,800D6780,src/libultra/libc/absf -C58B0,800D6790,src/code/fmodf -C5900,800D67E0,src/code/__osMemset -C5930,800D6810,src/code/__osMemmove -C59C0,800D68A0,src/code/z_message -D1060,800E1F40,src/code/z_game_over -D15A0,800E2480,src/code/z_construct -D2960,800E3840,data/rsp.text - -offset,vram,.data -D5CC0,800E6BA0,src/code/z_en_a_keep -D5D60,800E6C40,src/code/z_en_item00 -D6000,800E6EE0,src/code/z_eff_blure -D60B0,800E6F90,src/code/z_eff_shield_particle -D6100,800E6FE0,src/code/z_effect -D6150,800E7030,src/code/z_effect_soft_sprite -D6160,800E7040,src/code/z_effect_soft_sprite_old_init -D6250,800E7130,src/code/z_effect_soft_sprite_dlftbls -D6660,800E7540,src/code/flg_set -D6820,800E7700,src/code/z_actor -D6B40,800E7A20,src/code/z_actor_dlftbls -DA630,800EB510,src/code/z_bgcheck -DA780,800EB660,src/code/z_camera -DDCD0,800EEBB0,src/code/z_collision_btltbls -DDFB0,800EEE90,src/code/z_collision_check -DE260,800EF140,src/code/z_debug -DE290,800EF170,src/code/z_debug_display -DE2E0,800EF1C0,src/code/z_demo -DE440,800EF320,src/code/z_draw -DF4C0,800F03A0,src/code/z_elf_message -DF510,800F03F0,src/code/z_face_reaction -DF950,800F0830,src/code/z_game_dlftbls -DFA70,800F0950,src/code/z_horse -DFB80,800F0A60,src/code/z_jpeg -DFBC0,800F0AA0,src/code/z_kaleido_setup -DFC10,800F0AF0,src/code/z_kankyo -E0000,800F0EE0,src/code/z_lib -E0030,800F0F10,src/code/z_lifemeter -E0150,800F1030,src/code/z_lights -E0160,800F1040,src/code/z_map_mark -E0220,800F1100,src/code/z_onepointdemo -E3B40,800F4A20,src/code/z_map_exp -E3B60,800F4A40,src/code/z_map_data -E5960,800F6840,src/code/z_parameter -E5C60,800F6B40,src/code/z_player_lib -E6340,800F7220,src/code/z_quake -E6370,800F7250,src/code/z_rcp -E7190,800F8070,src/code/z_room -E7210,800F80F0,src/code/code_80097A00 -E7590,800F8470,src/code/z_scene -E7610,800F84F0,src/code/object_table -E82B0,800F9190,src/code/z_scene_table -EA4C0,800FB3A0,src/code/z_skelanime -EA4E0,800FB3C0,src/code/z_skin_matrix -EA520,800FB400,src/code/z_sram -EA6D0,800FB5B0,src/code/z_ss_sram -EA780,800FB660,data/unk_8012ABC0.data -EA7B0,800FB690,src/code/z_view -EA7C0,800FB6A0,src/code/z_viscvg -EA850,800FB730,src/code/z_vr_box -EAB50,800FBA30,src/code/z_player_call -EAB70,800FBA50,src/code/z_fbdemo -EABF0,800FBAD0,src/code/z_fbdemo_triforce -EACC0,800FBBA0,src/code/z_fbdemo_wipe1 -EB760,800FC640,src/code/z_fbdemo_circle -ECA60,800FD940,src/code/z_fbdemo_fade -ECA90,800FD970,src/code/shrink_window -ECAA0,800FD980,src/code/z_kaleido_manager -ECAF0,800FD9D0,src/code/z_play -ECB00,800FD9E0,src/code/audio_stop_all_sfx -ECB10,800FD9F0,src/code/graph -ECB20,800FDA00,src/code/main -ECB30,800FDA10,src/code/padmgr -ECB40,800FDA20,src/code/speed_meter -ECB70,800FDA50,src/code/sys_math -ECBB0,800FDA90,src/code/sys_math_atan -ED3C0,800FE2A0,src/code/sys_matrix -ED440,800FE320,src/code/sys_ucode -ED450,800FE330,src/code/sys_rumble -ED460,800FE340,src/code/irqmgr -ED480,800FE360,src/code/fault -ED4E0,800FE3C0,src/code/fault_drawer -ED520,800FE400,src/audio/lib/data -EF930,80100810,src/audio/lib/synthesis -EF960,80100840,src/audio/lib/load -EF970,80100850,src/audio/lib/thread -EF990,80100870,src/audio/lib/aisetnextbuf -EF9A0,80100880,src/audio/lib/effects -EF9B0,80100890,src/audio/lib/seqplayer -EFA00,801008E0,src/audio/general -F1120,80102000,src/audio/sfx_params -F24F0,801033D0,src/audio/data -F2560,80103440,src/audio/session_config -F2D00,80103BE0,src/code/logseverity -F2D10,80103BF0,src/code/gfxprint -F35C0,801044A0,src/code/code_800FC620 -F35E0,801044C0,src/code/fp -F35F0,801044D0,src/code/rand -F3600,801044E0,src/code/__osMalloc -F3610,801044F0,src/libultra/gu/sins -F3E10,80104CF0,src/libultra/io/siacs -F3E20,80104D00,src/libultra/io/controller -F3E30,80104D10,src/libultra/libc/xprintf -F3E80,80104D60,src/libultra/gu/position -F3E90,80104D70,src/libultra/gu/rotate -F3EA0,80104D80,src/libultra/io/vimodefpallan1 -F3EF0,80104DD0,src/libultra/io/contpfs -F3F00,80104DE0,src/libultra/io/contramread -F3F10,80104DF0,src/libultra/libc/xlitob - -offset,vram,.rodata -F3F40,80104E20,src/code/z_en_a_keep -F3F90,80104E70,src/code/z_en_item00 -F4200,801050E0,src/code/z_eff_blure -F4230,80105110,src/code/z_eff_shield_particle -F4240,80105120,src/code/z_eff_spark -F4250,80105130,src/code/z_eff_ss_dead -F4260,80105140,src/code/z_effect_soft_sprite_old_init -F4280,80105160,src/code/flg_set -F4610,801054F0,src/code/z_actor -F4BC0,80105AA0,src/code/z_actor_dlftbls -F4C10,80105AF0,src/code/z_bgcheck -F4CB0,80105B90,src/code/code_80043480 -F4CC0,80105BA0,src/code/z_camera -F5440,80106320,src/code/z_collision_check -F5490,80106370,src/code/z_debug -F54A0,80106380,src/code/z_demo -F5980,80106860,src/code/z_draw -F5990,80106870,src/code/z_elf_message -F5AB0,80106990,src/code/z_fcurve_data -F5AC0,801069A0,src/code/z_fcurve_data_skelanime -F5AD0,801069B0,src/code/z_horse -F5AE0,801069C0,src/code/z_jpeg -F5B70,80106A50,src/code/z_kankyo -F5C20,80106B00,src/code/z_lib -F5C30,80106B10,src/code/z_lifemeter -F5C50,80106B30,src/code/z_lights -F5C60,80106B40,src/code/z_map_mark -F5CC0,80106BA0,src/code/z_olib -F5CE0,80106BC0,src/code/z_onepointdemo -F65A0,80107480,src/code/z_map_exp -F68C0,801077A0,src/code/z_parameter -F6AD0,801079B0,src/code/z_path -F6AE0,801079C0,src/code/z_player_lib -F6B40,80107A20,src/code/z_quake -F6BD0,80107AB0,src/code/z_room -F6C10,80107AF0,src/code/z_sample -F6C20,80107B00,src/code/z_scene_table -F6C60,80107B40,src/code/z_skelanime -F6C80,80107B60,src/code/z_skin -F6C90,80107B70,src/code/z_skin_matrix -F6CA0,80107B80,src/code/z_sram -F6D10,80107BF0,src/code/z_rumble -F6D20,80107C00,src/code/z_view -F6D30,80107C10,src/code/z_vr_box -F6E20,80107D00,src/code/z_fbdemo_triforce -F6E30,80107D10,src/code/z_fbdemo_wipe1 -F6E40,80107D20,src/code/z_fbdemo_circle -F6E50,80107D30,src/code/code_800BB0A0 -F6E60,80107D40,src/code/z_kaleido_manager -F6E80,80107D60,src/code/z_play -F6F40,80107E20,src/code/game -F6F60,80107E40,src/code/graph -F6FB0,80107E90,src/code/main -F6FE0,80107EC0,src/code/padmgr -F6FF0,80107ED0,src/code/sys_cfb -F7000,80107EE0,src/code/sys_math -F7010,80107EF0,src/code/sys_math3d -F70A0,80107F80,src/code/sys_math_atan -F70B0,80107F90,src/code/sys_matrix -F70E0,80107FC0,src/code/irqmgr -F7100,80107FE0,src/code/fault -F7B10,801089F0,src/code/fault_drawer -F7F40,80108E20,src/audio/lib/synthesis -F7F60,80108E40,src/audio/lib/heap -F7F90,80108E70,src/audio/lib/load -F8000,80108EE0,src/audio/lib/thread -F8130,80109010,src/audio/lib/playback -F8160,80109040,src/audio/lib/effects -F8190,80109070,src/audio/lib/seqplayer -F87D0,801096B0,src/audio/general -F8960,80109840,src/audio/sfx -F8980,80109860,src/audio/sequence -F8A00,801098E0,src/audio/session_config -F8A10,801098F0,src/code/gfxprint -F8A30,80109910,src/code/fp_math -F8A80,80109960,src/code/__osMalloc -F8D40,80109C20,src/libultra/gu/sinf -F8D90,80109C70,src/libultra/gu/perspective -F8DA0,80109C80,src/libultra/gu/lookathil -F8DB0,80109C90,src/libultra/libc/xprintf -F8EB0,80109D90,src/libultra/gu/cosf -F8F00,80109DE0,src/libultra/gu/libm_vals -F8F10,80109DF0,src/libultra/libc/xldtob -F8F70,80109E50,src/libultra/libc/llcvt - -offset,vram,.data -F8F80,80109E60,src/code/z_message -101910,801127F0,src/code/z_game_over - -offset,vram,.rodata -101920,80112800,src/code/z_message -101D40,80112C20,src/code/z_game_over -101DA0,80112C80,data/audio_tables.rodata -102940,80113820,data/rsp.rodata - -offset,vram,.bss -104A60,80115940,src/code/z_en_item00 -104A70,80115950,src/code/z_effect -108860,80119740,src/code/flg_set -108870,80119750,src/code/z_actor -1088F0,801197D0,src/code/z_actor_dlftbls -108900,801197E0,src/code/z_bgcheck -108A20,80119900,src/code/z_camera -108B00,801199E0,src/code/z_collision_check -10A260,8011B140,src/code/z_common_data -10B690,8011C570,src/code/z_debug -10B8B0,8011C790,src/code/z_debug_display -10B8C0,8011C7A0,src/code/z_demo -10B8F0,8011C7D0,src/code/z_kankyo -10B9C0,8011C8A0,src/code/z_lifemeter -10B9F0,8011C8D0,src/code/z_lights -10BB80,8011CA60,src/code/z_malloc -10BBB0,8011CA90,src/code/z_map_mark -10BBC0,8011CAA0,src/code/z_map_exp -10BBD0,8011CAB0,src/code/z_parameter -10BBF0,8011CAD0,src/code/z_player_lib -10BC10,8011CAF0,src/code/z_quake -10BCA0,8011CB80,src/code/z_skelanime -10BCB0,8011CB90,src/code/z_skin -10CBC0,8011DAA0,src/code/z_rumble -10CCD0,8011DBB0,src/code/z_vr_box_draw -10CCE0,8011DBC0,src/code/z_player_call -10CCF0,8011DBD0,src/code/db_camera -10CCF0,8011DBD0,src/code/mempak -10CCF0,8011DBD0,src/code/z_kaleido_scope_call -10CD10,8011DBF0,src/code/z_play -10CE20,8011DD00,src/code/game -10CF00,8011DDE0,src/code/graph -10CF70,8011DE50,src/code/main -110E00,80121CE0,src/code/padmgr -110E10,80121CF0,src/code/sched -110E30,80121D10,src/code/speed_meter -110EA0,80121D80,src/code/sys_cfb -110EB0,80121D90,src/code/sys_math3d -1110D0,80121FB0,src/code/sys_matrix -1110E0,80121FC0,src/code/fault -111F60,80122E40,src/code/fault_drawer -111FC0,80122EA0,src/audio/lib/load -112080,80122F60,src/audio/general -112280,80123160,src/audio/sfx -114A90,80125970,src/audio/sequence -115850,80126730,src/audio/session_config -11BD60,8012CC40,src/code/gfxprint -11BD70,8012CC50,src/code/fp_math -11BD80,8012CC60,src/code/system_malloc -11BDB0,8012CC90,src/code/rand -11BDC0,8012CCA0,src/code/__osMalloc -11BDD0,8012CCB0,src/code/jpegdecoder -11BDE0,8012CCC0,src/libultra/io/sptask -11BE20,8012CD00,src/libultra/io/motor -11BF20,8012CE00,src/libultra/io/siacs -11BF40,8012CE20,src/libultra/io/controller -11BFD0,8012CEB0,src/libultra/io/contpfs -11C0D0,8012CFB0,src/libultra/io/pfsisplug -11C110,8012CFF0,src/code/z_message -11C130,8012D010,.end diff --git a/tools/disasm/gc-us/files_ovl_file_choose.csv b/tools/disasm/gc-us/files_ovl_file_choose.csv deleted file mode 100644 index aded105dd8..0000000000 --- a/tools/disasm/gc-us/files_ovl_file_choose.csv +++ /dev/null @@ -1,22 +0,0 @@ -offset,vram,.text -0,80803630,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase -3040,80806670,src/overlays/gamestates/ovl_file_choose/z_file_nameset -8490,8080BAC0,src/overlays/gamestates/ovl_file_choose/z_file_choose - -offset,vram,.data -EC40,80812270,src/overlays/gamestates/ovl_file_choose/z_file_nameset_data -F320,80812950,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase -F360,80812990,src/overlays/gamestates/ovl_file_choose/z_file_nameset -F500,80812B30,src/overlays/gamestates/ovl_file_choose/z_file_choose - -offset,vram,.rodata -F7F0,80812E20,src/overlays/gamestates/ovl_file_choose/z_file_nameset -F800,80812E30,src/overlays/gamestates/ovl_file_choose/z_file_choose - -offset,vram,.ovl -F820,80812E50,src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc - -offset,vram,.bss -FF60,80813590,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase -FF70,808135A0,src/overlays/gamestates/ovl_file_choose/z_file_nameset -FF80,808135B0,.end diff --git a/tools/disasm/gc-us/files_ovl_kaleido_scope.csv b/tools/disasm/gc-us/files_ovl_kaleido_scope.csv deleted file mode 100644 index 27333f248e..0000000000 --- a/tools/disasm/gc-us/files_ovl_kaleido_scope.csv +++ /dev/null @@ -1,34 +0,0 @@ -offset,vram,.text -0,808135B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect -2400,808159B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug -43B0,80817960,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment -5E30,808193E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item -7E20,8081B3D0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map -B100,8081E6B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt -B300,8081E8B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope -152C0,80828870,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark - -offset,vram,.data -15980,80828F30,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect -15B30,808290E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug -15D00,808292B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment -15D30,808292E0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item -15DA0,80829350,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map -15FF0,808295A0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt -16000,808295B0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope -169C0,80829F70,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark -16A10,80829FC0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data - -offset,vram,.rodata -1AB70,8082E120,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug -1AC50,8082E200,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment -1AC60,8082E210,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope -1AF40,8082E4F0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark -1AFF0,8082E5A0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data - -offset,vram,.ovl -1B070,8082E620,src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc - -offset,vram,.bss -1C780,8082FD30,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope -1C7F0,8082FDA0,.end diff --git a/tools/disasm/gc-us/functions.txt b/tools/disasm/gc-us/functions.txt deleted file mode 100644 index 5300b4ed5e..0000000000 --- a/tools/disasm/gc-us/functions.txt +++ /dev/null @@ -1,13135 +0,0 @@ -entrypoint = 0x80000400; // type:func -cleararena = 0x80000460; // type:func -bootproc = 0x80000498; // type:func -Main_ThreadEntry = 0x800005A0; // type:func -Idle_ThreadEntry = 0x8000063C; // type:func -ViConfig_UpdateVi = 0x80000830; // type:func -ViConfig_UpdateBlack = 0x80000930; // type:func -DmaMgr_DmaRomToRam = 0x80000980; // type:func -DmaMgr_AudioDmaHandler = 0x80000B04; // type:func -DmaMgr_DmaFromDriveRom = 0x80000B24; // type:func -DmaMgr_FindFileName = 0x80000BC8; // type:func -DmaMgr_GetFileName = 0x80000BD8; // type:func -DmaMgr_ProcessRequest = 0x80000BEC; // type:func -DmaMgr_ThreadEntry = 0x80000D78; // type:func -DmaMgr_RequestAsync = 0x80000DF8; // type:func -DmaMgr_RequestSync = 0x80000E5C; // type:func -DmaMgr_Init = 0x80000ED8; // type:func -Yaz0_FirstDMA = 0x80000FC0; // type:func -Yaz0_NextDMA = 0x80001060; // type:func -Yaz0_DecompressImpl = 0x8000114C; // type:func -Yaz0_Decompress = 0x800012B4; // type:func -Locale_Init = 0x80001300; // type:func -Locale_ResetRegion = 0x800013AC; // type:func -osSyncPrintf = 0x800013DC; // type:func -osDriveRomInit = 0x80001420; // type:func -Mio0_Decompress = 0x80001600; // type:func -StackCheck_Init = 0x800016B0; // type:func -StackCheck_Cleanup = 0x80001788; // type:func -StackCheck_GetState = 0x800017F8; // type:func -StackCheck_CheckAll = 0x80001870; // type:func -StackCheck_Check = 0x800018C8; // type:func -LogUtils_HungupThread = 0x80001900; // type:func -LogUtils_ResetHungup = 0x80001934; // type:func -__osPiCreateAccessQueue = 0x80001960; // type:func -__osPiGetAccess = 0x800019B0; // type:func -__osPiRelAccess = 0x800019F4; // type:func -osSendMesg = 0x80001A20; // type:func -osStopThread = 0x80001B70; // type:func -osViExtendVStart = 0x80001C30; // type:func -osRecvMesg = 0x80001C40; // type:func -__createSpeedParam = 0x80001D80; // type:func -__osInitialize_common = 0x80001E1C; // type:func -__osInitialize_autodetect = 0x800020C8; // type:func -__ull_rshift = 0x800020D0; // type:func -__ull_rem = 0x800020FC; // type:func -__ull_div = 0x80002138; // type:func -__ll_lshift = 0x80002174; // type:func -__ll_rem = 0x800021A0; // type:func -__ll_div = 0x800021DC; // type:func -__ll_mul = 0x80002238; // type:func -__ull_divremi = 0x80002268; // type:func -__ll_mod = 0x800022C8; // type:func -__ll_rshift = 0x80002364; // type:func -__osExceptionPreamble = 0x80002390; // type:func -osDestroyThread = 0x80002D00; // type:func -bzero = 0x80002E10; // type:func -osCreateThread = 0x80002F10; // type:func -__osSetSR = 0x80003060; // type:func -__osGetSR = 0x80003070; // type:func -osWritebackDCache = 0x80003080; // type:func -osViGetNextFramebuffer = 0x80003100; // type:func -osCreatePiManager = 0x80003140; // type:func -__osDevMgrMain = 0x800032C0; // type:func -__osPiRawStartDma = 0x800036D0; // type:func -osVirtualToPhysical = 0x800037A0; // type:func -osViBlack = 0x80003820; // type:func -__osSiRawReadIo = 0x80003890; // type:func -osGetThreadId = 0x800038E0; // type:func -osSetIntMask = 0x80003900; // type:func -osViSetMode = 0x800039A0; // type:func -__osProbeTLB = 0x80003A00; // type:func -osGetMemSize = 0x80003AC0; // type:func -osSetEventMesg = 0x80003BE0; // type:func -osUnmapTLBAll = 0x80003CA0; // type:func -osEPiStartDma = 0x80003CF0; // type:func -osInvalICache = 0x80003D90; // type:func -osCreateMesgQueue = 0x80003E10; // type:func -osInvalDCache = 0x80003E40; // type:func -__osSiDeviceBusy = 0x80003EF0; // type:func -osJamMesg = 0x80003F20; // type:func -osSetThreadPri = 0x80004070; // type:func -osGetThreadPri = 0x80004150; // type:func -__osEPiRawReadIo = 0x80004170; // type:func -osViSwapBuffer = 0x800042D0; // type:func -__osEPiRawStartDma = 0x80004320; // type:func -bcmp = 0x80004500; // type:func -osGetTime = 0x80004620; // type:func -__osTimerServicesInit = 0x800046B0; // type:func -__osTimerInterrupt = 0x8000473C; // type:func -__osSetTimerIntr = 0x800048B4; // type:func -__osInsertTimer = 0x80004954; // type:func -osGetCount = 0x80004AE0; // type:func -__osSetGlobalIntMask = 0x80004AF0; // type:func -__osSetCompare = 0x80004B40; // type:func -bcopy = 0x80004B50; // type:func -__osResetGlobalIntMask = 0x80004E60; // type:func -__osDisableInt = 0x80004EC0; // type:func -__osRestoreInt = 0x80004F30; // type:func -__osViInit = 0x80004F50; // type:func -__osViSwapContext = 0x80005070; // type:func -osPiGetCmdQueue = 0x80005370; // type:func -osEPiReadIo = 0x800053A0; // type:func -osViSetSpecialFeatures = 0x800053F0; // type:func -osCartRomInit = 0x80005550; // type:func -__osSetFpcCsr = 0x800056B0; // type:func -__osGetFpcCsr = 0x800056C0; // type:func -osMapTLBRdb = 0x800056D0; // type:func -osYieldThread = 0x80005730; // type:func -__osGetCause = 0x80005780; // type:func -__osEPiRawWriteIo = 0x80005790; // type:func -__osSiRawWriteIo = 0x800058F0; // type:func -osCreateViManager = 0x80005940; // type:func -viMgrMain = 0x80005AC0; // type:func -__osViGetCurrentContext = 0x80005C50; // type:func -osStartThread = 0x80005C60; // type:func -osViSetYScale = 0x80005DB0; // type:func -osViSetXScale = 0x80005E00; // type:func -__osSetHWIntrRoutine = 0x80005F10; // type:func -__osGetHWIntrRoutine = 0x80005F80; // type:func -__osSetWatchLo = 0x80005FB0; // type:func -EnAObj_SetupAction = 0x80010EE0; // type:func -EnAObj_Init = 0x80010EEC; // type:func -EnAObj_Destroy = 0x8001122C; // type:func -EnAObj_WaitFinishedTalking = 0x80011288; // type:func -EnAObj_SetupWaitTalk = 0x800112B8; // type:func -EnAObj_WaitTalk = 0x800112E0; // type:func -EnAObj_SetupBlockRot = 0x80011394; // type:func -EnAObj_BlockRot = 0x800113E4; // type:func -EnAObj_SetupBoulderFragment = 0x80011504; // type:func -EnAObj_BoulderFragment = 0x8001152C; // type:func -EnAObj_SetupBlock = 0x8001164C; // type:func -EnAObj_Block = 0x8001168C; // type:func -EnAObj_Update = 0x80011774; // type:func -EnAObj_Draw = 0x80011890; // type:func -EnItem00_SetupAction = 0x80011980; // type:func -EnItem00_Init = 0x8001198C; // type:func -EnItem00_Destroy = 0x80011FF4; // type:func -func_8001DFC8 = 0x80012020; // type:func -func_8001E1C8 = 0x80012220; // type:func -func_8001E304 = 0x8001235C; // type:func -EnItem00_Collected = 0x80012620; // type:func -EnItem00_Update = 0x80012778; // type:func -EnItem00_Draw = 0x80012DF8; // type:func -EnItem00_DrawRupee = 0x80012F90; // type:func -EnItem00_DrawCollectible = 0x800130A8; // type:func -EnItem00_DrawHeartContainer = 0x800131E8; // type:func -EnItem00_DrawHeartPiece = 0x800132E0; // type:func -func_8001F404 = 0x80013378; // type:func -Item_DropCollectible = 0x800134C0; // type:func -Item_DropCollectible2 = 0x800136F8; // type:func -Item_DropCollectibleRandom = 0x800138CC; // type:func -EffectBlure_AddVertex = 0x80013D80; // type:func -EffectBlure_AddSpace = 0x800140A4; // type:func -EffectBlure_InitElements = 0x800140E8; // type:func -EffectBlure_Init1 = 0x800141A0; // type:func -EffectBlure_Init2 = 0x800142B0; // type:func -EffectBlure_Destroy = 0x800143E4; // type:func -EffectBlure_Update = 0x800143F0; // type:func -EffectBlure_UpdateFlags = 0x80014854; // type:func -EffectBlure_GetComputedValues = 0x800149C4; // type:func -EffectBlure_SetupSmooth = 0x80014ED8; // type:func -EffectBlure_DrawElemNoInterpolation = 0x80014F0C; // type:func -EffectBlure_DrawElemHermiteInterpolation = 0x800153E0; // type:func -EffectBlure_DrawSmooth = 0x80015D6C; // type:func -EffectBlure_SetupSimple = 0x8001603C; // type:func -EffectBlure_SetupSimpleAlt = 0x80016074; // type:func -EffectBlure_DrawSimpleVertices = 0x800162DC; // type:func -EffectBlure_DrawSimple = 0x800167BC; // type:func -EffectBlure_Draw = 0x80016CC8; // type:func -EffectShieldParticle_Init = 0x800171B0; // type:func -EffectShieldParticle_Destroy = 0x800173E8; // type:func -EffectShieldParticle_Update = 0x80017474; // type:func -EffectShieldParticle_GetColors = 0x800175D8; // type:func -EffectShieldParticle_Draw = 0x800182F8; // type:func -EffectSpark_Init = 0x80018810; // type:func -EffectSpark_Destroy = 0x80018BEC; // type:func -EffectSpark_Update = 0x80018BF8; // type:func -EffectSpark_Draw = 0x80018CBC; // type:func -func_80026230 = 0x80019EC0; // type:func -func_80026400 = 0x8001A068; // type:func -func_80026608 = 0x8001A24C; // type:func -func_80026690 = 0x8001A290; // type:func -func_80026860 = 0x8001A438; // type:func -func_80026A6C = 0x8001A624; // type:func -Effect_GetPlayState = 0x8001A670; // type:func -Effect_GetByIndex = 0x8001A680; // type:func -Effect_InitStatus = 0x8001A790; // type:func -Effect_InitContext = 0x8001A7A4; // type:func -Effect_Add = 0x8001A84C; // type:func -Effect_DrawAll = 0x8001A9CC; // type:func -Effect_UpdateAll = 0x8001AAC8; // type:func -Effect_Delete = 0x8001ABF4; // type:func -Effect_DeleteAll = 0x8001AD00; // type:func -EffectSs_InitInfo = 0x8001ADF0; // type:func -EffectSs_ClearAll = 0x8001AED4; // type:func -EffectSs_Delete = 0x8001AF94; // type:func -EffectSs_Reset = 0x8001AFF4; // type:func -EffectSs_FindSlot = 0x8001B088; // type:func -EffectSs_Insert = 0x8001B1C0; // type:func -EffectSs_Spawn = 0x8001B258; // type:func -EffectSs_Update = 0x8001B400; // type:func -EffectSs_UpdateAll = 0x8001B4A0; // type:func -EffectSs_Draw = 0x8001B55C; // type:func -EffectSs_DrawAll = 0x8001B5A0; // type:func -EffectSs_LerpInv = 0x8001B6EC; // type:func -EffectSs_LerpS16 = 0x8001B750; // type:func -EffectSs_LerpU8 = 0x8001B7A4; // type:func -EffectSs_DrawGEffect = 0x8001B890; // type:func -EffectSsDust_Spawn = 0x8001BACC; // type:func -func_8002829C = 0x8001BB80; // type:func -func_80028304 = 0x8001BBE8; // type:func -func_8002836C = 0x8001BC50; // type:func -func_800283D4 = 0x8001BCB8; // type:func -func_8002843C = 0x8001BD20; // type:func -func_800284A4 = 0x8001BD88; // type:func -func_80028510 = 0x8001BDF4; // type:func -func_8002857C = 0x8001BE60; // type:func -func_800285EC = 0x8001BED0; // type:func -func_8002865C = 0x8001BF40; // type:func -func_800286CC = 0x8001BFB0; // type:func -func_8002873C = 0x8001C020; // type:func -func_800287AC = 0x8001C090; // type:func -func_8002881C = 0x8001C100; // type:func -func_80028858 = 0x8001C13C; // type:func -func_80028894 = 0x8001C178; // type:func -func_80028990 = 0x8001C274; // type:func -func_80028A54 = 0x8001C338; // type:func -EffectSsKiraKira_SpawnSmallYellow = 0x8001C3FC; // type:func -EffectSsKiraKira_SpawnSmall = 0x8001C458; // type:func -EffectSsKiraKira_SpawnDispersed = 0x8001C494; // type:func -EffectSsKiraKira_SpawnFocused = 0x8001C5D0; // type:func -EffectSsBomb_Spawn = 0x8001C6A8; // type:func -EffectSsBomb2_SpawnFade = 0x8001C700; // type:func -EffectSsBomb2_SpawnLayered = 0x8001C768; // type:func -EffectSsBlast_Spawn = 0x8001C7D8; // type:func -EffectSsBlast_SpawnWhiteShockwaveSetScale = 0x8001C868; // type:func -EffectSsBlast_SpawnShockwaveSetColor = 0x8001C8BC; // type:func -EffectSsBlast_SpawnWhiteShockwave = 0x8001C908; // type:func -EffectSsGSpk_SpawnAccel = 0x8001C944; // type:func -EffectSsGSpk_SpawnNoAccel = 0x8001C9D4; // type:func -EffectSsGSpk_SpawnFuse = 0x8001CA68; // type:func -EffectSsGSpk_SpawnRandColor = 0x8001CABC; // type:func -EffectSsGSpk_SpawnSmall = 0x8001CBC0; // type:func -EffectSsDFire_Spawn = 0x8001CC04; // type:func -EffectSsDFire_SpawnFixedScale = 0x8001CC84; // type:func -EffectSsBubble_Spawn = 0x8001CCC8; // type:func -EffectSsGRipple_Spawn = 0x8001CD28; // type:func -EffectSsGSplash_Spawn = 0x8001CD80; // type:func -EffectSsGMagma_Spawn = 0x8001CE14; // type:func -EffectSsGFire_Spawn = 0x8001CE4C; // type:func -EffectSsLightning_Spawn = 0x8001CE84; // type:func -EffectSsDtBubble_SpawnColorProfile = 0x8001CEFC; // type:func -EffectSsDtBubble_SpawnCustomColor = 0x8001CF78; // type:func -EffectSsHahen_Spawn = 0x8001D008; // type:func -EffectSsHahen_SpawnBurst = 0x8001D088; // type:func -EffectSsStick_Spawn = 0x8001D1D0; // type:func -EffectSsSibuki_Spawn = 0x8001D224; // type:func -EffectSsSibuki_SpawnBurst = 0x8001D294; // type:func -EffectSsSibuki2_Spawn = 0x8001D418; // type:func -EffectSsGMagma2_Spawn = 0x8001D478; // type:func -EffectSsStone1_Spawn = 0x8001D4E8; // type:func -EffectSsHitMark_Spawn = 0x8001D53C; // type:func -EffectSsHitMark_SpawnFixedScale = 0x8001D594; // type:func -EffectSsHitMark_SpawnCustomScale = 0x8001D5B8; // type:func -EffectSsFhgFlash_SpawnLightBall = 0x8001D5E4; // type:func -EffectSsFhgFlash_SpawnShock = 0x8001D650; // type:func -EffectSsKFire_Spawn = 0x8001D6B4; // type:func -EffectSsSolderSrchBall_Spawn = 0x8001D71C; // type:func -EffectSsKakera_Spawn = 0x8001D784; // type:func -EffectSsIcePiece_Spawn = 0x8001D83C; // type:func -EffectSsIcePiece_SpawnBurst = 0x8001D8A4; // type:func -EffectSsEnIce_SpawnFlyingVec3f = 0x8001DA38; // type:func -EffectSsEnIce_SpawnFlyingVec3s = 0x8001DAD8; // type:func -EffectSsEnIce_Spawn = 0x8001DBA4; // type:func -EffectSsFireTail_Spawn = 0x8001DC2C; // type:func -EffectSsFireTail_SpawnFlame = 0x8001DCC4; // type:func -EffectSsFireTail_SpawnFlameOnPlayer = 0x8001DD88; // type:func -EffectSsEnFire_SpawnVec3f = 0x8001DDD8; // type:func -EffectSsEnFire_SpawnVec3s = 0x8001DE50; // type:func -EffectSsExtra_Spawn = 0x8001DEFC; // type:func -EffectSsFCircle_Spawn = 0x8001DF64; // type:func -EffectSsDeadDb_Spawn = 0x8001DFC0; // type:func -EffectSsDeadDd_Spawn = 0x8001E078; // type:func -EffectSsDeadDd_SpawnRandYellow = 0x8001E12C; // type:func -EffectSsDeadDs_Spawn = 0x8001E19C; // type:func -EffectSsDeadDs_SpawnStationary = 0x8001E214; // type:func -EffectSsDeadSound_Spawn = 0x8001E264; // type:func -EffectSsDeadSound_SpawnStationary = 0x8001E2FC; // type:func -EffectSsIceSmoke_Spawn = 0x8001E34C; // type:func -FlagSet_Update = 0x8001E3B0; // type:func -Overlay_LoadGameState = 0x8001E7D0; // type:func -Overlay_FreeGameState = 0x8001E8F8; // type:func -ActorShape_Init = 0x8001EA20; // type:func -ActorShadow_Draw = 0x8001EA44; // type:func -ActorShadow_DrawCircle = 0x8001EE24; // type:func -ActorShadow_DrawWhiteCircle = 0x8001EE4C; // type:func -ActorShadow_DrawHorse = 0x8001EE7C; // type:func -ActorShadow_DrawFoot = 0x8001EEA4; // type:func -ActorShadow_DrawFeet = 0x8001F0B0; // type:func -Actor_SetFeetPos = 0x8001F57C; // type:func -Actor_ProjectPos = 0x8001F5D0; // type:func -func_8002BE64 = 0x8001F634; // type:func -func_8002BE98 = 0x8001F66C; // type:func -Actor_SetNaviToActor = 0x8001F734; // type:func -func_8002C0C0 = 0x8001F898; // type:func -func_8002C124 = 0x8001F8FC; // type:func -func_8002C7BC = 0x8001FF34; // type:func -Flags_GetSwitch = 0x800202C8; // type:func -Flags_SetSwitch = 0x800202FC; // type:func -Flags_UnsetSwitch = 0x8002033C; // type:func -Flags_GetUnknown = 0x80020380; // type:func -Flags_SetUnknown = 0x800203B4; // type:func -Flags_UnsetUnknown = 0x800203F4; // type:func -Flags_GetTreasure = 0x80020438; // type:func -Flags_SetTreasure = 0x80020450; // type:func -Flags_GetClear = 0x8002046C; // type:func -Flags_SetClear = 0x80020484; // type:func -Flags_UnsetClear = 0x800204A0; // type:func -Flags_GetTempClear = 0x800204C0; // type:func -Flags_SetTempClear = 0x800204D8; // type:func -Flags_UnsetTempClear = 0x800204F4; // type:func -Flags_GetCollectible = 0x80020514; // type:func -Flags_SetCollectible = 0x80020548; // type:func -TitleCard_Init = 0x8002058C; // type:func -TitleCard_InitBossName = 0x800205AC; // type:func -TitleCard_InitPlaceName = 0x800205F0; // type:func -TitleCard_Update = 0x8002068C; // type:func -TitleCard_Draw = 0x80020748; // type:func -TitleCard_Clear = 0x80020C9C; // type:func -Actor_Kill = 0x80020CD0; // type:func -Actor_SetWorldToHome = 0x80020CF0; // type:func -Actor_SetFocus = 0x80020D20; // type:func -Actor_SetWorldRotToShape = 0x80020D64; // type:func -Actor_SetShapeRotToWorld = 0x80020D84; // type:func -Actor_SetScale = 0x80020DA4; // type:func -Actor_SetObjectDependency = 0x80020DC0; // type:func -Actor_Init = 0x80020DF8; // type:func -Actor_Destroy = 0x80020F0C; // type:func -Actor_UpdatePos = 0x80020F40; // type:func -Actor_UpdateVelocityXZGravity = 0x80020FC0; // type:func -Actor_MoveXZGravity = 0x80021038; // type:func -Actor_UpdateVelocityXYZ = 0x80021064; // type:func -Actor_MoveXYZ = 0x800210D4; // type:func -Actor_SetProjectileSpeed = 0x80021100; // type:func -Actor_UpdatePosByAnimation = 0x80021154; // type:func -Actor_WorldYawTowardActor = 0x800211D0; // type:func -Actor_FocusYawTowardActor = 0x800211FC; // type:func -Actor_WorldYawTowardPoint = 0x80021228; // type:func -Actor_WorldPitchTowardActor = 0x8002124C; // type:func -Actor_FocusPitchTowardActor = 0x80021278; // type:func -Actor_WorldPitchTowardPoint = 0x800212A4; // type:func -Actor_WorldDistXYZToActor = 0x800212C8; // type:func -Actor_WorldDistXYZToPoint = 0x800212F4; // type:func -Actor_WorldDistXZToActor = 0x80021318; // type:func -Actor_WorldDistXZToPoint = 0x80021344; // type:func -func_8002DBD0 = 0x80021368; // type:func -Actor_HeightDiff = 0x80021408; // type:func -Player_GetHeight = 0x8002141C; // type:func -func_8002DCE4 = 0x8002147C; // type:func -func_8002DD6C = 0x80021504; // type:func -func_8002DD78 = 0x80021514; // type:func -func_8002DDA8 = 0x80021548; // type:func -func_8002DDE4 = 0x80021584; // type:func -func_8002DDF4 = 0x80021598; // type:func -func_8002DE04 = 0x800215AC; // type:func -func_8002DE74 = 0x8002161C; // type:func -Actor_MountHorse = 0x80021674; // type:func -func_8002DEEC = 0x80021698; // type:func -func_8002DF18 = 0x800216C4; // type:func -Player_SetCsAction = 0x800216E4; // type:func -Player_SetCsActionWithHaltedActors = 0x80021708; // type:func -func_8002DF90 = 0x80021744; // type:func -func_8002DFA4 = 0x8002175C; // type:func -Player_IsFacingActor = 0x80021784; // type:func -Actor_ActorBIsFacingActorA = 0x800217DC; // type:func -Actor_IsFacingPlayer = 0x80021844; // type:func -Actor_ActorAIsFacingActorB = 0x80021890; // type:func -Actor_IsFacingAndNearPlayer = 0x800218F0; // type:func -Actor_ActorAIsFacingAndNearActorB = 0x80021970; // type:func -func_8002E234 = 0x80021A04; // type:func -func_8002E2AC = 0x80021A7C; // type:func -Actor_UpdateBgCheckInfo = 0x80021C88; // type:func -func_8002E830 = 0x80022008; // type:func -func_8002EABC = 0x800221E4; // type:func -func_8002EB44 = 0x8002221C; // type:func -func_8002EBCC = 0x80022254; // type:func -func_8002ED80 = 0x80022374; // type:func -Actor_GetFocus = 0x80022494; // type:func -Actor_GetWorld = 0x800224C8; // type:func -Actor_GetWorldPosShapeRot = 0x800224FC; // type:func -func_8002EFC0 = 0x80022578; // type:func -func_8002F090 = 0x80022648; // type:func -func_8002F0C8 = 0x80022684; // type:func -Actor_TalkOfferAccepted = 0x80022754; // type:func -Actor_OfferTalkExchange = 0x80022784; // type:func -Actor_OfferTalkExchangeEquiCylinder = 0x80022858; // type:func -Actor_OfferTalk = 0x8002288C; // type:func -Actor_OfferTalkNearColChkInfoCylinder = 0x800228B4; // type:func -Actor_TextboxIsClosing = 0x800228F4; // type:func -func_8002F368 = 0x80022928; // type:func -Actor_GetScreenPos = 0x80022938; // type:func -Actor_HasParent = 0x800229D4; // type:func -Actor_OfferGetItem = 0x800229F8; // type:func -Actor_OfferGetItemNearby = 0x80022B18; // type:func -Actor_OfferCarry = 0x80022B44; // type:func -Actor_HasNoParent = 0x80022B64; // type:func -func_8002F5C4 = 0x80022B88; // type:func -Actor_SetClosestSecretDistance = 0x80022BB8; // type:func -Actor_IsMounted = 0x80022BE0; // type:func -Actor_SetRideActor = 0x80022C04; // type:func -Actor_NotMounted = 0x80022C3C; // type:func -func_8002F698 = 0x80022C60; // type:func -func_8002F6D4 = 0x80022CA0; // type:func -func_8002F71C = 0x80022CE8; // type:func -func_8002F758 = 0x80022D24; // type:func -func_8002F7A0 = 0x80022D6C; // type:func -Player_PlaySfx = 0x80022DA8; // type:func -Actor_PlaySfx = 0x80022DF4; // type:func -func_8002F850 = 0x80022E20; // type:func -func_8002F8F0 = 0x80022EC4; // type:func -func_8002F91C = 0x80022EF8; // type:func -func_8002F948 = 0x80022F2C; // type:func -func_8002F974 = 0x80022F60; // type:func -func_8002F994 = 0x80022F88; // type:func -func_8002F9EC = 0x80022FE0; // type:func -func_8002FA60 = 0x80023058; // type:func -Actor_DrawFaroresWindPointer = 0x800231A8; // type:func -func_80030488 = 0x80023A20; // type:func -Actor_DisableLens = 0x80023A48; // type:func -Actor_InitContext = 0x80023A74; // type:func -Actor_UpdateAll = 0x80023BC8; // type:func -Actor_FaultPrint = 0x80024064; // type:func -Actor_Draw = 0x800240D8; // type:func -func_80030ED8 = 0x80024398; // type:func -Actor_DrawLensOverlay = 0x80024468; // type:func -Actor_DrawLensActors = 0x800245D8; // type:func -func_800314B0 = 0x8002480C; // type:func -func_800314D4 = 0x80024830; // type:func -func_800315AC = 0x80024908; // type:func -Actor_KillAllWithMissingObject = 0x80024B20; // type:func -Actor_FreezeAllEnemies = 0x80024BBC; // type:func -func_80031B14 = 0x80024C0C; // type:func -func_80031C3C = 0x80024D34; // type:func -Actor_AddToCategory = 0x80024DEC; // type:func -Actor_RemoveFromCategory = 0x80024E34; // type:func -Actor_FreeOverlay = 0x80024F00; // type:func -Actor_Spawn = 0x80024F64; // type:func -Actor_SpawnAsChild = 0x80025244; // type:func -Actor_SpawnTransitionActors = 0x800252DC; // type:func -Actor_SpawnEntry = 0x80025418; // type:func -Actor_Delete = 0x8002549C; // type:func -func_80032880 = 0x800255A0; // type:func -func_800328D4 = 0x800255F4; // type:func -func_80032AF0 = 0x80025810; // type:func -Actor_Find = 0x80025960; // type:func -Enemy_StartFinishingBlow = 0x800259A0; // type:func -FaceChange_UpdateBlinking = 0x800259D8; // type:func -FaceChange_UpdateRandomSet = 0x80025A8C; // type:func -BodyBreak_Alloc = 0x80025B58; // type:func -BodyBreak_SetInfo = 0x80025C50; // type:func -BodyBreak_SpawnParts = 0x80025D58; // type:func -Actor_SpawnFloorDustRing = 0x80025F3C; // type:func -func_80033480 = 0x8002615C; // type:func -Actor_GetCollidedExplosive = 0x8002631C; // type:func -func_80033684 = 0x80026360; // type:func -Actor_ChangeCategory = 0x80026428; // type:func -Actor_GetProjectileActor = 0x80026468; // type:func -Actor_SetTextWithPrefix = 0x80026628; // type:func -Actor_TestFloorInDirection = 0x800266A4; // type:func -Actor_IsTargeted = 0x80026770; // type:func -Actor_OtherIsTargeted = 0x800267A4; // type:func -func_80033AEC = 0x800267D8; // type:func -func_80033C30 = 0x80026924; // type:func -Actor_RequestQuake = 0x80026A74; // type:func -Actor_RequestQuakeWithSpeed = 0x80026ADC; // type:func -Actor_RequestQuakeAndRumble = 0x80026B4C; // type:func -Rand_ZeroFloat = 0x80026BBC; // type:func -Rand_CenteredFloat = 0x80026BE8; // type:func -Actor_DrawDoorLock = 0x80026C20; // type:func -func_8003424C = 0x80026EC4; // type:func -Actor_SetColorFilter = 0x80026EE4; // type:func -func_800342EC = 0x80026F68; // type:func -func_8003435C = 0x80026FDC; // type:func -Npc_UpdateTalking = 0x80027050; // type:func -Npc_TrackPointWithLimits = 0x80027140; // type:func -Npc_GetTrackingPresetMaxPlayerYaw = 0x80027474; // type:func -Npc_UpdateAutoTurn = 0x800274A0; // type:func -Npc_TrackPoint = 0x800276A8; // type:func -func_80034B28 = 0x800277C0; // type:func -func_80034B54 = 0x800277E4; // type:func -func_80034BA0 = 0x80027824; // type:func -func_80034CC4 = 0x8002791C; // type:func -func_80034DD4 = 0x80027A00; // type:func -Animation_ChangeByInfo = 0x80027AF0; // type:func -func_80034F54 = 0x80027B88; // type:func -Actor_Noop = 0x80027D4C; // type:func -func_80035124 = 0x80027D5C; // type:func -Gfx_DrawDListOpa = 0x80027EA0; // type:func -Gfx_DrawDListXlu = 0x80027F24; // type:func -func_800353E8 = 0x80027FA8; // type:func -Actor_FindNearby = 0x80027FB8; // type:func -func_800354B4 = 0x8002807C; // type:func -func_8003555C = 0x80028124; // type:func -func_800355B8 = 0x80028180; // type:func -func_800355E4 = 0x800281AC; // type:func -Actor_ApplyDamage = 0x800281F0; // type:func -Actor_SetDropFlag = 0x8002821C; // type:func -Actor_SetDropFlagJntSph = 0x80028308; // type:func -func_80035844 = 0x80028410; // type:func -func_800358DC = 0x800284A4; // type:func -func_800359B8 = 0x80028580; // type:func -func_80035B18 = 0x800286E4; // type:func -Flags_GetEventChkInf = 0x80028714; // type:func -Flags_SetEventChkInf = 0x80028740; // type:func -Flags_GetInfTable = 0x80028774; // type:func -Flags_SetInfTable = 0x800287A0; // type:func -func_80035BFC = 0x800287D4; // type:func -func_80036E50 = 0x80029A28; // type:func -func_800374E0 = 0x8002A0B8; // type:func -func_80037C30 = 0x8002A80C; // type:func -func_80037C5C = 0x8002A83C; // type:func -func_80037C94 = 0x8002A878; // type:func -func_80037CB8 = 0x8002A89C; // type:func -func_80037D98 = 0x8002A980; // type:func -Actor_TrackNone = 0x8002AB18; // type:func -Actor_TrackPoint = 0x8002ABB4; // type:func -Actor_TrackPlayerSetFocusHeight = 0x8002AD48; // type:func -Actor_TrackPlayer = 0x8002AE84; // type:func -ActorOverlayTable_LogPrint = 0x8002AFC0; // type:func -ActorOverlayTable_FaultPrint = 0x8002AFC8; // type:func -ActorOverlayTable_Init = 0x8002B0A0; // type:func -ActorOverlayTable_Cleanup = 0x8002B0E0; // type:func -SSNode_SetValue = 0x8002B110; // type:func -SSList_SetNull = 0x8002B12C; // type:func -SSNodeList_SetSSListHead = 0x8002B13C; // type:func -DynaSSNodeList_SetSSListHead = 0x8002B194; // type:func -DynaSSNodeList_Initialize = 0x8002B1EC; // type:func -DynaSSNodeList_Alloc = 0x8002B200; // type:func -DynaSSNodeList_ResetCount = 0x8002B250; // type:func -DynaSSNodeList_GetNextNodeIdx = 0x8002B25C; // type:func -BgCheck_Vec3sToVec3f = 0x8002B28C; // type:func -BgCheck_Vec3fToVec3s = 0x8002B2D0; // type:func -CollisionPoly_GetMinY = 0x8002B314; // type:func -CollisionPoly_GetNormalF = 0x8002B3C0; // type:func -func_80038A28 = 0x8002B418; // type:func -CollisionPoly_GetPointDistanceFromPlane = 0x8002B56C; // type:func -CollisionPoly_GetVertices = 0x8002B5D4; // type:func -CollisionPoly_GetVerticesByBgId = 0x8002B674; // type:func -CollisionPoly_CheckYIntersectApprox1 = 0x8002B6F4; // type:func -CollisionPoly_CheckYIntersect = 0x8002B828; // type:func -CollisionPoly_CheckYIntersectApprox2 = 0x8002B8D4; // type:func -CollisionPoly_CheckXIntersectApprox = 0x8002B914; // type:func -CollisionPoly_CheckZIntersectApprox = 0x8002B9B8; // type:func -CollisionPoly_LineVsPoly = 0x8002BA5C; // type:func -CollisionPoly_SphVsPoly = 0x8002BD3C; // type:func -StaticLookup_AddPolyToSSList = 0x8002BE0C; // type:func -StaticLookup_AddPoly = 0x8002C02C; // type:func -BgCheck_RaycastDownStaticList = 0x8002C0C0; // type:func -BgCheck_RaycastDownStatic = 0x8002C2FC; // type:func -BgCheck_ComputeWallDisplacement = 0x8002C414; // type:func -BgCheck_SphVsStaticWall = 0x8002C4C4; // type:func -BgCheck_CheckStaticCeiling = 0x8002CD58; // type:func -BgCheck_CheckLineAgainstSSList = 0x8002CF30; // type:func -BgCheck_CheckLineInSubdivision = 0x8002D154; // type:func -BgCheck_SphVsFirstStaticPolyList = 0x8002D2E0; // type:func -BgCheck_SphVsFirstStaticPoly = 0x8002D4B0; // type:func -BgCheck_GetNearestStaticLookup = 0x8002D5E8; // type:func -BgCheck_GetStaticLookup = 0x8002D69C; // type:func -BgCheck_GetStaticLookupIndicesFromPos = 0x8002D768; // type:func -BgCheck_GetSubdivisionMinBounds = 0x8002D848; // type:func -BgCheck_GetSubdivisionMaxBounds = 0x8002D9EC; // type:func -BgCheck_GetPolySubdivisionBounds = 0x8002DBB8; // type:func -BgCheck_PolyIntersectsSubdivision = 0x8002DD68; // type:func -BgCheck_InitializeStaticLookup = 0x8002E4BC; // type:func -BgCheck_IsSpotScene = 0x8002E8BC; // type:func -BgCheck_TryGetCustomMemsize = 0x8002E900; // type:func -BgCheck_SetSubdivisionDimension = 0x8002E998; // type:func -BgCheck_Allocate = 0x8002EA20; // type:func -BgCheck_GetCollisionHeader = 0x8002EE04; // type:func -BgCheck_PosInStaticBoundingBox = 0x8002EE6C; // type:func -BgCheck_RaycastDownImpl = 0x8002EF28; // type:func -BgCheck_CameraRaycastDown1 = 0x8002F0F8; // type:func -BgCheck_EntityRaycastDown1 = 0x8002F154; // type:func -BgCheck_EntityRaycastDown2 = 0x8002F1B0; // type:func -BgCheck_EntityRaycastDown3 = 0x8002F204; // type:func -BgCheck_EntityRaycastDown4 = 0x8002F268; // type:func -BgCheck_EntityRaycastDown5 = 0x8002F2D0; // type:func -BgCheck_EntityRaycastDown6 = 0x8002F328; // type:func -BgCheck_EntityRaycastDown7 = 0x8002F38C; // type:func -BgCheck_AnyRaycastDown1 = 0x8002F3F4; // type:func -BgCheck_AnyRaycastDown2 = 0x8002F4A8; // type:func -BgCheck_CameraRaycastDown2 = 0x8002F560; // type:func -BgCheck_EntityRaycastDownWalls = 0x8002F5C4; // type:func -BgCheck_EntityRaycastDown9 = 0x8002F62C; // type:func -BgCheck_CheckWallImpl = 0x8002F690; // type:func -BgCheck_EntitySphVsWall1 = 0x8002FCCC; // type:func -BgCheck_EntitySphVsWall2 = 0x8002FD30; // type:func -BgCheck_EntitySphVsWall3 = 0x8002FD94; // type:func -BgCheck_EntitySphVsWall4 = 0x8002FDFC; // type:func -BgCheck_CheckCeilingImpl = 0x8002FE68; // type:func -BgCheck_AnyCheckCeiling = 0x8002FF88; // type:func -BgCheck_EntityCheckCeiling = 0x8002FFD4; // type:func -BgCheck_CheckLineImpl = 0x80030024; // type:func -BgCheck_GetBccFlags = 0x80030504; // type:func -BgCheck_CameraLineTest1 = 0x8003054C; // type:func -BgCheck_CameraLineTest2 = 0x800305D8; // type:func -BgCheck_EntityLineTest1 = 0x80030664; // type:func -BgCheck_EntityLineTest2 = 0x800306F0; // type:func -BgCheck_EntityLineTest3 = 0x80030780; // type:func -BgCheck_ProjectileLineTest = 0x8003080C; // type:func -BgCheck_AnyLineTest1 = 0x80030898; // type:func -BgCheck_AnyLineTest2 = 0x800308DC; // type:func -BgCheck_AnyLineTest3 = 0x80030968; // type:func -BgCheck_SphVsFirstPolyImpl = 0x800309F4; // type:func -BgCheck_SphVsFirstPoly = 0x80030AB8; // type:func -BgCheck_SphVsFirstWall = 0x80030AFC; // type:func -SSNodeList_Initialize = 0x80030B44; // type:func -SSNodeList_Alloc = 0x80030B5C; // type:func -SSNodeList_GetNextNode = 0x80030BCC; // type:func -SSNodeList_GetNextNodeIdx = 0x80030C08; // type:func -ScaleRotPos_Initialize = 0x80030C1C; // type:func -ScaleRotPos_SetValue = 0x80030C5C; // type:func -ScaleRotPos_Equals = 0x80030CAC; // type:func -DynaLookup_ResetLists = 0x80030D80; // type:func -DynaLookup_Reset = 0x80030DC0; // type:func -DynaLookup_ResetVtxStartIndex = 0x80030DE0; // type:func -BgActor_Initialize = 0x80030DEC; // type:func -BgActor_SetActor = 0x80030E4C; // type:func -BgActor_IsTransformUnchanged = 0x80030F04; // type:func -DynaPoly_NullPolyList = 0x80030F2C; // type:func -DynaPoly_AllocPolyList = 0x80030F38; // type:func -DynaPoly_NullVtxList = 0x80030F74; // type:func -DynaPoly_AllocVtxList = 0x80030F80; // type:func -DynaPoly_SetBgActorPrevTransform = 0x80030FC8; // type:func -DynaPoly_IsBgIdBgActor = 0x80031014; // type:func -DynaPoly_Init = 0x80031034; // type:func -DynaPoly_Alloc = 0x80031080; // type:func -DynaPoly_SetBgActor = 0x80031154; // type:func -DynaPoly_GetActor = 0x80031214; // type:func -DynaPoly_DisableCollision = 0x80031288; // type:func -DynaPoly_EnableCollision = 0x800312E0; // type:func -DynaPoly_DisableCeilingCollision = 0x80031338; // type:func -DynaPoly_EnableCeilingCollision = 0x80031390; // type:func -DynaPoly_DeleteBgActor = 0x800313E8; // type:func -DynaPoly_InvalidateLookup = 0x80031470; // type:func -DynaPoly_AddBgActorToLookup = 0x80031488; // type:func -DynaPoly_UnsetAllInteractFlags = 0x80031DD4; // type:func -DynaPoly_UpdateContext = 0x80031E6C; // type:func -DynaPoly_UpdateBgActorTransforms = 0x80031FD8; // type:func -BgCheck_RaycastDownDynaList = 0x80032068; // type:func -BgCheck_RaycastDownDyna = 0x80032250; // type:func -BgCheck_SphVsDynaWallInBgActor = 0x800326F8; // type:func -BgCheck_SphVsDynaWall = 0x80032DBC; // type:func -BgCheck_CheckDynaCeilingList = 0x80032FF8; // type:func -BgCheck_CheckDynaCeiling = 0x80033254; // type:func -BgCheck_CheckLineAgainstBgActorSSList = 0x800333B8; // type:func -BgCheck_CheckLineAgainstBgActor = 0x8003353C; // type:func -BgCheck_CheckLineAgainstDyna = 0x80033658; // type:func -BgCheck_SphVsFirstDynaPolyList = 0x80033810; // type:func -BgCheck_SphVsFirstDynaPolyInBgActor = 0x80033928; // type:func -BgCheck_SphVsFirstDynaPoly = 0x80033A68; // type:func -CollisionHeader_SegmentedToVirtual = 0x80033BC0; // type:func -CollisionHeader_GetVirtual = 0x80033CA4; // type:func -func_800418D0 = 0x80033CF8; // type:func -BgCheck_ResetPolyCheckTbl = 0x80033DA0; // type:func -SurfaceType_GetData = 0x80033DD8; // type:func -SurfaceType_GetBgCamIndex = 0x80033E50; // type:func -BgCheck_GetBgCamSettingImpl = 0x80033E74; // type:func -BgCheck_GetBgCamSetting = 0x80033EBC; // type:func -BgCheck_GetBgCamCountImpl = 0x80033F50; // type:func -BgCheck_GetBgCamCount = 0x80033FAC; // type:func -BgCheck_GetBgCamFuncDataImpl = 0x80034040; // type:func -BgCheck_GetBgCamFuncData = 0x800340C8; // type:func -SurfaceType_GetExitIndex = 0x8003415C; // type:func -SurfaceType_GetFloorType = 0x80034184; // type:func -func_80041D70 = 0x800341AC; // type:func -SurfaceType_GetWallType = 0x800341D4; // type:func -SurfaceType_GetWallFlags = 0x800341FC; // type:func -SurfaceType_CheckWallFlag0 = 0x8003422C; // type:func -SurfaceType_CheckWallFlag1 = 0x80034260; // type:func -SurfaceType_CheckWallFlag2 = 0x80034294; // type:func -SurfaceType_GetFloorProperty2 = 0x800342C8; // type:func -SurfaceType_GetFloorProperty = 0x800342F0; // type:func -SurfaceType_IsSoft = 0x80034318; // type:func -SurfaceType_IsHorseBlocked = 0x80034340; // type:func -SurfaceType_GetMaterial = 0x80034368; // type:func -SurfaceType_GetSfxOffset = 0x8003438C; // type:func -SurfaceType_GetFloorEffect = 0x800343D4; // type:func -SurfaceType_GetLightSetting = 0x800343FC; // type:func -SurfaceType_GetEcho = 0x80034424; // type:func -SurfaceType_CanHookshot = 0x8003444C; // type:func -SurfaceType_IsIgnoredByEntities = 0x80034474; // type:func -SurfaceType_IsIgnoredByProjectiles = 0x800344B0; // type:func -SurfaceType_IsFloorConveyor = 0x800344EC; // type:func -SurfaceType_GetConveyorSpeed = 0x80034528; // type:func -SurfaceType_GetConveyorDirection = 0x80034550; // type:func -func_80042108 = 0x80034578; // type:func -WaterBox_GetSurface1 = 0x800345AC; // type:func -WaterBox_GetSurfaceImpl = 0x800346B8; // type:func -WaterBox_GetSurface2 = 0x80034810; // type:func -WaterBox_GetBgCamIndex = 0x800349AC; // type:func -WaterBox_GetBgCamSetting = 0x800349C0; // type:func -WaterBox_GetLightIndex = 0x80034A18; // type:func -func_800425B0 = 0x80034A30; // type:func -func_80042708 = 0x80034B88; // type:func -func_800427B4 = 0x80034C38; // type:func -DynaPolyActor_UpdateCarriedActorPos = 0x80034CF0; // type:func -DynaPolyActor_UpdateCarriedActorRotY = 0x80034E2C; // type:func -func_80043334 = 0x80034EC0; // type:func -DynaPolyActor_TransformCarriedActor = 0x80034F30; // type:func -DynaPolyActor_Init = 0x80035010; // type:func -DynaPolyActor_UnsetAllInteractFlags = 0x80035034; // type:func -DynaPolyActor_SetActorOnTop = 0x80035040; // type:func -DynaPolyActor_SetPlayerOnTop = 0x80035054; // type:func -DynaPoly_SetPlayerOnTop = 0x80035068; // type:func -DynaPolyActor_SetPlayerAbove = 0x80035098; // type:func -DynaPoly_SetPlayerAbove = 0x800350AC; // type:func -func_80043538 = 0x800350DC; // type:func -DynaPolyActor_IsActorOnTop = 0x800350F0; // type:func -DynaPolyActor_IsPlayerOnTop = 0x80035114; // type:func -DynaPolyActor_IsPlayerAbove = 0x80035138; // type:func -func_800435B4 = 0x8003515C; // type:func -func_800435D8 = 0x80035180; // type:func -Camera_InterpolateCurve = 0x800353A0; // type:func -Camera_LERPCeilF = 0x8003544C; // type:func -Camera_LERPFloorF = 0x80035490; // type:func -Camera_LERPCeilS = 0x800354D4; // type:func -Camera_LERPFloorS = 0x80035568; // type:func -Camera_LERPCeilVec3f = 0x800355FC; // type:func -func_80043ABC = 0x80035680; // type:func -func_80043B60 = 0x800356C0; // type:func -Camera_Vec3sToVec3f = 0x800356F0; // type:func -Camera_AddVecGeoToVec3f = 0x80035758; // type:func -Camera_Vec3fTranslateByUnitVector = 0x800357D8; // type:func -Camera_BGCheckInfo = 0x80035844; // type:func -Camera_BGCheck = 0x80035A6C; // type:func -func_80043F94 = 0x80035AC8; // type:func -func_80044340 = 0x80035E80; // type:func -Camera_CheckOOB = 0x80035EDC; // type:func -Camera_GetFloorYNorm = 0x80035F78; // type:func -Camera_GetFloorY = 0x8003605C; // type:func -Camera_GetFloorYLayer = 0x800360B8; // type:func -Camera_GetBgCamSetting = 0x8003627C; // type:func -Camera_GetBgCamFuncData = 0x800362B0; // type:func -Camera_GetBgCamIndex = 0x800362E0; // type:func -Camera_GetBgCamFuncDataUnderPlayer = 0x80036360; // type:func -Camera_GetWaterBoxBgCamIndex = 0x80036410; // type:func -Camera_GetWaterSurface = 0x800364F0; // type:func -Camera_XZAngle = 0x800365B8; // type:func -Camera_GetPitchAdjFromFloorHeightDiffs = 0x80036620; // type:func -Camera_CalcUpFromPitchYawRoll = 0x8003694C; // type:func -Camera_ClampLERPScale = 0x80036B88; // type:func -Camera_CopyDataToRegs = 0x80036BE0; // type:func -Camera_UpdateInterface = 0x80036BF0; // type:func -Camera_BGCheckCorner = 0x80036CFC; // type:func -func_80045508 = 0x80036D64; // type:func -Camera_CalcSlopeYAdj = 0x80036F74; // type:func -Camera_CalcAtDefault = 0x80037008; // type:func -func_800458D4 = 0x80037120; // type:func -func_80045B08 = 0x800372D8; // type:func -Camera_CalcAtForParallel = 0x80037438; // type:func -Camera_CalcAtForLockOn = 0x8003779C; // type:func -Camera_CalcAtForHorse = 0x80037C54; // type:func -Camera_LERPClampDist = 0x80037E10; // type:func -Camera_ClampDist = 0x80037EC8; // type:func -Camera_CalcDefaultPitch = 0x80037FDC; // type:func -Camera_CalcDefaultYaw = 0x8003813C; // type:func -func_80046E20 = 0x80038290; // type:func -Camera_Noop = 0x800387B4; // type:func -Camera_Normal1 = 0x800387C4; // type:func -Camera_Normal2 = 0x8003921C; // type:func -Camera_Normal3 = 0x800399AC; // type:func -Camera_Normal4 = 0x8003A054; // type:func -Camera_Normal0 = 0x8003A074; // type:func -Camera_Parallel1 = 0x8003A094; // type:func -Camera_Parallel2 = 0x8003A920; // type:func -Camera_Parallel3 = 0x8003A940; // type:func -Camera_Parallel4 = 0x8003A9A4; // type:func -Camera_Parallel0 = 0x8003A9C4; // type:func -Camera_Jump1 = 0x8003A9E4; // type:func -Camera_Jump2 = 0x8003B024; // type:func -Camera_Jump3 = 0x8003B910; // type:func -Camera_Jump4 = 0x8003C07C; // type:func -Camera_Jump0 = 0x8003C09C; // type:func -Camera_Battle1 = 0x8003C0BC; // type:func -Camera_Battle2 = 0x8003CDF8; // type:func -Camera_Battle3 = 0x8003CE18; // type:func -Camera_Battle4 = 0x8003CE38; // type:func -Camera_Battle0 = 0x8003D190; // type:func -Camera_KeepOn1 = 0x8003D1B0; // type:func -Camera_KeepOn2 = 0x8003DF00; // type:func -Camera_KeepOn3 = 0x8003DF20; // type:func -Camera_KeepOn4 = 0x8003E918; // type:func -Camera_KeepOn0 = 0x8003F730; // type:func -Camera_Fixed1 = 0x8003F9D0; // type:func -Camera_Fixed2 = 0x8003FCBC; // type:func -Camera_Fixed3 = 0x80040070; // type:func -Camera_Fixed4 = 0x80040270; // type:func -Camera_Fixed0 = 0x800405FC; // type:func -Camera_Subj1 = 0x8004061C; // type:func -Camera_Subj2 = 0x8004063C; // type:func -Camera_Subj3 = 0x8004065C; // type:func -Camera_Subj4 = 0x80040C60; // type:func -Camera_Subj0 = 0x80041294; // type:func -Camera_Data0 = 0x800412B4; // type:func -Camera_Data1 = 0x800412D4; // type:func -Camera_Data2 = 0x800412F4; // type:func -Camera_Data3 = 0x80041314; // type:func -Camera_Data4 = 0x80041334; // type:func -Camera_Unique1 = 0x80041620; // type:func -Camera_Unique2 = 0x80041AA4; // type:func -Camera_Unique3 = 0x80041E5C; // type:func -Camera_Unique0 = 0x8004230C; // type:func -Camera_Unique4 = 0x80042828; // type:func -Camera_Unique5 = 0x80042848; // type:func -Camera_Unique6 = 0x80042868; // type:func -Camera_Unique7 = 0x80042998; // type:func -Camera_Unique8 = 0x80042B9C; // type:func -Camera_Unique9 = 0x80042BBC; // type:func -Camera_Vec3fCopy = 0x80044018; // type:func -Camera_RotateAroundPoint = 0x80044038; // type:func -Camera_Demo1 = 0x80044094; // type:func -Camera_Demo2 = 0x8004426C; // type:func -Camera_Demo3 = 0x8004428C; // type:func -Camera_Demo4 = 0x80044D28; // type:func -Camera_Demo5 = 0x80044D48; // type:func -Camera_Demo6 = 0x80045720; // type:func -Camera_Demo7 = 0x800459C4; // type:func -Camera_Demo8 = 0x800459F8; // type:func -Camera_Demo9 = 0x80045A18; // type:func -Camera_Demo0 = 0x80045E38; // type:func -Camera_Special0 = 0x80045E58; // type:func -Camera_Special1 = 0x80045FA0; // type:func -Camera_Special2 = 0x80045FC0; // type:func -Camera_Special3 = 0x80045FE0; // type:func -Camera_Special4 = 0x80046000; // type:func -Camera_Special5 = 0x800461A4; // type:func -Camera_Special7 = 0x80046548; // type:func -Camera_Special6 = 0x80046894; // type:func -Camera_Special8 = 0x80046D04; // type:func -Camera_Special9 = 0x80046D24; // type:func -Camera_Create = 0x8004740C; // type:func -Camera_Destroy = 0x8004745C; // type:func -Camera_Init = 0x80047484; // type:func -func_80057FC4 = 0x800476A4; // type:func -Camera_Stub80058140 = 0x800477F8; // type:func -Camera_InitDataUsingPlayer = 0x80047804; // type:func -Camera_ChangeStatus = 0x80047A00; // type:func -Camera_UpdateWater = 0x80047A1C; // type:func -Camera_UpdateHotRoom = 0x80047E38; // type:func -Camera_UpdateDistortion = 0x80047E78; // type:func -Camera_Update = 0x800481D8; // type:func -Camera_Finish = 0x80048A08; // type:func -Camera_SetNewModeStateFlags = 0x80048B74; // type:func -Camera_RequestModeImpl = 0x80048B98; // type:func -Camera_RequestMode = 0x80048EFC; // type:func -Camera_CheckValidMode = 0x80048F28; // type:func -Camera_RequestSettingImpl = 0x80048F94; // type:func -Camera_RequestSetting = 0x80049188; // type:func -Camera_RequestBgCam = 0x800491B4; // type:func -Camera_GetInputDir = 0x80049288; // type:func -Camera_GetInputDirPitch = 0x800492AC; // type:func -Camera_GetInputDirYaw = 0x800492D4; // type:func -Camera_GetCamDir = 0x800492FC; // type:func -Camera_GetCamDirPitch = 0x80049320; // type:func -Camera_GetCamDirYaw = 0x80049348; // type:func -Camera_RequestQuake = 0x80049370; // type:func -Camera_SetViewParam = 0x800493E4; // type:func -Camera_UnsetViewFlag = 0x80049578; // type:func -Camera_OverwriteStateFlags = 0x800495A0; // type:func -Camera_ResetAnim = 0x800495BC; // type:func -Camera_SetCSParams = 0x800495CC; // type:func -Camera_SetStateFlag = 0x80049660; // type:func -Camera_UnsetStateFlag = 0x80049684; // type:func -Camera_ChangeDoorCam = 0x800496AC; // type:func -Camera_Copy = 0x800497AC; // type:func -Camera_IsDebugCamEnabled = 0x800498F4; // type:func -Camera_GetQuakeOffset = 0x80049900; // type:func -Camera_SetCameraData = 0x80049924; // type:func -func_8005B198 = 0x80049970; // type:func -Camera_SetFinishedFlag = 0x80049980; // type:func -DamageTable_Get = 0x800499D0; // type:func -DamageTable_Clear = 0x800499FC; // type:func -Collider_InitBase = 0x80049A30; // type:func -Collider_DestroyBase = 0x80049A78; // type:func -Collider_SetBaseToActor = 0x80049A8C; // type:func -Collider_SetBaseType1 = 0x80049ACC; // type:func -Collider_SetBase = 0x80049B10; // type:func -Collider_ResetATBase = 0x80049B54; // type:func -Collider_ResetACBase = 0x80049B70; // type:func -Collider_ResetOCBase = 0x80049B8C; // type:func -Collider_InitElementDamageInfoAT = 0x80049BB4; // type:func -Collider_DestroyElementDamageInfoAT = 0x80049BDC; // type:func -Collider_SetElementDamageInfoAT = 0x80049BF0; // type:func -Collider_ResetATElement_Unk = 0x80049C18; // type:func -Collider_InitElementDamageInfoAC = 0x80049C28; // type:func -Collider_DestroyElementDamageInfoAC = 0x80049C58; // type:func -Collider_SetElementDamageInfoAC = 0x80049C6C; // type:func -Collider_InitElement = 0x80049C94; // type:func -Collider_DestroyElement = 0x80049D14; // type:func -Collider_SetElement = 0x80049D54; // type:func -Collider_ResetATElement = 0x80049DCC; // type:func -Collider_ResetACElement = 0x80049E04; // type:func -Collider_ResetOCElement = 0x80049E3C; // type:func -Collider_InitJntSphElementDim = 0x80049E54; // type:func -Collider_DestroyJntSphElementDim = 0x80049E9C; // type:func -Collider_SetJntSphElementDim = 0x80049EB0; // type:func -Collider_InitJntSphElement = 0x80049F08; // type:func -Collider_DestroyJntSphElement = 0x80049F48; // type:func -Collider_SetJntSphElement = 0x80049F88; // type:func -Collider_ResetJntSphElementAT = 0x80049FD8; // type:func -Collider_ResetJntSphElementAC = 0x80049FFC; // type:func -Collider_ResetJntSphElementOC = 0x8004A020; // type:func -Collider_InitJntSph = 0x8004A044; // type:func -Collider_FreeJntSph = 0x8004A070; // type:func -Collider_DestroyJntSph = 0x8004A110; // type:func -Collider_SetJntSphToActor = 0x8004A1A0; // type:func -Collider_SetJntSphAllocType1 = 0x8004A27C; // type:func -Collider_SetJntSphAlloc = 0x8004A358; // type:func -Collider_SetJntSph = 0x8004A434; // type:func -Collider_ResetJntSphAT = 0x8004A4E8; // type:func -Collider_ResetJntSphAC = 0x8004A574; // type:func -Collider_ResetJntSphOC = 0x8004A600; // type:func -Collider_InitCylinderDim = 0x8004A68C; // type:func -Collider_DestroyCylinderDim = 0x8004A6E8; // type:func -Collider_SetCylinderDim = 0x8004A6FC; // type:func -Collider_InitCylinder = 0x8004A73C; // type:func -Collider_DestroyCylinder = 0x8004A78C; // type:func -Collider_SetCylinderToActor = 0x8004A7DC; // type:func -Collider_SetCylinderType1 = 0x8004A844; // type:func -Collider_SetCylinder = 0x8004A8AC; // type:func -Collider_ResetCylinderAT = 0x8004A914; // type:func -Collider_ResetCylinderAC = 0x8004A954; // type:func -Collider_ResetCylinderOC = 0x8004A994; // type:func -Collider_InitTrisElementDim = 0x8004A9D4; // type:func -Collider_DestroyTrisElementDim = 0x8004AA20; // type:func -Collider_SetTrisElementDim = 0x8004AA34; // type:func -Collider_InitTrisElement = 0x8004AAE8; // type:func -Collider_DestroyTrisElement = 0x8004AB28; // type:func -Collider_SetTrisElement = 0x8004AB68; // type:func -Collider_ResetTrisElementAT = 0x8004ABB8; // type:func -Collider_ResetTrisElementAC = 0x8004ABDC; // type:func -Collider_ResetTrisElementOC = 0x8004AC00; // type:func -Collider_InitTris = 0x8004AC24; // type:func -Collider_FreeTris = 0x8004AC50; // type:func -Collider_DestroyTris = 0x8004AD08; // type:func -Collider_SetTrisAllocType1 = 0x8004ADAC; // type:func -Collider_SetTrisAlloc = 0x8004AEAC; // type:func -Collider_SetTris = 0x8004AFAC; // type:func -Collider_ResetTrisAT = 0x8004B078; // type:func -Collider_ResetTrisAC = 0x8004B118; // type:func -Collider_ResetTrisOC = 0x8004B1B8; // type:func -Collider_InitQuadDim = 0x8004B258; // type:func -Collider_DestroyQuadDim = 0x8004B2A4; // type:func -Collider_ResetQuadACDist = 0x8004B2B8; // type:func -Collider_SetQuadMidpoints = 0x8004B2D4; // type:func -Collider_SetQuadDim = 0x8004B390; // type:func -Collider_InitQuad = 0x8004B418; // type:func -Collider_DestroyQuad = 0x8004B468; // type:func -Collider_SetQuadType1 = 0x8004B4B8; // type:func -Collider_SetQuad = 0x8004B520; // type:func -Collider_ResetQuadAT = 0x8004B588; // type:func -Collider_ResetQuadAC = 0x8004B5D8; // type:func -Collider_ResetQuadOC = 0x8004B618; // type:func -Collider_QuadSetNearestAC = 0x8004B658; // type:func -Collider_InitLine = 0x8004B708; // type:func -Collider_DestroyLine = 0x8004B768; // type:func -Collider_SetLinePoints = 0x8004B77C; // type:func -Collider_SetLine = 0x8004B7C0; // type:func -Collider_ResetLineOC = 0x8004B7EC; // type:func -CollisionCheck_InitContext = 0x8004B808; // type:func -CollisionCheck_DestroyContext = 0x8004B828; // type:func -CollisionCheck_ClearContext = 0x8004B838; // type:func -CollisionCheck_EnableSAC = 0x8004B8E0; // type:func -CollisionCheck_DisableSAC = 0x8004B8F8; // type:func -CollisionCheck_SetAT = 0x8004B910; // type:func -CollisionCheck_SetAT_SAC = 0x8004B9F0; // type:func -CollisionCheck_SetAC = 0x8004BB00; // type:func -CollisionCheck_SetAC_SAC = 0x8004BBE0; // type:func -CollisionCheck_SetOC = 0x8004BCF0; // type:func -CollisionCheck_SetOC_SAC = 0x8004BDD0; // type:func -CollisionCheck_SetOCLine = 0x8004BEE0; // type:func -CollisionCheck_IsElementNotAT = 0x8004BF6C; // type:func -CollisionCheck_IsElementNotAC = 0x8004BF90; // type:func -CollisionCheck_NoSharedFlags = 0x8004BFB4; // type:func -CollisionCheck_NoBlood = 0x8004BFDC; // type:func -CollisionCheck_BlueBlood = 0x8004BFF0; // type:func -CollisionCheck_GreenBlood = 0x8004C15C; // type:func -CollisionCheck_WaterBurst = 0x8004C2C8; // type:func -CollisionCheck_RedBlood = 0x8004C304; // type:func -CollisionCheck_RedBloodUnused = 0x8004C328; // type:func -CollisionCheck_HitSolid = 0x8004C34C; // type:func -CollisionCheck_SwordHitAudio = 0x8004C55C; // type:func -CollisionCheck_HitEffects = 0x8004C668; // type:func -CollisionCheck_SetBounce = 0x8004C868; // type:func -CollisionCheck_SetATvsAC = 0x8004C888; // type:func -CollisionCheck_ATJntSphVsACJntSph = 0x8004CA30; // type:func -CollisionCheck_ATJntSphVsACCyl = 0x8004CCDC; // type:func -CollisionCheck_ATCylVsACJntSph = 0x8004CF50; // type:func -CollisionCheck_ATJntSphVsACTris = 0x8004D1F0; // type:func -CollisionCheck_ATTrisVsACJntSph = 0x8004D410; // type:func -CollisionCheck_ATJntSphVsACQuad = 0x8004D624; // type:func -CollisionCheck_ATQuadVsACJntSph = 0x8004D844; // type:func -CollisionCheck_ATCylVsACCyl = 0x8004DAA8; // type:func -CollisionCheck_ATCylVsACTris = 0x8004DC7C; // type:func -CollisionCheck_ATTrisVsACCyl = 0x8004DE40; // type:func -CollisionCheck_ATCylVsACQuad = 0x8004E000; // type:func -CollisionCheck_ATQuadVsACCyl = 0x8004E274; // type:func -CollisionCheck_ATTrisVsACTris = 0x8004E520; // type:func -CollisionCheck_ATTrisVsACQuad = 0x8004E774; // type:func -CollisionCheck_ATQuadVsACTris = 0x8004EA04; // type:func -CollisionCheck_ATQuadVsACQuad = 0x8004EC9C; // type:func -CollisionCheck_SetJntSphHitFX = 0x8004EF2C; // type:func -CollisionCheck_SetCylHitFX = 0x8004F00C; // type:func -CollisionCheck_SetTrisHitFX = 0x8004F0A4; // type:func -CollisionCheck_SetQuadHitFX = 0x8004F18C; // type:func -CollisionCheck_SetHitEffects = 0x8004F224; // type:func -CollisionCheck_AC = 0x8004F2F8; // type:func -CollisionCheck_AT = 0x8004F420; // type:func -CollisionCheck_GetMassType = 0x8004F4F0; // type:func -CollisionCheck_SetOCvsOC = 0x8004F52C; // type:func -CollisionCheck_OC_JntSphVsJntSph = 0x8004F85C; // type:func -CollisionCheck_OC_JntSphVsCyl = 0x8004FA2C; // type:func -CollisionCheck_OC_CylVsJntSph = 0x8004FB8C; // type:func -CollisionCheck_OC_CylVsCyl = 0x8004FBB8; // type:func -CollisionCheck_SkipOC = 0x8004FC88; // type:func -CollisionCheck_Incompatible = 0x8004FCAC; // type:func -CollisionCheck_OC = 0x8004FD2C; // type:func -CollisionCheck_InitInfo = 0x8004FEBC; // type:func -CollisionCheck_ResetDamage = 0x8004FF04; // type:func -CollisionCheck_SetInfoNoDamageTable = 0x8004FF30; // type:func -CollisionCheck_SetInfo = 0x8004FF58; // type:func -CollisionCheck_SetInfo2 = 0x8004FF84; // type:func -CollisionCheck_SetInfoGetDamageTable = 0x8004FFB8; // type:func -CollisionCheck_ApplyDamage = 0x8004FFF0; // type:func -CollisionCheck_ApplyDamageJntSph = 0x800501B0; // type:func -CollisionCheck_ApplyDamageCyl = 0x80050258; // type:func -CollisionCheck_ApplyDamageTris = 0x80050278; // type:func -CollisionCheck_ApplyDamageQuad = 0x8005030C; // type:func -CollisionCheck_Damage = 0x8005032C; // type:func -CollisionCheck_LineOC_JntSph = 0x800503EC; // type:func -CollisionCheck_LineOC_Cyl = 0x80050504; // type:func -CollisionCheck_LineOC = 0x8005057C; // type:func -CollisionCheck_LineOCCheckAll = 0x800506C4; // type:func -CollisionCheck_LineOCCheck = 0x800506E8; // type:func -Collider_UpdateCylinder = 0x80050714; // type:func -Collider_SetCylinderPosition = 0x80050758; // type:func -Collider_SetQuadVertices = 0x80050778; // type:func -Collider_SetTrisVertices = 0x800507E8; // type:func -Collider_SetTrisDim = 0x800508A8; // type:func -Collider_UpdateSpheres = 0x800508F8; // type:func -CollisionCheck_SpawnRedBlood = 0x80050A7C; // type:func -CollisionCheck_SpawnWaterDroplets = 0x80050BDC; // type:func -CollisionCheck_SpawnShieldParticles = 0x80050D38; // type:func -CollisionCheck_SpawnShieldParticlesMetal = 0x80050DCC; // type:func -CollisionCheck_SpawnShieldParticlesMetalSfx = 0x80050E18; // type:func -CollisionCheck_SpawnShieldParticlesMetal2 = 0x80050E64; // type:func -CollisionCheck_SpawnShieldParticlesWood = 0x80050E84; // type:func -CollisionCheck_CylSideVsLineSeg = 0x80050F44; // type:func -CollisionCheck_GetSwordDamage = 0x80051648; // type:func -SaveContext_Init = 0x800516B0; // type:func -Regs_Init = 0x80051740; // type:func -DebugCamera_ScreenText = 0x800517D0; // type:func -DebugCamera_ScreenTextColored = 0x800517E4; // type:func -DebugCamera_DrawScreenText = 0x800518A0; // type:func -Debug_DrawText = 0x80051984; // type:func -DebugDisplay_Init = 0x80051A50; // type:func -DebugDisplay_AddObject = 0x80051A60; // type:func -DebugDisplay_DrawObjects = 0x80051B3C; // type:func -DebugDisplay_DrawSpriteI8 = 0x80051BCC; // type:func -DebugDisplay_DrawPolygon = 0x80051DB0; // type:func -Cutscene_InitContext = 0x80051F10; // type:func -Cutscene_StartManual = 0x80051F28; // type:func -Cutscene_StopManual = 0x80051F40; // type:func -Cutscene_UpdateManual = 0x80051F64; // type:func -Cutscene_UpdateScripted = 0x80051FB0; // type:func -CutsceneHandler_DoNothing = 0x80052064; // type:func -Cutscene_StepTimer = 0x80052074; // type:func -CutsceneHandler_StartManual = 0x800520AC; // type:func -CutsceneHandler_StartScript = 0x8005210C; // type:func -CutsceneCmd_Misc = 0x80052178; // type:func -CutsceneCmd_SetLightSetting = 0x80052914; // type:func -CutsceneCmd_StartSequence = 0x80052954; // type:func -CutsceneCmd_StopSequence = 0x80052990; // type:func -CutsceneCmd_FadeOutSequence = 0x800529CC; // type:func -CutsceneCmd_RumbleController = 0x80052A4C; // type:func -CutsceneCmd_SetTime = 0x80052A90; // type:func -CutsceneCmd_Destination = 0x80052B34; // type:func -CutsceneCmd_Transition = 0x80054854; // type:func -CutsceneCmd_UpdateCamEyeSpline = 0x80055234; // type:func -CutsceneCmd_UpdateCamAtSpline = 0x80055388; // type:func -CutsceneCmd_SetCamEye = 0x800554E4; // type:func -CutsceneCmd_SetCamAt = 0x800556C0; // type:func -CutsceneCmd_Text = 0x80055868; // type:func -Cutscene_ProcessScript = 0x80055B3C; // type:func -CutsceneHandler_RunScript = 0x8005650C; // type:func -CutsceneHandler_StopManual = 0x80056550; // type:func -CutsceneHandler_StopScript = 0x80056590; // type:func -Cutscene_SetupScripted = 0x80056698; // type:func -func_80069048 = 0x80056818; // type:func -func_8006907C = 0x80056850; // type:func -Cutscene_HandleEntranceTriggers = 0x80056874; // type:func -Cutscene_HandleConditionalTriggers = 0x80056994; // type:func -Cutscene_SetScript = 0x80056B9C; // type:func -MemCpy = 0x80056BF0; // type:func -MemSet = 0x80056C20; // type:func -GetItem_Draw = 0x80056C80; // type:func -GetItem_DrawMaskOrBombchu = 0x80056CC4; // type:func -GetItem_DrawSoldOut = 0x80056D60; // type:func -GetItem_DrawBlueFire = 0x80056E08; // type:func -GetItem_DrawPoes = 0x80056FAC; // type:func -GetItem_DrawFairy = 0x800571A8; // type:func -GetItem_DrawMirrorShield = 0x80057384; // type:func -GetItem_DrawSkullToken = 0x800574FC; // type:func -GetItem_DrawEggOrMedallion = 0x80057664; // type:func -GetItem_DrawCompass = 0x8005771C; // type:func -GetItem_DrawPotion = 0x80057824; // type:func -GetItem_DrawGoronSword = 0x800579F8; // type:func -GetItem_DrawDekuNuts = 0x80057B00; // type:func -GetItem_DrawRecoveryHeart = 0x80057C14; // type:func -GetItem_DrawFish = 0x80057D2C; // type:func -GetItem_DrawOpa0 = 0x80057E34; // type:func -GetItem_DrawOpa0Xlu1 = 0x80057ED0; // type:func -GetItem_DrawXlu01 = 0x80057FD4; // type:func -GetItem_DrawOpa10Xlu2 = 0x8005808C; // type:func -GetItem_DrawMagicArrow = 0x800581A8; // type:func -GetItem_DrawMagicSpell = 0x800582C4; // type:func -GetItem_DrawOpa1023 = 0x80058414; // type:func -GetItem_DrawOpa10Xlu32 = 0x800584FC; // type:func -GetItem_DrawSmallRupee = 0x80058630; // type:func -GetItem_DrawScale = 0x80058780; // type:func -GetItem_DrawBulletBag = 0x800588E0; // type:func -GetItem_DrawWallet = 0x80058A2C; // type:func -SfxSource_InitAll = 0x80058B80; // type:func -SfxSource_UpdateAll = 0x80058BB0; // type:func -SfxSource_PlaySfxAtFixedWorldPos = 0x80058C58; // type:func -QuestHint_CheckCondition = 0x80058D40; // type:func -QuestHint_CheckConditionChain = 0x80058FBC; // type:func -QuestHint_CheckRandomCondition = 0x80059050; // type:func -QuestHint_GetTextIdFromScript = 0x80059230; // type:func -QuestHint_GetSariaTextId = 0x80059374; // type:func -QuestHint_GetNaviTextId = 0x800593DC; // type:func -MaskReaction_GetTextId = 0x80059420; // type:func -CutsceneFlags_UnsetAll = 0x80059470; // type:func -CutsceneFlags_Set = 0x800594A0; // type:func -CutsceneFlags_Unset = 0x8005950C; // type:func -CutsceneFlags_Get = 0x8005957C; // type:func -Curve_CubicHermiteSpline = 0x800595F0; // type:func -Curve_Interpolate = 0x80059688; // type:func -SkelCurve_Clear = 0x80059830; // type:func -SkelCurve_Init = 0x80059860; // type:func -SkelCurve_Destroy = 0x80059910; // type:func -SkelCurve_SetAnim = 0x80059940; // type:func -SkelCurve_Update = 0x80059978; // type:func -SkelCurve_DrawLimb = 0x80059C68; // type:func -SkelCurve_Draw = 0x80059FF4; // type:func -func_8006CFC0 = 0x8005A040; // type:func -func_8006D074 = 0x8005A0F4; // type:func -func_8006D0AC = 0x8005A130; // type:func -func_8006D0EC = 0x8005A170; // type:func -func_8006D684 = 0x8005A608; // type:func -func_8006DC68 = 0x8005AB7C; // type:func -func_8006DD9C = 0x8005AC8C; // type:func -Jpeg_ScheduleDecoderTask = 0x8005AD20; // type:func -Jpeg_CopyToZbuffer = 0x8005AE5C; // type:func -Jpeg_GetUnalignedU16 = 0x8005AF94; // type:func -Jpeg_ParseMarkers = 0x8005AFE0; // type:func -Jpeg_Decode = 0x8005B1AC; // type:func -KaleidoSetup_Update = 0x8005B4E0; // type:func -KaleidoSetup_Init = 0x8005B74C; // type:func -KaleidoSetup_Destroy = 0x8005B8A0; // type:func -Font_LoadCharWide = 0x8005B8B0; // type:func -Font_LoadChar = 0x8005B904; // type:func -Font_LoadMessageBoxIcon = 0x8005B954; // type:func -Font_LoadOrderedFont = 0x8005B998; // type:func -Environment_ZBufValToFixedPoint = 0x8005BAC0; // type:func -Environment_GetPixelDepth = 0x8005BAF8; // type:func -Environment_GraphCallback = 0x8005BB24; // type:func -Environment_Init = 0x8005BB68; // type:func -Environment_SmoothStepToU8 = 0x8005C038; // type:func -Environment_SmoothStepToS8 = 0x8005C170; // type:func -Environment_LerpWeight = 0x8005C2B0; // type:func -Environment_LerpWeightAccelDecel = 0x8005C334; // type:func -Environment_UpdateStorm = 0x8005C4F4; // type:func -Environment_UpdateSkybox = 0x8005C5E8; // type:func -Environment_EnableUnderwaterLights = 0x8005CED4; // type:func -Environment_DisableUnderwaterLights = 0x8005CF4C; // type:func -Environment_Update = 0x8005CFC4; // type:func -Environment_DrawSunAndMoon = 0x8005EE20; // type:func -Environment_DrawSunLensFlare = 0x8005F67C; // type:func -Environment_DrawLensFlare = 0x8005F750; // type:func -Environment_RandCentered = 0x800603A8; // type:func -Environment_DrawRain = 0x800603D0; // type:func -Environment_ChangeLightSetting = 0x80060978; // type:func -Environment_DrawSkyboxFilters = 0x800609FC; // type:func -Environment_DrawLightningFlash = 0x80060C1C; // type:func -Environment_UpdateLightningStrike = 0x80060CB4; // type:func -Environment_AddLightningBolts = 0x80060FBC; // type:func -Environment_DrawLightning = 0x80061024; // type:func -Environment_PlaySceneSequence = 0x80061468; // type:func -Environment_PlayTimeBasedSequence = 0x80061658; // type:func -Environment_DrawCustomLensFlare = 0x80061970; // type:func -Environment_InitGameOverLights = 0x80061A1C; // type:func -Environment_FadeInGameOverLights = 0x80061C04; // type:func -Environment_FadeOutGameOverLights = 0x80061EB8; // type:func -Environment_UpdateRain = 0x800621D4; // type:func -Environment_FillScreen = 0x8006223C; // type:func -Environment_DrawSandstorm = 0x80062434; // type:func -Environment_AdjustLights = 0x80062E80; // type:func -Environment_GetBgsDayCount = 0x800630AC; // type:func -Environment_ClearBgsDayCount = 0x800630BC; // type:func -Environment_GetTotalDays = 0x800630CC; // type:func -Environment_ForcePlaySequence = 0x800630DC; // type:func -Environment_IsForcedSequenceDisabled = 0x800630F4; // type:func -Environment_PlayStormNatureAmbience = 0x8006311C; // type:func -Environment_StopStormNatureAmbience = 0x8006317C; // type:func -Environment_WarpSongLeave = 0x800631DC; // type:func -Lib_MemSet = 0x800632D0; // type:func -Math_CosS = 0x80063324; // type:func -Math_SinS = 0x80063364; // type:func -Math_ScaledStepToS = 0x800633A4; // type:func -Math_StepToS = 0x80063474; // type:func -Math_StepToF = 0x800634FC; // type:func -Math_StepUntilAngleS = 0x80063590; // type:func -Math_StepUntilS = 0x800635F8; // type:func -Math_StepToAngleS = 0x80063658; // type:func -Math_StepUntilF = 0x8006371C; // type:func -Math_AsymStepToF = 0x8006376C; // type:func -Lib_GetControlStickData = 0x80063814; // type:func -Rand_S16Offset = 0x80063890; // type:func -Rand_S16OffsetStride = 0x800638E4; // type:func -Math_Vec3f_Copy = 0x8006394C; // type:func -Math_Vec3s_ToVec3f = 0x8006396C; // type:func -Math_Vec3f_Sum = 0x800639B0; // type:func -Math_Vec3f_Diff = 0x800639E8; // type:func -Math_Vec3s_DiffToVec3f = 0x80063A20; // type:func -Math_Vec3f_Scale = 0x80063A7C; // type:func -Math_Vec3f_DistXYZ = 0x80063AB8; // type:func -Math_Vec3f_DistXYZAndStoreDiff = 0x80063AFC; // type:func -Math_Vec3f_DistXZ = 0x80063B58; // type:func -Math_Vec3f_DiffY = 0x80063B8C; // type:func -Math_Vec3f_Yaw = 0x80063BA0; // type:func -Math_Vec3f_Pitch = 0x80063BD4; // type:func -Actor_ProcessInitChain = 0x80063C1C; // type:func -IChain_Apply_u8 = 0x80063C94; // type:func -IChain_Apply_s8 = 0x80063CB0; // type:func -IChain_Apply_u16 = 0x80063CCC; // type:func -IChain_Apply_s16 = 0x80063CE8; // type:func -IChain_Apply_u32 = 0x80063D04; // type:func -IChain_Apply_s32 = 0x80063D20; // type:func -IChain_Apply_f32 = 0x80063D3C; // type:func -IChain_Apply_f32div1000 = 0x80063D60; // type:func -IChain_Apply_Vec3f = 0x80063D90; // type:func -IChain_Apply_Vec3fdiv1000 = 0x80063DBC; // type:func -IChain_Apply_Vec3s = 0x80063DF4; // type:func -Math_SmoothStepToF = 0x80063E18; // type:func -Math_ApproachF = 0x80063F20; // type:func -Math_ApproachZeroF = 0x80063F90; // type:func -Math_SmoothStepToDegF = 0x80063FE4; // type:func -Math_SmoothStepToS = 0x800641A8; // type:func -Math_ApproachS = 0x800642C4; // type:func -Color_RGBA8_Copy = 0x80064368; // type:func -Sfx_PlaySfxCentered = 0x80064390; // type:func -Sfx_PlaySfxCentered2 = 0x800643D8; // type:func -Sfx_PlaySfxAtPos = 0x80064420; // type:func -Health_InitMeter = 0x80064470; // type:func -Health_UpdateMeter = 0x8006454C; // type:func -func_80078E18 = 0x80064930; // type:func -func_80078E34 = 0x80064950; // type:func -func_80078E84 = 0x800649A0; // type:func -Health_DrawMeter = 0x80064A38; // type:func -Health_UpdateBeatingHeart = 0x800656B0; // type:func -Health_IsCritical = 0x8006579C; // type:func -Lights_PointSetInfo = 0x80065810; // type:func -Lights_PointNoGlowSetInfo = 0x8006586C; // type:func -Lights_PointGlowSetInfo = 0x800658D0; // type:func -Lights_PointSetColorAndRadius = 0x80065938; // type:func -Lights_DirectionalSetInfo = 0x8006596C; // type:func -Lights_Reset = 0x800659C4; // type:func -Lights_Draw = 0x80065A00; // type:func -Lights_FindSlot = 0x80065B44; // type:func -Lights_BindPoint = 0x80065B74; // type:func -Lights_BindDirectional = 0x80065ED0; // type:func -Lights_BindAll = 0x80065F38; // type:func -Lights_FindBufSlot = 0x80065FD4; // type:func -Lights_FreeNode = 0x80066060; // type:func -LightContext_Init = 0x800660D8; // type:func -LightContext_SetAmbientColor = 0x80066144; // type:func -LightContext_SetFog = 0x80066170; // type:func -LightContext_NewLights = 0x800661AC; // type:func -LightContext_InitList = 0x800661E4; // type:func -LightContext_DestroyList = 0x800661F4; // type:func -LightContext_InsertLight = 0x80066250; // type:func -LightContext_RemoveLight = 0x800662B0; // type:func -Lights_NewAndDraw = 0x80066314; // type:func -Lights_New = 0x8006645C; // type:func -Lights_GlowCheck = 0x800664A4; // type:func -Lights_DrawGlow = 0x800666A8; // type:func -ZeldaArena_Malloc = 0x800668B0; // type:func -ZeldaArena_MallocR = 0x800668D8; // type:func -ZeldaArena_Realloc = 0x80066900; // type:func -ZeldaArena_Free = 0x80066930; // type:func -ZeldaArena_Calloc = 0x80066958; // type:func -ZeldaArena_GetSizes = 0x800669B0; // type:func -ZeldaArena_Check = 0x800669E8; // type:func -ZeldaArena_Init = 0x80066A0C; // type:func -ZeldaArena_Cleanup = 0x80066A3C; // type:func -ZeldaArena_IsInitialized = 0x80066A60; // type:func -MapMark_Init = 0x80066A90; // type:func -MapMark_ClearPointers = 0x80066B3C; // type:func -MapMark_DrawForDungeon = 0x80066B58; // type:func -MapMark_Draw = 0x80067048; // type:func -PreNmiBuff_Init = 0x80067090; // type:func -PreNmiBuff_SetReset = 0x80067108; // type:func -PreNmiBuff_IsResetting = 0x8006713C; // type:func -Sched_FlushTaskQueue = 0x80067150; // type:func -OLib_Vec3fDist = 0x800671D0; // type:func -OLib_Vec3fDistOutDiff = 0x80067214; // type:func -OLib_Vec3fDistXZ = 0x80067270; // type:func -OLib_ClampMinDist = 0x800672A4; // type:func -OLib_ClampMaxDist = 0x800672F4; // type:func -OLib_Vec3fDistNormalize = 0x80067344; // type:func -OLib_VecSphToVec3f = 0x800673F4; // type:func -OLib_VecGeoToVec3f = 0x800674A0; // type:func -OLib_Vec3fToVecSph = 0x800674E4; // type:func -OLib_Vec3fToVecGeo = 0x80067638; // type:func -OLib_Vec3fDiffToVecSph = 0x80067680; // type:func -OLib_Vec3fDiffToVecGeo = 0x800676D4; // type:func -OLib_Vec3fDiffRad = 0x80067728; // type:func -OLib_Vec3fDiffDegF = 0x800677B8; // type:func -OLib_Vec3fDiffBinAng = 0x80067820; // type:func -OnePointCutscene_AddVecGeoToVec3f = 0x800678C0; // type:func -OnePointCutscene_Vec3fYaw = 0x80067940; // type:func -OnePointCutscene_Vec3sToVec3f = 0x800679A8; // type:func -OnePointCutscene_BgCheckLineTest = 0x800679EC; // type:func -OnePointCutscene_RaycastDown = 0x80067A3C; // type:func -OnePointCutscene_SetCsCamPoints = 0x80067A64; // type:func -OnePointCutscene_SetInfo = 0x80067A98; // type:func -OnePointCutscene_SetAsChild = 0x8006B1D4; // type:func -OnePointCutscene_RemoveCamera = 0x8006B21C; // type:func -OnePointCutscene_Init = 0x8006B2F0; // type:func -OnePointCutscene_EndCutscene = 0x8006B5A8; // type:func -OnePointCutscene_Attention = 0x8006B604; // type:func -OnePointCutscene_AttentionSetSfx = 0x8006B770; // type:func -OnePointCutscene_EnableAttention = 0x8006B7C4; // type:func -OnePointCutscene_DisableAttention = 0x8006B7D4; // type:func -OnePointCutscene_CheckForCategory = 0x8006B7E8; // type:func -OnePointCutscene_Noop = 0x8006B848; // type:func -Map_SavePlayerInitialInfo = 0x8006B860; // type:func -Map_SetPaletteData = 0x8006B8C0; // type:func -Map_SetFloorPalettesData = 0x8006B93C; // type:func -Map_InitData = 0x8006BAF4; // type:func -Map_InitRoomData = 0x8006BDB0; // type:func -Map_Destroy = 0x8006BE8C; // type:func -Map_Init = 0x8006BEB4; // type:func -Minimap_DrawCompassIcons = 0x8006C13C; // type:func -Minimap_Draw = 0x8006C590; // type:func -Map_GetFloorTextIndexOffset = 0x8006D0AC; // type:func -Map_Update = 0x8006D0D4; // type:func -Interface_ChangeHudVisibilityMode = 0x8006D400; // type:func -Interface_RaiseButtonAlphas = 0x8006D434; // type:func -Interface_DimButtonAlphas = 0x8006D56C; // type:func -Interface_UpdateHudAlphas = 0x8006D640; // type:func -func_80083108 = 0x8006DE60; // type:func -Interface_SetSceneRestrictions = 0x8006ED7C; // type:func -Gfx_TextureIA8 = 0x8006EEC4; // type:func -Gfx_TextureI8 = 0x8006F0E8; // type:func -Inventory_SwapAgeEquipment = 0x8006F30C; // type:func -Interface_InitHorsebackArchery = 0x8006F590; // type:func -func_800849EC = 0x8006F5D8; // type:func -Interface_LoadItemIcon1 = 0x8006F658; // type:func -Interface_LoadItemIcon2 = 0x8006F708; // type:func -func_80084BF4 = 0x8006F7B8; // type:func -Item_Give = 0x8006F8D4; // type:func -Item_CheckObtainability = 0x80070F50; // type:func -Inventory_DeleteItem = 0x80071490; // type:func -Inventory_ReplaceItem = 0x80071510; // type:func -Inventory_HasEmptyBottle = 0x800715C4; // type:func -Inventory_HasSpecificBottle = 0x80071634; // type:func -Inventory_UpdateBottleItem = 0x800716AC; // type:func -Inventory_ConsumeFairy = 0x80071744; // type:func -func_80086D5C = 0x8007181C; // type:func -Interface_LoadActionLabel = 0x80071854; // type:func -Interface_SetDoAction = 0x800719B8; // type:func -Interface_SetNaviCall = 0x80071A40; // type:func -Interface_LoadActionLabelB = 0x80071B44; // type:func -Health_ChangeBy = 0x80071C1C; // type:func -Health_GiveHearts = 0x80071D00; // type:func -Rupees_ChangeBy = 0x80071D2C; // type:func -Inventory_ChangeAmmo = 0x80071D54; // type:func -Magic_Fill = 0x80072060; // type:func -Magic_Reset = 0x800720A8; // type:func -Magic_RequestChange = 0x800720E8; // type:func -Magic_Update = 0x800723A0; // type:func -Magic_DrawMeter = 0x80072C4C; // type:func -Interface_SetSubTimer = 0x80073438; // type:func -Interface_SetSubTimerToFinalSecond = 0x80073488; // type:func -Interface_SetTimer = 0x800734CC; // type:func -Interface_DrawActionLabel = 0x8007351C; // type:func -Interface_DrawItemButtons = 0x80073604; // type:func -Interface_DrawItemIconTexture = 0x800743F8; // type:func -Interface_DrawAmmoCount = 0x800745A0; // type:func -Interface_DrawActionButton = 0x80074A40; // type:func -Interface_InitVertices = 0x80074C2C; // type:func -func_8008A8B8 = 0x800750EC; // type:func -func_8008A994 = 0x800751CC; // type:func -Interface_Draw = 0x80075214; // type:func -Interface_Update = 0x80077DCC; // type:func -Path_GetByIndex = 0x80078AD0; // type:func -Path_OrientAndGetDistSq = 0x80078B14; // type:func -Path_CopyLastPoint = 0x80078C00; // type:func -FrameAdvance_Init = 0x80078CA0; // type:func -FrameAdvance_Update = 0x80078CB0; // type:func -Player_SetBootData = 0x80078D50; // type:func -Player_InBlockingCsMode = 0x80078EDC; // type:func -Player_InCsMode = 0x80078F8C; // type:func -func_8008E9C4 = 0x80078FC8; // type:func -Player_IsChildWithHylianShield = 0x80078FD8; // type:func -Player_ActionToModelGroup = 0x80079000; // type:func -Player_SetModelsForHoldingShield = 0x8007904C; // type:func -Player_SetModels = 0x80079138; // type:func -Player_SetModelGroup = 0x80079210; // type:func -func_8008EC70 = 0x8007927C; // type:func -Player_SetEquipmentData = 0x800792B4; // type:func -Player_UpdateBottleHeld = 0x800793A4; // type:func -func_8008EDF0 = 0x800793F8; // type:func -func_8008EE08 = 0x80079414; // type:func -func_8008EEAC = 0x800794B8; // type:func -func_8008EF30 = 0x8007953C; // type:func -func_8008EF44 = 0x80079554; // type:func -Player_IsBurningStickInRange = 0x80079570; // type:func -Player_GetStrength = 0x80079648; // type:func -Player_GetMask = 0x80079694; // type:func -Player_UnsetMask = 0x800796A4; // type:func -Player_HasMirrorShieldEquipped = 0x800796B4; // type:func -Player_HasMirrorShieldSetToDraw = 0x800796CC; // type:func -Player_ActionToMagicSpell = 0x800796F8; // type:func -Player_HoldsHookshot = 0x80079724; // type:func -func_8008F128 = 0x80079748; // type:func -Player_ActionToMeleeWeapon = 0x8007977C; // type:func -Player_GetMeleeWeaponHeld = 0x800797A4; // type:func -Player_HoldsTwoHandedWeapon = 0x800797C8; // type:func -Player_HoldsBrokenKnife = 0x800797F4; // type:func -Player_ActionToBottle = 0x8007984C; // type:func -Player_GetBottleHeld = 0x80079878; // type:func -Player_ActionToExplosive = 0x80079898; // type:func -Player_GetExplosiveHeld = 0x800798C4; // type:func -func_8008F2BC = 0x800798E4; // type:func -Player_GetEnvironmentalHazard = 0x80079920; // type:func -Player_DrawImpl = 0x80079A98; // type:func -func_8008F87C = 0x80079E5C; // type:func -Player_OverrideLimbDrawGameplayCommon = 0x8007A2A8; // type:func -Player_OverrideLimbDrawGameplayDefault = 0x8007A5FC; // type:func -Player_OverrideLimbDrawGameplayFirstPerson = 0x8007A8E8; // type:func -Player_OverrideLimbDrawGameplayCrawling = 0x8007AA38; // type:func -func_80090480 = 0x8007AA7C; // type:func -Player_UpdateShieldCollider = 0x8007AC04; // type:func -func_800906D4 = 0x8007ACD8; // type:func -Player_DrawGetItemImpl = 0x8007ADE8; // type:func -Player_DrawGetItem = 0x8007AF7C; // type:func -func_80090A28 = 0x8007AFF4; // type:func -Player_DrawHookshotReticle = 0x8007B0C8; // type:func -Player_PostLimbDrawGameplay = 0x8007B2AC; // type:func -Player_InitPauseDrawData = 0x8007BC14; // type:func -Player_OverrideLimbDrawPause = 0x8007BD40; // type:func -Player_DrawPauseImpl = 0x8007BEE4; // type:func -Player_DrawPause = 0x8007C5E8; // type:func -func_80092320 = 0x8007C7C0; // type:func -PreNMI_Update = 0x8007C7D4; // type:func -PreNMI_Draw = 0x8007C81C; // type:func -PreNMI_Main = 0x8007C8D8; // type:func -PreNMI_Destroy = 0x8007C90C; // type:func -PreNMI_Init = 0x8007C918; // type:func -Quake_AddVecGeoToVec3f = 0x8007C960; // type:func -Quake_UpdateShakeInfo = 0x8007C9E0; // type:func -Quake_CallbackType1 = 0x8007CC08; // type:func -Quake_CallbackType5 = 0x8007CC90; // type:func -Quake_CallbackType6 = 0x8007CD04; // type:func -Quake_CallbackType3 = 0x8007CD88; // type:func -Quake_CallbackType2 = 0x8007CE20; // type:func -Quake_CallbackType4 = 0x8007CE90; // type:func -Quake_GetFreeIndex = 0x8007CF28; // type:func -Quake_RequestImpl = 0x8007CF8C; // type:func -Quake_Remove = 0x8007D044; // type:func -Quake_GetRequest = 0x8007D06C; // type:func -Quake_SetValue = 0x8007D0C8; // type:func -Quake_SetSpeed = 0x8007D1F8; // type:func -Quake_SetDuration = 0x8007D240; // type:func -Quake_GetTimeLeft = 0x8007D290; // type:func -Quake_SetPerturbations = 0x8007D2C8; // type:func -Quake_SetOrientation = 0x8007D330; // type:func -Quake_Init = 0x8007D398; // type:func -Quake_Request = 0x8007D3EC; // type:func -Quake_RemoveRequest = 0x8007D410; // type:func -Quake_Update = 0x8007D458; // type:func -Gfx_SetFog = 0x8007D7D0; // type:func -Gfx_SetFogWithSync = 0x8007D94C; // type:func -Gfx_SetFog2 = 0x8007DADC; // type:func -Gfx_SetupDLImpl = 0x8007DB10; // type:func -Gfx_SetupDL = 0x8007DB4C; // type:func -Gfx_SetupDLAtPtr = 0x8007DB6C; // type:func -Gfx_SetupDL_57 = 0x8007DB98; // type:func -Gfx_SetupDL_57b = 0x8007DBC0; // type:func -Gfx_SetupDL_52NoCD = 0x8007DBE8; // type:func -Gfx_SetupDL_58Opa = 0x8007DC2C; // type:func -Gfx_SetupDL_57Opa = 0x8007DC54; // type:func -Gfx_SetupDL_50Opa = 0x8007DC7C; // type:func -Gfx_SetupDL_51Opa = 0x8007DCA4; // type:func -Gfx_SetupDL_52Xlu = 0x8007DCCC; // type:func -Gfx_SetupDL_53Opa = 0x8007DCF4; // type:func -Gfx_SetupDL_54Opa = 0x8007DD1C; // type:func -Gfx_SetupDL_55Xlu = 0x8007DD44; // type:func -Gfx_SetupDL_26Opa = 0x8007DD6C; // type:func -Gfx_SetupDL_25Xlu2 = 0x8007DD94; // type:func -func_80093C80 = 0x8007DDBC; // type:func -Gfx_SetupDL_25Opa = 0x8007DE28; // type:func -Gfx_SetupDL_25Xlu = 0x8007DE50; // type:func -Gfx_SetupDL_31Opa = 0x8007DE78; // type:func -Gfx_SetupDL_32Opa = 0x8007DEA0; // type:func -Gfx_SetupDL_33Opa = 0x8007DEC8; // type:func -Gfx_SetupDL_64 = 0x8007DEF0; // type:func -Gfx_SetupDL_34 = 0x8007DF18; // type:func -Gfx_SetupDL_34Opa = 0x8007DF40; // type:func -Gfx_SetupDL_35Opa = 0x8007DF6C; // type:func -Gfx_SetupDL_44Xlu = 0x8007DF94; // type:func -Gfx_SetupDL_36Opa = 0x8007DFBC; // type:func -Gfx_SetupDL_28 = 0x8007DFE4; // type:func -Gfx_SetupDL_28Opa = 0x8007E00C; // type:func -Gfx_SetupDL_43Opa = 0x8007E034; // type:func -Gfx_SetupDL_45Opa = 0x8007E05C; // type:func -Gfx_SetupDL_46Overlay = 0x8007E084; // type:func -Gfx_SetupDL_38Xlu = 0x8007E0AC; // type:func -Gfx_SetupDL_4Xlu = 0x8007E0D4; // type:func -Gfx_SetupDL_37Opa = 0x8007E0FC; // type:func -Gfx_SetupDL_2Opa = 0x8007E124; // type:func -Gfx_SetupDL_39 = 0x8007E14C; // type:func -Gfx_SetupDL_39Opa = 0x8007E174; // type:func -Gfx_SetupDL_39Overlay = 0x8007E1A0; // type:func -Gfx_SetupDL_39Ptr = 0x8007E1CC; // type:func -Gfx_SetupDL_40Opa = 0x8007E1F8; // type:func -Gfx_SetupDL_41Opa = 0x8007E220; // type:func -Gfx_SetupDL_47Xlu = 0x8007E248; // type:func -Gfx_SetupDL_66 = 0x8007E270; // type:func -Gfx_SetupDL_67 = 0x8007E298; // type:func -Gfx_SetupDL_68NoCD = 0x8007E2C0; // type:func -Gfx_SetupDL_69NoCD = 0x8007E304; // type:func -func_800947AC = 0x8007E348; // type:func -Gfx_SetupDL_70 = 0x8007E38C; // type:func -Gfx_SetupDL_20NoCD = 0x8007E3B4; // type:func -Gfx_SetupDL_42Opa = 0x8007E3F8; // type:func -Gfx_SetupDL_42Overlay = 0x8007E420; // type:func -Gfx_SetupDL_48Opa = 0x8007E448; // type:func -Gfx_SetupDL_49Xlu = 0x8007E470; // type:func -Gfx_SetupDL_27Xlu = 0x8007E498; // type:func -Gfx_SetupDL_60NoCDXlu = 0x8007E4C0; // type:func -Gfx_SetupDL_61Xlu = 0x8007E508; // type:func -Gfx_SetupDL_56Opa = 0x8007E530; // type:func -Gfx_SetupDL_56Ptr = 0x8007E558; // type:func -Gfx_SetupDL_59Opa = 0x8007E584; // type:func -Gfx_BranchTexScroll = 0x8007E5AC; // type:func -func_80094E54 = 0x8007E650; // type:func -func_80094E78 = 0x8007E674; // type:func -Gfx_TexScroll = 0x8007E698; // type:func -Gfx_TwoTexScroll = 0x8007E71C; // type:func -Gfx_TwoTexScrollEnvColor = 0x8007E83C; // type:func -Gfx_EnvColor = 0x8007E99C; // type:func -Gfx_SetupFrame = 0x8007E9F4; // type:func -func_80095974 = 0x8007EFAC; // type:func -func_80095AA0 = 0x8007F090; // type:func -Room_DrawNormal = 0x8007F0A8; // type:func -Room_DrawCullable = 0x8007F2C4; // type:func -Room_DecodeJpeg = 0x8007F78C; // type:func -Room_DrawBackground2D = 0x8007F814; // type:func -Room_DrawImageSingle = 0x8007FB10; // type:func -Room_GetImageMultiBgEntry = 0x8007FEE0; // type:func -Room_DrawImageMulti = 0x8007FFCC; // type:func -Room_DrawImage = 0x8008039C; // type:func -func_80096FD4 = 0x80080404; // type:func -func_80096FE8 = 0x8008041C; // type:func -func_8009728C = 0x800805B8; // type:func -func_800973FC = 0x800806F0; // type:func -Room_Draw = 0x80080794; // type:func -func_80097534 = 0x800807E4; // type:func -Sample_HandleStateChange = 0x80080880; // type:func -Sample_Draw = 0x800808B4; // type:func -Sample_Main = 0x80080AA0; // type:func -Sample_Destroy = 0x80080ACC; // type:func -Sample_SetupView = 0x80080AD8; // type:func -Sample_LoadTitleStatic = 0x80080B90; // type:func -Sample_Init = 0x80080BF0; // type:func -Inventory_ChangeEquipment = 0x80080C80; // type:func -Inventory_DeleteEquipment = 0x80080CD8; // type:func -Inventory_ChangeUpgrade = 0x80080DE4; // type:func -Object_SpawnPersistent = 0x80080E40; // type:func -Object_InitContext = 0x80080F24; // type:func -Object_UpdateEntries = 0x80081080; // type:func -Object_GetSlot = 0x80081178; // type:func -Object_IsLoaded = 0x800811D8; // type:func -func_800981B8 = 0x80081208; // type:func -func_800982FC = 0x80081290; // type:func -Scene_ExecuteCommands = 0x800812F0; // type:func -Scene_CommandPlayerEntryList = 0x80081374; // type:func -Scene_CommandActorEntryList = 0x80081450; // type:func -Scene_CommandUnused2 = 0x800814A8; // type:func -Scene_CommandCollisionHeader = 0x800814F0; // type:func -Scene_CommandRoomList = 0x80081620; // type:func -Scene_CommandSpawnList = 0x80081678; // type:func -Scene_CommandSpecialFiles = 0x800816C0; // type:func -Scene_CommandRoomBehavior = 0x80081788; // type:func -Scene_CommandRoomShape = 0x800817E0; // type:func -Scene_CommandObjectList = 0x80081828; // type:func -Scene_CommandLightList = 0x800819DC; // type:func -Scene_CommandPathList = 0x80081A8C; // type:func -Scene_CommandTransitionActorEntryList = 0x80081AD4; // type:func -TransitionActor_InitContext = 0x80081B2C; // type:func -Scene_CommandLightSettingsList = 0x80081B3C; // type:func -Scene_CommandSkyboxSettings = 0x80081B94; // type:func -Scene_CommandSkyboxDisables = 0x80081BD8; // type:func -Scene_CommandTimeSettings = 0x80081C00; // type:func -Scene_CommandWindSettings = 0x80081F14; // type:func -Scene_CommandExitList = 0x80081F78; // type:func -Scene_CommandUndefined9 = 0x80081FC0; // type:func -Scene_CommandSoundSettings = 0x80081FD0; // type:func -Scene_CommandEchoSettings = 0x8008201C; // type:func -Scene_CommandAlternateHeaderList = 0x80082034; // type:func -Scene_CommandCutsceneData = 0x80082130; // type:func -Scene_CommandMiscSettings = 0x80082170; // type:func -Scene_SetTransitionForNextEntrance = 0x80082234; // type:func -Scene_DrawConfigDefault = 0x800822F0; // type:func -Scene_DrawConfigDekuTree = 0x80082330; // type:func -Scene_DrawConfigDekuTreeBoss = 0x80082478; // type:func -Scene_DrawConfigDodongosCavern = 0x8008255C; // type:func -Scene_DrawConfigTempleOfTime = 0x80082884; // type:func -Scene_DrawConfigGrottos = 0x8008309C; // type:func -Scene_DrawConfigChamberOfTheSages = 0x800833AC; // type:func -Scene_DrawConfigGreatFairyFountain = 0x800835D0; // type:func -Scene_DrawConfigGraveExitLightShining = 0x80083768; // type:func -Scene_DrawConfigFairysFountain = 0x80083840; // type:func -Scene_DrawConfigShadowTempleAndWell = 0x800839A4; // type:func -Scene_DrawConfigThievesHideout = 0x80083B30; // type:func -Scene_DrawConfigWaterTemple = 0x80083C18; // type:func -Scene_DrawConfigWaterTempleBoss = 0x80084388; // type:func -Scene_DrawConfigShootingGallery = 0x800844A8; // type:func -Scene_DrawConfigCastleCourtyardGuards = 0x8008455C; // type:func -Scene_DrawConfigOutsideGanonsCastle = 0x800846D4; // type:func -func_8009BEEC = 0x80084970; // type:func -Scene_DrawConfigGanonsTowerCollapseExterior = 0x80084B30; // type:func -Scene_DrawConfigIceCavern = 0x80084E3C; // type:func -Scene_DrawConfigRoyalFamilysTomb = 0x8008502C; // type:func -Scene_DrawConfigLakesideLaboratory = 0x800852B0; // type:func -Scene_DrawConfigCalmWater = 0x80085490; // type:func -Scene_DrawConfigGerudoTrainingGround = 0x80085598; // type:func -Gfx_TwoTexScrollPrimColor = 0x80085788; // type:func -Scene_DrawConfigFishingPond = 0x800858E8; // type:func -Scene_DrawConfigBombchuBowlingAlley = 0x80085A14; // type:func -Scene_DrawConfigLonLonBuildings = 0x80085C18; // type:func -Scene_DrawConfigMarketGuardHouse = 0x80085CE8; // type:func -Scene_DrawConfigPotionShopGranny = 0x80085E18; // type:func -Scene_DrawConfigForestTemple = 0x80085F90; // type:func -Scene_DrawConfigSpiritTemple = 0x80086180; // type:func -Scene_DrawConfigHyruleField = 0x800861F0; // type:func -Scene_DrawConfigKakarikoVillage = 0x800864EC; // type:func -Scene_DrawConfigZorasRiver = 0x800865BC; // type:func -Scene_DrawConfigKokiriForest = 0x800867D4; // type:func -Scene_DrawConfigLakeHylia = 0x80086C38; // type:func -Scene_DrawConfigZorasDomain = 0x80086DF8; // type:func -Scene_DrawConfigZorasFountain = 0x80086F54; // type:func -Scene_DrawConfigGerudoValley = 0x80087144; // type:func -Scene_DrawConfigLostWoods = 0x80087480; // type:func -Scene_DrawConfigDesertColossus = 0x8008767C; // type:func -Scene_DrawConfigGerudosFortress = 0x80087788; // type:func -Scene_DrawConfigHauntedWasteland = 0x800877F8; // type:func -Scene_DrawConfigHyruleCastle = 0x80087970; // type:func -Scene_DrawConfigDeathMountainTrail = 0x80087B14; // type:func -Scene_DrawConfigDeathMountainCrater = 0x80087CD8; // type:func -Scene_DrawConfigGoronCity = 0x80087EA4; // type:func -Scene_DrawConfigLonLonRanch = 0x80088014; // type:func -Scene_DrawConfigFireTemple = 0x800880E4; // type:func -Scene_DrawConfigJabuJabu = 0x80088288; // type:func -Scene_DrawConfigInsideGanonsCastle = 0x80088734; // type:func -Scene_DrawConfigInsideGanonsCastleCollapse = 0x80088938; // type:func -Scene_DrawConfigGanonsTowerCollapseInterior = 0x80088958; // type:func -Scene_DrawConfigBesitu = 0x80088978; // type:func -Scene_Draw = 0x80088AB0; // type:func -SkelAnime_DrawLimbLod = 0x80088AF0; // type:func -SkelAnime_DrawLod = 0x80088D58; // type:func -SkelAnime_DrawFlexLimbLod = 0x80088F48; // type:func -SkelAnime_DrawFlexLod = 0x800891D8; // type:func -SkelAnime_DrawLimbOpa = 0x80089450; // type:func -SkelAnime_DrawOpa = 0x8008969C; // type:func -SkelAnime_DrawFlexLimbOpa = 0x8008987C; // type:func -SkelAnime_DrawFlexOpa = 0x80089AF4; // type:func -SkelAnime_GetFrameData = 0x80089D58; // type:func -Animation_GetLength = 0x80089EC0; // type:func -Animation_GetLastFrame = 0x80089EFC; // type:func -SkelAnime_DrawLimb = 0x80089F44; // type:func -SkelAnime_Draw = 0x8008A184; // type:func -SkelAnime_DrawFlexLimb = 0x8008A374; // type:func -SkelAnime_DrawFlex = 0x8008A604; // type:func -SkelAnime_GetFrameDataLegacy = 0x8008A86C; // type:func -Animation_GetLimbCountLegacy = 0x8008AC70; // type:func -Animation_GetLengthLegacy = 0x8008ACAC; // type:func -Animation_GetLastFrameLegacy = 0x8008ACE8; // type:func -SkelAnime_InterpFrameTable = 0x8008AD30; // type:func -AnimTaskQueue_Reset = 0x8008B1B0; // type:func -AnimTaskQueue_SetNextGroup = 0x8008B1BC; // type:func -AnimTaskQueue_DisableTransformTasksForGroup = 0x8008B1DC; // type:func -AnimTaskQueue_NewTask = 0x8008B204; // type:func -AnimTaskQueue_AddLoadPlayerFrame = 0x8008B23C; // type:func -AnimTaskQueue_AddCopy = 0x8008B338; // type:func -AnimTaskQueue_AddInterp = 0x8008B3A0; // type:func -AnimTaskQueue_AddCopyUsingMap = 0x8008B410; // type:func -AnimTaskQueue_AddCopyUsingMapInverted = 0x8008B480; // type:func -AnimTaskQueue_AddActorMove = 0x8008B4F0; // type:func -AnimTask_LoadPlayerFrame = 0x8008B54C; // type:func -AnimTask_Copy = 0x8008B57C; // type:func -AnimTask_Interp = 0x8008B5EC; // type:func -AnimTask_CopyUsingMap = 0x8008B648; // type:func -AnimTask_CopyUsingMapInverted = 0x8008B6C8; // type:func -AnimTask_ActorMove = 0x8008B74C; // type:func -AnimTaskQueue_Update = 0x8008B7E0; // type:func -SkelAnime_InitLink = 0x8008B880; // type:func -LinkAnimation_SetUpdateFunction = 0x8008B9E4; // type:func -LinkAnimation_Update = 0x8008BA1C; // type:func -LinkAnimation_Morph = 0x8008BA40; // type:func -LinkAnimation_AnimateFrame = 0x8008BAFC; // type:func -LinkAnimation_Loop = 0x8008BBD8; // type:func -LinkAnimation_Once = 0x8008BC78; // type:func -Animation_SetMorph = 0x8008BD54; // type:func -LinkAnimation_Change = 0x8008BD78; // type:func -LinkAnimation_PlayOnce = 0x8008BEF0; // type:func -LinkAnimation_PlayOnceSetSpeed = 0x8008BF50; // type:func -LinkAnimation_PlayLoop = 0x8008BFB4; // type:func -LinkAnimation_PlayLoopSetSpeed = 0x8008C010; // type:func -LinkAnimation_CopyJointToMorph = 0x8008C070; // type:func -LinkAnimation_CopyMorphToJoint = 0x8008C0A0; // type:func -LinkAnimation_LoadToMorph = 0x8008C0D0; // type:func -LinkAnimation_LoadToJoint = 0x8008C114; // type:func -LinkAnimation_InterpJointMorph = 0x8008C158; // type:func -LinkAnimation_BlendToJoint = 0x8008C190; // type:func -LinkAnimation_BlendToMorph = 0x8008C230; // type:func -LinkAnimation_EndLoop = 0x8008C2D0; // type:func -Animation_OnFrameImpl = 0x8008C2F4; // type:func -LinkAnimation_OnFrame = 0x8008C3AC; // type:func -SkelAnime_Init = 0x8008C3FC; // type:func -SkelAnime_InitFlex = 0x8008C500; // type:func -SkelAnime_InitSkin = 0x8008C60C; // type:func -SkelAnime_SetUpdate = 0x8008C6EC; // type:func -SkelAnime_Update = 0x8008C738; // type:func -SkelAnime_Morph = 0x8008C75C; // type:func -SkelAnime_MorphTaper = 0x8008C81C; // type:func -SkelAnime_AnimateFrame = 0x8008C9A4; // type:func -SkelAnime_LoopFull = 0x8008CAEC; // type:func -SkelAnime_LoopPartial = 0x8008CB8C; // type:func -SkelAnime_Once = 0x8008CC34; // type:func -Animation_ChangeImpl = 0x8008CD38; // type:func -Animation_Change = 0x8008CEF4; // type:func -Animation_PlayOnce = 0x8008CF3C; // type:func -Animation_MorphToPlayOnce = 0x8008CF94; // type:func -Animation_PlayOnceSetSpeed = 0x8008CFF0; // type:func -Animation_PlayLoop = 0x8008D04C; // type:func -Animation_MorphToLoop = 0x8008D0A0; // type:func -Animation_PlayLoopSetSpeed = 0x8008D0D8; // type:func -Animation_EndLoop = 0x8008D130; // type:func -Animation_Reverse = 0x8008D15C; // type:func -SkelAnime_CopyFrameTableTrue = 0x8008D180; // type:func -SkelAnime_CopyFrameTableFalse = 0x8008D1E8; // type:func -SkelAnime_UpdateTranslation = 0x8008D254; // type:func -Animation_OnFrame = 0x8008D420; // type:func -SkelAnime_Free = 0x8008D448; // type:func -SkelAnime_CopyFrameTable = 0x8008D494; // type:func -Skin_UpdateVertices = 0x8008D4E0; // type:func -Skin_ApplyLimbModifications = 0x8008D6AC; // type:func -Skin_DrawAnimatedLimb = 0x8008DB18; // type:func -Skin_DrawLimb = 0x8008DBF4; // type:func -Skin_DrawImpl = 0x8008DD1C; // type:func -func_800A6330 = 0x8008DF48; // type:func -func_800A6360 = 0x8008DF78; // type:func -func_800A6394 = 0x8008DFAC; // type:func -func_800A63CC = 0x8008DFE4; // type:func -Skin_GetLimbPos = 0x8008E020; // type:func -Skin_InitAnimatedLimb = 0x8008E080; // type:func -Skin_Init = 0x8008E25C; // type:func -Skin_Free = 0x8008E42C; // type:func -func_800A698C = 0x8008E500; // type:func -Skin_ApplyAnimTransformations = 0x8008E63C; // type:func -SkinMatrix_Vec3fMtxFMultXYZW = 0x8008E990; // type:func -SkinMatrix_Vec3fMtxFMultXYZ = 0x8008EA78; // type:func -SkinMatrix_MtxFMtxFMult = 0x8008EB28; // type:func -SkinMatrix_GetClear = 0x8008EE84; // type:func -SkinMatrix_Clear = 0x8008EE98; // type:func -SkinMatrix_MtxFCopy = 0x8008EEF0; // type:func -SkinMatrix_Invert = 0x8008EF78; // type:func -SkinMatrix_SetScale = 0x8008F218; // type:func -SkinMatrix_SetRotateZYX = 0x8008F27C; // type:func -SkinMatrix_SetRotateYXZ = 0x8008F40C; // type:func -SkinMatrix_SetTranslate = 0x8008F59C; // type:func -SkinMatrix_SetTranslateRotateZYXScale = 0x8008F600; // type:func -SkinMatrix_SetTranslateRotateYXZScale = 0x8008F684; // type:func -SkinMatrix_SetTranslateRotateZYX = 0x8008F708; // type:func -SkinMatrix_Vec3fToVec3s = 0x8008F768; // type:func -SkinMatrix_Vec3sToVec3f = 0x8008F7AC; // type:func -SkinMatrix_MtxFToMtx = 0x8008F7F0; // type:func -SkinMatrix_MtxFToNewMtx = 0x8008FA08; // type:func -SkinMatrix_SetRotateAxis = 0x8008FA50; // type:func -func_800A8030 = 0x8008FBC0; // type:func -Sram_InitNewSave = 0x8008FD30; // type:func -Sram_InitDebugSave = 0x8008FE5C; // type:func -Sram_OpenSave = 0x8009001C; // type:func -Sram_WriteSave = 0x80090360; // type:func -Sram_VerifyAndLoadAllSaves = 0x800904AC; // type:func -Sram_InitSave = 0x80090978; // type:func -Sram_EraseSave = 0x80090C18; // type:func -Sram_CopySave = 0x80090D30; // type:func -Sram_WriteSramHeader = 0x80090F20; // type:func -Sram_InitSram = 0x80090F54; // type:func -Sram_Alloc = 0x80091024; // type:func -Sram_Init = 0x80091054; // type:func -SsSram_Init = 0x80091070; // type:func -SsSram_Dma = 0x80091148; // type:func -SsSram_ReadWrite = 0x800911D4; // type:func -Rumble_Update = 0x80091240; // type:func -Rumble_Override = 0x8009127C; // type:func -Rumble_Request = 0x80091318; // type:func -Rumble_Init = 0x800913D4; // type:func -Rumble_Destroy = 0x80091410; // type:func -Rumble_Controller1HasRumblePak = 0x80091468; // type:func -Rumble_Reset = 0x80091480; // type:func -Rumble_ClearRequests = 0x80091494; // type:func -Rumble_SetUpdateEnabled = 0x800914A4; // type:func -View_ViewportToVp = 0x800914C0; // type:func -View_New = 0x8009152C; // type:func -View_Free = 0x80091578; // type:func -View_Init = 0x80091598; // type:func -View_LookAt = 0x80091658; // type:func -View_LookAtUnsafe = 0x800916F4; // type:func -View_SetScale = 0x80091744; // type:func -View_GetScale = 0x80091764; // type:func -View_SetPerspective = 0x80091774; // type:func -View_GetPerspective = 0x800917A4; // type:func -View_SetOrtho = 0x800917C4; // type:func -View_GetOrtho = 0x80091800; // type:func -View_SetViewport = 0x80091820; // type:func -View_GetViewport = 0x80091854; // type:func -View_ApplyLetterbox = 0x8009187C; // type:func -View_SetDistortionOrientation = 0x800919BC; // type:func -View_SetDistortionScale = 0x800919E0; // type:func -View_SetDistortionSpeed = 0x80091A04; // type:func -View_InitDistortion = 0x80091A18; // type:func -View_ClearDistortion = 0x80091A7C; // type:func -View_SetDistortion = 0x80091AB0; // type:func -View_StepDistortion = 0x80091B04; // type:func -View_Apply = 0x80091CBC; // type:func -View_ApplyPerspective = 0x80091D08; // type:func -View_ApplyOrtho = 0x80091FFC; // type:func -View_ApplyOrthoToOverlay = 0x800921A8; // type:func -View_ApplyPerspectiveToOverlay = 0x800923DC; // type:func -View_UpdateViewingMatrix = 0x8009272C; // type:func -View_ApplyTo = 0x80092798; // type:func -ViMode_LogPrint = 0x80092BC0; // type:func -ViMode_Configure = 0x80092BCC; // type:func -ViMode_Save = 0x80093174; // type:func -ViMode_Load = 0x80093254; // type:func -ViMode_Init = 0x800932DC; // type:func -ViMode_Destroy = 0x80093344; // type:func -ViMode_ConfigureFeatures = 0x80093350; // type:func -ViMode_Update = 0x800933B4; // type:func -VisCvg_Init = 0x80093730; // type:func -VisCvg_Destroy = 0x80093754; // type:func -VisCvg_Draw = 0x80093760; // type:func -VisMono_Init = 0x800938D0; // type:func -VisMono_Destroy = 0x80093920; // type:func -VisMono_DesaturateTLUT = 0x80093944; // type:func -VisMono_DesaturateDList = 0x80093C58; // type:func -VisMono_Draw = 0x80093E88; // type:func -VisMono_DrawOld = 0x8009407C; // type:func -VisZBuf_Init = 0x800940F0; // type:func -VisZBuf_Destroy = 0x80094124; // type:func -VisZBuf_Draw = 0x80094130; // type:func -Skybox_CalculateFace256 = 0x80094380; // type:func -Skybox_CalculateFace128 = 0x80094A90; // type:func -Skybox_Calculate256 = 0x80095798; // type:func -Skybox_Calculate128 = 0x80095948; // type:func -Skybox_Setup = 0x800959E8; // type:func -Skybox_Init = 0x80096B3C; // type:func -Skybox_UpdateMatrix = 0x80096C50; // type:func -Skybox_Draw = 0x80096CD8; // type:func -Skybox_Update = 0x80097320; // type:func -PlayerCall_InitFuncPtrs = 0x80097330; // type:func -PlayerCall_Init = 0x80097398; // type:func -PlayerCall_Destroy = 0x800973E0; // type:func -PlayerCall_Update = 0x80097420; // type:func -PlayerCall_Draw = 0x80097460; // type:func -TransitionTile_InitGraphics = 0x800974A0; // type:func -TransitionTile_InitVtxData = 0x8009786C; // type:func -TransitionTile_Destroy = 0x8009792C; // type:func -TransitionTile_Init = 0x800979B8; // type:func -TransitionTile_SetVtx = 0x80097B30; // type:func -TransitionTile_Draw = 0x80097C44; // type:func -TransitionTile_Suck = 0x80097D70; // type:func -TransitionTile_Update = 0x80097EA4; // type:func -func_800B23F0 = 0x80097EB0; // type:func -TransitionTriforce_Start = 0x80097EC0; // type:func -TransitionTriforce_Init = 0x80097EF8; // type:func -TransitionTriforce_Destroy = 0x80097F98; // type:func -TransitionTriforce_Update = 0x80097FA4; // type:func -TransitionTriforce_SetColor = 0x800980B8; // type:func -TransitionTriforce_SetType = 0x800980C4; // type:func -TransitionTriforce_SetState = 0x800980D0; // type:func -TransitionTriforce_Draw = 0x800980DC; // type:func -TransitionTriforce_IsDone = 0x800983EC; // type:func -TransitionWipe_Start = 0x80098480; // type:func -TransitionWipe_Init = 0x80098538; // type:func -TransitionWipe_Destroy = 0x80098564; // type:func -TransitionWipe_Update = 0x80098570; // type:func -TransitionWipe_Draw = 0x80098650; // type:func -TransitionWipe_IsDone = 0x8009888C; // type:func -TransitionWipe_SetType = 0x80098898; // type:func -TransitionWipe_SetColor = 0x800988D8; // type:func -TransitionWipe_SetUnkColor = 0x800988E4; // type:func -TransitionCircle_Start = 0x800988F0; // type:func -TransitionCircle_Init = 0x80098ADC; // type:func -TransitionCircle_Destroy = 0x80098B08; // type:func -TransitionCircle_Update = 0x80098B14; // type:func -TransitionCircle_Draw = 0x80098C98; // type:func -TransitionCircle_IsDone = 0x80098F34; // type:func -TransitionCircle_SetType = 0x80098F40; // type:func -TransitionCircle_SetColor = 0x80098F98; // type:func -TransitionCircle_SetUnkColor = 0x80098FA4; // type:func -TransitionFade_Start = 0x80098FB0; // type:func -TransitionFade_Init = 0x8009900C; // type:func -TransitionFade_Destroy = 0x80099038; // type:func -TransitionFade_Update = 0x80099044; // type:func -TransitionFade_Draw = 0x800991D4; // type:func -TransitionFade_IsDone = 0x800992A0; // type:func -TransitionFade_SetColor = 0x800992AC; // type:func -TransitionFade_SetType = 0x800992B8; // type:func -Letterbox_SetSizeTarget = 0x80099310; // type:func -Letterbox_GetSizeTarget = 0x80099320; // type:func -Letterbox_SetSize = 0x80099330; // type:func -Letterbox_GetSize = 0x80099340; // type:func -Letterbox_Init = 0x80099350; // type:func -Letterbox_Destroy = 0x80099370; // type:func -Letterbox_Update = 0x80099380; // type:func -func_800BB0A0 = 0x80099480; // type:func -func_800BB2B4 = 0x80099694; // type:func -KaleidoManager_LoadOvl = 0x80099950; // type:func -KaleidoManager_ClearOvl = 0x800999AC; // type:func -KaleidoManager_Init = 0x800999FC; // type:func -KaleidoManager_Destroy = 0x80099A6C; // type:func -KaleidoManager_GetRamAddr = 0x80099AAC; // type:func -KaleidoScopeCall_LoadPlayer = 0x80099B80; // type:func -KaleidoScopeCall_Init = 0x80099BCC; // type:func -KaleidoScopeCall_Destroy = 0x80099C18; // type:func -KaleidoScopeCall_Update = 0x80099C38; // type:func -KaleidoScopeCall_Draw = 0x80099DD8; // type:func -Play_RequestViewpointBgCam = 0x80099E60; // type:func -Play_SetViewpoint = 0x80099EA0; // type:func -Play_CheckViewpoint = 0x80099F4C; // type:func -Play_SetShopBrowsingViewpoint = 0x80099F74; // type:func -Play_SetupTransition = 0x80099FA0; // type:func -func_800BC88C = 0x8009A24C; // type:func -Play_SetFog = 0x8009A264; // type:func -Play_Destroy = 0x8009A2B0; // type:func -Play_Init = 0x8009A41C; // type:func -Play_Update = 0x8009ABD4; // type:func -Play_DrawOverlayElements = 0x8009BCC8; // type:func -Play_Draw = 0x8009BD60; // type:func -Play_Main = 0x8009C7A4; // type:func -Play_InCsMode = 0x8009C7E4; // type:func -func_800BFCB8 = 0x8009C818; // type:func -Play_LoadFile = 0x8009C9C4; // type:func -Play_InitEnvironment = 0x8009CA20; // type:func -Play_InitScene = 0x8009CA68; // type:func -Play_SpawnScene = 0x8009CB6C; // type:func -Play_GetScreenPos = 0x8009CC14; // type:func -Play_CreateSubCamera = 0x8009CCD8; // type:func -Play_GetActiveCamId = 0x8009CD88; // type:func -Play_ChangeCameraStatus = 0x8009CD94; // type:func -Play_ClearCamera = 0x8009CE04; // type:func -Play_ClearAllSubCameras = 0x8009CE6C; // type:func -Play_GetCamera = 0x8009CED8; // type:func -Play_SetCameraAtEye = 0x8009CF10; // type:func -Play_SetCameraAtEyeUp = 0x8009D020; // type:func -Play_SetCameraFov = 0x8009D144; // type:func -Play_SetCameraRoll = 0x8009D18C; // type:func -Play_CopyCamera = 0x8009D1D8; // type:func -Play_InitCameraDataUsingPlayer = 0x8009D254; // type:func -Play_RequestCameraSetting = 0x8009D2C4; // type:func -Play_ReturnToMainCam = 0x8009D300; // type:func -Play_GetCameraUID = 0x8009D3DC; // type:func -func_800C09D8 = 0x8009D410; // type:func -Play_SaveSceneFlags = 0x8009D47C; // type:func -Play_SetRespawnData = 0x8009D4C4; // type:func -Play_SetupRespawnPoint = 0x8009D534; // type:func -Play_TriggerVoidOut = 0x8009D5A0; // type:func -Play_LoadToLastEntrance = 0x8009D5F8; // type:func -Play_TriggerRespawn = 0x8009D6CC; // type:func -Play_CamIsNotFixed = 0x8009D700; // type:func -FrameAdvance_IsEnabled = 0x8009D770; // type:func -func_800C0D34 = 0x8009D780; // type:func -func_800C0DB4 = 0x8009D800; // type:func -PreRender_SetValuesSave = 0x8009D8C0; // type:func -PreRender_Init = 0x8009D8FC; // type:func -PreRender_SetValues = 0x8009D930; // type:func -PreRender_Destroy = 0x8009D964; // type:func -PreRender_CopyImage = 0x8009D988; // type:func -PreRender_CopyImageRegionImpl = 0x8009DC50; // type:func -func_800C170C = 0x8009E098; // type:func -func_800C1AE8 = 0x8009E414; // type:func -PreRender_CoverageRgba16ToI8 = 0x8009E450; // type:func -PreRender_SaveZBuffer = 0x8009E768; // type:func -PreRender_SaveFramebuffer = 0x8009E7A0; // type:func -PreRender_FetchFbufCoverage = 0x8009E7D8; // type:func -PreRender_DrawCoverage = 0x8009E8F0; // type:func -PreRender_RestoreZBuffer = 0x8009E934; // type:func -func_800C213C = 0x8009E958; // type:func -PreRender_RestoreFramebuffer = 0x8009EC88; // type:func -PreRender_CopyImageRegion = 0x8009ECAC; // type:func -PreRender_AntiAliasFilter = 0x8009ECCC; // type:func -PreRender_DivotFilter = 0x8009F78C; // type:func -PreRender_ApplyFilters = 0x8009F8E0; // type:func -THGA_Init = 0x8009F9B0; // type:func -THGA_Destroy = 0x8009F9D0; // type:func -THGA_IsCrash = 0x8009F9F0; // type:func -THGA_Reset = 0x8009FA10; // type:func -THGA_GetRemaining = 0x8009FA30; // type:func -THGA_GetHead = 0x8009FA50; // type:func -THGA_SetHead = 0x8009FA70; // type:func -THGA_GetTail = 0x8009FA90; // type:func -THGA_AllocDisplayList = 0x8009FAB0; // type:func -THGA_AllocGfx = 0x8009FAD4; // type:func -THGA_AllocGfx2 = 0x8009FAF4; // type:func -THGA_AllocTail = 0x8009FB14; // type:func -THGA_AllocMtxArray = 0x8009FB34; // type:func -THGA_AllocMtx = 0x8009FB58; // type:func -THGA_AllocVtxArray = 0x8009FB78; // type:func -THGA_AllocVtx = 0x8009FB9C; // type:func -THA_GetHead = 0x8009FBC0; // type:func -THA_SetHead = 0x8009FBCC; // type:func -THA_GetTail = 0x8009FBD8; // type:func -THA_AllocHead = 0x8009FBE4; // type:func -THA_AllocHeadByte = 0x8009FBF8; // type:func -THA_AllocTail = 0x8009FC18; // type:func -THA_AllocTailAlign16 = 0x8009FCA8; // type:func -THA_AllocTailAlign = 0x8009FCC8; // type:func -THA_GetRemaining = 0x8009FCE4; // type:func -THA_IsCrash = 0x8009FCF8; // type:func -THA_Reset = 0x8009FD1C; // type:func -THA_Init = 0x8009FD38; // type:func -THA_Destroy = 0x8009FD5C; // type:func -AudioMgr_StopAllSfx = 0x8009FD80; // type:func -AudioMgr_NotifyTaskDone = 0x8009FDD0; // type:func -AudioMgr_HandleRetrace = 0x8009FE08; // type:func -AudioMgr_HandlePreNMI = 0x8009FF90; // type:func -AudioMgr_ThreadEntry = 0x8009FFB4; // type:func -AudioMgr_WaitForInit = 0x800A00E4; // type:func -AudioMgr_Init = 0x800A0110; // type:func -Setup_InitImpl = 0x800A01E0; // type:func -Setup_Destroy = 0x800A021C; // type:func -Setup_Init = 0x800A0228; // type:func -GameState_SetFBFilter = 0x800A0250; // type:func -func_800C4344 = 0x800A03A4; // type:func -GameState_Draw = 0x800A03B0; // type:func -GameState_SetFrameBuffer = 0x800A04A8; // type:func -func_800C49F4 = 0x800A058C; // type:func -GameState_ReqPadData = 0x800A0604; // type:func -GameState_Update = 0x800A0634; // type:func -GameState_InitArena = 0x800A06B0; // type:func -GameState_Realloc = 0x800A0720; // type:func -GameState_Init = 0x800A07E0; // type:func -GameState_Destroy = 0x800A08D8; // type:func -GameState_GetInit = 0x800A0988; // type:func -GameState_GetSize = 0x800A0994; // type:func -GameState_IsRunning = 0x800A09A0; // type:func -GameState_GetArenaSize = 0x800A09AC; // type:func -GameAlloc_Log = 0x800A09D0; // type:func -GameAlloc_Malloc = 0x800A09F0; // type:func -GameAlloc_Free = 0x800A0A5C; // type:func -GameAlloc_Cleanup = 0x800A0AA8; // type:func -GameAlloc_Init = 0x800A0AF8; // type:func -Graph_InitTHGA = 0x800A0B10; // type:func -Graph_GetNextGameState = 0x800A0C28; // type:func -Graph_Init = 0x800A0CD8; // type:func -Graph_Destroy = 0x800A0D48; // type:func -Graph_TaskSet00 = 0x800A0D54; // type:func -Graph_Update = 0x800A1098; // type:func -Graph_ThreadEntry = 0x800A134C; // type:func -Graph_Alloc = 0x800A1444; // type:func -Graph_Alloc2 = 0x800A1478; // type:func -Gfx_Open = 0x800A14B0; // type:func -Gfx_Close = 0x800A14BC; // type:func -Gfx_Alloc = 0x800A14D4; // type:func -ListAlloc_Init = 0x800A1510; // type:func -ListAlloc_Alloc = 0x800A1524; // type:func -ListAlloc_Free = 0x800A1590; // type:func -ListAlloc_FreeAll = 0x800A1610; // type:func -Main = 0x800A1660; // type:func -PadMgr_AcquireSerialEventQueue = 0x800A19C0; // type:func -PadMgr_ReleaseSerialEventQueue = 0x800A19F0; // type:func -PadMgr_LockPadData = 0x800A1A18; // type:func -PadMgr_UnlockPadData = 0x800A1A44; // type:func -PadMgr_UpdateRumble = 0x800A1A70; // type:func -PadMgr_RumbleStop = 0x800A1CC0; // type:func -PadMgr_RumbleReset = 0x800A1D58; // type:func -PadMgr_RumbleSetSingle = 0x800A1D68; // type:func -PadMgr_RumbleSet = 0x800A1D80; // type:func -PadMgr_UpdateInputs = 0x800A1DB0; // type:func -PadMgr_HandleRetrace = 0x800A1F90; // type:func -PadMgr_HandlePreNMI = 0x800A2128; // type:func -PadMgr_RequestPadData = 0x800A214C; // type:func -PadMgr_ThreadEntry = 0x800A22C8; // type:func -PadMgr_Init = 0x800A23C4; // type:func -Sched_SwapFrameBufferImpl = 0x800A24C0; // type:func -Sched_SwapFrameBuffer = 0x800A2530; // type:func -Sched_HandlePreNMI = 0x800A2580; // type:func -Sched_HandleNMI = 0x800A258C; // type:func -Sched_QueueTask = 0x800A25B0; // type:func -Sched_Yield = 0x800A261C; // type:func -Sched_GfxTaskFramebufferValid = 0x800A2650; // type:func -Sched_Schedule = 0x800A2714; // type:func -Sched_SetNextFramebufferFromTask = 0x800A2848; // type:func -Sched_TaskComplete = 0x800A2894; // type:func -Sched_RunTask = 0x800A290C; // type:func -Sched_HandleNotification = 0x800A2A70; // type:func -Sched_HandleRetrace = 0x800A2B60; // type:func -Sched_HandleRSPDone = 0x800A2C38; // type:func -Sched_HandleRDPDone = 0x800A2E4C; // type:func -Sched_Notify = 0x800A2F14; // type:func -Sched_ThreadEntry = 0x800A2F38; // type:func -Sched_Init = 0x800A306C; // type:func -SpeedMeter_InitImpl = 0x800A3140; // type:func -SpeedMeter_Init = 0x800A3150; // type:func -SpeedMeter_Destroy = 0x800A3174; // type:func -SpeedMeter_DrawTimeEntries = 0x800A3180; // type:func -SpeedMeter_InitAllocEntry = 0x800A3644; // type:func -SpeedMeter_DrawAllocEntry = 0x800A3688; // type:func -SpeedMeter_DrawAllocEntries = 0x800A38DC; // type:func -SysCfb_Init = 0x800A3B80; // type:func -SysCfb_Reset = 0x800A3C48; // type:func -SysCfb_GetFbPtr = 0x800A3C68; // type:func -SysCfb_GetFbEnd = 0x800A3C90; // type:func -Math_FactorialF = 0x800A3CA0; // type:func -Math_Factorial = 0x800A3DA0; // type:func -Math_PowF = 0x800A3E64; // type:func -Math_SinF = 0x800A3E8C; // type:func -Math_CosF = 0x800A3EE0; // type:func -Math3D_PlaneVsLineSegClosestPoint = 0x800A3F40; // type:func -Math3D_LineVsLineClosestTwoPoints = 0x800A4060; // type:func -Math3D_LineClosestToPoint = 0x800A430C; // type:func -Math3D_FindPointOnPlaneIntersect = 0x800A43F8; // type:func -Math3D_PlaneVsPlaneNewLine = 0x800A4458; // type:func -Math3D_PlaneVsPlaneVsLineClosestPoint = 0x800A4638; // type:func -Math3D_PointOnInfiniteLine = 0x800A46B4; // type:func -Math3D_LineSplitRatio = 0x800A4700; // type:func -Math3D_Cos = 0x800A474C; // type:func -Math3D_CosOut = 0x800A4770; // type:func -Math3D_Vec3fReflect = 0x800A4828; // type:func -Math3D_PointInSquare2D = 0x800A48FC; // type:func -Math3D_CirSquareVsTriSquare = 0x800A4960; // type:func -Math3D_SphCubeVsTriCube = 0x800A4AA0; // type:func -Math3D_Dist1DSq = 0x800A4CC4; // type:func -Math3D_Dist1D = 0x800A4CDC; // type:func -Math3D_Dist2DSq = 0x800A4D00; // type:func -Math3D_Dist2D = 0x800A4D44; // type:func -Math3D_Vec3fMagnitudeSq = 0x800A4D74; // type:func -Math3D_Vec3fMagnitude = 0x800A4DA0; // type:func -Math3D_Vec3fDistSq = 0x800A4DC8; // type:func -Math3D_Vec3f_DistXYZ = 0x800A4DF0; // type:func -Math3D_DistXYZ16toF = 0x800A4E10; // type:func -Math3D_Vec3fDiff_CrossZ = 0x800A4E88; // type:func -Math3D_Vec3fDiff_CrossX = 0x800A4EC8; // type:func -Math3D_Vec3fDiff_CrossY = 0x800A4F08; // type:func -Math3D_Vec3f_Cross = 0x800A4F48; // type:func -Math3D_SurfaceNorm = 0x800A4FBC; // type:func -Math3D_PointRelativeToCubeFaces = 0x800A5024; // type:func -Math3D_PointRelativeToCubeEdges = 0x800A50D0; // type:func -Math3D_PointRelativeToCubeVertices = 0x800A5280; // type:func -Math3D_LineVsCube = 0x800A53FC; // type:func -Math3D_LineVsCubeShort = 0x800A5E74; // type:func -Math3D_RotateXZPlane = 0x800A5FE0; // type:func -Math3D_DefPlane = 0x800A606C; // type:func -Math3D_Planef = 0x800A6180; // type:func -Math3D_Plane = 0x800A61C0; // type:func -Math3D_UDistPlaneToPos = 0x800A61FC; // type:func -Math3D_DistPlaneToPos = 0x800A6234; // type:func -Math3D_TriChkPointParaYImpl = 0x800A62B8; // type:func -Math3D_TriChkPointParaYDeterminate = 0x800A65D4; // type:func -Math3D_TriChkPointParaYSlopedY = 0x800A661C; // type:func -Math3D_TriChkPointParaYIntersectDist = 0x800A666C; // type:func -Math3D_TriChkPointParaYIntersectInsideTri = 0x800A671C; // type:func -Math3D_TriChkPointParaY = 0x800A67C8; // type:func -Math3D_TriChkLineSegParaYIntersect = 0x800A6844; // type:func -Math3D_TriChkPointParaYDist = 0x800A69B8; // type:func -Math3D_TriChkPointParaXImpl = 0x800A6A2C; // type:func -Math3D_TriChkPointParaXDeterminate = 0x800A6D48; // type:func -Math3D_TriChkPointParaXIntersect = 0x800A6D90; // type:func -Math3D_TriChkPointParaX = 0x800A6E44; // type:func -Math3D_TriChkLineSegParaXIntersect = 0x800A6EC0; // type:func -Math3D_TriChkPointParaXDist = 0x800A7048; // type:func -Math3D_TriChkPointParaZImpl = 0x800A70BC; // type:func -Math3D_TriChkPointParaZDeterminate = 0x800A7404; // type:func -Math3D_TriChkPointParaZIntersect = 0x800A744C; // type:func -Math3D_TriChkPointParaZ = 0x800A7500; // type:func -Math3D_TriChkLineSegParaZIntersect = 0x800A757C; // type:func -Math3D_TriChkLineSegParaZDist = 0x800A7708; // type:func -Math3D_LineSegFindPlaneIntersect = 0x800A777C; // type:func -Math3D_LineSegVsPlane = 0x800A7858; // type:func -Math3D_TriLineIntersect = 0x800A7960; // type:func -Math3D_TriNorm = 0x800A7AC4; // type:func -Math3D_PointInSph = 0x800A7B74; // type:func -Math3D_PointDistSqToLine2D = 0x800A7BC4; // type:func -Math3D_LineVsSph = 0x800A7D0C; // type:func -Math3D_GetSphVsTriIntersectPoint = 0x800A7F14; // type:func -Math3D_TriVsSphIntersect = 0x800A8054; // type:func -Math3D_PointInCyl = 0x800A8474; // type:func -Math3D_CylVsLineSeg = 0x800A8530; // type:func -Math3D_CylTriVsIntersect = 0x800A8EF8; // type:func -Math3D_CylVsTri = 0x800A9378; // type:func -Math3D_SphVsSph = 0x800A9398; // type:func -Math3D_SphVsSphOverlap = 0x800A93B8; // type:func -Math3D_SphVsSphOverlapCenterDist = 0x800A93D8; // type:func -Math3D_SphVsCylOverlap = 0x800A94B0; // type:func -Math3D_SphVsCylOverlapCenterDist = 0x800A94D0; // type:func -Math3D_CylVsCylOverlap = 0x800A9640; // type:func -Math3D_CylVsCylOverlapCenterDist = 0x800A9660; // type:func -Math3D_TriVsTriIntersect = 0x800A9830; // type:func -Math3D_XZInSphere = 0x800A9BB0; // type:func -Math3D_XYInSphere = 0x800A9C24; // type:func -Math3D_YZInSphere = 0x800A9C98; // type:func -Math_GetAtan2Tbl = 0x800A9D10; // type:func -Math_Atan2S = 0x800A9D88; // type:func -Math_Atan2F = 0x800A9F00; // type:func -Matrix_Init = 0x800A9F40; // type:func -Matrix_Push = 0x800A9F7C; // type:func -Matrix_Pop = 0x800A9FB4; // type:func -Matrix_Get = 0x800A9FD0; // type:func -Matrix_Put = 0x800A9FF4; // type:func -Matrix_GetCurrent = 0x800AA01C; // type:func -Matrix_Mult = 0x800AA02C; // type:func -Matrix_Translate = 0x800AA084; // type:func -Matrix_Scale = 0x800AA18C; // type:func -Matrix_RotateX = 0x800AA270; // type:func -Matrix_RotateY = 0x800AA424; // type:func -Matrix_RotateZ = 0x800AA5DC; // type:func -Matrix_RotateZYX = 0x800AA790; // type:func -Matrix_TranslateRotateZYX = 0x800AAA4C; // type:func -Matrix_SetTranslateRotateYXZ = 0x800AADA0; // type:func -Matrix_MtxFToMtx = 0x800AAF4C; // type:func -Matrix_ToMtx = 0x800AB168; // type:func -Matrix_NewMtx = 0x800AB190; // type:func -Matrix_MtxFToNewMtx = 0x800AB1BC; // type:func -Matrix_MultVec3f = 0x800AB1E8; // type:func -Matrix_MtxFCopy = 0x800AB2A0; // type:func -Matrix_MtxToMtxF = 0x800AB3A8; // type:func -Matrix_MultVec3fExt = 0x800AB5FC; // type:func -Matrix_Transpose = 0x800AB6AC; // type:func -Matrix_ReplaceRotation = 0x800AB6E4; // type:func -Matrix_MtxFToYXZRotS = 0x800AB7E0; // type:func -Matrix_MtxFToZYXRotS = 0x800AB978; // type:func -Matrix_RotateAxis = 0x800ABB10; // type:func -Matrix_SetTranslateUniformScaleMtxF = 0x800ABF78; // type:func -Matrix_SetTranslateUniformScaleMtx = 0x800ABFE0; // type:func -Matrix_SetTranslateUniformScaleMtx2 = 0x800AC030; // type:func -Matrix_SetTranslateScaleMtx1 = 0x800AC120; // type:func -Matrix_SetTranslateScaleMtx2 = 0x800AC240; // type:func -SysUcode_GetUCodeBoot = 0x800AC340; // type:func -SysUcode_GetUCodeBootSize = 0x800AC350; // type:func -SysUcode_GetUCode = 0x800AC36C; // type:func -SysUcode_GetUCodeData = 0x800AC37C; // type:func -RumbleMgr_Update = 0x800AC390; // type:func -RumbleMgr_Init = 0x800AC6A0; // type:func -RumbleMgr_Destroy = 0x800AC6D8; // type:func -func_800D31A0 = 0x800AC6F0; // type:func -IrqMgr_AddClient = 0x800AC720; // type:func -IrqMgr_RemoveClient = 0x800AC7AC; // type:func -IrqMgr_SendMesgToClients = 0x800AC838; // type:func -IrqMgr_JamMesgToClients = 0x800AC89C; // type:func -IrqMgr_HandlePreNMI = 0x800AC900; // type:func -IrqMgr_CheckStacks = 0x800AC998; // type:func -IrqMgr_HandlePreNMI450 = 0x800AC9B8; // type:func -IrqMgr_HandlePreNMI480 = 0x800ACA34; // type:func -IrqMgr_HandlePreNMI500 = 0x800ACAC8; // type:func -IrqMgr_HandleRetrace = 0x800ACAEC; // type:func -IrqMgr_ThreadEntry = 0x800ACBA4; // type:func -IrqMgr_Init = 0x800ACC78; // type:func -Fault_SleepImpl = 0x800ACD40; // type:func -Fault_ClientProcessThread = 0x800ACDB0; // type:func -Fault_ClientRunTask = 0x800ACE24; // type:func -Fault_ProcessClient = 0x800ACFA8; // type:func -Fault_AddClient = 0x800ACFFC; // type:func -Fault_RemoveClient = 0x800AD0E0; // type:func -Fault_AddAddrConvClient = 0x800AD1D8; // type:func -Fault_RemoveAddrConvClient = 0x800AD2B0; // type:func -Fault_ConvertAddress = 0x800AD3A8; // type:func -Fault_Sleep = 0x800AD45C; // type:func -Fault_PadCallback = 0x800AD498; // type:func -Fault_UpdatePadImpl = 0x800AD4D4; // type:func -Fault_WaitForInputImpl = 0x800AD520; // type:func -Fault_WaitForInput = 0x800AD66C; // type:func -Fault_DrawRec = 0x800AD6B8; // type:func -Fault_FillScreenBlack = 0x800AD718; // type:func -Fault_FillScreenRed = 0x800AD76C; // type:func -Fault_DrawCornerRec = 0x800AD7C0; // type:func -Fault_PrintFReg = 0x800AD814; // type:func -Fault_LogFReg = 0x800AD8C0; // type:func -Fault_PrintFPCSR = 0x800AD970; // type:func -Fault_LogFPCSR = 0x800ADA14; // type:func -Fault_PrintThreadContext = 0x800ADAAC; // type:func -Fault_LogThreadContext = 0x800ADDC8; // type:func -Fault_FindFaultedThread = 0x800AE0C4; // type:func -Fault_Wait5Seconds = 0x800AE14C; // type:func -Fault_WaitForButtonCombo = 0x800AE1DC; // type:func -Fault_DrawMemDumpContents = 0x800AE4A8; // type:func -Fault_DrawMemDump = 0x800AE614; // type:func -Fault_WalkStack = 0x800AE818; // type:func -Fault_DrawStackTrace = 0x800AE9A8; // type:func -Fault_LogStackTrace = 0x800AEB28; // type:func -Fault_ResumeThread = 0x800AEC98; // type:func -Fault_DisplayFrameBuffer = 0x800AED14; // type:func -Fault_ProcessClients = 0x800AEDD4; // type:func -Fault_UpdatePad = 0x800AEEB4; // type:func -Fault_ThreadEntry = 0x800AEEF0; // type:func -Fault_SetFrameBuffer = 0x800AF250; // type:func -Fault_Init = 0x800AF2A4; // type:func -Fault_HungupFaultClient = 0x800AF3D8; // type:func -Fault_AddHungupAndCrashImpl = 0x800AF4D4; // type:func -Fault_AddHungupAndCrash = 0x800AF52C; // type:func -FaultDrawer_SetOsSyncPrintfEnabled = 0x800AF590; // type:func -FaultDrawer_DrawRecImpl = 0x800AF5A0; // type:func -FaultDrawer_DrawChar = 0x800AF6BC; // type:func -FaultDrawer_ColorToPrintColor = 0x800AF82C; // type:func -FaultDrawer_UpdatePrintColor = 0x800AF8DC; // type:func -FaultDrawer_SetForeColor = 0x800AF97C; // type:func -FaultDrawer_SetBackColor = 0x800AF9C4; // type:func -FaultDrawer_SetFontColor = 0x800AFA0C; // type:func -FaultDrawer_SetCharPad = 0x800AFA54; // type:func -FaultDrawer_SetCursor = 0x800AFA84; // type:func -FaultDrawer_FillScreen = 0x800AFB7C; // type:func -FaultDrawer_PrintCallback = 0x800AFC0C; // type:func -FaultDrawer_VPrintf = 0x800AFE18; // type:func -FaultDrawer_Printf = 0x800AFE68; // type:func -FaultDrawer_DrawText = 0x800AFEB8; // type:func -FaultDrawer_SetDrawerFB = 0x800AFF08; // type:func -FaultDrawer_SetInputCallback = 0x800AFF34; // type:func -FaultDrawer_WritebackFBDCache = 0x800AFF44; // type:func -FaultDrawer_Init = 0x800AFFA0; // type:func -Kanji_OffsetFromShiftJIS = 0x800B0010; // type:func -AudioSynth_InitNextRingBuf = 0x800B0B00; // type:func -func_800DB03C = 0x800B0E7C; // type:func -AudioSynth_Update = 0x800B0F04; // type:func -func_800DB2C0 = 0x800B1100; // type:func -AudioSynth_LoadRingBuffer1AtTemp = 0x800B1170; // type:func -AudioSynth_SaveRingBuffer1AtTemp = 0x800B1218; // type:func -AudioSynth_LeakReverb = 0x800B12C0; // type:func -func_800DB4E4 = 0x800B1324; // type:func -func_800DB680 = 0x800B14C0; // type:func -func_800DB828 = 0x800B1668; // type:func -AudioSynth_FilterReverb = 0x800B1880; // type:func -AudioSynth_MaybeMixRingBuffer1 = 0x800B1928; // type:func -func_800DBB94 = 0x800B19D4; // type:func -AudioSynth_ClearBuffer = 0x800B19DC; // type:func -func_800DBBBC = 0x800B19FC; // type:func -func_800DBBC4 = 0x800B1A04; // type:func -func_800DBBCC = 0x800B1A0C; // type:func -AudioSynth_Mix = 0x800B1A14; // type:func -func_800DBC08 = 0x800B1A48; // type:func -func_800DBC10 = 0x800B1A50; // type:func -func_800DBC18 = 0x800B1A58; // type:func -AudioSynth_SetBuffer = 0x800B1A60; // type:func -func_800DBC54 = 0x800B1A94; // type:func -func_800DBC5C = 0x800B1A9C; // type:func -AudioSynth_DMemMove = 0x800B1AA4; // type:func -func_800DBC90 = 0x800B1AD0; // type:func -func_800DBC98 = 0x800B1AD8; // type:func -func_800DBCA0 = 0x800B1AE0; // type:func -func_800DBCA8 = 0x800B1AE8; // type:func -AudioSynth_InterL = 0x800B1AF0; // type:func -AudioSynth_EnvSetup1 = 0x800B1B14; // type:func -func_800DBD08 = 0x800B1B48; // type:func -AudioSynth_LoadBuffer = 0x800B1B50; // type:func -AudioSynth_SaveBuffer = 0x800B1B78; // type:func -AudioSynth_EnvSetup2 = 0x800B1BA0; // type:func -func_800DBD7C = 0x800B1BBC; // type:func -func_800DBD84 = 0x800B1BC4; // type:func -func_800DBD8C = 0x800B1BCC; // type:func -AudioSynth_S8Dec = 0x800B1BD4; // type:func -AudioSynth_HiLoGain = 0x800B1BF0; // type:func -AudioSynth_UnkCmd19 = 0x800B1C24; // type:func -func_800DBE18 = 0x800B1C58; // type:func -func_800DBE20 = 0x800B1C60; // type:func -func_800DBE28 = 0x800B1C68; // type:func -func_800DBE30 = 0x800B1C70; // type:func -AudioSynth_UnkCmd3 = 0x800B1C78; // type:func -func_800DBE5C = 0x800B1C9C; // type:func -func_800DBE64 = 0x800B1CA4; // type:func -func_800DBE6C = 0x800B1CAC; // type:func -AudioSynth_LoadFilterBuffer = 0x800B1CB4; // type:func -AudioSynth_LoadFilterSize = 0x800B1CD8; // type:func -AudioSynth_LoadRingBuffer1 = 0x800B1CF0; // type:func -AudioSynth_LoadRingBuffer2 = 0x800B1D9C; // type:func -AudioSynth_LoadRingBufferPart = 0x800B1E48; // type:func -AudioSynth_SaveRingBufferPart = 0x800B1EB4; // type:func -AudioSynth_SaveBufferOffset = 0x800B1F20; // type:func -AudioSynth_MaybeLoadRingBuffer2 = 0x800B1F64; // type:func -AudioSynth_LoadReverbSamples = 0x800B1FA4; // type:func -AudioSynth_SaveReverbSamples = 0x800B2018; // type:func -AudioSynth_SaveRingBuffer2 = 0x800B211C; // type:func -AudioSynth_DoOneAudioUpdate = 0x800B21C4; // type:func -AudioSynth_ProcessNote = 0x800B2750; // type:func -AudioSynth_FinalResample = 0x800B346C; // type:func -AudioSynth_ProcessEnvelope = 0x800B350C; // type:func -AudioSynth_LoadWaveSamples = 0x800B3834; // type:func -AudioSynth_ApplyHaasEffect = 0x800B39A4; // type:func -AudioHeap_CalculateAdsrDecay = 0x800B3C60; // type:func -AudioHeap_InitAdsrDecayTable = 0x800B3C7C; // type:func -AudioHeap_ResetLoadStatus = 0x800B3DC0; // type:func -AudioHeap_DiscardFont = 0x800B3E88; // type:func -AudioHeap_ReleaseNotesForFont = 0x800B3F6C; // type:func -AudioHeap_DiscardSequence = 0x800B3FF4; // type:func -AudioHeap_WritebackDCache = 0x800B4078; // type:func -AudioHeap_AllocZeroedAttemptExternal = 0x800B4098; // type:func -AudioHeap_AllocAttemptExternal = 0x800B40F0; // type:func -AudioHeap_AllocDmaMemory = 0x800B4148; // type:func -AudioHeap_AllocDmaMemoryZeroed = 0x800B4184; // type:func -AudioHeap_AllocZeroed = 0x800B41C0; // type:func -AudioHeap_Alloc = 0x800B421C; // type:func -AudioHeap_InitPool = 0x800B4274; // type:func -AudioHeap_InitPersistentCache = 0x800B429C; // type:func -AudioHeap_InitTemporaryCache = 0x800B42B0; // type:func -AudioHeap_ResetPool = 0x800B42E0; // type:func -AudioHeap_PopPersistentCache = 0x800B42F0; // type:func -AudioHeap_InitMainPools = 0x800B4430; // type:func -AudioHeap_InitSessionPools = 0x800B4490; // type:func -AudioHeap_InitCachePools = 0x800B4514; // type:func -AudioHeap_InitPersistentPoolsAndCaches = 0x800B4598; // type:func -AudioHeap_InitTemporaryPoolsAndCaches = 0x800B465C; // type:func -AudioHeap_AllocCached = 0x800B4720; // type:func -AudioHeap_SearchCaches = 0x800B4EB4; // type:func -AudioHeap_SearchRegularCaches = 0x800B4F0C; // type:func -func_800DF1D8 = 0x800B5018; // type:func -AudioHeap_ClearFilter = 0x800B53EC; // type:func -AudioHeap_LoadLowPassFilter = 0x800B541C; // type:func -AudioHeap_LoadHighPassFilter = 0x800B5470; // type:func -AudioHeap_LoadFilter = 0x800B54C8; // type:func -AudioHeap_UpdateReverb = 0x800B55FC; // type:func -AudioHeap_UpdateReverbs = 0x800B5604; // type:func -AudioHeap_ClearCurrentAiBuffer = 0x800B56C8; // type:func -AudioHeap_ResetStep = 0x800B5734; // type:func -AudioHeap_Init = 0x800B5A38; // type:func -AudioHeap_SearchPermanentCache = 0x800B6328; // type:func -AudioHeap_AllocPermanent = 0x800B6380; // type:func -AudioHeap_AllocSampleCache = 0x800B6404; // type:func -AudioHeap_InitSampleCaches = 0x800B6474; // type:func -AudioHeap_AllocTemporarySampleCacheEntry = 0x800B650C; // type:func -AudioHeap_UnapplySampleCacheForFont = 0x800B67A4; // type:func -AudioHeap_DiscardSampleCacheEntry = 0x800B6918; // type:func -AudioHeap_UnapplySampleCache = 0x800B69F4; // type:func -AudioHeap_AllocPersistentSampleCacheEntry = 0x800B6A38; // type:func -AudioHeap_DiscardSampleCacheForFont = 0x800B6AC0; // type:func -AudioHeap_DiscardSampleCaches = 0x800B6AFC; // type:func -AudioHeap_ChangeStorage = 0x800B6C4C; // type:func -AudioHeap_DiscardSampleBank = 0x800B6CAC; // type:func -AudioHeap_ApplySampleBankCache = 0x800B6CD0; // type:func -AudioHeap_ApplySampleBankCacheInternal = 0x800B6CF4; // type:func -AudioHeap_DiscardSampleBanks = 0x800B6F88; // type:func -AudioLoad_DecreaseSampleDmaTtls = 0x800B7030; // type:func -AudioLoad_DmaSampleData = 0x800B711C; // type:func -AudioLoad_InitSampleDmaBuffers = 0x800B7458; // type:func -AudioLoad_IsFontLoadComplete = 0x800B76F0; // type:func -AudioLoad_IsSeqLoadComplete = 0x800B7768; // type:func -AudioLoad_IsSampleLoadComplete = 0x800B77E0; // type:func -AudioLoad_SetFontLoadStatus = 0x800B7858; // type:func -AudioLoad_SetSeqLoadStatus = 0x800B7888; // type:func -AudioLoad_SetSampleFontLoadStatusAndApplyCaches = 0x800B78B8; // type:func -AudioLoad_SetSampleFontLoadStatus = 0x800B7918; // type:func -AudioLoad_InitTable = 0x800B7948; // type:func -AudioLoad_SyncLoadSeqFonts = 0x800B79A8; // type:func -AudioLoad_SyncLoadSeqParts = 0x800B7A58; // type:func -AudioLoad_SyncLoadSample = 0x800B7AB8; // type:func -AudioLoad_SyncLoadInstrument = 0x800B7BA4; // type:func -AudioLoad_AsyncLoad = 0x800B7C74; // type:func -AudioLoad_AsyncLoadSeq = 0x800B7CAC; // type:func -AudioLoad_AsyncLoadSampleBank = 0x800B7CF0; // type:func -AudioLoad_AsyncLoadFont = 0x800B7D34; // type:func -AudioLoad_GetFontsForSequence = 0x800B7D78; // type:func -AudioLoad_DiscardSeqFonts = 0x800B7DBC; // type:func -AudioLoad_DiscardFont = 0x800B7E6C; // type:func -AudioLoad_SyncInitSeqPlayer = 0x800B7F14; // type:func -AudioLoad_SyncInitSeqPlayerSkipTicks = 0x800B7F64; // type:func -AudioLoad_SyncInitSeqPlayerInternal = 0x800B7FBC; // type:func -AudioLoad_SyncLoadSeq = 0x800B8104; // type:func -AudioLoad_GetSampleBank = 0x800B8158; // type:func -AudioLoad_TrySyncLoadSampleBank = 0x800B8178; // type:func -AudioLoad_SyncLoadFont = 0x800B8294; // type:func -AudioLoad_SyncLoad = 0x800B8398; // type:func -AudioLoad_GetRealTableIndex = 0x800B85A8; // type:func -AudioLoad_SearchCaches = 0x800B85E4; // type:func -AudioLoad_GetLoadTable = 0x800B8638; // type:func -AudioLoad_RelocateFont = 0x800B867C; // type:func -AudioLoad_SyncDma = 0x800B88E8; // type:func -AudioLoad_SyncDmaUnkMedium = 0x800B8A0C; // type:func -AudioLoad_Dma = 0x800B8A20; // type:func -AudioLoad_Unused1 = 0x800B8AF8; // type:func -AudioLoad_SyncLoadSimple = 0x800B8B00; // type:func -AudioLoad_AsyncLoadInner = 0x800B8B20; // type:func -AudioLoad_ProcessLoads = 0x800B8E2C; // type:func -AudioLoad_SetDmaHandler = 0x800B8E5C; // type:func -AudioLoad_SetUnusedHandler = 0x800B8E68; // type:func -AudioLoad_InitSoundFont = 0x800B8E74; // type:func -AudioLoad_Init = 0x800B8ED4; // type:func -AudioLoad_InitSlowLoads = 0x800B9240; // type:func -AudioLoad_SlowLoadSample = 0x800B9254; // type:func -AudioLoad_GetFontSample = 0x800B9420; // type:func -AudioLoad_Unused2 = 0x800B94B0; // type:func -AudioLoad_FinishSlowLoad = 0x800B94B8; // type:func -AudioLoad_ProcessSlowLoads = 0x800B952C; // type:func -AudioLoad_DmaSlowCopy = 0x800B96B4; // type:func -AudioLoad_DmaSlowCopyUnkMedium = 0x800B9738; // type:func -AudioLoad_SlowLoadSeq = 0x800B974C; // type:func -AudioLoad_InitAsyncLoads = 0x800B9854; // type:func -AudioLoad_StartAsyncLoadUnkMedium = 0x800B9884; // type:func -AudioLoad_StartAsyncLoad = 0x800B9908; // type:func -AudioLoad_ProcessAsyncLoads = 0x800B9A2C; // type:func -AudioLoad_ProcessAsyncLoadUnkMedium = 0x800B9B50; // type:func -AudioLoad_FinishAsyncLoad = 0x800B9B5C; // type:func -AudioLoad_ProcessAsyncLoad = 0x800B9C98; // type:func -AudioLoad_AsyncDma = 0x800B9DF4; // type:func -AudioLoad_AsyncDmaUnkMedium = 0x800B9E84; // type:func -AudioLoad_RelocateSample = 0x800B9E98; // type:func -AudioLoad_RelocateFontAndPreloadSamples = 0x800B9FD8; // type:func -AudioLoad_ProcessSamplePreloads = 0x800BA3D0; // type:func -AudioLoad_AddToSampleSet = 0x800BA584; // type:func -AudioLoad_GetSamplesForFont = 0x800BA5CC; // type:func -AudioLoad_AddUsedSample = 0x800BA700; // type:func -AudioLoad_PreloadSamplesForFont = 0x800BA758; // type:func -AudioLoad_LoadPermanentSamples = 0x800BABD4; // type:func -AudioLoad_Unused3 = 0x800BAD14; // type:func -AudioLoad_Unused4 = 0x800BAD1C; // type:func -AudioLoad_Unused5 = 0x800BAD24; // type:func -AudioLoad_ScriptLoad = 0x800BAD2C; // type:func -AudioLoad_ProcessScriptLoads = 0x800BAD98; // type:func -AudioLoad_InitScriptLoads = 0x800BADF0; // type:func -AudioThread_Update = 0x800BAE20; // type:func -AudioThread_UpdateImpl = 0x800BAE40; // type:func -AudioThread_ProcessGlobalCmd = 0x800BB3C4; // type:func -AudioThread_SetFadeOutTimer = 0x800BB798; // type:func -AudioThread_SetFadeInTimer = 0x800BB7EC; // type:func -AudioThread_InitMesgQueuesImpl = 0x800BB834; // type:func -AudioThread_QueueCmd = 0x800BB8CC; // type:func -AudioThread_QueueCmdF32 = 0x800BB918; // type:func -AudioThread_QueueCmdS32 = 0x800BB93C; // type:func -AudioThread_QueueCmdS8 = 0x800BB960; // type:func -AudioThread_QueueCmdU16 = 0x800BB990; // type:func -AudioThread_ScheduleProcessCmds = 0x800BB9C0; // type:func -AudioThread_ResetCmdQueue = 0x800BBA50; // type:func -AudioThread_ProcessCmd = 0x800BBA68; // type:func -AudioThread_ProcessCmds = 0x800BBBAC; // type:func -func_800E5E20 = 0x800BBC60; // type:func -AudioThread_GetFontsForSequence = 0x800BBCC4; // type:func -Audio_GetSampleBankIdsOfFont = 0x800BBCE4; // type:func -func_800E5EDC = 0x800BBD1C; // type:func -func_800E5F34 = 0x800BBD74; // type:func -AudioThread_ResetAudioHeap = 0x800BBDC8; // type:func -AudioThread_PreNMIInternal = 0x800BBE64; // type:func -AudioThread_GetChannelIO = 0x800BBEB0; // type:func -AudioThread_GetSeqPlayerIO = 0x800BBF04; // type:func -AudioThread_InitExternalPool = 0x800BBF2C; // type:func -AudioThread_ResetExternalPool = 0x800BBF5C; // type:func -AudioThread_ProcessSeqPlayerCmd = 0x800BBF68; // type:func -AudioThread_ProcessChannelCmd = 0x800BC140; // type:func -AudioThread_Noop1Cmd = 0x800BC2F0; // type:func -AudioThread_Noop1CmdZeroed = 0x800BC338; // type:func -AudioThread_Noop2Cmd = 0x800BC35C; // type:func -AudioThread_WaitForAudioTask = 0x800BC390; // type:func -func_800E6590 = 0x800BC3D0; // type:func -func_800E6680 = 0x800BC4C0; // type:func -func_800E66A0 = 0x800BC4E0; // type:func -func_800E66C0 = 0x800BC500; // type:func -AudioThread_NextRandom = 0x800BC600; // type:func -AudioThread_InitMesgQueues = 0x800BC658; // type:func -Audio_InvalDCache = 0x800BC680; // type:func -Audio_WritebackDCache = 0x800BC6C0; // type:func -osAiSetNextBuffer = 0x800BC700; // type:func -Audio_InitNoteSub = 0x800BC780; // type:func -Audio_NoteSetResamplingRate = 0x800BCBF8; // type:func -Audio_NoteInit = 0x800BCCA8; // type:func -Audio_NoteDisable = 0x800BCD68; // type:func -Audio_ProcessNotes = 0x800BCDCC; // type:func -Audio_GetInstrumentTunedSample = 0x800BD29C; // type:func -Audio_GetInstrumentInner = 0x800BD2D8; // type:func -Audio_GetDrum = 0x800BD3AC; // type:func -Audio_GetSoundEffect = 0x800BD490; // type:func -Audio_SetFontInstrument = 0x800BD584; // type:func -Audio_SeqLayerDecayRelease = 0x800BD6C8; // type:func -Audio_SeqLayerNoteDecay = 0x800BD9A0; // type:func -Audio_SeqLayerNoteRelease = 0x800BD9C0; // type:func -Audio_BuildSyntheticWave = 0x800BD9E0; // type:func -Audio_InitSyntheticWave = 0x800BDAE4; // type:func -Audio_InitNoteList = 0x800BDB3C; // type:func -Audio_InitNoteLists = 0x800BDB4C; // type:func -Audio_InitNoteFreeList = 0x800BDB9C; // type:func -Audio_NotePoolClear = 0x800BDC40; // type:func -Audio_NotePoolFill = 0x800BDDA0; // type:func -Audio_AudioListPushFront = 0x800BDEDC; // type:func -Audio_AudioListRemove = 0x800BDF1C; // type:func -Audio_FindNodeWithPrioLessThan = 0x800BDF48; // type:func -Audio_NoteInitForLayer = 0x800BDFC8; // type:func -func_800E82C0 = 0x800BE100; // type:func -Audio_NoteReleaseAndTakeOwnership = 0x800BE134; // type:func -Audio_AllocNoteFromDisabled = 0x800BE160; // type:func -Audio_AllocNoteFromDecaying = 0x800BE1AC; // type:func -Audio_AllocNoteFromActive = 0x800BE1FC; // type:func -Audio_AllocNote = 0x800BE2F4; // type:func -Audio_NoteInitAll = 0x800BE5C8; // type:func -Audio_SequenceChannelProcessSound = 0x800BE700; // type:func -Audio_SequencePlayerProcessSound = 0x800BE8C8; // type:func -Audio_GetPortamentoFreqScale = 0x800BEA14; // type:func -Audio_GetVibratoPitchChange = 0x800BEA70; // type:func -Audio_GetVibratoFreqScale = 0x800BEAA8; // type:func -Audio_NoteVibratoUpdate = 0x800BECE4; // type:func -Audio_NoteVibratoInit = 0x800BED40; // type:func -Audio_NotePortamentoInit = 0x800BEDF8; // type:func -Audio_AdsrInit = 0x800BEE24; // type:func -Audio_AdsrUpdate = 0x800BEE44; // type:func -AudioSeq_GetScriptControlFlowArgument = 0x800BF180; // type:func -AudioSeq_HandleScriptFlowControl = 0x800BF1E8; // type:func -AudioSeq_InitSequenceChannel = 0x800BF3C4; // type:func -AudioSeq_SeqChannelSetLayer = 0x800BF518; // type:func -AudioSeq_SeqLayerDisable = 0x800BF63C; // type:func -AudioSeq_SeqLayerFree = 0x800BF6B8; // type:func -AudioSeq_SequenceChannelDisable = 0x800BF708; // type:func -AudioSeq_SequencePlayerSetupChannels = 0x800BF774; // type:func -AudioSeq_SequencePlayerDisableChannels = 0x800BF86C; // type:func -AudioSeq_SequenceChannelEnable = 0x800BF8EC; // type:func -AudioSeq_SequencePlayerDisableAsFinished = 0x800BF984; // type:func -AudioSeq_SequencePlayerDisable = 0x800BF9AC; // type:func -AudioSeq_AudioListPushBack = 0x800BFA68; // type:func -AudioSeq_AudioListPopBack = 0x800BFAA8; // type:func -AudioSeq_InitLayerFreelist = 0x800BFAE8; // type:func -AudioSeq_ScriptReadU8 = 0x800BFB88; // type:func -AudioSeq_ScriptReadS16 = 0x800BFB9C; // type:func -AudioSeq_ScriptReadCompressedU16 = 0x800BFBD4; // type:func -AudioSeq_SeqLayerProcessScript = 0x800BFC14; // type:func -AudioSeq_SeqLayerProcessScriptStep1 = 0x800BFD18; // type:func -AudioSeq_SeqLayerProcessScriptStep5 = 0x800BFDA4; // type:func -AudioSeq_SeqLayerProcessScriptStep2 = 0x800BFF00; // type:func -AudioSeq_SeqLayerProcessScriptStep4 = 0x800C0280; // type:func -AudioSeq_SeqLayerProcessScriptStep3 = 0x800C0920; // type:func -AudioSeq_SetChannelPriorities = 0x800C0D34; // type:func -AudioSeq_GetInstrument = 0x800C0D64; // type:func -AudioSeq_SetInstrument = 0x800C0DD8; // type:func -AudioSeq_SequenceChannelSetVolume = 0x800C0E84; // type:func -AudioSeq_SequenceChannelProcessScript = 0x800C0EA8; // type:func -AudioSeq_SequencePlayerProcessSequence = 0x800C1B98; // type:func -AudioSeq_ProcessSequences = 0x800C23A4; // type:func -AudioSeq_SkipForwardSequence = 0x800C2458; // type:func -AudioSeq_ResetSequencePlayer = 0x800C24A8; // type:func -AudioSeq_InitSequencePlayerChannels = 0x800C2574; // type:func -AudioSeq_InitSequencePlayer = 0x800C264C; // type:func -AudioSeq_InitSequencePlayers = 0x800C271C; // type:func -AudioOcarina_SetCustomButtonMapping = 0x800C27A0; // type:func -AudioOcarina_ReadControllerInput = 0x800C2840; // type:func -AudioOcarina_BendPitchTwoSemitones = 0x800C28A0; // type:func -AudioOcarina_GetPlayingState = 0x800C2930; // type:func -AudioOcarina_MapNoteToButton = 0x800C2974; // type:func -AudioOcarina_MapNotesToScarecrowButtons = 0x800C29BC; // type:func -AudioOcarina_Start = 0x800C2A44; // type:func -AudioOcarina_CheckIfStartedSong = 0x800C2BFC; // type:func -AudioOcarina_CheckSongsWithMusicStaff = 0x800C2C38; // type:func -AudioOcarina_CheckSongsWithoutMusicStaff = 0x800C3040; // type:func -AudioOcarina_PlayControllerInput = 0x800C3298; // type:func -AudioOcarina_EnableInput = 0x800C3688; // type:func -AudioOcarina_SetInstrument = 0x800C3698; // type:func -AudioOcarina_SetPlaybackSong = 0x800C377C; // type:func -AudioOcarina_PlaybackSong = 0x800C387C; // type:func -AudioOcarina_SetRecordingSong = 0x800C3BA8; // type:func -AudioOcarina_SetRecordingState = 0x800C3FB0; // type:func -AudioOcarina_UpdateRecordingStaff = 0x800C40DC; // type:func -AudioOcarina_UpdatePlayingStaff = 0x800C4114; // type:func -AudioOcarina_UpdatePlaybackStaff = 0x800C4158; // type:func -AudioOcarina_GetRecordingStaff = 0x800C4208; // type:func -AudioOcarina_GetPlayingStaff = 0x800C4214; // type:func -AudioOcarina_GetPlaybackStaff = 0x800C4238; // type:func -AudioOcarina_RecordSong = 0x800C4244; // type:func -AudioOcarina_MemoryGameInit = 0x800C43BC; // type:func -AudioOcarina_MemoryGameNextNote = 0x800C442C; // type:func -AudioOcarina_Update = 0x800C4534; // type:func -AudioOcarina_PlayLongScarecrowSong = 0x800C4664; // type:func -AudioOcarina_ResetStaffs = 0x800C4770; // type:func -AudioDebug_Draw = 0x800C47BC; // type:func -AudioDebug_ScrPrt = 0x800C47C4; // type:func -Audio_Update = 0x800C47D0; // type:func -func_800F3138 = 0x800C4874; // type:func -func_800F3140 = 0x800C487C; // type:func -func_800F314C = 0x800C4888; // type:func -Audio_ComputeSfxVolume = 0x800C48C4; // type:func -Audio_ComputeSfxReverb = 0x800C4A2C; // type:func -Audio_ComputeSfxPanSigned = 0x800C4BA4; // type:func -Audio_ComputeSfxFreqScale = 0x800C4D28; // type:func -func_800F37B8 = 0x800C4EF4; // type:func -func_800F3990 = 0x800C50CC; // type:func -Audio_SetSfxProperties = 0x800C5144; // type:func -Audio_ResetSfxChannelState = 0x800C561C; // type:func -Audio_PlayCutsceneEffectsSequence = 0x800C5684; // type:func -func_800F3F84 = 0x800C56CC; // type:func -func_800F4010 = 0x800C5758; // type:func -func_800F4138 = 0x800C5878; // type:func -func_800F4190 = 0x800C58D0; // type:func -Audio_PlaySfxRandom = 0x800C5920; // type:func -func_800F4254 = 0x800C5994; // type:func -func_800F436C = 0x800C5AAC; // type:func -func_800F4414 = 0x800C5B54; // type:func -func_800F44EC = 0x800C5C2C; // type:func -func_800F4524 = 0x800C5C64; // type:func -func_800F4578 = 0x800C5CB8; // type:func -func_800F45D0 = 0x800C5D10; // type:func -Audio_PlaySfxRiver = 0x800C5D74; // type:func -Audio_PlaySfxWaterfall = 0x800C5E20; // type:func -Audio_StepFreqLerp = 0x800C5EC4; // type:func -Audio_SetBgmVolumeOffDuringFanfare = 0x800C5EFC; // type:func -Audio_SetBgmVolumeOnDuringFanfare = 0x800C5F3C; // type:func -Audio_SetMainBgmVolume = 0x800C5F7C; // type:func -Audio_SetGanonsTowerBgmVolumeLevel = 0x800C5FB0; // type:func -Audio_SetGanonsTowerBgmVolume = 0x800C605C; // type:func -Audio_LowerMainBgmVolume = 0x800C6194; // type:func -Audio_UpdateRiverSoundVolumes = 0x800C61B0; // type:func -Audio_PlaySfxIncreasinglyTransposed = 0x800C6298; // type:func -Audio_ResetIncreasingTranspose = 0x800C6328; // type:func -Audio_PlaySfxTransposed = 0x800C6334; // type:func -func_800F4C58 = 0x800C6398; // type:func -func_800F4E30 = 0x800C6570; // type:func -Audio_ClearSariaBgm = 0x800C680C; // type:func -Audio_ClearSariaBgmAtPos = 0x800C682C; // type:func -Audio_SplitBgmChannels = 0x800C684C; // type:func -Audio_PlaySariaBgm = 0x800C69E0; // type:func -Audio_ClearSariaBgm2 = 0x800C6C44; // type:func -Audio_PlayMorningSceneSequence = 0x800C6C50; // type:func -Audio_PlaySceneSequence = 0x800C6C90; // type:func -Audio_UpdateSceneSequenceResumePoint = 0x800C6DE8; // type:func -Audio_PlayWindmillBgm = 0x800C6E58; // type:func -Audio_SetMainBgmTempoFreqAfterFanfare = 0x800C6E8C; // type:func -Audio_SetFastTempoForTimedMinigame = 0x800C7058; // type:func -Audio_PlaySequenceInCutscene = 0x800C709C; // type:func -Audio_StopSequenceInCutscene = 0x800C7128; // type:func -Audio_IsSequencePlaying = 0x800C7198; // type:func -func_800F5ACC = 0x800C720C; // type:func -func_800F5B58 = 0x800C7280; // type:func -func_800F5BF0 = 0x800C7318; // type:func -func_800F5C2C = 0x800C7354; // type:func -Audio_PlayFanfare = 0x800C738C; // type:func -Audio_UpdateFanfare = 0x800C7420; // type:func -Audio_PlaySequenceWithSeqPlayerIO = 0x800C7540; // type:func -Audio_SetSequenceMode = 0x800C75B8; // type:func -Audio_SetBgmEnemyVolume = 0x800C7834; // type:func -Audio_UpdateMalonSinging = 0x800C7988; // type:func -func_800F64E0 = 0x800C7BEC; // type:func -Audio_ToggleMalonSinging = 0x800C7C90; // type:func -Audio_SetEnvReverb = 0x800C7DCC; // type:func -Audio_SetCodeReverb = 0x800C7DE8; // type:func -func_800F6700 = 0x800C7E0C; // type:func -Audio_SetBaseFilter = 0x800C7EAC; // type:func -Audio_SetExtraFilter = 0x800C7F34; // type:func -Audio_SetCutsceneFlag = 0x800C7FC8; // type:func -Audio_PlaySfxGeneralIfNotInCutscene = 0x800C7FE0; // type:func -Audio_PlaySfxIfNotInCutscene = 0x800C8028; // type:func -func_800F6964 = 0x800C8070; // type:func -Audio_StopBgmAndFanfare = 0x800C81BC; // type:func -func_800F6B3C = 0x800C8248; // type:func -Audio_DisableAllSeq = 0x800C8274; // type:func -func_800F6BB8 = 0x800C82C4; // type:func -func_800F6BDC = 0x800C82E8; // type:func -Audio_PreNMI = 0x800C8320; // type:func -func_800F6C34 = 0x800C8340; // type:func -Audio_SetNatureAmbienceChannelIO = 0x800C8464; // type:func -Audio_StartNatureAmbienceSequence = 0x800C8578; // type:func -Audio_PlayNatureAmbienceSequence = 0x800C867C; // type:func -Audio_Init = 0x800C87C0; // type:func -Audio_InitSound = 0x800C87E4; // type:func -func_800F7170 = 0x800C8838; // type:func -func_800F71BC = 0x800C8884; // type:func -func_800F7208 = 0x800C88D0; // type:func -Audio_SetSfxBanksMute = 0x800C8930; // type:func -Audio_QueueSeqCmdMute = 0x800C8988; // type:func -Audio_ClearBGMMute = 0x800C89EC; // type:func -Audio_PlaySfxGeneral = 0x800C8A5C; // type:func -Audio_RemoveMatchingSfxRequests = 0x800C8ADC; // type:func -Audio_ProcessSfxRequest = 0x800C8C7C; // type:func -Audio_RemoveSfxBankEntry = 0x800C9118; // type:func -Audio_ChooseActiveSfx = 0x800C92B0; // type:func -Audio_PlayActiveSfx = 0x800C99F0; // type:func -Audio_StopSfxByBank = 0x800C9D10; // type:func -func_800F8884 = 0x800C9DF4; // type:func -Audio_StopSfxByPosAndBank = 0x800C9F10; // type:func -Audio_StopSfxByPos = 0x800C9F58; // type:func -Audio_StopSfxByPosAndId = 0x800C9FB4; // type:func -Audio_StopSfxByTokenAndId = 0x800CA110; // type:func -Audio_StopSfxById = 0x800CA274; // type:func -Audio_ProcessSfxRequests = 0x800CA3AC; // type:func -Audio_SetUnusedBankLerp = 0x800CA410; // type:func -Audio_StepUnusedBankLerp = 0x800CA4A4; // type:func -func_800F8F88 = 0x800CA4F8; // type:func -Audio_IsSfxPlaying = 0x800CA564; // type:func -Audio_ResetSfx = 0x800CA5CC; // type:func -Audio_StartSequence = 0x800CA790; // type:func -Audio_StopSequence = 0x800CA914; // type:func -Audio_ProcessSeqCmd = 0x800CA99C; // type:func -Audio_QueueSeqCmd = 0x800CB460; // type:func -Audio_ProcessSeqCmds = 0x800CB488; // type:func -Audio_GetActiveSeqId = 0x800CB508; // type:func -Audio_IsSeqCmdNotQueued = 0x800CB570; // type:func -Audio_ResetSequenceRequests = 0x800CB5C8; // type:func -Audio_ReplaceSeqCmdSetupOpVolRestore = 0x800CB5E0; // type:func -Audio_SetVolumeScale = 0x800CB694; // type:func -Audio_UpdateActiveSequences = 0x800CB830; // type:func -func_800FAD34 = 0x800CC188; // type:func -Audio_ResetActiveSequences = 0x800CC24C; // type:func -Audio_ResetActiveSequencesAndVolume = 0x800CC308; // type:func -GfxPrint_Setup = 0x800CC3B0; // type:func -GfxPrint_SetColor = 0x800CC7FC; // type:func -GfxPrint_SetPosPx = 0x800CC848; // type:func -GfxPrint_SetPos = 0x800CC86C; // type:func -GfxPrint_SetBasePosPx = 0x800CC894; // type:func -GfxPrint_PrintCharImpl = 0x800CC8A8; // type:func -GfxPrint_PrintChar = 0x800CCD3C; // type:func -GfxPrint_PrintStringWithSize = 0x800CCEFC; // type:func -GfxPrint_PrintString = 0x800CCF58; // type:func -GfxPrint_Callback = 0x800CCFB0; // type:func -GfxPrint_Init = 0x800CCFDC; // type:func -GfxPrint_Destroy = 0x800CD064; // type:func -GfxPrint_Open = 0x800CD06C; // type:func -GfxPrint_Close = 0x800CD0A0; // type:func -GfxPrint_VPrintf = 0x800CD0D0; // type:func -GfxPrint_Printf = 0x800CD0F0; // type:func -RcpUtils_PrintRegisterStatus = 0x800CD120; // type:func -RcpUtils_Reset = 0x800CD148; // type:func -Overlay_AllocateAndLoad = 0x800CD180; // type:func -Overlay_Relocate = 0x800CD1E0; // type:func -Overlay_Load = 0x800CD420; // type:func -func_800FC800 = 0x800CD4F0; // type:func -func_800FC83C = 0x800CD520; // type:func -func_800FC868 = 0x800CD54C; // type:func -func_800FC8D8 = 0x800CD5BC; // type:func -func_800FC948 = 0x800CD62C; // type:func -func_800FCA18 = 0x800CD6FC; // type:func -func_800FCB34 = 0x800CD798; // type:func -SystemHeap_Init = 0x800CD808; // type:func -PadUtils_Init = 0x800CD830; // type:func -func_800FCB70 = 0x800CD850; // type:func -PadUtils_ResetPressRel = 0x800CD858; // type:func -PadUtils_CheckCurExact = 0x800CD864; // type:func -PadUtils_CheckCur = 0x800CD87C; // type:func -PadUtils_CheckPressed = 0x800CD898; // type:func -PadUtils_CheckReleased = 0x800CD8B4; // type:func -PadUtils_GetCurButton = 0x800CD8D0; // type:func -PadUtils_GetPressButton = 0x800CD8D8; // type:func -PadUtils_GetCurX = 0x800CD8E0; // type:func -PadUtils_GetCurY = 0x800CD8E8; // type:func -PadUtils_SetRelXY = 0x800CD8F0; // type:func -PadUtils_GetRelXImpl = 0x800CD8FC; // type:func -PadUtils_GetRelYImpl = 0x800CD904; // type:func -PadUtils_GetRelX = 0x800CD90C; // type:func -PadUtils_GetRelY = 0x800CD92C; // type:func -PadUtils_UpdateRelXY = 0x800CD94C; // type:func -PadSetup_Init = 0x800CDA20; // type:func -Math_FTanF = 0x800CDB60; // type:func -Math_FFloorF = 0x800CDB94; // type:func -Math_FCeilF = 0x800CDBB4; // type:func -Math_FRoundF = 0x800CDBD4; // type:func -Math_FTruncF = 0x800CDBF4; // type:func -Math_FNearbyIntF = 0x800CDC14; // type:func -Math_FAtanTaylorQF = 0x800CDC34; // type:func -Math_FAtanTaylorF = 0x800CDC80; // type:func -Math_FAtanContFracF = 0x800CDDA4; // type:func -Math_FAtanF = 0x800CDEF0; // type:func -Math_FAtan2F = 0x800CDF30; // type:func -Math_FAsinF = 0x800CE018; // type:func -Math_FAcosF = 0x800CE048; // type:func -floorf = 0x800CE070; // type:func -floor = 0x800CE07C; // type:func -lfloorf = 0x800CE088; // type:func -lfloor = 0x800CE098; // type:func -ceilf = 0x800CE0A8; // type:func -ceil = 0x800CE0B4; // type:func -lceilf = 0x800CE0C0; // type:func -lceil = 0x800CE0D0; // type:func -truncf = 0x800CE0E0; // type:func -trunc = 0x800CE0EC; // type:func -ltruncf = 0x800CE0F8; // type:func -ltrunc = 0x800CE108; // type:func -nearbyintf = 0x800CE118; // type:func -nearbyint = 0x800CE124; // type:func -lnearbyintf = 0x800CE130; // type:func -lnearbyint = 0x800CE140; // type:func -roundf = 0x800CE150; // type:func -round = 0x800CE16C; // type:func -lroundf = 0x800CE18C; // type:func -lround = 0x800CE1AC; // type:func -SystemArena_Malloc = 0x800CE1D0; // type:func -SystemArena_MallocR = 0x800CE1F8; // type:func -SystemArena_Realloc = 0x800CE220; // type:func -SystemArena_Free = 0x800CE250; // type:func -SystemArena_Calloc = 0x800CE278; // type:func -SystemArena_GetSizes = 0x800CE2CC; // type:func -SystemArena_Check = 0x800CE304; // type:func -SystemArena_Init = 0x800CE328; // type:func -SystemArena_Cleanup = 0x800CE358; // type:func -SystemArena_IsInitialized = 0x800CE37C; // type:func -Rand_Next = 0x800CE3A0; // type:func -Rand_Seed = 0x800CE3D0; // type:func -Rand_ZeroOne = 0x800CE3DC; // type:func -Rand_Centered = 0x800CE430; // type:func -Rand_Seed_Variable = 0x800CE488; // type:func -Rand_Next_Variable = 0x800CE490; // type:func -Rand_ZeroOne_Variable = 0x800CE4B8; // type:func -Rand_Centered_Variable = 0x800CE504; // type:func -ArenaImpl_LockInit = 0x800CE560; // type:func -ArenaImpl_Lock = 0x800CE58C; // type:func -ArenaImpl_Unlock = 0x800CE5B4; // type:func -ArenaImpl_GetLastBlock = 0x800CE5DC; // type:func -__osMallocInit = 0x800CE640; // type:func -__osMallocAddBlock = 0x800CE690; // type:func -__osMallocCleanup = 0x800CE730; // type:func -__osMallocIsInitialized = 0x800CE750; // type:func -__osMalloc_NoLock = 0x800CE758; // type:func -__osMalloc = 0x800CE884; // type:func -__osMallocR = 0x800CE8C4; // type:func -__osFree_NoLock = 0x800CEA38; // type:func -__osFree = 0x800CEB78; // type:func -__osRealloc = 0x800CEBB0; // type:func -ArenaImpl_GetSizes = 0x800CEFA8; // type:func -ArenaImpl_FaultClient = 0x800CF07C; // type:func -__osCheckArena = 0x800CF250; // type:func -proutSprintf = 0x800CF310; // type:func -vsprintf = 0x800CF334; // type:func -sprintf = 0x800CF384; // type:func -PrintUtils_VPrintf = 0x800CF3E0; // type:func -PrintUtils_Printf = 0x800CF414; // type:func -Sleep_Cycles = 0x800CF440; // type:func -Sleep_Nsec = 0x800CF4AC; // type:func -Sleep_Usec = 0x800CF4FC; // type:func -Sleep_Msec = 0x800CF54C; // type:func -Sleep_Sec = 0x800CF5A0; // type:func -JpegUtils_ProcessQuantizationTable = 0x800CF5E0; // type:func -JpegUtils_ParseHuffmanCodesLengths = 0x800CF648; // type:func -JpegUtils_GetHuffmanCodes = 0x800CF6CC; // type:func -JpegUtils_SetHuffmanTable = 0x800CF738; // type:func -JpegUtils_ProcessHuffmanTableImpl = 0x800CF7E0; // type:func -JpegUtils_ProcessHuffmanTable = 0x800CF89C; // type:func -JpegUtils_SetHuffmanTableOld = 0x800CF974; // type:func -JpegUtils_ProcessHuffmanTableImplOld = 0x800CFA1C; // type:func -JpegDecoder_Decode = 0x800CFAF0; // type:func -JpegDecoder_ProcessMcu = 0x800CFD18; // type:func -JpegDecoder_ParseNextSymbol = 0x800CFEB4; // type:func -JpegDecoder_ReadBits = 0x800CFFF0; // type:func -guScale = 0x800D00E0; // type:func -sinf = 0x800D0190; // type:func -sins = 0x800D0350; // type:func -_VirtualToPhysicalTask = 0x800D03C0; // type:func -osSpTaskLoad = 0x800D04CC; // type:func -osSpTaskStartGo = 0x800D0634; // type:func -__osMotorAccess = 0x800D0680; // type:func -_MakeMotorData = 0x800D07E8; // type:func -osMotorInit = 0x800D08F4; // type:func -__osSiCreateAccessQueue = 0x800D0A50; // type:func -__osSiGetAccess = 0x800D0AA0; // type:func -__osSiRelAccess = 0x800D0AE4; // type:func -osContInit = 0x800D0B10; // type:func -__osContGetInitData = 0x800D0C6C; // type:func -__osPackRequestData = 0x800D0D18; // type:func -osContStartReadData = 0x800D0DF0; // type:func -osContGetReadData = 0x800D0E74; // type:func -__osPackReadData = 0x800D0F00; // type:func -guPerspectiveF = 0x800D0FD0; // type:func -guPerspective = 0x800D1200; // type:func -__osSpRawStartDma = 0x800D1260; // type:func -__osSiRawStartDma = 0x800D12F0; // type:func -osSpTaskYield = 0x800D13A0; // type:func -guMtxIdentF = 0x800D13C0; // type:func -guLookAtF = 0x800D1410; // type:func -guLookAt = 0x800D16B4; // type:func -osStopTimer = 0x800D1730; // type:func -sqrtf = 0x800D1820; // type:func -osAfterPreNMI = 0x800D1830; // type:func -osContStartQuery = 0x800D1850; // type:func -osContGetQuery = 0x800D18CC; // type:func -guLookAtHiliteF = 0x800D18F0; // type:func -guLookAtHilite = 0x800D20B0; // type:func -_Printf = 0x800D2170; // type:func -_Putfld = 0x800D27B8; // type:func -strchr = 0x800D2E50; // type:func -strlen = 0x800D2E90; // type:func -memcpy = 0x800D2EB8; // type:func -__osSpDeviceBusy = 0x800D2EF0; // type:func -guMtxIdent = 0x800D2F20; // type:func -guPositionF = 0x800D2F70; // type:func -guPosition = 0x800D3118; // type:func -osSpTaskYielded = 0x800D3180; // type:func -guRotateF = 0x800D31E0; // type:func -guRotate = 0x800D3364; // type:func -osAiSetFrequency = 0x800D33B0; // type:func -__osGetActiveQueue = 0x800D3500; // type:func -guNormalize = 0x800D3520; // type:func -osDpGetStatus = 0x800D3580; // type:func -osDpSetStatus = 0x800D3590; // type:func -guOrthoF = 0x800D35A0; // type:func -guOrtho = 0x800D36F4; // type:func -cosf = 0x800D3760; // type:func -coss = 0x800D38D0; // type:func -osViSetEvent = 0x800D3900; // type:func -guS2DInitBg = 0x800D3960; // type:func -__osPfsSelectBank = 0x800D3AE0; // type:func -osContSetCh = 0x800D3B60; // type:func -osAiGetLength = 0x800D3BC0; // type:func -guTranslate = 0x800D3BE0; // type:func -__osContRamWrite = 0x800D3CB0; // type:func -__osPfsGetStatus = 0x800D3F00; // type:func -__osPfsRequestOneChannel = 0x800D3FD0; // type:func -__osPfsGetOneChannelData = 0x800D4094; // type:func -__osSumcalc = 0x800D4130; // type:func -__osIdCheckSum = 0x800D41A4; // type:func -__osRepairPackId = 0x800D42A0; // type:func -__osCheckPackId = 0x800D45F0; // type:func -__osGetId = 0x800D4754; // type:func -__osCheckId = 0x800D4900; // type:func -__osPfsRWInode = 0x800D49D4; // type:func -__osContRamRead = 0x800D4CB0; // type:func -__osContAddressCrc = 0x800D4EE0; // type:func -__osContDataCrc = 0x800D4FB0; // type:func -osPfsIsPlug = 0x800D5050; // type:func -__osPfsRequestData = 0x800D51DC; // type:func -__osPfsGetInitData = 0x800D5290; // type:func -osSetTimer = 0x800D5340; // type:func -_Ldtob = 0x800D54D0; // type:func -_Ldunscale = 0x800D5960; // type:func -_Genld = 0x800D5A18; // type:func -ldiv = 0x800D5FE0; // type:func -lldiv = 0x800D6064; // type:func -_Litob = 0x800D6170; // type:func -__osSpGetStatus = 0x800D6410; // type:func -__osSpSetStatus = 0x800D6420; // type:func -osWritebackDCacheAll = 0x800D6430; // type:func -__osGetCurrFaultedThread = 0x800D6460; // type:func -guMtxF2L = 0x800D6480; // type:func -__d_to_ll = 0x800D64F0; // type:func -__f_to_ll = 0x800D650C; // type:func -__d_to_ull = 0x800D6528; // type:func -__f_to_ull = 0x800D65C8; // type:func -__ll_to_d = 0x800D6664; // type:func -__ll_to_f = 0x800D667C; // type:func -__ull_to_d = 0x800D6694; // type:func -__ull_to_f = 0x800D66C8; // type:func -osViGetCurrentFramebuffer = 0x800D6700; // type:func -__osSpSetPc = 0x800D6740; // type:func -sqrt = 0x800D6770; // type:func -absf = 0x800D6780; // type:func -fmodf = 0x800D6790; // type:func -__osMemset = 0x800D67E0; // type:func -__osMemmove = 0x800D6810; // type:func -Message_ResetOcarinaNoteState = 0x800D68A0; // type:func -Message_UpdateOcarinaMemoryGame = 0x800D699C; // type:func -Message_ShouldAdvance = 0x800D6AC0; // type:func -Message_ShouldAdvanceSilent = 0x800D6B84; // type:func -Message_CloseTextbox = 0x800D6BCC; // type:func -Message_HandleChoiceSelection = 0x800D6C44; // type:func -Message_DrawTextChar = 0x800D6E24; // type:func -Message_GrowTextbox = 0x800D7154; // type:func -Message_FindMessageJPN = 0x800D7358; // type:func -Message_FindMessageNES = 0x800D73FC; // type:func -Message_FindCreditsMessage = 0x800D74A0; // type:func -Message_SetTextColor = 0x800D7514; // type:func -Message_DrawTextboxIcon = 0x800D77C8; // type:func -Message_DrawItemIcon = 0x800D7F0C; // type:func -Message_HandleOcarina = 0x800D8258; // type:func -Message_DrawTextWide = 0x800D8468; // type:func -Message_DrawText = 0x800D985C; // type:func -Message_LoadItemIcon = 0x800DAAD4; // type:func -Message_Decode = 0x800DAC74; // type:func -Message_OpenText = 0x800DD19C; // type:func -Message_StartTextbox = 0x800DD6C4; // type:func -Message_ContinueTextbox = 0x800DD730; // type:func -Message_StartOcarinaImpl = 0x800DD800; // type:func -Message_StartOcarina = 0x800DDCB0; // type:func -Message_StartOcarinaSunsSongDisabled = 0x800DDCE0; // type:func -Message_GetState = 0x800DDD14; // type:func -Message_DrawTextBox = 0x800DDE34; // type:func -Message_SetView = 0x800DE2C0; // type:func -Message_DrawMain = 0x800DE308; // type:func -Message_Draw = 0x800E12E0; // type:func -Message_Update = 0x800E137C; // type:func -Message_SetTables = 0x800E1F04; // type:func -GameOver_Init = 0x800E1F40; // type:func -GameOver_FadeInLights = 0x800E1F54; // type:func -GameOver_Update = 0x800E1FBC; // type:func -Interface_Destroy = 0x800E2480; // type:func -Interface_Init = 0x800E24A0; // type:func -Message_Init = 0x800E28A4; // type:func -Regs_InitDataImpl = 0x800E2948; // type:func -Regs_InitData = 0x800E3814; // type:func -ConsoleLogo_Calc = 0x80800000; // type:func -ConsoleLogo_SetupView = 0x80800010; // type:func -ConsoleLogo_Draw = 0x808000A8; // type:func -ConsoleLogo_Main = 0x808005E0; // type:func -ConsoleLogo_Destroy = 0x808006A0; // type:func -ConsoleLogo_Init = 0x808006C0; // type:func -MapSelect_LoadTitle = 0x80800850; // type:func -MapSelect_LoadGame = 0x80800870; // type:func -MapSelect_UpdateMenu = 0x80800960; // type:func -MapSelect_PrintMenu = 0x808012C0; // type:func -MapSelect_PrintLoadingMessage = 0x8080149C; // type:func -MapSelect_PrintAgeSetting = 0x80801528; // type:func -MapSelect_PrintCutsceneSetting = 0x8080159C; // type:func -MapSelect_DrawMenu = 0x80801758; // type:func -MapSelect_DrawLoadingScreen = 0x8080186C; // type:func -MapSelect_Draw = 0x80801954; // type:func -MapSelect_Main = 0x80801A08; // type:func -MapSelect_Destroy = 0x80801A34; // type:func -MapSelect_Init = 0x80801A40; // type:func -TitleSetup_SetupTitleScreen = 0x808034D0; // type:func -func_80803C5C = 0x8080353C; // type:func -TitleSetup_Main = 0x80803548; // type:func -TitleSetup_Destroy = 0x8080358C; // type:func -TitleSetup_Init = 0x80803598; // type:func -FileSelect_SetupCopySource = 0x80803630; // type:func -FileSelect_SelectCopySource = 0x808037C8; // type:func -FileSelect_SetupCopyDest1 = 0x80803B38; // type:func -FileSelect_SetupCopyDest2 = 0x80803CC8; // type:func -FileSelect_SelectCopyDest = 0x80803D90; // type:func -FileSelect_ExitToCopySource1 = 0x80804148; // type:func -FileSelect_ExitToCopySource2 = 0x80804214; // type:func -FileSelect_SetupCopyConfirm1 = 0x80804340; // type:func -FileSelect_SetupCopyConfirm2 = 0x80804564; // type:func -FileSelect_CopyConfirm = 0x808045C0; // type:func -FileSelect_ReturnToCopyDest = 0x808047C8; // type:func -FileSelect_CopyAnim1 = 0x808049FC; // type:func -FileSelect_CopyAnim2 = 0x80804A78; // type:func -FileSelect_CopyAnim3 = 0x80804BC8; // type:func -FileSelect_CopyAnim4 = 0x80804CE4; // type:func -FileSelect_CopyAnim5 = 0x80804DD4; // type:func -FileSelect_ExitCopyToMain = 0x808050D4; // type:func -FileSelect_SetupEraseSelect = 0x80805210; // type:func -FileSelect_EraseSelect = 0x808053E0; // type:func -FileSelect_SetupEraseConfirm1 = 0x8080576C; // type:func -FileSelect_SetupEraseConfirm2 = 0x80805A34; // type:func -FileSelect_EraseConfirm = 0x80805B10; // type:func -FileSelect_ExitToEraseSelect1 = 0x80805CF8; // type:func -FileSelect_ExitToEraseSelect2 = 0x80805DA8; // type:func -FileSelect_EraseAnim1 = 0x80805FC4; // type:func -FileSelect_EraseAnim2 = 0x808061A4; // type:func -FileSelect_EraseAnim3 = 0x80806268; // type:func -FileSelect_ExitEraseToMain = 0x808064D4; // type:func -FileSelect_DrawCharacter = 0x80806670; // type:func -FileSelect_SetKeyboardVtx = 0x80806988; // type:func -FileSelect_SetNameEntryVtx = 0x80806C4C; // type:func -FileSelect_DrawKeyboard = 0x80807930; // type:func -FileSelect_DrawNameEntry = 0x8080847C; // type:func -FileSelect_StartNameEntry = 0x808098E0; // type:func -FileSelect_UpdateKeyboardCursor = 0x80809994; // type:func -FileSelect_StartOptions = 0x8080A374; // type:func -FileSelect_UpdateOptionsMenu = 0x8080A404; // type:func -FileSelect_DrawOptionsImpl = 0x8080A680; // type:func -FileSelect_DrawOptions = 0x8080BA98; // type:func -FileSelect_SetView = 0x8080BAC0; // type:func -FileSelect_QuadTextureIA8 = 0x8080BB44; // type:func -FileSelect_InitModeUpdate = 0x8080BD24; // type:func -FileSelect_InitModeDraw = 0x8080BD7C; // type:func -FileSelect_FadeInMenuElements = 0x8080BD88; // type:func -FileSelect_SplitNumber = 0x8080BEF0; // type:func -FileSelect_StartFadeIn = 0x8080BF64; // type:func -FileSelect_FinishFadeIn = 0x8080BFEC; // type:func -FileSelect_UpdateMainMenu = 0x8080C084; // type:func -FileSelect_UnusedCM31 = 0x8080C928; // type:func -FileSelect_UnusedCMDelay = 0x8080C934; // type:func -FileSelect_RotateToNameEntry = 0x8080C988; // type:func -FileSelect_RotateToOptions = 0x8080C9FC; // type:func -FileSelect_RotateToMain = 0x8080CA70; // type:func -FileSelect_PulsateCursor = 0x8080CAE8; // type:func -FileSelect_ConfigModeUpdate = 0x8080CBE4; // type:func -FileSelect_SetWindowVtx = 0x8080CC20; // type:func -FileSelect_SetWindowContentVtx = 0x8080CEF4; // type:func -FileSelect_DrawFileInfo = 0x8080E1B8; // type:func -FileSelect_DrawWindowContents = 0x8080E934; // type:func -FileSelect_ConfigModeDraw = 0x8080FDE8; // type:func -FileSelect_FadeMainToSelect = 0x808106C8; // type:func -FileSelect_MoveSelectedFileToTop = 0x80810834; // type:func -FileSelect_FadeInFileInfo = 0x80810938; // type:func -FileSelect_ConfirmFile = 0x80810A1C; // type:func -FileSelect_FadeOutFileInfo = 0x80810BF4; // type:func -FileSelect_MoveSelectedFileToSlot = 0x80810CE4; // type:func -FileSelect_FadeOut = 0x80810F3C; // type:func -FileSelect_LoadGame = 0x80810F98; // type:func -FileSelect_SelectModeUpdate = 0x80811160; // type:func -FileSelect_SelectModeDraw = 0x8081119C; // type:func -FileSelect_Main = 0x80811554; // type:func -FileSelect_InitContext = 0x80811B1C; // type:func -FileSelect_Destroy = 0x80812148; // type:func -FileSelect_Init = 0x80812154; // type:func -KaleidoScope_DrawQuestStatus = 0x808135B0; // type:func -KaleidoScope_UpdateQuestStatusPoint = 0x8081599C; // type:func -KaleidoScope_DrawDebugEditorText = 0x808159B0; // type:func -KaleidoScope_DrawDigit = 0x80815CA4; // type:func -KaleidoScope_DrawDebugEditor = 0x80815E18; // type:func -KaleidoScope_DrawEquipmentImage = 0x80817960; // type:func -KaleidoScope_DrawPlayerWork = 0x80817D60; // type:func -KaleidoScope_DrawEquipment = 0x80817F04; // type:func -KaleidoScope_DrawAmmoCount = 0x808193E0; // type:func -KaleidoScope_SetCursorVtx = 0x8081991C; // type:func -KaleidoScope_SetItemCursorVtx = 0x8081994C; // type:func -KaleidoScope_DrawItemSelect = 0x80819978; // type:func -KaleidoScope_UpdateItemEquip = 0x8081A7D4; // type:func -KaleidoScope_DrawDungeonMap = 0x8081B3D0; // type:func -KaleidoScope_DrawWorldMap = 0x8081CBE0; // type:func -KaleidoScope_UpdatePrompt = 0x8081E6B0; // type:func -KaleidoScope_SetupPlayerPreRender = 0x8081E8B0; // type:func -KaleidoScope_ProcessPlayerPreRender = 0x8081E988; // type:func -KaleidoScope_QuadTextureIA4 = 0x8081E9C0; // type:func -KaleidoScope_QuadTextureIA8 = 0x8081EBA0; // type:func -KaleidoScope_OverridePalIndexCI4 = 0x8081ED80; // type:func -KaleidoScope_MoveCursorToSpecialPos = 0x8081EEB8; // type:func -KaleidoScope_DrawQuadTextureRGBA32 = 0x8081EF1C; // type:func -KaleidoScope_SetDefaultCursor = 0x8081F10C; // type:func -KaleidoScope_SetupPageSwitch = 0x8081F1CC; // type:func -KaleidoScope_HandlePageToggles = 0x8081F344; // type:func -KaleidoScope_DrawCursor = 0x8081F474; // type:func -KaleidoScope_DrawPageSections = 0x8081F7C0; // type:func -KaleidoScope_DrawPages = 0x8081FA6C; // type:func -KaleidoScope_DrawInfoPanel = 0x80821248; // type:func -KaleidoScope_UpdateNamePanel = 0x808229D8; // type:func -KaleidoScope_UpdatePageSwitch = 0x80822BD0; // type:func -KaleidoScope_SetView = 0x80822DB0; // type:func -func_80823A0C = 0x80822E2C; // type:func -KaleidoScope_InitVertices = 0x808234BC; // type:func -KaleidoScope_DrawGameOver = 0x80824FFC; // type:func -KaleidoScope_Draw = 0x80825674; // type:func -KaleidoScope_GrayOutTextureRGBA32 = 0x8082589C; // type:func -KaleidoScope_UpdateOpening = 0x80825950; // type:func -KaleidoScope_UpdateCursorSize = 0x80825B40; // type:func -KaleidoScope_LoadDungeonMap = 0x80825E84; // type:func -KaleidoScope_UpdateDungeonMap = 0x80825F20; // type:func -KaleidoScope_Update = 0x80826014; // type:func -PauseMapMark_Init = 0x80828870; // type:func -PauseMapMark_Clear = 0x808288A4; // type:func -PauseMapMark_DrawForDungeon = 0x808288B8; // type:func -PauseMapMark_Draw = 0x80828ECC; // type:func -Player_ZeroSpeedXZ = 0x8082FDA0; // type:func -func_80832224 = 0x8082FDB8; // type:func -func_8083224C = 0x8082FDE0; // type:func -Player_AnimPlayOnce = 0x8082FDFC; // type:func -Player_AnimPlayLoop = 0x8082FE20; // type:func -Player_AnimPlayLoopAdjusted = 0x8082FE44; // type:func -Player_AnimPlayOnceAdjusted = 0x8082FE74; // type:func -func_808322FC = 0x8082FEA4; // type:func -func_80832318 = 0x8082FEC4; // type:func -func_80832340 = 0x8082FEF0; // type:func -Player_DetachHeldActor = 0x8082FF60; // type:func -func_80832440 = 0x8082FFEC; // type:func -Player_PutAwayHeldItem = 0x808300D4; // type:func -func_80832564 = 0x80830110; // type:func -func_80832594 = 0x80830148; // type:func -func_80832630 = 0x808301E8; // type:func -Player_RequestRumble = 0x80830204; // type:func -func_80832698 = 0x80830250; // type:func -func_808326F0 = 0x808302B0; // type:func -func_8083275C = 0x8083031C; // type:func -func_80832770 = 0x80830338; // type:func -func_808327A4 = 0x80830370; // type:func -func_808327C4 = 0x80830398; // type:func -func_808327F8 = 0x808303D0; // type:func -func_80832854 = 0x8083042C; // type:func -func_808328A0 = 0x80830478; // type:func -func_808328EC = 0x808304C4; // type:func -Player_ProcessAnimSfxList = 0x808304F8; // type:func -Player_AnimChangeOnceMorph = 0x808306E0; // type:func -Player_AnimChangeOnceMorphAdjusted = 0x8083074C; // type:func -Player_AnimChangeLoopMorph = 0x808307BC; // type:func -Player_AnimChangeFreeze = 0x80830804; // type:func -Player_AnimChangeLoopSlowMorph = 0x80830848; // type:func -func_80832CB0 = 0x80830890; // type:func -Player_SkelAnimeResetPrevTranslRot = 0x808308E4; // type:func -Player_SkelAnimeResetPrevTranslRotAgeScale = 0x8083090C; // type:func -Player_ZeroRootLimbYaw = 0x80830998; // type:func -func_80832DBC = 0x808309A8; // type:func -func_80832E48 = 0x80830A34; // type:func -Player_AnimReplaceApplyFlags = 0x80830B44; // type:func -Player_AnimReplacePlayOnceSetSpeed = 0x80830BEC; // type:func -Player_AnimReplacePlayOnce = 0x80830C34; // type:func -Player_AnimReplacePlayOnceAdjusted = 0x80830C5C; // type:func -Player_AnimReplaceNormalPlayOnceAdjusted = 0x80830C84; // type:func -Player_AnimReplacePlayLoopSetSpeed = 0x80830CA4; // type:func -Player_AnimReplacePlayLoop = 0x80830CEC; // type:func -Player_AnimReplacePlayLoopAdjusted = 0x80830D14; // type:func -Player_AnimReplaceNormalPlayLoopAdjusted = 0x80830D3C; // type:func -Player_ProcessControlStick = 0x80830D5C; // type:func -func_8083328C = 0x80830E88; // type:func -func_808332B8 = 0x80830EB8; // type:func -func_808332E4 = 0x80830EE4; // type:func -func_808332F4 = 0x80830EF8; // type:func -func_80833338 = 0x80830F3C; // type:func -func_80833350 = 0x80830F58; // type:func -func_808333FC = 0x8083100C; // type:func -func_80833438 = 0x80831048; // type:func -func_808334B4 = 0x808310C4; // type:func -func_808334E4 = 0x808310F8; // type:func -func_80833528 = 0x80831140; // type:func -func_8083356C = 0x80831188; // type:func -func_808335B0 = 0x808311D0; // type:func -func_808335F4 = 0x80831218; // type:func -Player_SetUpperActionFunc = 0x80831260; // type:func -Player_InitItemActionWithAnim = 0x8083128C; // type:func -Player_ItemToItemAction = 0x8083134C; // type:func -Player_InitDefaultIA = 0x80831398; // type:func -Player_InitDekuStickIA = 0x808313A8; // type:func -Player_InitHammerIA = 0x808313C4; // type:func -Player_InitBowOrSlingshotIA = 0x808313D4; // type:func -Player_InitExplosiveIA = 0x8083140C; // type:func -Player_InitHookshotIA = 0x8083154C; // type:func -Player_InitBoomerangIA = 0x808315BC; // type:func -Player_InitItemAction = 0x808315D8; // type:func -func_80833A20 = 0x80831664; // type:func -func_80833B2C = 0x8083176C; // type:func -func_80833B54 = 0x80831794; // type:func -func_80833BCC = 0x8083180C; // type:func -func_80833C04 = 0x80831848; // type:func -func_80833C3C = 0x80831884; // type:func -Player_ItemIsInUse = 0x8083189C; // type:func -Player_ItemIsItemAction = 0x808318E8; // type:func -Player_GetItemOnButton = 0x80831930; // type:func -Player_ProcessItemButtons = 0x80831A4C; // type:func -Player_StartChangingHeldItem = 0x80831D34; // type:func -Player_UpdateItems = 0x80831EEC; // type:func -func_80834380 = 0x80831FD4; // type:func -func_8083442C = 0x80832080; // type:func -Player_FinishItemChange = 0x808321E8; // type:func -func_80834644 = 0x80832298; // type:func -func_808346C4 = 0x80832318; // type:func -func_80834758 = 0x808323AC; // type:func -func_8083485C = 0x808324B4; // type:func -func_80834894 = 0x808324EC; // type:func -Player_WaitToFinishItemChange = 0x80832548; // type:func -func_8083499C = 0x808325F8; // type:func -Player_UpperAction_Sword = 0x80832638; // type:func -Player_UpperAction_ChangeHeldItem = 0x80832688; // type:func -func_80834B5C = 0x808327B8; // type:func -func_80834BD4 = 0x80832834; // type:func -func_80834C74 = 0x808328D8; // type:func -func_80834D2C = 0x80832990; // type:func -func_80834E44 = 0x80832AA8; // type:func -func_80834E7C = 0x80832AE0; // type:func -func_80834EB8 = 0x80832B1C; // type:func -func_80834F2C = 0x80832B90; // type:func -func_80834FBC = 0x80832C20; // type:func -func_8083501C = 0x80832C80; // type:func -func_808350A4 = 0x80832D08; // type:func -func_808351D4 = 0x80832E3C; // type:func -func_808353D8 = 0x80833048; // type:func -func_80835588 = 0x808331F8; // type:func -func_808355DC = 0x80833254; // type:func -func_80835644 = 0x808332C0; // type:func -func_80835688 = 0x80833308; // type:func -Player_UpperAction_CarryActor = 0x80833368; // type:func -func_808357E8 = 0x80833468; // type:func -func_80835800 = 0x80833484; // type:func -func_80835884 = 0x80833508; // type:func -func_808358F0 = 0x80833574; // type:func -func_808359FC = 0x80833688; // type:func -func_80835B60 = 0x808337F0; // type:func -func_80835C08 = 0x80833898; // type:func -Player_SetupAction = 0x808338F0; // type:func -func_80835DAC = 0x80833A4C; // type:func -func_80835DE4 = 0x80833A80; // type:func -func_80835E44 = 0x80833AE4; // type:func -func_80835EA4 = 0x80833B48; // type:func -Player_DestroyHookshot = 0x80833BA4; // type:func -Player_UseItem = 0x80833BF4; // type:func -func_80836448 = 0x808340FC; // type:func -Player_CanUpdateItems = 0x8083427C; // type:func -Player_UpdateUpperBody = 0x80834328; // type:func -Player_SetupWaitForPutAway = 0x80834550; // type:func -Player_UpdateShapeYaw = 0x808345A8; // type:func -func_808369C8 = 0x80834684; // type:func -func_80836AB8 = 0x80834770; // type:func -func_80836BEC = 0x808348A4; // type:func -Player_CalcSpeedAndYawFromControlStick = 0x80834C68; // type:func -func_8083721C = 0x80834ED8; // type:func -Player_GetMovementSpeedAndYaw = 0x80834F2C; // type:func -Player_TryActionChangeList = 0x8083500C; // type:func -Player_TryActionInterrupt = 0x80835168; // type:func -func_80837530 = 0x80835200; // type:func -Player_CanSpinAttack = 0x808352B0; // type:func -func_80837704 = 0x808353E0; // type:func -func_808377DC = 0x808354B8; // type:func -func_80837818 = 0x808354FC; // type:func -func_80837918 = 0x808355FC; // type:func -func_80837948 = 0x8083562C; // type:func -func_80837AE0 = 0x808357CC; // type:func -func_80837AFC = 0x808357E8; // type:func -func_80837B18 = 0x80835808; // type:func -func_80837B60 = 0x80835850; // type:func -func_80837B9C = 0x8083588C; // type:func -func_80837C0C = 0x808358FC; // type:func -func_80838144 = 0x80835E34; // type:func -func_8083816C = 0x80835E5C; // type:func -func_8083819C = 0x80835E8C; // type:func -func_8083821C = 0x80835F10; // type:func -func_80838280 = 0x80835F74; // type:func -func_808382BC = 0x80835FB0; // type:func -func_808382DC = 0x80835FD0; // type:func -func_80838940 = 0x80836634; // type:func -func_808389E8 = 0x808366D8; // type:func -Player_ActionChange_12 = 0x80836704; // type:func -func_80838E70 = 0x80836B60; // type:func -func_80838F18 = 0x80836C10; // type:func -func_80838F5C = 0x80836C5C; // type:func -func_80838FB8 = 0x80836CC0; // type:func -Player_HandleExitsAndVoids = 0x80836D3C; // type:func -Player_GetRelativePosition = 0x808372E0; // type:func -Player_SpawnFairy = 0x80837384; // type:func -func_808396F4 = 0x808373F8; // type:func -func_8083973C = 0x80837444; // type:func -Player_PosVsWallLineTest = 0x80837470; // type:func -Player_ActionChange_1 = 0x8083750C; // type:func -func_80839E88 = 0x80837BA4; // type:func -func_80839F30 = 0x80837C48; // type:func -func_80839F90 = 0x80837CA4; // type:func -func_80839FFC = 0x80837D10; // type:func -func_8083A060 = 0x80837D78; // type:func -func_8083A098 = 0x80837DB4; // type:func -func_8083A0D4 = 0x80837DF4; // type:func -func_8083A0F4 = 0x80837E14; // type:func -func_8083A2F8 = 0x80838018; // type:func -func_8083A360 = 0x80838088; // type:func -func_8083A388 = 0x808380B0; // type:func -func_8083A3B0 = 0x808380D8; // type:func -func_8083A40C = 0x80838130; // type:func -func_8083A434 = 0x80838158; // type:func -func_8083A4A8 = 0x808381CC; // type:func -func_8083A5C4 = 0x808382E8; // type:func -func_8083A6AC = 0x808383DC; // type:func -func_8083A9B8 = 0x808386E4; // type:func -func_8083AA10 = 0x8083873C; // type:func -func_8083AD4C = 0x80838A78; // type:func -Player_StartCsAction = 0x80838B00; // type:func -func_8083AE40 = 0x80838B6C; // type:func -func_8083AF44 = 0x80838BF4; // type:func -func_8083B010 = 0x80838CC8; // type:func -Player_ActionChange_13 = 0x80838CFC; // type:func -Player_ActionChange_4 = 0x80839300; // type:func -func_8083B8F4 = 0x808395B0; // type:func -Player_ActionChange_0 = 0x80839658; // type:func -func_8083BA90 = 0x80839750; // type:func -func_8083BB20 = 0x808397E8; // type:func -func_8083BBA0 = 0x80839868; // type:func -func_8083BC04 = 0x808398D0; // type:func -func_8083BC7C = 0x80839948; // type:func -func_8083BCD0 = 0x8083999C; // type:func -Player_ActionChange_10 = 0x80839A88; // type:func -func_8083BF50 = 0x80839C20; // type:func -func_8083C0B8 = 0x80839D84; // type:func -func_8083C0E8 = 0x80839DBC; // type:func -func_8083C148 = 0x80839E18; // type:func -Player_ActionChange_6 = 0x80839EB4; // type:func -Player_ActionChange_11 = 0x80839F90; // type:func -func_8083C484 = 0x8083A168; // type:func -func_8083C50C = 0x8083A1F0; // type:func -Player_ActionChange_8 = 0x8083A228; // type:func -func_8083C61C = 0x8083A304; // type:func -func_8083C6B8 = 0x8083A3A0; // type:func -func_8083C858 = 0x8083A544; // type:func -func_8083C8DC = 0x8083A5C8; // type:func -func_8083C910 = 0x8083A5FC; // type:func -func_8083CA20 = 0x8083A710; // type:func -func_8083CA54 = 0x8083A748; // type:func -func_8083CA9C = 0x8083A790; // type:func -func_8083CB2C = 0x8083A824; // type:func -func_8083CB94 = 0x8083A888; // type:func -func_8083CBF0 = 0x8083A8E4; // type:func -func_8083CC9C = 0x8083A98C; // type:func -func_8083CD00 = 0x8083A9EC; // type:func -func_8083CD54 = 0x8083AA40; // type:func -func_8083CE0C = 0x8083AAFC; // type:func -func_8083CEAC = 0x8083AB98; // type:func -func_8083CF10 = 0x8083ABF8; // type:func -func_8083CF5C = 0x8083AC40; // type:func -func_8083CFA8 = 0x8083AC88; // type:func -func_8083D0A8 = 0x8083AD90; // type:func -func_8083D12C = 0x8083AE18; // type:func -func_8083D330 = 0x8083B020; // type:func -func_8083D36C = 0x8083B05C; // type:func -func_8083D53C = 0x8083B230; // type:func -func_8083D6EC = 0x8083B3E0; // type:func -func_8083DB98 = 0x8083B890; // type:func -func_8083DC54 = 0x8083B94C; // type:func -func_8083DDC8 = 0x8083BAC0; // type:func -func_8083DF68 = 0x8083BC68; // type:func -func_8083DFE0 = 0x8083BCE4; // type:func -Player_ActionChange_3 = 0x8083BE04; // type:func -Player_GetSlopeDirection = 0x8083BFA4; // type:func -Player_HandleSlopes = 0x8083C020; // type:func -func_8083E4C4 = 0x8083C1D4; // type:func -Player_ActionChange_2 = 0x8083C2BC; // type:func -func_8083EA94 = 0x8083C754; // type:func -func_8083EAF0 = 0x8083C7B0; // type:func -Player_ActionChange_9 = 0x8083C804; // type:func -func_8083EC18 = 0x8083C8D8; // type:func -func_8083F070 = 0x8083CD34; // type:func -Player_TryEnteringCrawlspace = 0x8083CD8C; // type:func -func_8083F360 = 0x8083D028; // type:func -func_8083F524 = 0x8083D1EC; // type:func -Player_TryLeavingCrawlspace = 0x8083D238; // type:func -func_8083F72C = 0x8083D3F4; // type:func -Player_ActionChange_5 = 0x8083D480; // type:func -func_8083F9D0 = 0x8083D698; // type:func -func_8083FAB8 = 0x8083D780; // type:func -func_8083FB14 = 0x8083D7DC; // type:func -func_8083FB7C = 0x8083D844; // type:func -func_8083FBC0 = 0x8083D884; // type:func -func_8083FC68 = 0x8083D934; // type:func -func_8083FD78 = 0x8083DA44; // type:func -func_8083FFB8 = 0x8083DC88; // type:func -func_80840058 = 0x8083DD28; // type:func -func_80840138 = 0x8083DE10; // type:func -func_808401B0 = 0x8083DE88; // type:func -func_8084021C = 0x8083DEF4; // type:func -func_8084029C = 0x8083DF74; // type:func -Player_Action_80840450 = 0x8083E12C; // type:func -Player_Action_808407CC = 0x8083E4A8; // type:func -func_808409CC = 0x8083E6A8; // type:func -Player_Action_80840BC8 = 0x8083E8A4; // type:func -Player_Action_80840DE4 = 0x8083EAC4; // type:func -func_80841138 = 0x8083EE18; // type:func -func_8084140C = 0x8083F0F4; // type:func -func_80841458 = 0x8083F140; // type:func -Player_Action_808414F8 = 0x8083F1E0; // type:func -func_808416C0 = 0x8083F3B4; // type:func -Player_Action_8084170C = 0x8083F400; // type:func -Player_Action_808417FC = 0x8083F4F0; // type:func -func_80841860 = 0x8083F554; // type:func -Player_Action_8084193C = 0x8083F630; // type:func -Player_Action_80841BA8 = 0x8083F894; // type:func -func_80841CC4 = 0x8083F9B0; // type:func -func_80841EE4 = 0x8083FBD4; // type:func -Player_Action_80842180 = 0x8083FE78; // type:func -Player_Action_8084227C = 0x8083FF7C; // type:func -Player_Action_808423EC = 0x808400F0; // type:func -Player_Action_8084251C = 0x80840220; // type:func -func_8084260C = 0x80840310; // type:func -func_8084269C = 0x808403A0; // type:func -Player_Action_8084279C = 0x808404A0; // type:func -func_8084285C = 0x80840560; // type:func -func_808428D8 = 0x808405DC; // type:func -func_80842964 = 0x8084066C; // type:func -Player_RequestQuake = 0x808406C4; // type:func -func_80842A28 = 0x80840738; // type:func -func_80842A88 = 0x8084079C; // type:func -func_80842AC4 = 0x808407D8; // type:func -func_80842B7C = 0x80840894; // type:func -func_80842CF0 = 0x80840A0C; // type:func -func_80842D20 = 0x80840A44; // type:func -func_80842DF4 = 0x80840B1C; // type:func -Player_Action_80843188 = 0x80840EB0; // type:func -Player_Action_808435C4 = 0x808412EC; // type:func -Player_Action_8084370C = 0x80841438; // type:func -Player_Action_8084377C = 0x808414AC; // type:func -Player_Action_80843954 = 0x80841688; // type:func -Player_Action_80843A38 = 0x80841770; // type:func -func_80843AE8 = 0x80841824; // type:func -Player_Action_80843CEC = 0x80841A28; // type:func -func_80843E14 = 0x80841B54; // type:func -func_80843E64 = 0x80841BA8; // type:func -func_8084409C = 0x80841DE0; // type:func -Player_Action_8084411C = 0x80841E68; // type:func -Player_Action_80844708 = 0x8084245C; // type:func -Player_Action_80844A44 = 0x80842798; // type:func -Player_Action_80844AF4 = 0x80842848; // type:func -func_80844BE4 = 0x80842938; // type:func -func_80844CF8 = 0x80842A50; // type:func -func_80844D30 = 0x80842A88; // type:func -func_80844D68 = 0x80842AC0; // type:func -func_80844DC8 = 0x80842B24; // type:func -func_80844E3C = 0x80842B98; // type:func -Player_Action_80844E68 = 0x80842BC8; // type:func -Player_Action_80845000 = 0x80842D60; // type:func -Player_Action_80845308 = 0x80843068; // type:func -Player_Action_80845668 = 0x808433C8; // type:func -Player_Action_WaitForPutAway = 0x80843634; // type:func -func_80845964 = 0x808436C8; // type:func -func_80845BA0 = 0x8084390C; // type:func -func_80845C68 = 0x808439D8; // type:func -Player_Action_80845CA4 = 0x80843A18; // type:func -Player_Action_80845EF8 = 0x80843C78; // type:func -Player_Action_80846050 = 0x80843DD0; // type:func -Player_Action_80846120 = 0x80843EA8; // type:func -Player_Action_80846260 = 0x80843FE8; // type:func -Player_Action_80846358 = 0x808440E8; // type:func -Player_Action_80846408 = 0x80844198; // type:func -Player_Action_808464B0 = 0x80844240; // type:func -Player_Action_80846578 = 0x8084430C; // type:func -func_8084663C = 0x808443D4; // type:func -func_80846648 = 0x808443E4; // type:func -func_80846660 = 0x80844400; // type:func -func_80846720 = 0x808444C0; // type:func -func_808467D4 = 0x80844574; // type:func -func_808468A8 = 0x80844650; // type:func -func_808468E8 = 0x80844698; // type:func -func_80846978 = 0x80844728; // type:func -func_808469BC = 0x8084476C; // type:func -Player_SpawnMagicSpell = 0x808447AC; // type:func -func_80846A68 = 0x80844818; // type:func -Player_InitCommon = 0x80844858; // type:func -Player_Init = 0x80844A88; // type:func -func_808471F4 = 0x80844F98; // type:func -func_80847298 = 0x8084503C; // type:func -Player_UpdateInterface = 0x80845178; // type:func -Player_UpdateHoverBoots = 0x80845828; // type:func -Player_ProcessSceneCollision = 0x80845950; // type:func -Player_UpdateCamAndSeqModes = 0x80846458; // type:func -Player_UpdateBurningDekuStick = 0x808467B8; // type:func -Player_UpdateBodyShock = 0x80846900; // type:func -Player_UpdateBodyBurn = 0x80846A30; // type:func -Player_DetectRumbleSecrets = 0x80846CB4; // type:func -Player_UpdateCommon = 0x80846D5C; // type:func -Player_Update = 0x80847C68; // type:func -Player_DrawGameplay = 0x80847EA0; // type:func -Player_Draw = 0x80848344; // type:func -Player_Destroy = 0x808488A4; // type:func -func_8084ABD8 = 0x80848928; // type:func -func_8084AEEC = 0x80848C3C; // type:func -func_8084B000 = 0x80848D58; // type:func -func_8084B158 = 0x80848EB8; // type:func -Player_Action_8084B1D8 = 0x80848F38; // type:func -func_8084B3CC = 0x80849128; // type:func -func_8084B498 = 0x808491FC; // type:func -func_8084B4D4 = 0x80849238; // type:func -Player_Action_8084B530 = 0x80849298; // type:func -Player_Action_8084B78C = 0x80849500; // type:func -func_8084B840 = 0x808495B4; // type:func -Player_Action_8084B898 = 0x80849610; // type:func -Player_Action_8084B9E4 = 0x8084975C; // type:func -Player_Action_8084BBE4 = 0x80849960; // type:func -Player_Action_8084BDFC = 0x80849B78; // type:func -func_8084BEE4 = 0x80849C60; // type:func -Player_Action_8084BF1C = 0x80849C98; // type:func -Player_Action_8084C5F8 = 0x8084A378; // type:func -Player_Action_8084C760 = 0x8084A4E0; // type:func -Player_Action_8084C81C = 0x8084A59C; // type:func -func_8084C89C = 0x8084A61C; // type:func -func_8084C9BC = 0x8084A748; // type:func -func_8084CBF4 = 0x8084A984; // type:func -Player_Action_8084CC98 = 0x8084AA2C; // type:func -Player_Action_8084D3E4 = 0x8084B17C; // type:func -func_8084D530 = 0x8084B2D0; // type:func -func_8084D574 = 0x8084B318; // type:func -func_8084D5CC = 0x8084B374; // type:func -Player_Action_8084D610 = 0x8084B3C0; // type:func -Player_Action_8084D7C4 = 0x8084B570; // type:func -Player_Action_8084D84C = 0x8084B600; // type:func -func_8084D980 = 0x8084B734; // type:func -Player_Action_8084DAB4 = 0x8084B86C; // type:func -func_8084DBC4 = 0x8084B97C; // type:func -Player_Action_8084DC48 = 0x8084BA00; // type:func -func_8084DF6C = 0x8084BD2C; // type:func -func_8084DFAC = 0x8084BD70; // type:func -func_8084DFF4 = 0x8084BDBC; // type:func -Player_Action_8084E1EC = 0x8084BFB4; // type:func -Player_Action_8084E30C = 0x8084C0D4; // type:func -Player_Action_8084E368 = 0x8084C134; // type:func -Player_Action_8084E3C4 = 0x8084C194; // type:func -Player_Action_8084E604 = 0x8084C3D4; // type:func -Player_Action_8084E6D4 = 0x8084C4A4; // type:func -func_8084E988 = 0x8084C758; // type:func -Player_Action_8084E9AC = 0x8084C77C; // type:func -Player_Action_8084EAC0 = 0x8084C890; // type:func -Player_Action_8084ECA4 = 0x8084CA7C; // type:func -Player_Action_8084EED8 = 0x8084CCB4; // type:func -Player_Action_8084EFC0 = 0x8084CD9C; // type:func -Player_Action_8084F104 = 0x8084CEE4; // type:func -Player_Action_8084F308 = 0x8084D0EC; // type:func -Player_Action_8084F390 = 0x8084D174; // type:func -Player_Action_8084F608 = 0x8084D3EC; // type:func -Player_Action_8084F698 = 0x8084D47C; // type:func -Player_Action_8084F710 = 0x8084D4F4; // type:func -Player_Action_8084F88C = 0x8084D670; // type:func -Player_Action_8084F9A0 = 0x8084D784; // type:func -Player_Action_8084F9C0 = 0x8084D7A4; // type:func -Player_Action_8084FA54 = 0x8084D838; // type:func -Player_Action_8084FB10 = 0x8084D8F4; // type:func -Player_Action_8084FBF4 = 0x8084D9D8; // type:func -func_8084FF7C = 0x8084DA90; // type:func -Player_UpdateBunnyEars = 0x8084DB44; // type:func -Player_ActionChange_7 = 0x8084DD3C; // type:func -Player_Action_808502D0 = 0x8084DDE8; // type:func -Player_Action_808505DC = 0x8084E0F8; // type:func -Player_Action_8085063C = 0x8084E158; // type:func -Player_Action_8085076C = 0x8084E288; // type:func -Player_Action_808507F4 = 0x8084E310; // type:func -Player_Action_80850AEC = 0x8084E60C; // type:func -Player_Action_80850C68 = 0x8084E78C; // type:func -Player_Action_80850E84 = 0x8084E9A8; // type:func -Player_AnimChangeOnceMorphZeroRootYawSpeed = 0x8084E9FC; // type:func -Player_AnimChangeOnceMorphAdjustedZeroRootYawSpeed = 0x8084EA40; // type:func -Player_AnimChangeLoopMorphAdjustedZeroRootYawSpeed = 0x8084EAC0; // type:func -func_80851008 = 0x8084EB2C; // type:func -func_80851030 = 0x8084EB54; // type:func -func_80851050 = 0x8084EB74; // type:func -func_80851094 = 0x8084EBB8; // type:func -func_808510B4 = 0x8084EBD8; // type:func -func_808510D4 = 0x8084EBF8; // type:func -func_808510F4 = 0x8084EC18; // type:func -func_80851114 = 0x8084EC38; // type:func -func_80851134 = 0x8084EC58; // type:func -func_80851154 = 0x8084EC78; // type:func -func_80851174 = 0x8084EC98; // type:func -func_80851194 = 0x8084ECB8; // type:func -func_808511B4 = 0x8084ECD8; // type:func -func_808511D4 = 0x8084ECF8; // type:func -func_808511FC = 0x8084ED24; // type:func -func_80851248 = 0x8084ED78; // type:func -func_80851294 = 0x8084EDCC; // type:func -func_808512E0 = 0x8084EE20; // type:func -func_80851314 = 0x8084EE58; // type:func -func_80851368 = 0x8084EEAC; // type:func -func_808513BC = 0x8084EF00; // type:func -func_808514C0 = 0x8084F008; // type:func -func_8085157C = 0x8084F0C4; // type:func -func_808515A4 = 0x8084F0F0; // type:func -func_80851688 = 0x8084F1D4; // type:func -func_80851750 = 0x8084F2A4; // type:func -func_80851788 = 0x8084F2E0; // type:func -func_80851828 = 0x8084F380; // type:func -func_808518DC = 0x8084F438; // type:func -func_8085190C = 0x8084F46C; // type:func -func_80851998 = 0x8084F4F8; // type:func -func_808519C0 = 0x8084F520; // type:func -func_808519EC = 0x8084F54C; // type:func -func_80851A50 = 0x8084F5B0; // type:func -func_80851B90 = 0x8084F6F0; // type:func -func_80851BE8 = 0x8084F74C; // type:func -func_80851CA4 = 0x8084F80C; // type:func -func_80851D2C = 0x8084F898; // type:func -func_80851D80 = 0x8084F8F0; // type:func -func_80851DEC = 0x8084F964; // type:func -func_80851E28 = 0x8084F9A4; // type:func -func_80851E64 = 0x8084F9E4; // type:func -func_80851E90 = 0x8084FA10; // type:func -func_80851ECC = 0x8084FA50; // type:func -func_80851F14 = 0x8084FAA0; // type:func -func_80851F84 = 0x8084FB14; // type:func -func_80851FB0 = 0x8084FB40; // type:func -func_80852048 = 0x8084FBDC; // type:func -func_80852080 = 0x8084FC18; // type:func -func_808520BC = 0x8084FC58; // type:func -func_80852174 = 0x8084FD10; // type:func -func_808521B8 = 0x8084FD5C; // type:func -func_808521F4 = 0x8084FD9C; // type:func -func_80852234 = 0x8084FDDC; // type:func -func_8085225C = 0x8084FE08; // type:func -func_80852280 = 0x8084FE2C; // type:func -func_80852298 = 0x8084FE48; // type:func -func_80852328 = 0x8084FEDC; // type:func -func_80852358 = 0x8084FF0C; // type:func -func_80852388 = 0x8084FF3C; // type:func -func_80852414 = 0x8084FFCC; // type:func -func_80852450 = 0x8085000C; // type:func -func_80852480 = 0x8085003C; // type:func -func_808524B0 = 0x8085006C; // type:func -func_808524D0 = 0x80850090; // type:func -func_80852514 = 0x808500D8; // type:func -func_80852544 = 0x8085010C; // type:func -func_80852554 = 0x80850120; // type:func -func_80852564 = 0x80850134; // type:func -func_808525C0 = 0x80850198; // type:func -func_80852608 = 0x808501E4; // type:func -func_80852648 = 0x8085022C; // type:func -func_808526EC = 0x808502D4; // type:func -func_8085283C = 0x8085042C; // type:func -func_808528C8 = 0x808504BC; // type:func -func_80852944 = 0x8085053C; // type:func -func_808529D0 = 0x808505C8; // type:func -func_80852A54 = 0x80850650; // type:func -func_80852B4C = 0x80850748; // type:func -func_80852C0C = 0x80850808; // type:func -func_80852C50 = 0x8085084C; // type:func -Player_Action_CsAction = 0x80850A08; // type:func -Player_IsDroppingFish = 0x80850AB0; // type:func -Player_StartFishing = 0x80850AE4; // type:func -func_80852F38 = 0x80850B20; // type:func -Player_TryCsAction = 0x80850BEC; // type:func -func_80853080 = 0x80850C70; // type:func -Player_InflictDamage = 0x80850CCC; // type:func -func_80853148 = 0x80850D34; // type:func -EnTest_SetupAction = 0x8085D0E0; // type:func -EnTest_Init = 0x8085D0EC; // type:func -EnTest_Destroy = 0x8085D338; // type:func -EnTest_ChooseRandomAction = 0x8085D3D0; // type:func -EnTest_ChooseAction = 0x8085D54C; // type:func -EnTest_SetupWaitGround = 0x8085D86C; // type:func -EnTest_WaitGround = 0x8085D8E4; // type:func -EnTest_SetupWaitAbove = 0x8085D9C4; // type:func -EnTest_WaitAbove = 0x8085DA38; // type:func -EnTest_SetupIdle = 0x8085DB04; // type:func -EnTest_Idle = 0x8085DB88; // type:func -EnTest_Fall = 0x8085DDB8; // type:func -EnTest_Land = 0x8085DE6C; // type:func -EnTest_SetupWalkAndBlock = 0x8085DEDC; // type:func -EnTest_WalkAndBlock = 0x8085DFA0; // type:func -func_80860BDC = 0x8085E684; // type:func -func_80860C24 = 0x8085E6CC; // type:func -func_80860EC0 = 0x8085E968; // type:func -func_80860F84 = 0x8085EA2C; // type:func -EnTest_SetupSlashDown = 0x8085EEC0; // type:func -EnTest_SlashDown = 0x8085EF44; // type:func -EnTest_SetupSlashDownEnd = 0x8085F050; // type:func -EnTest_SlashDownEnd = 0x8085F0A0; // type:func -EnTest_SetupSlashUp = 0x8085F2CC; // type:func -EnTest_SlashUp = 0x8085F348; // type:func -EnTest_SetupJumpBack = 0x8085F400; // type:func -EnTest_JumpBack = 0x8085F4A0; // type:func -EnTest_SetupJumpslash = 0x8085F648; // type:func -EnTest_Jumpslash = 0x8085F6F4; // type:func -EnTest_SetupJumpUp = 0x8085F804; // type:func -EnTest_JumpUp = 0x8085F87C; // type:func -EnTest_SetupStopAndBlock = 0x8085F974; // type:func -EnTest_StopAndBlock = 0x8085FA34; // type:func -EnTest_SetupIdleFromBlock = 0x8085FB04; // type:func -EnTest_IdleFromBlock = 0x8085FB50; // type:func -func_80862154 = 0x8085FC08; // type:func -func_808621D4 = 0x8085FC88; // type:func -func_80862398 = 0x8085FE50; // type:func -func_80862418 = 0x8085FED0; // type:func -EnTest_SetupStunned = 0x80860034; // type:func -EnTest_Stunned = 0x80860110; // type:func -func_808627C4 = 0x80860288; // type:func -func_808628C8 = 0x8086038C; // type:func -func_80862DBC = 0x80860884; // type:func -func_80862E6C = 0x80860938; // type:func -func_80862FA8 = 0x80860A74; // type:func -func_80863044 = 0x80860B10; // type:func -func_808630F0 = 0x80860BBC; // type:func -func_8086318C = 0x80860C58; // type:func -EnTest_SetupRecoil = 0x80860D0C; // type:func -EnTest_Recoil = 0x80860D60; // type:func -EnTest_Rise = 0x80860E2C; // type:func -func_808633E8 = 0x80860EB4; // type:func -EnTest_UpdateHeadRot = 0x80860F30; // type:func -EnTest_UpdateDamage = 0x80860FC8; // type:func -EnTest_Update = 0x80861168; // type:func -EnTest_OverrideLimbDraw = 0x80861594; // type:func -EnTest_PostLimbDraw = 0x80861768; // type:func -EnTest_Draw = 0x80861AF0; // type:func -func_80864158 = 0x80861C04; // type:func -EnTest_ReactToProjectile = 0x80861C94; // type:func -ArmsHook_SetupAction = 0x80862990; // type:func -ArmsHook_Init = 0x8086299C; // type:func -ArmsHook_Destroy = 0x80862A10; // type:func -ArmsHook_Wait = 0x80862A58; // type:func -func_80865044 = 0x80862AD8; // type:func -ArmsHook_AttachToPlayer = 0x80862AEC; // type:func -ArmsHook_DetachHookFromActor = 0x80862B1C; // type:func -ArmsHook_CheckForCancel = 0x80862B44; // type:func -ArmsHook_AttachHookToActor = 0x80862BE0; // type:func -ArmsHook_Shoot = 0x80862C28; // type:func -ArmsHook_Update = 0x80863294; // type:func -ArmsHook_Draw = 0x808632D4; // type:func -ArrowFire_SetupAction = 0x80863700; // type:func -ArrowFire_Init = 0x8086370C; // type:func -ArrowFire_Destroy = 0x80863788; // type:func -ArrowFire_Charge = 0x808637AC; // type:func -func_80865ECC = 0x808638A0; // type:func -ArrowFire_Hit = 0x808638F8; // type:func -ArrowFire_Fly = 0x80863AC4; // type:func -ArrowFire_Update = 0x80863C18; // type:func -ArrowFire_Draw = 0x80863C6C; // type:func -ArrowIce_SetupAction = 0x808655E0; // type:func -ArrowIce_Init = 0x808655EC; // type:func -ArrowIce_Destroy = 0x80865668; // type:func -ArrowIce_Charge = 0x8086568C; // type:func -func_80867E8C = 0x80865780; // type:func -ArrowIce_Hit = 0x808657D8; // type:func -ArrowIce_Fly = 0x808659A4; // type:func -ArrowIce_Update = 0x80865AF8; // type:func -ArrowIce_Draw = 0x80865B4C; // type:func -ArrowLight_SetupAction = 0x808674E0; // type:func -ArrowLight_Init = 0x808674EC; // type:func -ArrowLight_Destroy = 0x80867568; // type:func -ArrowLight_Charge = 0x8086758C; // type:func -func_80869E6C = 0x80867680; // type:func -ArrowLight_Hit = 0x808676D8; // type:func -ArrowLight_Fly = 0x808678A4; // type:func -ArrowLight_Update = 0x808679F8; // type:func -ArrowLight_Draw = 0x80867A4C; // type:func -BgBdanObjects_GetProperty = 0x808693F0; // type:func -BgBdanObjects_SetProperty = 0x80869444; // type:func -BgBdanObjects_Init = 0x80869498; // type:func -BgBdanObjects_Destroy = 0x8086971C; // type:func -BgBdanObjects_OctoPlatform_WaitForRutoToStartCutscene = 0x8086976C; // type:func -BgBdanObjects_OctoPlatform_RaiseToUpperPosition = 0x808698C0; // type:func -BgBdanObjects_OctoPlatform_WaitForRutoToAdvanceCutscene = 0x808699BC; // type:func -BgBdanObjects_OctoPlatform_DescendWithBigOcto = 0x80869AF8; // type:func -BgBdanObjects_OctoPlatform_PauseBeforeDescending = 0x80869C7C; // type:func -BgBdanObjects_OctoPlatform_WaitForBigOctoToStartBattle = 0x80869CE0; // type:func -BgBdanObjects_OctoPlatform_BattleInProgress = 0x80869D3C; // type:func -BgBdanObjects_SinkToFloorHeight = 0x80869E14; // type:func -BgBdanObjects_WaitForPlayerInRange = 0x80869E94; // type:func -BgBdanObjects_RaiseToUpperPosition = 0x80869F00; // type:func -BgBdanObjects_DoNothing = 0x80869F98; // type:func -BgBdanObjects_ElevatorOscillate = 0x80869FA8; // type:func -BgBdanObjects_WaitForSwitch = 0x8086A0DC; // type:func -BgBdanObjects_ChangeWaterBoxLevel = 0x8086A128; // type:func -BgBdanObjects_WaitForTimerExpired = 0x8086A1F0; // type:func -BgBdanObjects_WaitForPlayerOnTop = 0x8086A244; // type:func -BgBdanObjects_FallToLowerPos = 0x8086A2C8; // type:func -BgBdanObjects_Update = 0x8086A384; // type:func -BgBdanObjects_Draw = 0x8086A3C0; // type:func -BgBdanSwitch_InitDynaPoly = 0x8086A6C0; // type:func -BgBdanSwitch_InitCollision = 0x8086A718; // type:func -func_8086D0EC = 0x8086A76C; // type:func -BgBdanSwitch_Init = 0x8086A8D8; // type:func -BgBdanSwitch_Destroy = 0x8086AA94; // type:func -func_8086D4B4 = 0x8086AB00; // type:func -func_8086D548 = 0x8086AB94; // type:func -func_8086D5C4 = 0x8086AC10; // type:func -func_8086D5E0 = 0x8086AC30; // type:func -func_8086D67C = 0x8086ACCC; // type:func -func_8086D694 = 0x8086ACE8; // type:func -func_8086D730 = 0x8086AD88; // type:func -func_8086D754 = 0x8086ADB0; // type:func -func_8086D7FC = 0x8086AE58; // type:func -func_8086D80C = 0x8086AE6C; // type:func -func_8086D86C = 0x8086AECC; // type:func -func_8086D888 = 0x8086AEEC; // type:func -func_8086D8BC = 0x8086AF24; // type:func -func_8086D8CC = 0x8086AF38; // type:func -func_8086D944 = 0x8086AFB0; // type:func -func_8086D95C = 0x8086AFCC; // type:func -func_8086D9F8 = 0x8086B06C; // type:func -func_8086DA1C = 0x8086B094; // type:func -func_8086DAB4 = 0x8086B130; // type:func -func_8086DAC4 = 0x8086B144; // type:func -func_8086DB24 = 0x8086B1A4; // type:func -func_8086DB40 = 0x8086B1C4; // type:func -func_8086DB4C = 0x8086B1D4; // type:func -func_8086DB68 = 0x8086B1F4; // type:func -func_8086DC30 = 0x8086B2BC; // type:func -func_8086DC48 = 0x8086B2D8; // type:func -func_8086DCCC = 0x8086B35C; // type:func -func_8086DCE8 = 0x8086B37C; // type:func -func_8086DDA8 = 0x8086B43C; // type:func -func_8086DDC0 = 0x8086B458; // type:func -BgBdanSwitch_Update = 0x8086B4EC; // type:func -func_8086DF58 = 0x8086B5F0; // type:func -BgBdanSwitch_Draw = 0x8086B660; // type:func -BgBomGuard_SetupAction = 0x8086BAF0; // type:func -BgBomGuard_Init = 0x8086BAFC; // type:func -BgBomGuard_Destroy = 0x8086BB98; // type:func -func_8086E638 = 0x8086BBCC; // type:func -BgBomGuard_Update = 0x8086BC98; // type:func -BgBombwall_InitDynapoly = 0x8086BD10; // type:func -BgBombwall_RotateVec = 0x8086BD68; // type:func -BgBombwall_Init = 0x8086BDBC; // type:func -BgBombwall_DestroyCollision = 0x8086BFCC; // type:func -BgBombwall_Destroy = 0x8086C048; // type:func -func_8086EB5C = 0x8086C068; // type:func -func_8086ED50 = 0x8086C25C; // type:func -func_8086ED70 = 0x8086C280; // type:func -func_8086EDFC = 0x8086C310; // type:func -func_8086EE40 = 0x8086C354; // type:func -func_8086EE94 = 0x8086C3A8; // type:func -BgBombwall_Update = 0x8086C3D8; // type:func -BgBombwall_Draw = 0x8086C404; // type:func -BgBowlWall_Init = 0x8086C5D0; // type:func -BgBowlWall_Destroy = 0x8086C688; // type:func -BgBowlWall_SpawnBullseyes = 0x8086C6BC; // type:func -BgBowlWall_WaitForHit = 0x8086C88C; // type:func -BgBowlWall_FallDoEffects = 0x8086C8B0; // type:func -BgBowlWall_FinishFall = 0x8086CB64; // type:func -BgBowlWall_Reset = 0x8086CC44; // type:func -BgBowlWall_Update = 0x8086CCDC; // type:func -BgBowlWall_Draw = 0x8086CD10; // type:func -BgBreakwall_SetupAction = 0x8086CF50; // type:func -BgBreakwall_Init = 0x8086CF5C; // type:func -BgBreakwall_Destroy = 0x8086D108; // type:func -BgBreakwall_SpawnFragments = 0x8086D13C; // type:func -BgBreakwall_WaitForObject = 0x8086D60C; // type:func -BgBreakwall_Wait = 0x8086D714; // type:func -BgBreakwall_LavaCoverMove = 0x8086D8E4; // type:func -BgBreakwall_Update = 0x8086D938; // type:func -BgBreakwall_Draw = 0x8086D95C; // type:func -BgDdanJd_Init = 0x8086DDC0; // type:func -BgDdanJd_Destroy = 0x8086DE6C; // type:func -BgDdanJd_Idle = 0x8086DEA0; // type:func -BgDdanJd_MoveEffects = 0x8086E044; // type:func -BgDdanJd_Move = 0x8086E21C; // type:func -BgDdanJd_Update = 0x8086E320; // type:func -BgDdanJd_Draw = 0x8086E344; // type:func -BgDdanKd_SetupAction = 0x8086E410; // type:func -BgDdanKd_Init = 0x8086E41C; // type:func -BgDdanKd_Destroy = 0x8086E514; // type:func -BgDdanKd_CheckForExplosions = 0x8086E55C; // type:func -BgDdanKd_LowerStairs = 0x8086E674; // type:func -BgDdanKd_DoNothing = 0x8086EB48; // type:func -BgDdanKd_Update = 0x8086EB58; // type:func -BgDdanKd_Draw = 0x8086EB7C; // type:func -BgDodoago_SetupAction = 0x8086ED00; // type:func -BgDodoago_SpawnSparkles = 0x8086ED0C; // type:func -BgDodoago_Init = 0x8086EE2C; // type:func -BgDodoago_Destroy = 0x8086EF90; // type:func -BgDodoago_WaitExplosives = 0x8086EFFC; // type:func -BgDodoago_OpenJaw = 0x8086F2C0; // type:func -BgDodoago_DoNothing = 0x8086F584; // type:func -BgDodoago_LightOneEye = 0x8086F594; // type:func -BgDodoago_Update = 0x8086F5F8; // type:func -BgDodoago_Draw = 0x8086F750; // type:func -BgDyYoseizo_Init = 0x8086FAB0; // type:func -BgDyYoseizo_Destroy = 0x8086FBB4; // type:func -BgDyYoseizo_SpawnEffects = 0x8086FBC4; // type:func -BgDyYoseizo_Bob = 0x8086FEC0; // type:func -BgDyYoseizo_CheckMagicAcquired = 0x8086FF88; // type:func -BgDyYoseizo_ChooseType = 0x8087004C; // type:func -BgDyYoseizo_SetupSpinGrow_NoReward = 0x80870448; // type:func -BgDyYoseizo_SpinGrow_NoReward = 0x80870544; // type:func -BgDyYoseizo_CompleteSpinGrow_NoReward = 0x808706A0; // type:func -BgDyYoseizo_SetupGreetPlayer_NoReward = 0x80870750; // type:func -BgDyYoseizo_GreetPlayer_NoReward = 0x80870868; // type:func -BgDyYoseizo_SetupHealPlayer_NoReward = 0x80870944; // type:func -BgDyYoseizo_HealPlayer_NoReward = 0x80870A30; // type:func -BgDyYoseizo_SayFarewell_NoReward = 0x80870D08; // type:func -BgDyYoseizo_SetupSpinShrink = 0x80870DE4; // type:func -BgDyYoseizo_SpinShrink = 0x80870EE8; // type:func -BgDyYoseizo_Vanish = 0x80870FD8; // type:func -BgDyYoseizo_SetupSpinGrow_Reward = 0x8087107C; // type:func -BgDyYoseizo_SpinGrowSetupGive_Reward = 0x808711B0; // type:func -BgDyYoseizo_Give_Reward = 0x808714DC; // type:func -BgDyYoseizo_Update = 0x80871B2C; // type:func -BgDyYoseizo_OverrideLimbDraw = 0x80871D58; // type:func -BgDyYoseizo_Draw = 0x80871DC0; // type:func -BgDyYoseizo_SpawnEffect = 0x80871F48; // type:func -BgDyYoseizo_UpdateEffects = 0x80872058; // type:func -BgDyYoseizo_DrawEffects = 0x8087234C; // type:func -BgGanonOtyuka_Init = 0x808728A0; // type:func -BgGanonOtyuka_Destroy = 0x8087293C; // type:func -BgGanonOtyuka_WaitToFall = 0x80872970; // type:func -BgGanonOtyuka_Fall = 0x80872BC0; // type:func -BgGanonOtyuka_DoNothing = 0x80873000; // type:func -BgGanonOtyuka_Update = 0x80873010; // type:func -BgGanonOtyuka_Draw = 0x80873058; // type:func -BgGateShutter_Init = 0x80874EE0; // type:func -BgGateShutter_Destroy = 0x80874FC8; // type:func -func_8087828C = 0x80874FFC; // type:func -func_80878300 = 0x80875070; // type:func -func_808783AC = 0x80875120; // type:func -func_808783D4 = 0x80875148; // type:func -BgGateShutter_Update = 0x80875204; // type:func -BgGateShutter_Draw = 0x80875238; // type:func -BgGjyoBridge_Init = 0x80875370; // type:func -BgGjyoBridge_Destroy = 0x80875428; // type:func -func_808787A4 = 0x8087545C; // type:func -BgGjyoBridge_TriggerCutscene = 0x8087546C; // type:func -BgGjyoBridge_SpawnBridge = 0x808755C4; // type:func -BgGjyoBridge_Update = 0x80875640; // type:func -BgGjyoBridge_Draw = 0x80875664; // type:func -BgGndDarkmeiro_ToggleBlock = 0x80875860; // type:func -BgGndDarkmeiro_Init = 0x808758EC; // type:func -BgGndDarkmeiro_Destroy = 0x80875B18; // type:func -BgGndDarkmeiro_Noop = 0x80875B60; // type:func -BgGndDarkmeiro_UpdateBlockTimer = 0x80875B70; // type:func -BgGndDarkmeiro_UpdateStaticBlock = 0x80875D64; // type:func -BgGndDarkmeiro_UpdateSwitchBlock = 0x80875D74; // type:func -BgGndDarkmeiro_Update = 0x80875DD8; // type:func -BgGndDarkmeiro_DrawInvisiblePath = 0x80875DFC; // type:func -BgGndDarkmeiro_DrawSwitchBlock = 0x80875E2C; // type:func -BgGndDarkmeiro_DrawStaticBlock = 0x80875F44; // type:func -BgGndFiremeiro_Init = 0x80876020; // type:func -BgGndFiremeiro_Destroy = 0x808760D4; // type:func -BgGndFiremeiro_Sink = 0x80876114; // type:func -BgGndFiremeiro_Shake = 0x808761D0; // type:func -BgGndFiremeiro_Rise = 0x80876374; // type:func -BgGndFiremeiro_Update = 0x80876434; // type:func -BgGndFiremeiro_Draw = 0x80876458; // type:func -BgGndIceblock_Init = 0x80876570; // type:func -BgGndIceblock_Destroy = 0x8087665C; // type:func -BgGndIceblock_SetPosition = 0x80876690; // type:func -BgGndIceblock_CheckForBlock = 0x8087679C; // type:func -BgGndIceblock_NextAction = 0x808767D8; // type:func -BgGndIceblock_SetNextPosition = 0x80876824; // type:func -BgGndIceblock_Idle = 0x80876B54; // type:func -BgGndIceblock_Reset = 0x80876C10; // type:func -BgGndIceblock_Fall = 0x80876CD4; // type:func -BgGndIceblock_Hole = 0x80876D8C; // type:func -BgGndIceblock_Slide = 0x80876E28; // type:func -BgGndIceblock_Update = 0x80877158; // type:func -BgGndIceblock_Draw = 0x8087717C; // type:func -BgGndNisekabe_Init = 0x80877670; // type:func -BgGndNisekabe_Destroy = 0x808776AC; // type:func -BgGndNisekabe_Update = 0x808776BC; // type:func -BgGndNisekabe_Draw = 0x808776F0; // type:func -BgGndSoulmeiro_Init = 0x808777E0; // type:func -BgGndSoulmeiro_Destroy = 0x80877924; // type:func -func_8087AF38 = 0x80877960; // type:func -func_8087B284 = 0x80877CAC; // type:func -func_8087B350 = 0x80877D78; // type:func -BgGndSoulmeiro_Update = 0x80877DCC; // type:func -BgGndSoulmeiro_Draw = 0x80877DF8; // type:func -BgHaka_Init = 0x80878040; // type:func -BgHaka_Destroy = 0x808780BC; // type:func -func_8087B758 = 0x808780F0; // type:func -func_8087B7E8 = 0x80878180; // type:func -func_8087B938 = 0x808782D4; // type:func -func_8087BAAC = 0x8087844C; // type:func -func_8087BAE4 = 0x80878488; // type:func -BgHaka_Update = 0x80878500; // type:func -BgHaka_Draw = 0x80878524; // type:func -BgHakaGate_Init = 0x80878700; // type:func -BgHakaGate_Destroy = 0x808789D0; // type:func -BgHakaGate_DoNothing = 0x80878A2C; // type:func -BgHakaGate_StatueInactive = 0x80878A3C; // type:func -BgHakaGate_StatueIdle = 0x80878A78; // type:func -BgHakaGate_StatueTurn = 0x80878B90; // type:func -BgHakaGate_FloorClosed = 0x80878D74; // type:func -BgHakaGate_FloorOpen = 0x80878EFC; // type:func -BgHakaGate_GateWait = 0x80878F88; // type:func -BgHakaGate_GateOpen = 0x80878FD8; // type:func -BgHakaGate_SkullOfTruth = 0x80879068; // type:func -BgHakaGate_FalseSkull = 0x808790C4; // type:func -BgHakaGate_Update = 0x80879144; // type:func -BgHakaGate_DrawFlame = 0x8087918C; // type:func -BgHakaGate_Draw = 0x80879364; // type:func -BgHakaHuta_Init = 0x808797A0; // type:func -BgHakaHuta_Destroy = 0x80879860; // type:func -BgHakaHuta_SpawnDust = 0x80879894; // type:func -BgHakaHuta_PlaySfx = 0x80879A50; // type:func -BgHakaHuta_SpawnEnemies = 0x80879ADC; // type:func -BgHakaHuta_Open = 0x80879DA4; // type:func -BgHakaHuta_SlideOpen = 0x80879E58; // type:func -func_8087D720 = 0x80879F0C; // type:func -BgHakaHuta_DoNothing = 0x8087A0B0; // type:func -BgHakaHuta_Update = 0x8087A0C0; // type:func -BgHakaHuta_Draw = 0x8087A0E4; // type:func -BgHakaMegane_Init = 0x8087A240; // type:func -BgHakaMegane_Destroy = 0x8087A2F8; // type:func -func_8087DB24 = 0x8087A32C; // type:func -func_8087DBF0 = 0x8087A3FC; // type:func -BgHakaMegane_DoNothing = 0x8087A470; // type:func -BgHakaMegane_Update = 0x8087A480; // type:func -BgHakaMegane_Draw = 0x8087A4A4; // type:func -BgHakaMeganeBG_Init = 0x8087A640; // type:func -BgHakaMeganeBG_Destroy = 0x8087A7DC; // type:func -func_8087DFF8 = 0x8087A810; // type:func -func_8087E040 = 0x8087A858; // type:func -func_8087E10C = 0x8087A924; // type:func -func_8087E1E0 = 0x8087A9F8; // type:func -func_8087E258 = 0x8087AA70; // type:func -func_8087E288 = 0x8087AAA0; // type:func -func_8087E2D8 = 0x8087AAF0; // type:func -func_8087E34C = 0x8087AB64; // type:func -BgHakaMeganeBG_Update = 0x8087AB74; // type:func -BgHakaMeganeBG_Draw = 0x8087AB98; // type:func -BgHakaSgami_Init = 0x8087AD00; // type:func -BgHakaSgami_Destroy = 0x8087AFA8; // type:func -BgHakaSgami_SetupSpin = 0x8087B008; // type:func -BgHakaSgami_Spin = 0x8087B080; // type:func -BgHakaSgami_Update = 0x8087B594; // type:func -BgHakaSgami_Draw = 0x8087B5E8; // type:func -BgHakaShip_Init = 0x8087B920; // type:func -BgHakaShip_Destroy = 0x8087BA64; // type:func -BgHakaShip_ChildUpdatePosition = 0x8087BAA4; // type:func -BgHakaShip_WaitForSong = 0x8087BB00; // type:func -BgHakaShip_CutsceneStationary = 0x8087BB78; // type:func -BgHakaShip_Move = 0x8087BC14; // type:func -BgHakaShip_SetupCrash = 0x8087BDD8; // type:func -BgHakaShip_CrashShake = 0x8087BE34; // type:func -BgHakaShip_CrashFall = 0x8087BEC4; // type:func -BgHakaShip_Update = 0x8087BF84; // type:func -BgHakaShip_Draw = 0x8087BFC4; // type:func -BgHakaTrap_Init = 0x8087C370; // type:func -BgHakaTrap_Destroy = 0x8087C610; // type:func -func_8087FFC0 = 0x8087C694; // type:func -func_808801B8 = 0x8087C894; // type:func -func_808802D8 = 0x8087C9B8; // type:func -func_80880484 = 0x8087CB64; // type:func -func_808805C0 = 0x8087CCA0; // type:func -func_808806BC = 0x8087CD9C; // type:func -func_808808F4 = 0x8087CFD4; // type:func -func_808809B0 = 0x8087D094; // type:func -func_808809E4 = 0x8087D0C8; // type:func -func_80880AE8 = 0x8087D1D4; // type:func -func_80880C0C = 0x8087D2F8; // type:func -BgHakaTrap_Update = 0x8087D36C; // type:func -func_80880D68 = 0x8087D45C; // type:func -BgHakaTrap_Draw = 0x8087D4F8; // type:func -BgHakaTubo_Init = 0x8087D940; // type:func -BgHakaTubo_Destroy = 0x8087DA3C; // type:func -BgHakaTubo_Idle = 0x8087DA94; // type:func -BgHakaTubo_DropCollectible = 0x8087DD00; // type:func -BgHakaTubo_Update = 0x8087DFC4; // type:func -BgHakaTubo_DrawFlameCircle = 0x8087DFF8; // type:func -BgHakaTubo_Draw = 0x8087E1A4; // type:func -BgHakaWater_Init = 0x8087E360; // type:func -BgHakaWater_Destroy = 0x8087E3EC; // type:func -BgHakaWater_LowerWater = 0x8087E3FC; // type:func -BgHakaWater_Wait = 0x8087E544; // type:func -BgHakaWater_ChangeWaterLevel = 0x8087E600; // type:func -BgHakaWater_Update = 0x8087E708; // type:func -BgHakaWater_Draw = 0x8087E72C; // type:func -BgHakaZou_Init = 0x8087EB60; // type:func -BgHakaZou_Destroy = 0x8087EE48; // type:func -func_808828F4 = 0x8087EE98; // type:func -BgHakaZou_Wait = 0x8087F014; // type:func -func_80882BDC = 0x8087F184; // type:func -func_80882CC4 = 0x8087F26C; // type:func -func_80882E54 = 0x8087F3FC; // type:func -func_80883000 = 0x8087F5AC; // type:func -func_80883104 = 0x8087F6B0; // type:func -func_80883144 = 0x8087F6F0; // type:func -func_80883254 = 0x8087F800; // type:func -func_80883328 = 0x8087F8D8; // type:func -func_808834D8 = 0x8087FA88; // type:func -BgHakaZou_DoNothing = 0x8087FB18; // type:func -BgHakaZou_Update = 0x8087FB28; // type:func -BgHakaZou_Draw = 0x8087FB6C; // type:func -BgHeavyBlock_SetPieceRandRot = 0x8087FD50; // type:func -BgHeavyBlock_InitPiece = 0x8087FDE0; // type:func -BgHeavyBlock_SetupDynapoly = 0x8087FF5C; // type:func -BgHeavyBlock_Init = 0x8087FFD0; // type:func -BgHeavyBlock_Destroy = 0x80880214; // type:func -BgHeavyBlock_MovePiece = 0x8088025C; // type:func -BgHeavyBlock_SpawnDust = 0x80880420; // type:func -BgHeavyBlock_SpawnPieces = 0x80880784; // type:func -BgHeavyBlock_Wait = 0x8088097C; // type:func -BgHeavyBlock_LiftedUp = 0x80880AA4; // type:func -BgHeavyBlock_Fly = 0x80880C0C; // type:func -BgHeavyBlock_DoNothing = 0x80880F24; // type:func -BgHeavyBlock_Land = 0x80880F34; // type:func -BgHeavyBlock_Update = 0x808811A4; // type:func -BgHeavyBlock_Draw = 0x808811C8; // type:func -BgHeavyBlock_DrawPiece = 0x80881330; // type:func -BgHidanCurtain_Init = 0x80881640; // type:func -BgHidanCurtain_Destroy = 0x80881854; // type:func -BgHidanCurtain_WaitForSwitchOn = 0x80881880; // type:func -BgHidanCurtain_WaitForCutscene = 0x80881934; // type:func -BgHidanCurtain_WaitForClear = 0x80881960; // type:func -BgHidanCurtain_WaitForSwitchOff = 0x808819A4; // type:func -BgHidanCurtain_TurnOn = 0x808819E8; // type:func -BgHidanCurtain_TurnOff = 0x80881A5C; // type:func -BgHidanCurtain_WaitForTimer = 0x80881B4C; // type:func -BgHidanCurtain_Update = 0x80881BB0; // type:func -BgHidanCurtain_Draw = 0x80881E44; // type:func -BgHidanDalm_Init = 0x808820E0; // type:func -BgHidanDalm_Destroy = 0x808821C8; // type:func -BgHidanDalm_Wait = 0x80882210; // type:func -BgHidanDalm_Shrink = 0x80882394; // type:func -BgHidanDalm_Update = 0x80882544; // type:func -BgHidanDalm_UpdateCollider = 0x808825A4; // type:func -BgHidanDalm_Draw = 0x808826D0; // type:func -BgHidanFirewall_Init = 0x80882930; // type:func -BgHidanFirewall_Destroy = 0x808829D0; // type:func -BgHidanFirewall_CheckProximity = 0x808829FC; // type:func -BgHidanFirewall_Wait = 0x80882A6C; // type:func -BgHidanFirewall_Countdown = 0x80882AB4; // type:func -BgHidanFirewall_Erupt = 0x80882AE8; // type:func -BgHidanFirewall_Collide = 0x80882B78; // type:func -BgHidanFirewall_ColliderFollowPlayer = 0x80882BE0; // type:func -BgHidanFirewall_Update = 0x80882D44; // type:func -BgHidanFirewall_Draw = 0x80882E1C; // type:func -BgHidanFslift_Init = 0x80883090; // type:func -BgHidanFslift_SetHookshotTargetPos = 0x80883178; // type:func -BgHidanFslift_Destroy = 0x808831D8; // type:func -BgHidanFslift_SetupIdle = 0x8088320C; // type:func -BgHidanFslift_Idle = 0x80883228; // type:func -BgHidanFslift_Descend = 0x808832C8; // type:func -BgHidanFslift_Ascend = 0x80883334; // type:func -BgHidanFslift_Update = 0x808833D0; // type:func -BgHidanFslift_Draw = 0x80883478; // type:func -BgHidanFwbig_Init = 0x80883560; // type:func -BgHidanFwbig_Destroy = 0x80883700; // type:func -BgHidanFwbig_UpdatePosition = 0x8088372C; // type:func -BgHidanFwbig_WaitForSwitch = 0x808837AC; // type:func -BgHidanFwbig_WaitForCs = 0x80883810; // type:func -BgHidanFwbig_Rise = 0x8088383C; // type:func -BgHidanFwbig_Lower = 0x808838B0; // type:func -BgHidanFwbig_WaitForTimer = 0x80883990; // type:func -BgHidanFwbig_WaitForPlayer = 0x808839E0; // type:func -BgHidanFwbig_Move = 0x80883A44; // type:func -BgHidanFwbig_MoveCollider = 0x80883AE4; // type:func -BgHidanFwbig_Update = 0x80883CE4; // type:func -BgHidanFwbig_Draw = 0x80883E5C; // type:func -BgHidanHamstep_SetupAction = 0x80884240; // type:func -BgHidanHamstep_SpawnChildren = 0x80884260; // type:func -BgHidanHamstep_Init = 0x808843DC; // type:func -BgHidanHamstep_Destroy = 0x8088464C; // type:func -func_808884C8 = 0x808846A0; // type:func -func_80888638 = 0x80884810; // type:func -func_80888694 = 0x8088486C; // type:func -func_80888734 = 0x8088490C; // type:func -func_808887C4 = 0x808849A0; // type:func -func_80888860 = 0x80884A3C; // type:func -func_808889B8 = 0x80884B88; // type:func -func_80888A58 = 0x80884C28; // type:func -BgHidanHamstep_DoNothing = 0x80884DC0; // type:func -BgHidanHamstep_Update = 0x80884DD0; // type:func -BgHidanHamstep_Draw = 0x80884DF4; // type:func -BgHidanHrock_Init = 0x808850F0; // type:func -BgHidanHrock_Destroy = 0x80885420; // type:func -func_808894A4 = 0x80885468; // type:func -func_808894B0 = 0x80885478; // type:func -func_8088960C = 0x808855D4; // type:func -func_808896B8 = 0x80885680; // type:func -BgHidanHrock_Update = 0x80885760; // type:func -BgHidanHrock_Draw = 0x80885784; // type:func -BgHidanKousi_SetupAction = 0x80885920; // type:func -BgHidanKousi_Init = 0x8088592C; // type:func -BgHidanKousi_Destroy = 0x80885A24; // type:func -func_80889ACC = 0x80885A58; // type:func -func_80889B5C = 0x80885AE4; // type:func -func_80889BC0 = 0x80885B48; // type:func -func_80889C18 = 0x80885BA0; // type:func -func_80889C90 = 0x80885C18; // type:func -func_80889D28 = 0x80885CB4; // type:func -BgHidanKousi_Update = 0x80885CC4; // type:func -BgHidanKousi_Draw = 0x80885CE8; // type:func -BgHidanKowarerukabe_InitDynaPoly = 0x80885EB0; // type:func -BgHidanKowarerukabe_InitColliderSphere = 0x80885F4C; // type:func -BgHidanKowarerukabe_OffsetActorYPos = 0x80885FE0; // type:func -BgHidanKowarerukabe_Init = 0x8088600C; // type:func -BgHidanKowarerukabe_Destroy = 0x808860BC; // type:func -BgHidanKowarerukabe_SpawnDust = 0x80886104; // type:func -BgHidanKowarerukabe_FloorBreak = 0x80886228; // type:func -func_8088A67C = 0x808864F4; // type:func -BgHidanKowarerukabe_LargeWallBreak = 0x8088678C; // type:func -BgHidanKowarerukabe_Break = 0x80886A18; // type:func -BgHidanKowarerukabe_Update = 0x80886AA8; // type:func -BgHidanKowarerukabe_Draw = 0x80886B78; // type:func -BgHidanRock_Init = 0x80886D90; // type:func -BgHidanRock_Destroy = 0x80886F0C; // type:func -func_8088B24C = 0x80886F60; // type:func -func_8088B268 = 0x80886F80; // type:func -func_8088B5F4 = 0x80887310; // type:func -func_8088B634 = 0x80887350; // type:func -func_8088B69C = 0x808873BC; // type:func -func_8088B79C = 0x808874BC; // type:func -func_8088B90C = 0x8088762C; // type:func -func_8088B954 = 0x80887674; // type:func -func_8088B990 = 0x808876B0; // type:func -BgHidanRock_Update = 0x8088789C; // type:func -func_8088BC40 = 0x8088796C; // type:func -BgHidanRock_Draw = 0x80887B7C; // type:func -BgHidanRsekizou_Init = 0x80887E90; // type:func -BgHidanRsekizou_Destroy = 0x80887F94; // type:func -BgHidanRsekizou_Update = 0x80887FDC; // type:func -BgHidanRsekizou_DrawFireball = 0x808883A0; // type:func -BgHidanRsekizou_Draw = 0x808886B8; // type:func -func_8088CEC0 = 0x80888A70; // type:func -BgHidanSekizou_Init = 0x80888E2C; // type:func -BgHidanSekizou_Destroy = 0x80888FA0; // type:func -func_8088D434 = 0x80888FE8; // type:func -func_8088D720 = 0x808892D4; // type:func -func_8088D750 = 0x80889304; // type:func -BgHidanSekizou_Update = 0x80889470; // type:func -func_8088D9F4 = 0x808895AC; // type:func -func_8088DC50 = 0x808897F4; // type:func -func_8088DE08 = 0x808899AC; // type:func -BgHidanSekizou_Draw = 0x80889A8C; // type:func -BgHidanSima_Init = 0x80889EC0; // type:func -BgHidanSima_Destroy = 0x80889FC4; // type:func -func_8088E518 = 0x8088A00C; // type:func -func_8088E5D0 = 0x8088A0C8; // type:func -func_8088E6D0 = 0x8088A1CC; // type:func -func_8088E760 = 0x8088A264; // type:func -func_8088E7A8 = 0x8088A2AC; // type:func -func_8088E90C = 0x8088A410; // type:func -BgHidanSima_Update = 0x8088A570; // type:func -func_8088EB54 = 0x8088A660; // type:func -BgHidanSima_Draw = 0x8088AAD8; // type:func -BgHidanSyoku_Init = 0x8088ADC0; // type:func -BgHidanSyoku_Destroy = 0x8088AE4C; // type:func -func_8088F47C = 0x8088AE80; // type:func -func_8088F4B8 = 0x8088AEBC; // type:func -func_8088F514 = 0x8088AF1C; // type:func -func_8088F5A0 = 0x8088AFA8; // type:func -func_8088F62C = 0x8088B034; // type:func -BgHidanSyoku_Update = 0x8088B090; // type:func -BgHidanSyoku_Draw = 0x8088B138; // type:func -BgIceObjects_Init = 0x8088B220; // type:func -BgIceObjects_Destroy = 0x8088B2AC; // type:func -BgIceObjects_SetNextTarget = 0x8088B2E0; // type:func -BgIceObjects_CheckPits = 0x8088B760; // type:func -BgIceObjects_Idle = 0x8088B8E8; // type:func -BgIceObjects_Slide = 0x8088B9EC; // type:func -BgIceObjects_Reset = 0x8088BD7C; // type:func -BgIceObjects_Stuck = 0x8088BE18; // type:func -BgIceObjects_Update = 0x8088BE54; // type:func -BgIceObjects_Draw = 0x8088BE78; // type:func -BgIceShelter_InitColliders = 0x8088C160; // type:func -BgIceShelter_InitDynaPoly = 0x8088C294; // type:func -BgIceShelter_RotateY = 0x8088C2EC; // type:func -BgIceShelter_Init = 0x8088C36C; // type:func -BgIceShelter_Destroy = 0x8088C4E8; // type:func -BgIceShelter_SpawnSteamAround = 0x8088C574; // type:func -BgIceShelter_SpawnSteamAlong = 0x8088C7E8; // type:func -BgIceShelter_SetupIdle = 0x8088CA4C; // type:func -BgIceShelter_Idle = 0x8088CA68; // type:func -BgIceShelter_SetupMelt = 0x8088CBA8; // type:func -BgIceShelter_Melt = 0x8088CBC4; // type:func -BgIceShelter_Update = 0x8088CD88; // type:func -BgIceShelter_Draw = 0x8088CDAC; // type:func -func_80891AC0 = 0x8088D3A0; // type:func -BgIceShutter_Init = 0x8088D428; // type:func -BgIceShutter_Destroy = 0x8088D5A8; // type:func -func_80891CF4 = 0x8088D5DC; // type:func -func_80891D6C = 0x8088D654; // type:func -func_80891DD4 = 0x8088D6BC; // type:func -BgIceShutter_Update = 0x8088D724; // type:func -BgIceShutter_Draw = 0x8088D748; // type:func -BgIceTurara_Init = 0x8088D810; // type:func -BgIceTurara_Destroy = 0x8088D8EC; // type:func -BgIceTurara_Break = 0x8088D934; // type:func -BgIceTurara_Stalagmite = 0x8088DB14; // type:func -BgIceTurara_Wait = 0x8088DB7C; // type:func -BgIceTurara_Shiver = 0x8088DBB4; // type:func -BgIceTurara_Fall = 0x8088DD20; // type:func -BgIceTurara_Regrow = 0x8088DE78; // type:func -BgIceTurara_Update = 0x8088DEC8; // type:func -BgIceTurara_Draw = 0x8088DEEC; // type:func -BgInGate_SetupAction = 0x8088E040; // type:func -BgInGate_Init = 0x8088E04C; // type:func -BgInGate_Destroy = 0x8088E168; // type:func -func_80892890 = 0x8088E19C; // type:func -BgInGate_DoNothing = 0x8088E29C; // type:func -BgInGate_Update = 0x8088E2AC; // type:func -BgInGate_Draw = 0x8088E2D0; // type:func -BgJya1flift_InitDynapoly = 0x8088E3D0; // type:func -BgJya1flift_InitCollision = 0x8088E428; // type:func -BgJya1flift_Init = 0x8088E47C; // type:func -BgJya1flift_Destroy = 0x8088E574; // type:func -BgJya1flift_SetupWaitForSwitch = 0x8088E5CC; // type:func -BgJya1flift_WaitForSwitch = 0x8088E5EC; // type:func -BgJya1flift_SetupDoNothing = 0x8088E630; // type:func -BgJya1flift_DoNothing = 0x8088E650; // type:func -BgJya1flift_ChangeDirection = 0x8088E660; // type:func -BgJya1flift_Move = 0x8088E688; // type:func -BgJya1flift_ResetMoveDelay = 0x8088E76C; // type:func -BgJya1flift_DelayMove = 0x8088E784; // type:func -BgJya1flift_Update = 0x8088E7C4; // type:func -BgJya1flift_Draw = 0x8088E8E0; // type:func -BgJyaAmishutter_InitDynaPoly = 0x8088EA60; // type:func -BgJyaAmishutter_Init = 0x8088EAB8; // type:func -BgJyaAmishutter_Destroy = 0x8088EB00; // type:func -BgJyaAmishutter_SetupWaitForPlayer = 0x8088EB34; // type:func -BgJyaAmishutter_WaitForPlayer = 0x8088EB48; // type:func -func_80893428 = 0x8088EBA4; // type:func -func_80893438 = 0x8088EBB8; // type:func -func_808934B0 = 0x8088EC30; // type:func -func_808934C0 = 0x8088EC44; // type:func -func_808934FC = 0x8088EC80; // type:func -func_8089350C = 0x8088EC94; // type:func -BgJyaAmishutter_Update = 0x8088ECF8; // type:func -BgJyaAmishutter_Draw = 0x8088ED20; // type:func -BgJyaBigmirror_SetRoomFlag = 0x8088EDF0; // type:func -BgJyaBigmirror_HandleCobra = 0x8088EE60; // type:func -BgJyaBigmirror_SetBombiwaFlag = 0x8088EFF8; // type:func -BgJyaBigmirror_HandleMirRay = 0x8088F04C; // type:func -BgJyaBigmirror_Init = 0x8088F1F4; // type:func -BgJyaBigmirror_Destroy = 0x8088F278; // type:func -BgJyaBigmirror_Update = 0x8088F298; // type:func -BgJyaBigmirror_DrawLightBeam = 0x8088F2E8; // type:func -BgJyaBigmirror_Draw = 0x8088F474; // type:func -BgJyaBlock_Init = 0x8088F640; // type:func -BgJyaBlock_Destroy = 0x8088F6F8; // type:func -BgJyaBlock_Update = 0x8088F72C; // type:func -BgJyaBlock_Draw = 0x8088F750; // type:func -BgJyaBombchuiwa_SetupCollider = 0x8088F8B0; // type:func -BgJyaBombchuiwa_SetDrawFlags = 0x8088F904; // type:func -BgJyaBombchuiwa_Init = 0x8088F928; // type:func -BgJyaBombchuiwa_Destroy = 0x8088F9A8; // type:func -BgJyaBombchuiwa_Break = 0x8088F9D4; // type:func -BgJyaBombchuiwa_SetupWaitForExplosion = 0x8088FC60; // type:func -BgJyaBombchuiwa_WaitForExplosion = 0x8088FC98; // type:func -BgJyaBombchuiwa_CleanUpAfterExplosion = 0x8088FD7C; // type:func -func_808949B8 = 0x8088FDD4; // type:func -BgJyaBombchuiwa_SpawnLightRay = 0x8088FE60; // type:func -BgJyaBombchuiwa_Update = 0x8088FED8; // type:func -BgJyaBombchuiwa_DrawRock = 0x8088FF04; // type:func -BgJyaBombchuiwa_DrawLight = 0x8088FF8C; // type:func -BgJyaBombchuiwa_Draw = 0x808901E8; // type:func -BgJyaBombiwa_SetupDynaPoly = 0x808903F0; // type:func -BgJyaBombiwa_InitCollider = 0x80890448; // type:func -BgJyaBombiwa_Init = 0x8089049C; // type:func -BgJyaBombiwa_Destroy = 0x8089051C; // type:func -BgJyaBombiwa_Break = 0x80890564; // type:func -BgJyaBombiwa_Update = 0x808907F8; // type:func -BgJyaBombiwa_Draw = 0x80890888; // type:func -func_808958F0 = 0x808909B0; // type:func -BgJyaCobra_InitDynapoly = 0x80890A04; // type:func -BgJyaCobra_SpawnRay = 0x80890A5C; // type:func -func_80895A70 = 0x80890AC4; // type:func -func_80895BEC = 0x80890C44; // type:func -func_80895C74 = 0x80890CC8; // type:func -BgJyaCobra_UpdateShadowFromSide = 0x80890F48; // type:func -BgJyaCobra_UpdateShadowFromTop = 0x80891570; // type:func -BgJyaCobra_Init = 0x8089182C; // type:func -BgJyaCobra_Destroy = 0x80891918; // type:func -func_80896918 = 0x8089194C; // type:func -func_80896950 = 0x80891988; // type:func -func_808969F8 = 0x80891A30; // type:func -func_80896ABC = 0x80891AF8; // type:func -BgJyaCobra_Update = 0x80891C8C; // type:func -func_80896CB4 = 0x80891D00; // type:func -func_80896D78 = 0x80891D88; // type:func -BgJyaCobra_DrawShadow = 0x80891EB4; // type:func -BgJyaCobra_Draw = 0x80892138; // type:func -BgJyaGoroiwa_UpdateCollider = 0x808926F0; // type:func -BgJyaGoroiwa_InitCollider = 0x80892748; // type:func -BgJyaGoroiwa_UpdateRotation = 0x808927B0; // type:func -BgJyaGoroiwa_Init = 0x808927F0; // type:func -BgJyaGoroiwa_Destroy = 0x80892884; // type:func -BgJyaGoroiwa_SetupMove = 0x808928B0; // type:func -BgJyaGoroiwa_Move = 0x808928E0; // type:func -BgJyaGoroiwa_SetupWait = 0x80892B74; // type:func -BgJyaGoroiwa_Wait = 0x80892B8C; // type:func -BgJyaGoroiwa_Update = 0x80892BDC; // type:func -BgJyaGoroiwa_Draw = 0x80892CC8; // type:func -BgJyaHaheniron_ColliderInit = 0x80892E70; // type:func -BgJyaHaheniron_SpawnFragments = 0x80892EC4; // type:func -BgJyaHaheniron_Init = 0x808930F0; // type:func -BgJyaHaheniron_Destroy = 0x808931BC; // type:func -BgJyaHaheniron_SetupChairCrumble = 0x808931F4; // type:func -BgJyaHaheniron_ChairCrumble = 0x80893208; // type:func -BgJyaHaheniron_SetupPillarCrumble = 0x80893344; // type:func -BgJyaHaheniron_PillarCrumble = 0x80893358; // type:func -BgJyaHaheniron_SetupRubbleCollide = 0x808933D8; // type:func -BgJyaHaheniron_RubbleCollide = 0x808933EC; // type:func -BgJyaHaheniron_Update = 0x80893450; // type:func -BgJyaHaheniron_Draw = 0x8089347C; // type:func -BgJyaIronobj_InitCylinder = 0x80893660; // type:func -BgJyaIronobj_SpawnPillarParticles = 0x808936E0; // type:func -BgJyaIronobj_SpawnThroneParticles = 0x80893B5C; // type:func -BgJyaIronobj_Init = 0x80893F88; // type:func -BgJyaIronobj_Destroy = 0x8089401C; // type:func -func_808992D8 = 0x80894064; // type:func -func_808992E8 = 0x80894078; // type:func -BgJyaIronobj_Update = 0x808941B8; // type:func -BgJyaIronobj_Draw = 0x808941DC; // type:func -BgJyaKanaami_InitDynaPoly = 0x80894410; // type:func -BgJyaKanaami_Init = 0x80894468; // type:func -BgJyaKanaami_Destroy = 0x808944E8; // type:func -func_80899880 = 0x8089451C; // type:func -func_80899894 = 0x80894534; // type:func -func_8089993C = 0x808945DC; // type:func -func_80899950 = 0x808945F4; // type:func -func_80899A08 = 0x808946AC; // type:func -BgJyaKanaami_Update = 0x808946C0; // type:func -BgJyaKanaami_Draw = 0x808946F4; // type:func -BgJyaLift_InitDynapoly = 0x808947C0; // type:func -BgJyaLift_Init = 0x80894818; // type:func -BgJyaLift_Destroy = 0x808948D4; // type:func -BgJyaLift_SetInitPosY = 0x80894918; // type:func -BgJyaLift_DelayMove = 0x8089493C; // type:func -BgJyaLift_SetupMove = 0x808949C0; // type:func -BgJyaLift_Move = 0x808949D4; // type:func -BgJyaLift_SetFinalPosY = 0x80894AF8; // type:func -BgJyaLift_Update = 0x80894B10; // type:func -BgJyaLift_Draw = 0x80894C00; // type:func -BgJyaMegami_InitDynaPoly = 0x80894D10; // type:func -BgJyaMegami_InitCollider = 0x80894D68; // type:func -BgJyaMegami_SpawnEffect = 0x80894DBC; // type:func -BgJyaMegami_SetupSpawnEffect = 0x80895000; // type:func -BgJyaMegami_Init = 0x808950FC; // type:func -BgJyaMegami_Destroy = 0x80895190; // type:func -BgJyaMegami_SetupDetectLight = 0x808951D8; // type:func -BgJyaMegami_DetectLight = 0x808951F4; // type:func -BgJyaMegami_SetupExplode = 0x80895380; // type:func -BgJyaMegami_Explode = 0x80895418; // type:func -BgJyaMegami_Update = 0x808957A0; // type:func -BgJyaMegami_DrawFace = 0x808957C4; // type:func -BgJyaMegami_DrawExplode = 0x80895908; // type:func -BgJyaMegami_Draw = 0x80895AD4; // type:func -BgJyaZurerukabe_InitDynaPoly = 0x80895F00; // type:func -func_8089B4C8 = 0x80895F58; // type:func -BgJyaZurerukabe_Init = 0x808960F4; // type:func -BgJyaZurerukabe_Destroy = 0x808961B4; // type:func -func_8089B7B4 = 0x80896200; // type:func -func_8089B7C4 = 0x80896214; // type:func -func_8089B80C = 0x80896260; // type:func -func_8089B870 = 0x808962C8; // type:func -BgJyaZurerukabe_Update = 0x80896390; // type:func -BgJyaZurerukabe_Draw = 0x808963E8; // type:func -BgMenkuriEye_Init = 0x808965B0; // type:func -BgMenkuriEye_Destroy = 0x8089668C; // type:func -BgMenkuriEye_Update = 0x808966B8; // type:func -BgMenkuriEye_Draw = 0x80896828; // type:func -BgMenkuriKaiten_Init = 0x80896A50; // type:func -BgMenkuriKaiten_Destroy = 0x80896AB8; // type:func -BgMenkuriKaiten_Update = 0x80896AEC; // type:func -BgMenkuriKaiten_Draw = 0x80896B4C; // type:func -BgMenkuriNisekabe_Init = 0x80896BE0; // type:func -BgMenkuriNisekabe_Destroy = 0x80896C08; // type:func -BgMenkuriNisekabe_Update = 0x80896C18; // type:func -BgMenkuriNisekabe_Draw = 0x80896C4C; // type:func -BgMizuBwall_RotateVec3f = 0x80896D30; // type:func -BgMizuBwall_Init = 0x80896D84; // type:func -BgMizuBwall_Destroy = 0x80897600; // type:func -BgMizuBwall_SetAlpha = 0x80897648; // type:func -BgMizuBwall_SpawnDebris = 0x808977CC; // type:func -BgMizuBwall_Idle = 0x80897AA0; // type:func -BgMizuBwall_Break = 0x80897BA0; // type:func -BgMizuBwall_DoNothing = 0x80897BCC; // type:func -BgMizuBwall_Update = 0x80897BDC; // type:func -BgMizuBwall_Draw = 0x80897C00; // type:func -BgMizuMovebg_GetDragonStatueBossRoomOffsetIndex = 0x80898200; // type:func -BgMizuMovebg_Init = 0x8089826C; // type:func -BgMizuMovebg_Destroy = 0x80898634; // type:func -BgMizuMovebg_SetPosFromPath = 0x808986E8; // type:func -BgMizuMovebg_SetScrollAlphas = 0x8089877C; // type:func -BgMizuMovebg_UpdateMain = 0x80898900; // type:func -BgMizuMovebg_UpdateHookshotPlatform = 0x80898C3C; // type:func -BgMizuMovebg_Update = 0x80898DF8; // type:func -BgMizuMovebg_Draw = 0x80898E1C; // type:func -BgMizuShutter_Init = 0x80899390; // type:func -BgMizuShutter_Destroy = 0x808995F0; // type:func -BgMizuShutter_WaitForSwitch = 0x80899624; // type:func -BgMizuShutter_WaitForCutscene = 0x808996B8; // type:func -BgMizuShutter_Move = 0x80899704; // type:func -BgMizuShutter_WaitForTimer = 0x808998F0; // type:func -BgMizuShutter_Update = 0x80899970; // type:func -BgMizuShutter_Draw = 0x80899994; // type:func -BgMizuUzu_Init = 0x80899B90; // type:func -BgMizuUzu_Destroy = 0x80899C0C; // type:func -func_8089F788 = 0x80899C40; // type:func -BgMizuUzu_Update = 0x80899CB8; // type:func -BgMizuUzu_Draw = 0x80899CDC; // type:func -BgMizuWater_GetWaterLevelActionIndex = 0x80899D60; // type:func -BgMizuWater_SetWaterBoxesHeight = 0x80899E00; // type:func -BgMizuWater_Init = 0x80899E6C; // type:func -BgMizuWater_Destroy = 0x8089A0C8; // type:func -BgMizuWater_WaitForAction = 0x8089A0D8; // type:func -BgMizuWater_ChangeWaterLevel = 0x8089A2A4; // type:func -BgMizuWater_Update = 0x8089A5B4; // type:func -BgMizuWater_Draw = 0x8089A70C; // type:func -BgMjin_SetupAction = 0x8089AA30; // type:func -BgMjin_Init = 0x8089AA3C; // type:func -BgMjin_Destroy = 0x8089AADC; // type:func -func_808A0850 = 0x8089AB10; // type:func -BgMjin_DoNothing = 0x8089ABE4; // type:func -BgMjin_Update = 0x8089ABF4; // type:func -BgMjin_Draw = 0x8089AC18; // type:func -BgMoriBigst_SetupAction = 0x8089AE20; // type:func -BgMoriBigst_InitDynapoly = 0x8089AE2C; // type:func -BgMoriBigst_Init = 0x8089AE84; // type:func -BgMoriBigst_Destroy = 0x8089AF5C; // type:func -BgMoriBigst_SetupWaitForMoriTex = 0x8089AF90; // type:func -BgMoriBigst_WaitForMoriTex = 0x8089AFB8; // type:func -BgMoriBigst_SetupNoop = 0x8089B084; // type:func -BgMoriBigst_SetupStalfosFight = 0x8089B0A8; // type:func -BgMoriBigst_StalfosFight = 0x8089B15C; // type:func -BgMoriBigst_SetupFall = 0x8089B1D4; // type:func -BgMoriBigst_Fall = 0x8089B1FC; // type:func -BgMoriBigst_SetupLanding = 0x8089B288; // type:func -BgMoriBigst_Landing = 0x8089B31C; // type:func -BgMoriBigst_SetupStalfosPairFight = 0x8089B348; // type:func -BgMoriBigst_StalfosPairFight = 0x8089B460; // type:func -BgMoriBigst_SetupDone = 0x8089B4C0; // type:func -BgMoriBigst_Update = 0x8089B4E4; // type:func -BgMoriBigst_Draw = 0x8089B558; // type:func -func_808A1800 = 0x8089B750; // type:func -func_808A18FC = 0x8089B848; // type:func -BgMoriElevator_Init = 0x8089B8D0; // type:func -BgMoriElevator_Destroy = 0x8089B9B4; // type:func -BgMoriElevator_IsPlayerRiding = 0x8089B9F4; // type:func -BgMoriElevator_SetupWaitAfterInit = 0x8089BA54; // type:func -BgMoriElevator_WaitAfterInit = 0x8089BA68; // type:func -func_808A1C30 = 0x8089BB0C; // type:func -BgMoriElevator_MoveIntoGround = 0x8089BB20; // type:func -func_808A1CF4 = 0x8089BBD4; // type:func -BgMoriElevator_MoveAboveGround = 0x8089BC30; // type:func -BgMoriElevator_SetupSetPosition = 0x8089BCE4; // type:func -BgMoriElevator_SetPosition = 0x8089BCF8; // type:func -BgMoriElevator_StopMovement = 0x8089BEC0; // type:func -func_808A2008 = 0x8089BEDC; // type:func -BgMoriElevator_Update = 0x8089BF90; // type:func -BgMoriElevator_Draw = 0x8089BFE8; // type:func -BgMoriHashigo_InitDynapoly = 0x8089C240; // type:func -BgMoriHashigo_InitCollider = 0x8089C298; // type:func -BgMoriHashigo_SpawnLadder = 0x8089C344; // type:func -BgMoriHashigo_InitClasp = 0x8089C3FC; // type:func -BgMoriHashigo_InitLadder = 0x8089C488; // type:func -BgMoriHashigo_Init = 0x8089C4CC; // type:func -BgMoriHashigo_Destroy = 0x8089C590; // type:func -BgMoriHashigo_SetupWaitForMoriTex = 0x8089C5E8; // type:func -BgMoriHashigo_WaitForMoriTex = 0x8089C5FC; // type:func -BgMoriHashigo_SetupClasp = 0x8089C67C; // type:func -BgMoriHashigo_Clasp = 0x8089C690; // type:func -BgMoriHashigo_SetupLadderWait = 0x8089C6F4; // type:func -BgMoriHashigo_LadderWait = 0x8089C708; // type:func -BgMoriHashigo_SetupLadderFall = 0x8089C73C; // type:func -BgMoriHashigo_LadderFall = 0x8089C778; // type:func -BgMoriHashigo_SetupLadderRest = 0x8089C858; // type:func -BgMoriHashigo_Update = 0x8089C87C; // type:func -BgMoriHashigo_Draw = 0x8089C8B8; // type:func -BgMoriHashira4_SetupAction = 0x8089CB00; // type:func -BgMoriHashira4_InitDynaPoly = 0x8089CB0C; // type:func -BgMoriHashira4_Init = 0x8089CB64; // type:func -BgMoriHashira4_Destroy = 0x8089CC78; // type:func -BgMoriHashira4_SetupWaitForMoriTex = 0x8089CCAC; // type:func -BgMoriHashira4_WaitForMoriTex = 0x8089CCD0; // type:func -BgMoriHashira4_SetupPillarsRotate = 0x8089CD4C; // type:func -BgMoriHashira4_PillarsRotate = 0x8089CD70; // type:func -BgMoriHashira4_GateWait = 0x8089CDA8; // type:func -BgMoriHashira4_GateOpen = 0x8089CE54; // type:func -BgMoriHashira4_Update = 0x8089CEAC; // type:func -BgMoriHashira4_Draw = 0x8089CED8; // type:func -BgMoriHineri_Init = 0x8089D090; // type:func -BgMoriHineri_Destroy = 0x8089D290; // type:func -func_808A39FC = 0x8089D2C4; // type:func -BgMoriHineri_DoNothing = 0x8089D4BC; // type:func -BgMoriHineri_SpawnBossKeyChest = 0x8089D4CC; // type:func -func_808A3C8C = 0x8089D55C; // type:func -func_808A3D58 = 0x8089D628; // type:func -func_808A3E54 = 0x8089D724; // type:func -BgMoriHineri_Update = 0x8089D804; // type:func -BgMoriHineri_DrawHallAndRoom = 0x8089D828; // type:func -BgMoriIdomizu_SetupAction = 0x8089DDE0; // type:func -BgMoriIdomizu_SetWaterLevel = 0x8089DDEC; // type:func -BgMoriIdomizu_Init = 0x8089DE14; // type:func -BgMoriIdomizu_Destroy = 0x8089DF38; // type:func -BgMoriIdomizu_SetupWaitForMoriTex = 0x8089DF58; // type:func -BgMoriIdomizu_WaitForMoriTex = 0x8089DF7C; // type:func -BgMoriIdomizu_SetupMain = 0x8089DFD4; // type:func -BgMoriIdomizu_Main = 0x8089DFF8; // type:func -BgMoriIdomizu_Update = 0x8089E1BC; // type:func -BgMoriIdomizu_Draw = 0x8089E1E8; // type:func -BgMoriKaitenkabe_CrossProduct = 0x8089E420; // type:func -BgMoriKaitenkabe_Init = 0x8089E494; // type:func -BgMoriKaitenkabe_Destroy = 0x8089E548; // type:func -BgMoriKaitenkabe_WaitForMoriTex = 0x8089E57C; // type:func -BgMoriKaitenkabe_SetupWait = 0x8089E5D4; // type:func -BgMoriKaitenkabe_Wait = 0x8089E5EC; // type:func -BgMoriKaitenkabe_SetupRotate = 0x8089E74C; // type:func -BgMoriKaitenkabe_Rotate = 0x8089E76C; // type:func -BgMoriKaitenkabe_Update = 0x8089E8D8; // type:func -BgMoriKaitenkabe_Draw = 0x8089E8FC; // type:func -BgMoriRakkatenjo_Init = 0x8089EA90; // type:func -BgMoriRakkatenjo_Destroy = 0x8089EB48; // type:func -BgMoriRakkatenjo_IsLinkUnder = 0x8089EB7C; // type:func -BgMoriRakkatenjo_IsLinkClose = 0x8089EC2C; // type:func -BgMoriRakkatenjo_SetupWaitForMoriTex = 0x8089ECDC; // type:func -BgMoriRakkatenjo_WaitForMoriTex = 0x8089ECF0; // type:func -BgMoriRakkatenjo_SetupWait = 0x8089ED48; // type:func -BgMoriRakkatenjo_Wait = 0x8089ED84; // type:func -BgMoriRakkatenjo_SetupFall = 0x8089EE54; // type:func -BgMoriRakkatenjo_Fall = 0x8089EE74; // type:func -BgMoriRakkatenjo_SetupRest = 0x8089EFEC; // type:func -BgMoriRakkatenjo_Rest = 0x8089F014; // type:func -BgMoriRakkatenjo_SetupRise = 0x8089F044; // type:func -BgMoriRakkatenjo_Rise = 0x8089F064; // type:func -BgMoriRakkatenjo_Update = 0x8089F0E4; // type:func -BgMoriRakkatenjo_Draw = 0x8089F1BC; // type:func -BgPoEvent_InitPaintings = 0x8089F410; // type:func -BgPoEvent_InitBlocks = 0x8089F78C; // type:func -BgPoEvent_Init = 0x8089F93C; // type:func -BgPoEvent_Destroy = 0x8089FA4C; // type:func -BgPoEvent_BlockWait = 0x8089FAD0; // type:func -BgPoEvent_BlockShake = 0x8089FBDC; // type:func -BgPoEvent_CheckBlock = 0x8089FC94; // type:func -BgPoEvent_BlockFall = 0x8089FDCC; // type:func -BgPoEvent_BlockIdle = 0x8089FED0; // type:func -BgPoEvent_BlockPush = 0x808A0184; // type:func -BgPoEvent_BlockReset = 0x808A0344; // type:func -BgPoEvent_BlockSolved = 0x808A0444; // type:func -BgPoEvent_AmyWait = 0x808A04BC; // type:func -BgPoEvent_AmyPuzzle = 0x808A0538; // type:func -BgPoEvent_NextPainting = 0x808A0654; // type:func -BgPoEvent_PaintingEmpty = 0x808A0710; // type:func -BgPoEvent_PaintingAppear = 0x808A0740; // type:func -BgPoEvent_PaintingVanish = 0x808A0778; // type:func -BgPoEvent_PaintingPresent = 0x808A07C8; // type:func -BgPoEvent_PaintingBurn = 0x808A0A24; // type:func -BgPoEvent_Update = 0x808A0BD0; // type:func -BgPoEvent_Draw = 0x808A0C40; // type:func -BgPoSyokudai_Init = 0x808A1250; // type:func -BgPoSyokudai_Destroy = 0x808A14F0; // type:func -BgPoSyokudai_Update = 0x808A1560; // type:func -BgPoSyokudai_Draw = 0x808A15E0; // type:func -BgPushbox_SetupAction = 0x808A1BC0; // type:func -BgPushbox_Init = 0x808A1BCC; // type:func -BgPushbox_Destroy = 0x808A1C64; // type:func -BgPushbox_UpdateImpl = 0x808A1C98; // type:func -BgPushbox_Update = 0x808A1D74; // type:func -BgPushbox_Draw = 0x808A1DA4; // type:func -BgRelayObjects_Init = 0x808A1EC0; // type:func -BgRelayObjects_Destroy = 0x808A2100; // type:func -func_808A90F4 = 0x808A216C; // type:func -func_808A91AC = 0x808A2228; // type:func -func_808A9234 = 0x808A22B0; // type:func -BgRelayObjects_DoNothing = 0x808A239C; // type:func -func_808A932C = 0x808A23AC; // type:func -func_808A939C = 0x808A241C; // type:func -BgRelayObjects_Update = 0x808A24F0; // type:func -BgRelayObjects_Draw = 0x808A2514; // type:func -BgSpot00Break_Init = 0x808A2670; // type:func -BgSpot00Break_Destroy = 0x808A271C; // type:func -BgSpot00Break_Update = 0x808A2750; // type:func -BgSpot00Break_Draw = 0x808A2760; // type:func -BgSpot00Hanebasi_Init = 0x808A2810; // type:func -BgSpot00Hanebasi_Destroy = 0x808A2C20; // type:func -BgSpot00Hanebasi_DrawbridgeWait = 0x808A2C7C; // type:func -BgSpot00Hanebasi_DoNothing = 0x808A2DAC; // type:func -BgSpot00Hanebasi_DrawbridgeRiseAndFall = 0x808A2DBC; // type:func -BgSpot00Hanebasi_SetTorchLightInfo = 0x808A2EF0; // type:func -BgSpot00Hanebasi_Update = 0x808A3048; // type:func -BgSpot00Hanebasi_DrawTorches = 0x808A3358; // type:func -BgSpot00Hanebasi_Draw = 0x808A35F8; // type:func -BgSpot01Fusya_SetupAction = 0x808A3920; // type:func -BgSpot01Fusya_Init = 0x808A392C; // type:func -BgSpot01Fusya_Destroy = 0x808A39A8; // type:func -func_808AAA50 = 0x808A39B8; // type:func -BgSpot01Fusya_Update = 0x808A3A78; // type:func -BgSpot01Fusya_Draw = 0x808A3A9C; // type:func -BgSpot01Idohashira_PlayBreakSfx1 = 0x808A3BC0; // type:func -BgSpot01Idohashira_PlayBreakSfx2 = 0x808A3BE8; // type:func -func_808AAD3C = 0x808A3C20; // type:func -func_808AAE6C = 0x808A3D58; // type:func -func_808AAF34 = 0x808A3E24; // type:func -BgSpot01Idohashira_Destroy = 0x808A3FE8; // type:func -BgSpot01Idohashira_NotInCsMode = 0x808A401C; // type:func -BgSpot01Idohashira_GetCue = 0x808A403C; // type:func -func_808AB18C = 0x808A4088; // type:func -func_808AB1DC = 0x808A40DC; // type:func -func_808AB29C = 0x808A4180; // type:func -func_808AB3E8 = 0x808A42CC; // type:func -func_808AB3F8 = 0x808A42E0; // type:func -func_808AB414 = 0x808A4300; // type:func -func_808AB444 = 0x808A432C; // type:func -func_808AB504 = 0x808A43D8; // type:func -func_808AB510 = 0x808A43E8; // type:func -func_808AB530 = 0x808A4408; // type:func -func_808AB570 = 0x808A444C; // type:func -BgSpot01Idohashira_Update = 0x808A446C; // type:func -BgSpot01Idohashira_Init = 0x808A44B4; // type:func -func_808AB700 = 0x808A45CC; // type:func -BgSpot01Idohashira_Draw = 0x808A465C; // type:func -BgSpot01Idomizu_Init = 0x808A47C0; // type:func -BgSpot01Idomizu_Destroy = 0x808A4858; // type:func -func_808ABB84 = 0x808A4868; // type:func -BgSpot01Idomizu_Update = 0x808A491C; // type:func -BgSpot01Idomizu_Draw = 0x808A4940; // type:func -BgSpot01Idosoko_SetupAction = 0x808A4AE0; // type:func -BgSpot01Idosoko_Init = 0x808A4AEC; // type:func -BgSpot01Idosoko_Destroy = 0x808A4B8C; // type:func -func_808ABF54 = 0x808A4BC0; // type:func -BgSpot01Idosoko_Update = 0x808A4BD0; // type:func -BgSpot01Idosoko_Draw = 0x808A4BF4; // type:func -BgSpot01Objects2_Init = 0x808A4CF0; // type:func -BgSpot01Objects2_Destroy = 0x808A4DCC; // type:func -func_808AC22C = 0x808A4DDC; // type:func -func_808AC2BC = 0x808A4E70; // type:func -func_808AC474 = 0x808A5020; // type:func -BgSpot01Objects2_Update = 0x808A5030; // type:func -func_808AC4A4 = 0x808A5054; // type:func -BgSpot02Objects_Init = 0x808A51B0; // type:func -BgSpot02Objects_Destroy = 0x808A5420; // type:func -func_808AC8FC = 0x808A5454; // type:func -func_808AC908 = 0x808A5464; // type:func -func_808ACA08 = 0x808A5564; // type:func -func_808ACAFC = 0x808A565C; // type:func -func_808ACB58 = 0x808A56B8; // type:func -BgSpot02Objects_Update = 0x808A5738; // type:func -BgSpot02Objects_Draw = 0x808A575C; // type:func -func_808ACC34 = 0x808A5798; // type:func -func_808ACCB8 = 0x808A581C; // type:func -func_808AD3D4 = 0x808A5F08; // type:func -func_808AD450 = 0x808A5F84; // type:func -BgSpot03Taki_ApplyOpeningAlpha = 0x808A6510; // type:func -BgSpot03Taki_Init = 0x808A684C; // type:func -BgSpot03Taki_Destroy = 0x808A68FC; // type:func -func_808ADEF0 = 0x808A6930; // type:func -BgSpot03Taki_Update = 0x808A6B04; // type:func -BgSpot03Taki_Draw = 0x808A6B28; // type:func -BgSpot05Soko_Init = 0x808A6E30; // type:func -BgSpot05Soko_Destroy = 0x808A6F3C; // type:func -func_808AE5A8 = 0x808A6F70; // type:func -func_808AE5B4 = 0x808A6F80; // type:func -func_808AE630 = 0x808A6FFC; // type:func -BgSpot05Soko_Update = 0x808A7064; // type:func -BgSpot05Soko_Draw = 0x808A7088; // type:func -BgSpot06Objects_Init = 0x808A7150; // type:func -BgSpot06Objects_Destroy = 0x808A751C; // type:func -BgSpot06Objects_GateSpawnBubbles = 0x808A7584; // type:func -BgSpot06Objects_GateWaitForSwitch = 0x808A767C; // type:func -BgSpot06Objects_GateWaitToOpen = 0x808A7710; // type:func -BgSpot06Objects_GateOpen = 0x808A7744; // type:func -BgSpot06Objects_DoNothing = 0x808A77D0; // type:func -BgSpot06Objects_LockSpawnWaterRipples = 0x808A77E0; // type:func -BgSpot06Objects_LockSpawnBubbles = 0x808A7844; // type:func -BgSpot06Objects_LockWait = 0x808A78D8; // type:func -BgSpot06Objects_LockPullOutward = 0x808A7AFC; // type:func -BgSpot06Objects_LockSwimToSurface = 0x808A7BB4; // type:func -BgSpot06Objects_LockFloat = 0x808A7E2C; // type:func -BgSpot06Objects_Update = 0x808A7EAC; // type:func -BgSpot06Objects_DrawLakeHyliaWater = 0x808A7F0C; // type:func -BgSpot06Objects_Draw = 0x808A80F4; // type:func -BgSpot06Objects_WaterPlaneCutsceneWait = 0x808A81B8; // type:func -BgSpot06Objects_WaterPlaneCutsceneRise = 0x808A81E4; // type:func -BgSpot07Taki_Init = 0x808A8550; // type:func -BgSpot07Taki_Destroy = 0x808A85FC; // type:func -BgSpot07Taki_DoNothing = 0x808A8630; // type:func -BgSpot07Taki_Update = 0x808A8640; // type:func -BgSpot07Taki_Draw = 0x808A8664; // type:func -func_808B02D0 = 0x808A8B40; // type:func -func_808B0324 = 0x808A8B94; // type:func -BgSpot08Bakudankabe_Init = 0x808A8E8C; // type:func -BgSpot08Bakudankabe_Destroy = 0x808A8F2C; // type:func -BgSpot08Bakudankabe_Update = 0x808A8F74; // type:func -BgSpot08Bakudankabe_Draw = 0x808A9028; // type:func -BgSpot08Iceblock_SetupAction = 0x808A91E0; // type:func -BgSpot08Iceblock_InitDynaPoly = 0x808A91EC; // type:func -BgSpot08Iceblock_CheckParams = 0x808A9244; // type:func -BgSpot08Iceblock_Bobbing = 0x808A92A4; // type:func -BgSpot08Iceblock_SinkUnderPlayer = 0x808A9300; // type:func -BgSpot08Iceblock_SetWaterline = 0x808A93B0; // type:func -BgSpot08Iceblock_MultVectorScalar = 0x808A93D0; // type:func -BgSpot08Iceblock_CrossProduct = 0x808A9404; // type:func -BgSpot08Iceblock_NormalizeVector = 0x808A9478; // type:func -BgSpot08Iceblock_Roll = 0x808A9514; // type:func -BgSpot08Iceblock_SpawnTwinFloe = 0x808A9888; // type:func -BgSpot08Iceblock_Init = 0x808A9988; // type:func -BgSpot08Iceblock_Destroy = 0x808A9B7C; // type:func -BgSpot08Iceblock_SetupFloatNonrotating = 0x808A9BB0; // type:func -BgSpot08Iceblock_FloatNonrotating = 0x808A9BD4; // type:func -BgSpot08Iceblock_SetupFloatRotating = 0x808A9C28; // type:func -BgSpot08Iceblock_FloatRotating = 0x808A9C4C; // type:func -BgSpot08Iceblock_SetupFloatOrbitingTwins = 0x808A9CAC; // type:func -BgSpot08Iceblock_FloatOrbitingTwins = 0x808A9CD0; // type:func -BgSpot08Iceblock_SetupNoAction = 0x808A9DA8; // type:func -BgSpot08Iceblock_Update = 0x808A9DC8; // type:func -BgSpot08Iceblock_Draw = 0x808A9E64; // type:func -func_808B1AE0 = 0x808AA220; // type:func -func_808B1BA0 = 0x808AA2E0; // type:func -func_808B1BEC = 0x808AA32C; // type:func -func_808B1C70 = 0x808AA3B8; // type:func -func_808B1CEC = 0x808AA434; // type:func -func_808B1D18 = 0x808AA460; // type:func -func_808B1D44 = 0x808AA48C; // type:func -BgSpot09Obj_Init = 0x808AA4CC; // type:func -BgSpot09Obj_Destroy = 0x808AA534; // type:func -BgSpot09Obj_Update = 0x808AA574; // type:func -BgSpot09Obj_Draw = 0x808AA584; // type:func -func_808B2180 = 0x808AA740; // type:func -func_808B2218 = 0x808AA7D4; // type:func -BgSpot11Bakudankabe_Init = 0x808AAAEC; // type:func -BgSpot11Bakudankabe_Destroy = 0x808AAB88; // type:func -BgSpot11Bakudankabe_Update = 0x808AABD0; // type:func -BgSpot11Bakudankabe_Draw = 0x808AAC6C; // type:func -func_808B27F0 = 0x808AAD80; // type:func -func_808B280C = 0x808AADA0; // type:func -BgSpot11Oasis_Init = 0x808AAEB4; // type:func -func_808B2970 = 0x808AAF08; // type:func -func_808B2980 = 0x808AAF1C; // type:func -func_808B29E0 = 0x808AAF7C; // type:func -func_808B29F0 = 0x808AAF90; // type:func -func_808B2AA8 = 0x808AB048; // type:func -func_808B2AB8 = 0x808AB05C; // type:func -BgSpot11Oasis_Update = 0x808AB06C; // type:func -BgSpot11Oasis_Draw = 0x808AB260; // type:func -BgSpot12Gate_InitDynaPoly = 0x808AB4B0; // type:func -BgSpot12Gate_Init = 0x808AB508; // type:func -BgSpot12Gate_Destroy = 0x808AB588; // type:func -func_808B30C0 = 0x808AB5BC; // type:func -func_808B30D8 = 0x808AB5D8; // type:func -func_808B3134 = 0x808AB634; // type:func -func_808B314C = 0x808AB650; // type:func -func_808B317C = 0x808AB680; // type:func -func_808B318C = 0x808AB694; // type:func -func_808B3274 = 0x808AB77C; // type:func -func_808B3298 = 0x808AB7A4; // type:func -BgSpot12Gate_Update = 0x808AB7B4; // type:func -BgSpot12Gate_Draw = 0x808AB7E8; // type:func -func_808B3420 = 0x808AB8C0; // type:func -BgSpot12Saku_Init = 0x808AB918; // type:func -BgSpot12Saku_Destroy = 0x808AB998; // type:func -func_808B3550 = 0x808AB9CC; // type:func -func_808B357C = 0x808AB9FC; // type:func -func_808B35E4 = 0x808ABA64; // type:func -func_808B3604 = 0x808ABA84; // type:func -func_808B3714 = 0x808ABB94; // type:func -func_808B37AC = 0x808ABC28; // type:func -BgSpot12Saku_Update = 0x808ABC38; // type:func -BgSpot12Saku_Draw = 0x808ABC6C; // type:func -func_808B3960 = 0x808ABD80; // type:func -BgSpot15Rrbox_RotatePoint = 0x808ABDD8; // type:func -func_808B3A34 = 0x808ABE2C; // type:func -func_808B3A40 = 0x808ABE3C; // type:func -func_808B3AAC = 0x808ABEAC; // type:func -BgSpot15Rrbox_Init = 0x808ABF94; // type:func -BgSpot15Rrbox_Destroy = 0x808AC064; // type:func -BgSpot15Rrbox_TrySnapToCheckedPoint = 0x808AC0A0; // type:func -BgSpot15Rrbox_GetFloorHeight = 0x808AC1E0; // type:func -BgSpot15Rrbox_TrySnapToFloor = 0x808AC360; // type:func -func_808B4010 = 0x808AC420; // type:func -func_808B4084 = 0x808AC494; // type:func -func_808B40AC = 0x808AC4C0; // type:func -func_808B4178 = 0x808AC58C; // type:func -func_808B4194 = 0x808AC5AC; // type:func -func_808B4380 = 0x808AC798; // type:func -func_808B43D0 = 0x808AC7E8; // type:func -func_808B44B8 = 0x808AC8B4; // type:func -func_808B44CC = 0x808AC8CC; // type:func -BgSpot15Rrbox_Update = 0x808AC8F0; // type:func -BgSpot15Rrbox_Draw = 0x808AC95C; // type:func -BgSpot15Saku_Init = 0x808ACB60; // type:func -BgSpot15Saku_Destroy = 0x808ACC14; // type:func -func_808B4930 = 0x808ACC48; // type:func -func_808B4978 = 0x808ACC90; // type:func -func_808B4A04 = 0x808ACD1C; // type:func -BgSpot15Saku_Update = 0x808ACD4C; // type:func -BgSpot15Saku_Draw = 0x808ACD80; // type:func -func_808B4C30 = 0x808ACEA0; // type:func -func_808B4C4C = 0x808ACEC0; // type:func -func_808B4D04 = 0x808ACF74; // type:func -func_808B4D9C = 0x808AD008; // type:func -func_808B4E58 = 0x808AD0B8; // type:func -BgSpot16Bombstone_Init = 0x808AD2B4; // type:func -BgSpot16Bombstone_Destroy = 0x808AD368; // type:func -BgSpot16Bombstone_SpawnDust = 0x808AD3B4; // type:func -func_808B5240 = 0x808AD450; // type:func -BgSpot16Bombstone_SpawnFragments = 0x808AD5B8; // type:func -func_808B561C = 0x808AD830; // type:func -func_808B56BC = 0x808AD8D0; // type:func -func_808B57E0 = 0x808AD9CC; // type:func -func_808B5934 = 0x808ADB24; // type:func -func_808B5950 = 0x808ADB44; // type:func -func_808B5A78 = 0x808ADC30; // type:func -func_808B5A94 = 0x808ADC50; // type:func -func_808B5AF0 = 0x808ADCB4; // type:func -func_808B5B04 = 0x808ADCCC; // type:func -func_808B5B58 = 0x808ADD24; // type:func -func_808B5B6C = 0x808ADD3C; // type:func -BgSpot16Bombstone_Update = 0x808ADE38; // type:func -BgSpot16Bombstone_Draw = 0x808ADE6C; // type:func -BgSpot16Doughnut_Init = 0x808AE3F0; // type:func -BgSpot16Doughnut_Destroy = 0x808AE564; // type:func -BgSpot16Doughnut_Update = 0x808AE574; // type:func -BgSpot16Doughnut_UpdateExpanding = 0x808AE608; // type:func -BgSpot16Doughnut_Draw = 0x808AE670; // type:func -BgSpot16Doughnut_DrawExpanding = 0x808AE828; // type:func -func_808B6BC0 = 0x808AE9B0; // type:func -BgSpot17Bakudankabe_Init = 0x808AECE0; // type:func -BgSpot17Bakudankabe_Destroy = 0x808AED74; // type:func -BgSpot17Bakudankabe_Update = 0x808AEDA8; // type:func -BgSpot17Bakudankabe_Draw = 0x808AEE3C; // type:func -BgSpot17Funen_Init = 0x808AF0A0; // type:func -BgSpot17Funen_Destroy = 0x808AF0C8; // type:func -BgSpot17Funen_Update = 0x808AF0D8; // type:func -func_808B746C = 0x808AF0FC; // type:func -func_808B7478 = 0x808AF10C; // type:func -func_808B7710 = 0x808AF2F0; // type:func -func_808B7770 = 0x808AF34C; // type:func -BgSpot18Basket_Init = 0x808AF508; // type:func -BgSpot18Basket_Destroy = 0x808AF654; // type:func -func_808B7AEC = 0x808AF69C; // type:func -func_808B7AFC = 0x808AF6B0; // type:func -func_808B7B58 = 0x808AF70C; // type:func -func_808B7B6C = 0x808AF724; // type:func -func_808B7BB0 = 0x808AF768; // type:func -func_808B7BCC = 0x808AF788; // type:func -func_808B7D38 = 0x808AF8F4; // type:func -func_808B7D50 = 0x808AF910; // type:func -func_808B7F74 = 0x808AFB34; // type:func -func_808B7FC0 = 0x808AFB84; // type:func -func_808B818C = 0x808AFD50; // type:func -func_808B81A0 = 0x808AFD68; // type:func -BgSpot18Basket_Update = 0x808B0000; // type:func -BgSpot18Basket_Draw = 0x808B00C4; // type:func -BgSpot18Futa_Init = 0x808B02E0; // type:func -BgSpot18Futa_Destroy = 0x808B034C; // type:func -BgSpot18Futa_Update = 0x808B0380; // type:func -BgSpot18Futa_Draw = 0x808B03E4; // type:func -func_808B8910 = 0x808B0480; // type:func -func_808B8A5C = 0x808B0538; // type:func -func_808B8A98 = 0x808B0574; // type:func -func_808B8B08 = 0x808B05E4; // type:func -func_808B8B38 = 0x808B0618; // type:func -func_808B8BB4 = 0x808B0694; // type:func -func_808B8C90 = 0x808B0778; // type:func -func_808B8CC8 = 0x808B07B4; // type:func -BgSpot18Obj_Init = 0x808B0808; // type:func -BgSpot18Obj_Destroy = 0x808B0864; // type:func -func_808B8DC0 = 0x808B0898; // type:func -func_808B8DD0 = 0x808B08AC; // type:func -func_808B8DDC = 0x808B08BC; // type:func -func_808B8E20 = 0x808B0900; // type:func -func_808B8E64 = 0x808B0944; // type:func -func_808B8E7C = 0x808B0960; // type:func -func_808B8EE0 = 0x808B09C4; // type:func -func_808B8F08 = 0x808B09F0; // type:func -func_808B9030 = 0x808B0B1C; // type:func -func_808B9040 = 0x808B0B30; // type:func -BgSpot18Obj_Update = 0x808B0B50; // type:func -BgSpot18Obj_Draw = 0x808B0B84; // type:func -BgSpot18Shutter_Init = 0x808B0D50; // type:func -BgSpot18Shutter_Destroy = 0x808B0F00; // type:func -func_808B95AC = 0x808B0F34; // type:func -func_808B95B8 = 0x808B0F44; // type:func -func_808B9618 = 0x808B0FA4; // type:func -func_808B9698 = 0x808B102C; // type:func -func_808B971C = 0x808B10B0; // type:func -BgSpot18Shutter_Update = 0x808B118C; // type:func -BgSpot18Shutter_Draw = 0x808B11B0; // type:func -BgSstFloor_Init = 0x808B12A0; // type:func -BgSstFloor_Destroy = 0x808B1308; // type:func -BgSstFloor_Update = 0x808B133C; // type:func -BgSstFloor_Draw = 0x808B16B0; // type:func -BgTokiHikari_Init = 0x808B1800; // type:func -BgTokiHikari_Destroy = 0x808B188C; // type:func -BgTokiHikari_DoNothing = 0x808B189C; // type:func -BgTokiHikari_Update = 0x808B18AC; // type:func -BgTokiHikari_Draw = 0x808B18D0; // type:func -func_808BA018 = 0x808B1920; // type:func -func_808BA204 = 0x808B1AC8; // type:func -func_808BA22C = 0x808B1AF0; // type:func -func_808BA274 = 0x808B1B38; // type:func -func_808BA2CC = 0x808B1B90; // type:func -BgTokiSwd_SetupAction = 0x808B25A0; // type:func -BgTokiSwd_Init = 0x808B25AC; // type:func -BgTokiSwd_Destroy = 0x808B2680; // type:func -func_808BAF40 = 0x808B26AC; // type:func -func_808BB0AC = 0x808B2820; // type:func -func_808BB128 = 0x808B28A0; // type:func -BgTokiSwd_Update = 0x808B28F4; // type:func -BgTokiSwd_Draw = 0x808B2948; // type:func -BgTreemouth_SetupAction = 0x808B3BF0; // type:func -BgTreemouth_Init = 0x808B3BFC; // type:func -BgTreemouth_Destroy = 0x808B3D24; // type:func -func_808BC65C = 0x808B3D58; // type:func -func_808BC6F8 = 0x808B3DF4; // type:func -func_808BC80C = 0x808B3F08; // type:func -func_808BC864 = 0x808B3F60; // type:func -func_808BC8B8 = 0x808B3FB4; // type:func -func_808BC9EC = 0x808B40E8; // type:func -func_808BCAF0 = 0x808B41F0; // type:func -BgTreemouth_DoNothing = 0x808B428C; // type:func -BgTreemouth_Update = 0x808B429C; // type:func -BgTreemouth_Draw = 0x808B431C; // type:func -BgUmaJump_Init = 0x808B5250; // type:func -BgUmaJump_Destroy = 0x808B530C; // type:func -BgUmaJump_Update = 0x808B5340; // type:func -BgUmaJump_Draw = 0x808B5350; // type:func -BgVbSima_Init = 0x808B53E0; // type:func -BgVbSima_Destroy = 0x808B5448; // type:func -BgVbSima_SpawnEmber = 0x808B547C; // type:func -BgVbSima_Update = 0x808B5548; // type:func -BgVbSima_Draw = 0x808B59A8; // type:func -BgYdanHasi_Init = 0x808B5B00; // type:func -BgYdanHasi_Destroy = 0x808B5C64; // type:func -BgYdanHasi_UpdateFloatingBlock = 0x808B5C98; // type:func -BgYdanHasi_InitWater = 0x808B5DD0; // type:func -BgYdanHasi_MoveWater = 0x808B5E1C; // type:func -BgYdanHasi_DecWaterTimer = 0x808B5EEC; // type:func -BgYdanHasi_SetupThreeBlocks = 0x808B5F40; // type:func -BgYdanHasi_UpdateThreeBlocks = 0x808B5FAC; // type:func -BgYdanHasi_Update = 0x808B607C; // type:func -BgYdanHasi_Draw = 0x808B60A0; // type:func -BgYdanMaruta_Init = 0x808B62B0; // type:func -BgYdanMaruta_Destroy = 0x808B6514; // type:func -func_808BEFF4 = 0x808B6568; // type:func -func_808BF078 = 0x808B65EC; // type:func -func_808BF108 = 0x808B667C; // type:func -func_808BF1EC = 0x808B6760; // type:func -BgYdanMaruta_DoNothing = 0x808B67D0; // type:func -BgYdanMaruta_Update = 0x808B67E0; // type:func -BgYdanMaruta_Draw = 0x808B6804; // type:func -BgYdanSp_Init = 0x808B6990; // type:func -BgYdanSp_Destroy = 0x808B6D78; // type:func -BgYdanSp_UpdateFloorWebCollision = 0x808B6DC0; // type:func -BgYdanSp_BurnWeb = 0x808B6E94; // type:func -BgYdanSp_BurnFloorWeb = 0x808B6F04; // type:func -BgYdanSp_FloorWebBroken = 0x808B71D8; // type:func -BgYdanSp_FloorWebBreaking = 0x808B7218; // type:func -BgYdanSp_FloorWebIdle = 0x808B73D8; // type:func -BgYdanSp_BurnWallWeb = 0x808B76B4; // type:func -BgYdanSp_WallWebIdle = 0x808B79EC; // type:func -BgYdanSp_Update = 0x808B7B2C; // type:func -BgYdanSp_Draw = 0x808B7B50; // type:func -BgZg_Destroy = 0x808B80B0; // type:func -func_808C0C50 = 0x808B80E4; // type:func -func_808C0C98 = 0x808B812C; // type:func -func_808C0CC8 = 0x808B8160; // type:func -func_808C0CD4 = 0x808B8170; // type:func -func_808C0D08 = 0x808B81A4; // type:func -BgZg_Update = 0x808B8248; // type:func -BgZg_Init = 0x808B8290; // type:func -func_808C0EEC = 0x808B837C; // type:func -BgZg_Draw = 0x808B83F8; // type:func -func_808C1190 = 0x808B8500; // type:func -func_808C11D0 = 0x808B8540; // type:func -func_808C1200 = 0x808B8570; // type:func -func_808C1230 = 0x808B85A0; // type:func -func_808C1278 = 0x808B85E8; // type:func -func_808C12C4 = 0x808B8634; // type:func -func_808C1554 = 0x808B88C4; // type:func -func_808C17C8 = 0x808B8B44; // type:func -BossDodongo_AteExplosive = 0x808B8C2C; // type:func -BossDodongo_Init = 0x808B8CEC; // type:func -BossDodongo_Destroy = 0x808B8FC8; // type:func -BossDodongo_SetupIntroCutscene = 0x808B9008; // type:func -BossDodongo_IntroCutscene = 0x808B9088; // type:func -BossDodongo_SetupDamaged = 0x808B9C04; // type:func -BossDodongo_SetupExplode = 0x808B9C98; // type:func -BossDodongo_SetupWalk = 0x808B9D3C; // type:func -BossDodongo_SetupRoll = 0x808B9DCC; // type:func -BossDodongo_SetupBlowFire = 0x808B9E40; // type:func -BossDodongo_SetupInhale = 0x808B9EC8; // type:func -BossDodongo_Damaged = 0x808B9F58; // type:func -BossDodongo_Explode = 0x808BA00C; // type:func -BossDodongo_LayDown = 0x808BA260; // type:func -BossDodongo_Vulnerable = 0x808BA340; // type:func -BossDodongo_GetUp = 0x808BA42C; // type:func -BossDodongo_BlowFire = 0x808BA490; // type:func -BossDodongo_Inhale = 0x808BA5C0; // type:func -BossDodongo_Walk = 0x808BA694; // type:func -BossDodongo_Roll = 0x808BAAA4; // type:func -BossDodongo_Update = 0x808BAEA0; // type:func -BossDodongo_OverrideLimbDraw = 0x808BBCE0; // type:func -BossDodongo_PostLimbDraw = 0x808BBF04; // type:func -BossDodongo_Draw = 0x808BBFE8; // type:func -func_808C4F6C = 0x808BC2B0; // type:func -func_808C50A8 = 0x808BC3EC; // type:func -BossDodongo_PlayerYawCheck = 0x808BC538; // type:func -BossDodongo_PlayerPosCheck = 0x808BC594; // type:func -BossDodongo_SpawnFire = 0x808BC628; // type:func -BossDodongo_UpdateDamage = 0x808BC69C; // type:func -BossDodongo_SetupDeathCutscene = 0x808BC808; // type:func -BossDodongo_DeathCutscene = 0x808BC8C0; // type:func -BossDodongo_UpdateEffects = 0x808BE000; // type:func -BossDodongo_DrawEffects = 0x808BE134; // type:func -BossFd_SpawnEmber = 0x808C2000; // type:func -BossFd_SpawnDebris = 0x808C20CC; // type:func -BossFd_SpawnDust = 0x808C219C; // type:func -BossFd_SpawnFireBreath = 0x808C2234; // type:func -BossFd_SetCameraSpeed = 0x808C2340; // type:func -BossFd_UpdateCamera = 0x808C23E0; // type:func -BossFd_Init = 0x808C254C; // type:func -BossFd_Destroy = 0x808C286C; // type:func -BossFd_IsFacingLink = 0x808C28CC; // type:func -BossFd_SetupFly = 0x808C28FC; // type:func -BossFd_Fly = 0x808C296C; // type:func -BossFd_Wait = 0x808C4FF4; // type:func -BossFd_Effects = 0x808C51E4; // type:func -BossFd_CollisionCheck = 0x808C5E04; // type:func -BossFd_Update = 0x808C5EB8; // type:func -BossFd_UpdateEffects = 0x808C65F8; // type:func -BossFd_DrawEffects = 0x808C6A50; // type:func -BossFd_Draw = 0x808C70F0; // type:func -BossFd_OverrideRightArmDraw = 0x808C71A8; // type:func -BossFd_OverrideLeftArmDraw = 0x808C72C8; // type:func -BossFd_DrawMane = 0x808C73E8; // type:func -BossFd_OverrideHeadDraw = 0x808C786C; // type:func -BossFd_PostHeadDraw = 0x808C7964; // type:func -BossFd_DrawBody = 0x808C79B8; // type:func -BossFd2_SpawnDebris = 0x808C9360; // type:func -BossFd2_SpawnFireBreath = 0x808C9438; // type:func -BossFd2_SpawnEmber = 0x808C954C; // type:func -BossFd2_SpawnSkullPiece = 0x808C9620; // type:func -BossFd2_SpawnDust = 0x808C96F8; // type:func -BossFd2_Init = 0x808C9790; // type:func -BossFd2_Destroy = 0x808C988C; // type:func -BossFd2_SetupEmerge = 0x808C98CC; // type:func -BossFd2_Emerge = 0x808C99C4; // type:func -BossFd2_SetupIdle = 0x808C9D04; // type:func -BossFd2_Idle = 0x808C9DAC; // type:func -BossFd2_SetupBurrow = 0x808C9F00; // type:func -BossFd2_Burrow = 0x808C9F78; // type:func -BossFd2_SetupBreatheFire = 0x808CA048; // type:func -BossFd2_BreatheFire = 0x808CA0AC; // type:func -BossFd2_SetupClawSwipe = 0x808CA5F0; // type:func -BossFd2_ClawSwipe = 0x808CA650; // type:func -BossFd2_SetupVulnerable = 0x808CA6C8; // type:func -BossFd2_Vulnerable = 0x808CA724; // type:func -BossFd2_SetupDamaged = 0x808CA97C; // type:func -BossFd2_Damaged = 0x808CA9D8; // type:func -BossFd2_SetupDeath = 0x808CAB08; // type:func -BossFd2_UpdateCamera = 0x808CAB98; // type:func -BossFd2_Death = 0x808CAD08; // type:func -BossFd2_Wait = 0x808CB38C; // type:func -BossFd2_CollisionCheck = 0x808CB3D4; // type:func -BossFd2_UpdateFace = 0x808CB874; // type:func -BossFd2_Update = 0x808CB9E0; // type:func -BossFd2_OverrideLimbDraw = 0x808CBB94; // type:func -BossFd2_PostLimbDraw = 0x808CBD88; // type:func -BossFd2_UpdateMane = 0x808CBE30; // type:func -BossFd2_DrawMane = 0x808CC404; // type:func -BossFd2_Draw = 0x808CC848; // type:func -BossGanonEff_SpawnWindowShard = 0x808CD090; // type:func -BossGanonEff_SpawnSparkle = 0x808CD1D0; // type:func -BossGanonEff_SpawnLightRay = 0x808CD2CC; // type:func -BossGanonEff_SpawnShock = 0x808CD410; // type:func -BossGanonEff_SpawnLightning = 0x808CD4DC; // type:func -BossGanonEff_SpawnDustDark = 0x808CD580; // type:func -BossGanonEff_SpawnDustLight = 0x808CD674; // type:func -BossGanonEff_SpawnShockwave = 0x808CD758; // type:func -BossGanonEff_SpawnBlackDot = 0x808CD850; // type:func -BossGanon_SetColliderPos = 0x808CD90C; // type:func -BossGanon_SetAnimationObject = 0x808CD950; // type:func -BossGanon_Init = 0x808CD9C0; // type:func -BossGanon_Destroy = 0x808CDF64; // type:func -BossGanon_SetupIntroCutscene = 0x808CDFC8; // type:func -BossGanon_SetIntroCsCamera = 0x808CE0AC; // type:func -BossGanon_IntroCutscene = 0x808CE14C; // type:func -BossGanon_SetupDeathCutscene = 0x808CF84C; // type:func -BossGanon_SetupTowerCutscene = 0x808CF930; // type:func -BossGanon_ShatterWindows = 0x808CFA34; // type:func -BossGanon_DeathAndTowerCutscene = 0x808CFB78; // type:func -BossGanon_SetupPoundFloor = 0x808D1520; // type:func -BossGanon_PoundFloor = 0x808D155C; // type:func -BossGanon_SetupChargeBigMagic = 0x808D1AB0; // type:func -BossGanon_ChargeBigMagic = 0x808D1B20; // type:func -BossGanon_SetupWait = 0x808D2328; // type:func -BossGanon_Wait = 0x808D23B0; // type:func -BossGanon_SetupChargeLightBall = 0x808D26FC; // type:func -BossGanon_ChargeLightBall = 0x808D276C; // type:func -BossGanon_SetupPlayTennis = 0x808D2920; // type:func -BossGanon_PlayTennis = 0x808D2988; // type:func -BossGanon_SetupBlock = 0x808D2C58; // type:func -BossGanon_Block = 0x808D2D10; // type:func -BossGanon_SetupHitByLightBall = 0x808D2EA0; // type:func -BossGanon_HitByLightBall = 0x808D2F94; // type:func -BossGanon_SetupVulnerable = 0x808D31EC; // type:func -BossGanon_Vulnerable = 0x808D33BC; // type:func -BossGanon_SetupDamaged = 0x808D3928; // type:func -BossGanon_Damaged = 0x808D3990; // type:func -BossGanon_UpdateDamage = 0x808D3A50; // type:func -BossGanon_Update = 0x808D3E18; // type:func -BossGanon_OverrideLimbDraw = 0x808D4F80; // type:func -BossGanon_PostLimbDraw = 0x808D51C0; // type:func -BossGanon_InitRand = 0x808D551C; // type:func -BossGanon_RandZeroOne = 0x808D553C; // type:func -BossGanon_DrawShock = 0x808D5664; // type:func -BossGanon_DrawHandLightBall = 0x808D5A10; // type:func -BossGanon_DrawBigMagicCharge = 0x808D5C64; // type:func -BossGanon_DrawTriforce = 0x808D62F4; // type:func -BossGanon_DrawDarkVortex = 0x808D66B8; // type:func -func_808E0254 = 0x808D6910; // type:func -BossGanon_GenShadowTexture = 0x808D6DB8; // type:func -BossGanon_DrawShadowTexture = 0x808D70F8; // type:func -BossGanon_Draw = 0x808D7374; // type:func -BossGanon_CheckFallingPlatforms = 0x808D75BC; // type:func -BossGanon_LightBall_Update = 0x808D76A4; // type:func -BossGanon_LightBall_Draw = 0x808D81C4; // type:func -func_808E1EB4 = 0x808D84D8; // type:func -func_808E229C = 0x808D88C8; // type:func -func_808E2544 = 0x808D8B38; // type:func -func_808E324C = 0x808D984C; // type:func -BossGanon_UpdateEffects = 0x808D9B20; // type:func -BossGanon_DrawEffects = 0x808DA348; // type:func -BossGanon2_InitRand = 0x808F2EC0; // type:func -BossGanon2_RandZeroOne = 0x808F2EE0; // type:func -func_808FD080 = 0x808F3008; // type:func -BossGanon2_SetObjectSegment = 0x808F3098; // type:func -func_808FD210 = 0x808F314C; // type:func -func_808FD27C = 0x808F31BC; // type:func -BossGanon2_Init = 0x808F329C; // type:func -BossGanon2_Destroy = 0x808F33CC; // type:func -func_808FD4D4 = 0x808F341C; // type:func -func_808FD5C4 = 0x808F350C; // type:func -func_808FD5F4 = 0x808F3540; // type:func -func_808FF898 = 0x808F57F0; // type:func -func_808FFA24 = 0x808F597C; // type:func -func_808FFAC8 = 0x808F5A20; // type:func -func_808FFBBC = 0x808F5B18; // type:func -func_808FFC84 = 0x808F5BE4; // type:func -func_808FFCFC = 0x808F5C5C; // type:func -func_808FFDB0 = 0x808F5D10; // type:func -func_808FFEBC = 0x808F5E20; // type:func -func_808FFF90 = 0x808F5EF4; // type:func -func_808FFFE0 = 0x808F5F44; // type:func -func_809000A0 = 0x808F6004; // type:func -func_80900104 = 0x808F6064; // type:func -func_80900210 = 0x808F6170; // type:func -func_8090026C = 0x808F61CC; // type:func -func_809002CC = 0x808F6230; // type:func -func_80900344 = 0x808F62A4; // type:func -func_80900580 = 0x808F64E0; // type:func -func_80900650 = 0x808F65B0; // type:func -func_80900818 = 0x808F6778; // type:func -func_80900890 = 0x808F67F0; // type:func -func_80901020 = 0x808F6F84; // type:func -func_8090109C = 0x808F7000; // type:func -func_8090120C = 0x808F7170; // type:func -func_80902348 = 0x808F82B4; // type:func -BossGanon2_CollisionCheck = 0x808F8494; // type:func -BossGanon2_Update = 0x808F8788; // type:func -func_809034E4 = 0x808F9454; // type:func -func_80903F38 = 0x808F9EA8; // type:func -func_80904108 = 0x808FA034; // type:func -func_80904340 = 0x808FA238; // type:func -func_8090464C = 0x808FA528; // type:func -BossGanon2_OverrideLimbDraw = 0x808FA6BC; // type:func -BossGanon2_PostLimbDraw = 0x808FA7F4; // type:func -func_80904D88 = 0x808FABB8; // type:func -func_80904FC8 = 0x808FADBC; // type:func -func_8090523C = 0x808FAFE0; // type:func -BossGanon2_PostLimbDraw2 = 0x808FB270; // type:func -func_80905674 = 0x808FB39C; // type:func -BossGanon2_Draw = 0x808FB5E4; // type:func -BossGanon2_UpdateEffects = 0x808FBA64; // type:func -BossGanon2_DrawEffects = 0x808FBDA8; // type:func -func_80906538 = 0x808FC1A0; // type:func -BossGanon2_GenShadowTexture = 0x808FC660; // type:func -BossGanon2_DrawShadowTexture = 0x808FC718; // type:func -BossGanondrof_ClearPixels8x8 = 0x80905D30; // type:func -BossGanondrof_ClearPixels16x8 = 0x80905D70; // type:func -BossGanondrof_ClearPixels16x16 = 0x80905DB0; // type:func -BossGanondrof_ClearPixels32x16 = 0x80905DE0; // type:func -BossGanondrof_ClearPixels16x32 = 0x80905E28; // type:func -BossGanondrof_ClearPixels = 0x80905E74; // type:func -BossGanondrof_SetColliderPos = 0x80906124; // type:func -BossGanondrof_Init = 0x80906168; // type:func -BossGanondrof_Destroy = 0x809063F8; // type:func -BossGanondrof_SetupIntro = 0x80906464; // type:func -BossGanondrof_Intro = 0x809064B0; // type:func -BossGanondrof_SetupPaintings = 0x80906968; // type:func -BossGanondrof_Paintings = 0x809069AC; // type:func -BossGanondrof_SetupNeutral = 0x80906B80; // type:func -BossGanondrof_Neutral = 0x80906C00; // type:func -BossGanondrof_SetupThrow = 0x80907348; // type:func -BossGanondrof_Throw = 0x80907470; // type:func -BossGanondrof_SetupReturn = 0x8090767C; // type:func -BossGanondrof_Return = 0x8090771C; // type:func -BossGanondrof_SetupStunned = 0x80907828; // type:func -BossGanondrof_Stunned = 0x809078EC; // type:func -BossGanondrof_SetupBlock = 0x80907A00; // type:func -BossGanondrof_Block = 0x80907A74; // type:func -BossGanondrof_SetupCharge = 0x80907B50; // type:func -BossGanondrof_Charge = 0x80907BC0; // type:func -BossGanondrof_SetupDeath = 0x809082A4; // type:func -BossGanondrof_Death = 0x8090833C; // type:func -BossGanondrof_CollisionCheck = 0x8090922C; // type:func -BossGanondrof_Update = 0x80909458; // type:func -BossGanondrof_OverrideLimbDraw = 0x80909860; // type:func -BossGanondrof_PostLimbDraw = 0x80909C3C; // type:func -BossGanondrof_GetClearPixelDList = 0x80909D00; // type:func -BossGanondrof_EmptyDList = 0x80909D6C; // type:func -BossGanondrof_Draw = 0x80909D90; // type:func -BossGoma_ClearPixels16x16Rgba16 = 0x8090AAC0; // type:func -BossGoma_ClearPixels32x32Rgba16 = 0x8090AAF0; // type:func -BossGoma_ClearPixels = 0x8090AB44; // type:func -BossGoma_Init = 0x8090ACF4; // type:func -BossGoma_PlayEffectsAndSfx = 0x8090AEAC; // type:func -BossGoma_Destroy = 0x8090AFB4; // type:func -BossGoma_SetupDefeated = 0x8090AFF4; // type:func -BossGoma_SetupEncounter = 0x8090B0BC; // type:func -BossGoma_SetupFloorIdle = 0x8090B160; // type:func -BossGoma_SetupCeilingIdle = 0x8090B1E8; // type:func -BossGoma_SetupFallJump = 0x8090B26C; // type:func -BossGoma_SetupFallStruckDown = 0x8090B2E8; // type:func -BossGoma_SetupCeilingSpawnGohmas = 0x8090B364; // type:func -BossGoma_SetupCeilingPrepareSpawnGohmas = 0x8090B3D8; // type:func -BossGoma_SetupWallClimb = 0x8090B450; // type:func -BossGoma_SetupCeilingMoveToCenter = 0x8090B4D4; // type:func -BossGoma_SetupFloorMain = 0x8090B568; // type:func -BossGoma_SetupFloorLand = 0x8090B5E8; // type:func -BossGoma_SetupFloorLandStruckDown = 0x8090B674; // type:func -BossGoma_SetupFloorStunned = 0x8090B718; // type:func -BossGoma_SetupFloorAttackPosture = 0x8090B788; // type:func -BossGoma_SetupFloorPrepareAttack = 0x8090B7FC; // type:func -BossGoma_SetupFloorAttack = 0x8090B870; // type:func -BossGoma_SetupFloorDamaged = 0x8090B8EC; // type:func -BossGoma_UpdateCeilingMovement = 0x8090B960; // type:func -BossGoma_SetupEncounterState4 = 0x8090BB9C; // type:func -BossGoma_Encounter = 0x8090BD4C; // type:func -BossGoma_Defeated = 0x8090CE44; // type:func -BossGoma_FloorAttackPosture = 0x8090DCB4; // type:func -BossGoma_FloorPrepareAttack = 0x8090DDBC; // type:func -BossGoma_FloorAttack = 0x8090DE18; // type:func -BossGoma_FloorDamaged = 0x8090E068; // type:func -BossGoma_FloorLandStruckDown = 0x8090E100; // type:func -BossGoma_FloorLand = 0x8090E1A4; // type:func -BossGoma_FloorStunned = 0x8090E200; // type:func -BossGoma_FallJump = 0x8090E32C; // type:func -BossGoma_FallStruckDown = 0x8090E3E0; // type:func -BossGoma_CeilingSpawnGohmas = 0x8090E4A0; // type:func -BossGoma_CeilingPrepareSpawnGohmas = 0x8090E5FC; // type:func -BossGoma_FloorIdle = 0x8090E658; // type:func -BossGoma_CeilingIdle = 0x8090E6C0; // type:func -BossGoma_FloorMain = 0x8090E7B8; // type:func -BossGoma_WallClimb = 0x8090EA28; // type:func -BossGoma_CeilingMoveToCenter = 0x8090EAF4; // type:func -BossGoma_UpdateEye = 0x8090ECF0; // type:func -BossGoma_UpdateTailLimbsScale = 0x8090EF38; // type:func -BossGoma_UpdateHit = 0x8090F044; // type:func -BossGoma_UpdateMainEnvColor = 0x8090F224; // type:func -BossGoma_UpdateEyeEnvColor = 0x8090F3A0; // type:func -BossGoma_Update = 0x8090F448; // type:func -BossGoma_OverrideLimbDraw = 0x8090F618; // type:func -BossGoma_PostLimbDraw = 0x8090FA64; // type:func -BossGoma_EmptyDlist = 0x8090FC68; // type:func -BossGoma_NoBackfaceCullingDlist = 0x8090FC8C; // type:func -BossGoma_Draw = 0x8090FCF8; // type:func -BossGoma_SpawnChildGohma = 0x8090FDE8; // type:func -BossMo_InitRand = 0x80910A60; // type:func -BossMo_RandZeroOne = 0x80910A80; // type:func -BossMo_NearLand = 0x80910BA8; // type:func -BossMo_SpawnRipple = 0x80910CA0; // type:func -BossMo_SpawnDroplet = 0x80910DC0; // type:func -BossMo_SpawnStillDroplet = 0x80910E9C; // type:func -BossMo_SpawnBubble = 0x80910F60; // type:func -BossMo_Init = 0x80911014; // type:func -BossMo_Destroy = 0x809113FC; // type:func -BossMo_SetupTentacle = 0x8091144C; // type:func -BossMo_Tentacle = 0x809114A0; // type:func -BossMo_TentCollisionCheck = 0x80914260; // type:func -BossMo_IntroCs = 0x8091450C; // type:func -BossMo_DeathCs = 0x80915624; // type:func -BossMo_CoreCollisionCheck = 0x809161E0; // type:func -BossMo_Core = 0x809165E8; // type:func -BossMo_UpdateCore = 0x80917C4C; // type:func -BossMo_UpdateTent = 0x80917E7C; // type:func -BossMo_UpdateTentColliders = 0x809186B4; // type:func -BossMo_DrawTentacle = 0x80918760; // type:func -BossMo_DrawWater = 0x80918E90; // type:func -BossMo_DrawCore = 0x809190A0; // type:func -BossMo_DrawTent = 0x80919928; // type:func -BossMo_UpdateEffects = 0x80919B5C; // type:func -BossMo_DrawEffects = 0x8091A26C; // type:func -BossMo_Unknown = 0x8091A998; // type:func -BossSst_Init = 0x80921040; // type:func -BossSst_Destroy = 0x809214C8; // type:func -BossSst_HeadSetupLurk = 0x80921514; // type:func -BossSst_HeadLurk = 0x80921548; // type:func -BossSst_HeadSetupIntro = 0x80921584; // type:func -BossSst_HeadIntro = 0x809216D0; // type:func -BossSst_HeadSetupWait = 0x809224E8; // type:func -BossSst_HeadWait = 0x80922538; // type:func -BossSst_HeadSetupNeutral = 0x809225B4; // type:func -BossSst_HeadNeutral = 0x809225D4; // type:func -BossSst_HeadSetupDamagedHand = 0x80922778; // type:func -BossSst_HeadDamagedHand = 0x809227E0; // type:func -BossSst_HeadSetupReadyCharge = 0x809228D8; // type:func -BossSst_HeadReadyCharge = 0x80922930; // type:func -BossSst_HeadSetupCharge = 0x809229D4; // type:func -BossSst_HeadCharge = 0x80922A90; // type:func -BossSst_HeadSetupEndCharge = 0x80922CF0; // type:func -BossSst_HeadEndCharge = 0x80922D74; // type:func -BossSst_HeadSetupFrozenHand = 0x80922DE4; // type:func -BossSst_HeadFrozenHand = 0x80922E38; // type:func -BossSst_HeadSetupUnfreezeHand = 0x80922E80; // type:func -BossSst_HeadUnfreezeHand = 0x80922ECC; // type:func -BossSst_HeadSetupStunned = 0x80922F08; // type:func -BossSst_HeadStunned = 0x80922FA8; // type:func -BossSst_HeadSetupVulnerable = 0x8092322C; // type:func -BossSst_HeadVulnerable = 0x809232CC; // type:func -BossSst_HeadSetupDamage = 0x809233CC; // type:func -BossSst_HeadDamage = 0x8092349C; // type:func -BossSst_HeadSetupRecover = 0x809234EC; // type:func -BossSst_HeadRecover = 0x80923578; // type:func -BossSst_SetCameraTargets = 0x8092370C; // type:func -BossSst_UpdateDeathCamera = 0x80923838; // type:func -BossSst_HeadSetupDeath = 0x809239C4; // type:func -BossSst_HeadDeath = 0x80923B58; // type:func -BossSst_HeadSetupThrash = 0x80923DA8; // type:func -BossSst_HeadThrash = 0x80923E10; // type:func -BossSst_HeadSetupDarken = 0x80923E8C; // type:func -BossSst_HeadDarken = 0x80923ED4; // type:func -BossSst_HeadSetupFall = 0x809240FC; // type:func -BossSst_HeadFall = 0x80924194; // type:func -BossSst_HeadSetupMelt = 0x80924230; // type:func -BossSst_HeadMelt = 0x80924280; // type:func -BossSst_HeadSetupFinish = 0x80924338; // type:func -BossSst_HeadFinish = 0x80924394; // type:func -BossSst_HandSetupWait = 0x8092468C; // type:func -BossSst_HandWait = 0x80924708; // type:func -BossSst_HandSetupDownbeat = 0x80924878; // type:func -BossSst_HandDownbeat = 0x809248EC; // type:func -BossSst_HandSetupDownbeatEnd = 0x80924A3C; // type:func -BossSst_HandDownbeatEnd = 0x80924A98; // type:func -BossSst_HandSetupOffbeat = 0x80924B8C; // type:func -BossSst_HandOffbeat = 0x80924C00; // type:func -BossSst_HandSetupOffbeatEnd = 0x80924CE0; // type:func -BossSst_HandOffbeatEnd = 0x80924D2C; // type:func -BossSst_HandSetupEndSlam = 0x80924E70; // type:func -BossSst_HandEndSlam = 0x80924EE4; // type:func -BossSst_HandSetupRetreat = 0x80924F20; // type:func -BossSst_HandRetreat = 0x80924FC8; // type:func -BossSst_HandSetupReadySlam = 0x809251F4; // type:func -BossSst_HandReadySlam = 0x80925260; // type:func -BossSst_HandSetupSlam = 0x80925350; // type:func -BossSst_HandSlam = 0x809253E0; // type:func -BossSst_HandSetupReadySweep = 0x809255C4; // type:func -BossSst_HandReadySweep = 0x8092566C; // type:func -BossSst_HandSetupSweep = 0x80925790; // type:func -BossSst_HandSweep = 0x8092581C; // type:func -BossSst_HandSetupReadyPunch = 0x80925A2C; // type:func -BossSst_HandReadyPunch = 0x80925A94; // type:func -BossSst_HandSetupPunch = 0x80925AF0; // type:func -BossSst_HandPunch = 0x80925B78; // type:func -BossSst_HandSetupReadyClap = 0x80925CBC; // type:func -BossSst_HandReadyClap = 0x80925DAC; // type:func -BossSst_HandSetupClap = 0x80925F9C; // type:func -BossSst_HandClap = 0x8092600C; // type:func -BossSst_HandSetupEndClap = 0x80926238; // type:func -BossSst_HandEndClap = 0x809262A4; // type:func -BossSst_HandSetupReadyGrab = 0x80926348; // type:func -BossSst_HandReadyGrab = 0x809263CC; // type:func -BossSst_HandSetupGrab = 0x80926474; // type:func -BossSst_HandGrab = 0x80926500; // type:func -BossSst_HandSetupCrush = 0x809267AC; // type:func -BossSst_HandCrush = 0x80926804; // type:func -BossSst_HandSetupEndCrush = 0x8092691C; // type:func -BossSst_HandEndCrush = 0x8092696C; // type:func -BossSst_HandSetupSwing = 0x809269A8; // type:func -BossSst_HandSwing = 0x80926A30; // type:func -BossSst_HandSetupReel = 0x80926D64; // type:func -BossSst_HandReel = 0x80926DFC; // type:func -BossSst_HandSetupReadyShake = 0x80926F54; // type:func -BossSst_HandReadyShake = 0x80926FA4; // type:func -BossSst_HandSetupShake = 0x8092710C; // type:func -BossSst_HandShake = 0x80927128; // type:func -BossSst_HandSetupReadyCharge = 0x809272BC; // type:func -BossSst_HandReadyCharge = 0x80927310; // type:func -BossSst_HandSetupStunned = 0x80927488; // type:func -BossSst_HandStunned = 0x80927534; // type:func -BossSst_HandSetupDamage = 0x80927690; // type:func -BossSst_HandDamage = 0x809276EC; // type:func -BossSst_HandSetupThrash = 0x809277C4; // type:func -BossSst_HandThrash = 0x80927860; // type:func -BossSst_HandSetupDarken = 0x80927A54; // type:func -BossSst_HandDarken = 0x80927AA4; // type:func -BossSst_HandSetupFall = 0x80927B18; // type:func -BossSst_HandFall = 0x80927B68; // type:func -BossSst_HandSetupMelt = 0x80927BEC; // type:func -BossSst_HandMelt = 0x80927C28; // type:func -BossSst_HandSetupFinish = 0x80927CA0; // type:func -BossSst_HandFinish = 0x80927CCC; // type:func -BossSst_HandSetupRecover = 0x80927CF8; // type:func -BossSst_HandRecover = 0x80927D4C; // type:func -BossSst_HandSetupFrozen = 0x80927DE4; // type:func -BossSst_HandFrozen = 0x80927EB0; // type:func -BossSst_HandSetupReadyBreakIce = 0x80928010; // type:func -BossSst_HandReadyBreakIce = 0x809280C4; // type:func -BossSst_HandSetupBreakIce = 0x809281E0; // type:func -BossSst_HandBreakIce = 0x80928208; // type:func -BossSst_HandGrabPlayer = 0x8092839C; // type:func -BossSst_HandReleasePlayer = 0x8092843C; // type:func -BossSst_MoveAround = 0x809284C0; // type:func -BossSst_HandSelectAttack = 0x8092864C; // type:func -BossSst_HandSetDamage = 0x80928748; // type:func -BossSst_HandSetInvulnerable = 0x809287B4; // type:func -BossSst_HeadSfx = 0x809287F4; // type:func -BossSst_HandCollisionCheck = 0x80928820; // type:func -BossSst_HeadCollisionCheck = 0x809289AC; // type:func -BossSst_UpdateHand = 0x80928AF8; // type:func -BossSst_UpdateHead = 0x80928E08; // type:func -BossSst_OverrideHandDraw = 0x80929078; // type:func -BossSst_PostHandDraw = 0x809290C8; // type:func -BossSst_OverrideHandTrailDraw = 0x80929104; // type:func -BossSst_DrawHand = 0x80929148; // type:func -BossSst_OverrideHeadDraw = 0x809294F4; // type:func -BossSst_PostHeadDraw = 0x80929CF8; // type:func -BossSst_DrawHead = 0x80929DA0; // type:func -BossSst_SpawnHeadShadow = 0x8092A1F0; // type:func -BossSst_SpawnHandShadow = 0x8092A31C; // type:func -BossSst_SpawnShockwave = 0x8092A3D0; // type:func -BossSst_SpawnIceCrystal = 0x8092A4AC; // type:func -BossSst_SpawnIceShard = 0x8092A768; // type:func -BossSst_IceShatter = 0x8092A9BC; // type:func -BossSst_UpdateEffects = 0x8092AB88; // type:func -BossSst_DrawEffects = 0x8092AE2C; // type:func -BossTw_AddDotEffect = 0x8092D610; // type:func -BossTw_AddDmgCloud = 0x8092D704; // type:func -BossTw_AddRingEffect = 0x8092D800; // type:func -BossTw_AddPlayerFreezeEffect = 0x8092D904; // type:func -BossTw_AddFlameEffect = 0x8092D9B0; // type:func -BossTw_AddMergeFlameEffect = 0x8092DA88; // type:func -BossTw_AddShieldBlastEffect = 0x8092DB90; // type:func -BossTw_AddShieldDeflectEffect = 0x8092DC78; // type:func -BossTw_AddShieldHitEffect = 0x8092DE40; // type:func -BossTw_Init = 0x8092E008; // type:func -BossTw_Destroy = 0x8092E824; // type:func -BossTw_SetupTurnToPlayer = 0x8092E88C; // type:func -BossTw_TurnToPlayer = 0x8092E8DC; // type:func -BossTw_SetupFlyTo = 0x8092E9FC; // type:func -BossTw_FlyTo = 0x8092EC00; // type:func -BossTw_SetupShootBeam = 0x8092EE34; // type:func -BossTw_SpawnGroundBlast = 0x8092EF1C; // type:func -BossTw_BeamHitPlayerCheck = 0x8092F298; // type:func -BossTw_CheckBeamReflection = 0x8092F490; // type:func -BossTw_BeamReflHitCheck = 0x8092F718; // type:func -BossTw_GetFloorY = 0x8092F840; // type:func -BossTw_ShootBeam = 0x8092FB14; // type:func -BossTw_SetupFinishBeamShoot = 0x80930ACC; // type:func -BossTw_FinishBeamShoot = 0x80930B28; // type:func -BossTw_SetupHitByBeam = 0x80930BC0; // type:func -BossTw_HitByBeam = 0x80930C28; // type:func -BossTw_SetupLaugh = 0x80930EF0; // type:func -BossTw_Laugh = 0x80930F54; // type:func -BossTw_SetupSpin = 0x80930FE4; // type:func -BossTw_Spin = 0x80931060; // type:func -BossTw_SetupMergeCS = 0x80931100; // type:func -BossTw_MergeCS = 0x8093114C; // type:func -BossTw_SetupWait = 0x80931190; // type:func -BossTw_Wait = 0x809311C8; // type:func -BossTw_TwinrovaSetupMergeCS = 0x8093126C; // type:func -BossTw_TwinrovaMergeCS = 0x8093128C; // type:func -BossTw_SetupDeathCS = 0x80931D58; // type:func -BossTw_DeathCS = 0x80931DC0; // type:func -BossTw_SetupCSWait = 0x80931EC8; // type:func -BossTw_CSWait = 0x80931F00; // type:func -BossTw_TwinrovaSetupIntroCS = 0x80931F10; // type:func -BossTw_TwinrovaIntroCS = 0x80931F48; // type:func -BossTw_DeathBall = 0x8093379C; // type:func -BossTw_TwinrovaSetupDeathCS = 0x80933A98; // type:func -BossTw_DeathCSMsgSfx = 0x80933B54; // type:func -BossTw_TwinrovaDeathCS = 0x80934374; // type:func -BossTw_Update = 0x80935068; // type:func -BossTw_TwinrovaUpdate = 0x809356DC; // type:func -BossTw_OverrideLimbDraw = 0x80936058; // type:func -BossTw_PostLimbDraw = 0x8093610C; // type:func -func_80941BC0 = 0x80936524; // type:func -func_80942180 = 0x80936A9C; // type:func -func_809426F0 = 0x80936FB8; // type:func -func_80942C70 = 0x80937500; // type:func -func_80943028 = 0x80937870; // type:func -BossTw_Draw = 0x80937A74; // type:func -BossTw_TwinrovaOverrideLimbDraw = 0x80938130; // type:func -BossTw_TwinrovaPostLimbDraw = 0x8093855C; // type:func -BossTw_ShieldChargeDraw = 0x80938698; // type:func -BossTw_SpawnPortalDraw = 0x80938F00; // type:func -func_80944C50 = 0x80939338; // type:func -BossTw_TwinrovaDraw = 0x8093971C; // type:func -BossTw_BlastFire = 0x80939A54; // type:func -BossTw_BlastIce = 0x8093A38C; // type:func -BossTw_BlastShieldCheck = 0x8093AF00; // type:func -BossTw_BlastUpdate = 0x8093B190; // type:func -BossTw_BlastDraw = 0x8093B30C; // type:func -BossTw_DrawDeathBall = 0x8093B890; // type:func -BossTw_UpdateEffects = 0x8093BDF0; // type:func -BossTw_InitRand = 0x8093CB48; // type:func -BossTw_RandZeroOne = 0x8093CB68; // type:func -BossTw_DrawEffects = 0x8093CC90; // type:func -BossTw_TwinrovaSetupArriveAtTarget = 0x8093DAC4; // type:func -BossTw_TwinrovaArriveAtTarget = 0x8093DB38; // type:func -BossTw_TwinrovaSetupChargeBlast = 0x8093DC64; // type:func -BossTw_TwinrovaChargeBlast = 0x8093DCC4; // type:func -BossTw_TwinrovaSetupShootBlast = 0x8093DEB0; // type:func -BossTw_TwinrovaShootBlast = 0x8093DF38; // type:func -BossTw_TwinrovaSetupDoneBlastShoot = 0x8093E188; // type:func -BossTw_TwinrovaDoneBlastShoot = 0x8093E1D4; // type:func -BossTw_TwinrovaDamage = 0x8093E26C; // type:func -BossTw_TwinrovaStun = 0x8093E398; // type:func -BossTw_TwinrovaSetupGetUp = 0x8093E64C; // type:func -BossTw_TwinrovaGetUp = 0x8093E6B0; // type:func -BossTw_TwinrovaSetupFly = 0x8093E744; // type:func -BossTw_TwinrovaFly = 0x8093E91C; // type:func -BossTw_TwinrovaSetupSpin = 0x8093EB90; // type:func -BossTw_TwinrovaSpin = 0x8093EBE8; // type:func -BossTw_TwinrovaSetupLaugh = 0x8093EC60; // type:func -BossTw_TwinrovaLaugh = 0x8093ECC4; // type:func -BossVa_SetupAction = 0x809431E0; // type:func -BossVa_AttachToBody = 0x809431EC; // type:func -BossVa_BloodDroplets = 0x80943430; // type:func -BossVa_BloodSplatter = 0x80943530; // type:func -BossVa_Gore = 0x8094365C; // type:func -BossVa_Spark = 0x8094378C; // type:func -BossVa_Tumor = 0x80943910; // type:func -BossVa_SetSparkEnv = 0x80943A94; // type:func -BossVa_SetDeathEnv = 0x80943AE0; // type:func -BossVa_FindBoomerang = 0x80943B60; // type:func -BossVa_KillBari = 0x80943BA0; // type:func -BossVa_Init = 0x80943D8C; // type:func -BossVa_Destroy = 0x809445DC; // type:func -BossVa_SetupIntro = 0x8094462C; // type:func -BossVa_BodyIntro = 0x809446BC; // type:func -BossVa_SetupBodyPhase1 = 0x809456DC; // type:func -BossVa_BodyPhase1 = 0x80945780; // type:func -BossVa_SetupBodyPhase2 = 0x80945A18; // type:func -BossVa_BodyPhase2 = 0x80945B44; // type:func -BossVa_SetupBodyPhase3 = 0x80946048; // type:func -BossVa_BodyPhase3 = 0x80946084; // type:func -BossVa_SetupBodyPhase4 = 0x809466EC; // type:func -BossVa_BodyPhase4 = 0x809467A0; // type:func -BossVa_SetupBodyDeath = 0x809472A8; // type:func -BossVa_BodyDeath = 0x80947340; // type:func -BossVa_SetupSupportIntro = 0x80947E98; // type:func -BossVa_SupportIntro = 0x80947F10; // type:func -BossVa_SetupSupportAttached = 0x80948034; // type:func -BossVa_SupportAttached = 0x809480B8; // type:func -BossVa_SetupSupportCut = 0x809482E0; // type:func -BossVa_SupportCut = 0x809483A8; // type:func -BossVa_SetupStump = 0x8094887C; // type:func -BossVa_Stump = 0x80948900; // type:func -BossVa_SetupZapperIntro = 0x80948998; // type:func -BossVa_ZapperIntro = 0x80948A2C; // type:func -BossVa_SetupZapperAttack = 0x80948AEC; // type:func -BossVa_ZapperAttack = 0x80948B80; // type:func -BossVa_SetupZapperDamaged = 0x809495B4; // type:func -BossVa_ZapperDamaged = 0x809496BC; // type:func -BossVa_SetupZapperDeath = 0x809497D0; // type:func -BossVa_ZapperDeath = 0x809498A4; // type:func -BossVa_SetupZapperEnraged = 0x80949DCC; // type:func -BossVa_ZapperEnraged = 0x80949E54; // type:func -BossVa_SetupZapperHold = 0x8094A5AC; // type:func -BossVa_ZapperHold = 0x8094A62C; // type:func -BossVa_SetupBariIntro = 0x8094A738; // type:func -BossVa_BariIntro = 0x8094A848; // type:func -BossVa_SetupBariPhase3Attack = 0x8094ADA0; // type:func -BossVa_BariPhase3Attack = 0x8094AE48; // type:func -BossVa_SetupBariPhase2Attack = 0x8094B248; // type:func -BossVa_BariPhase2Attack = 0x8094B2F0; // type:func -BossVa_SetupBariPhase3Stunned = 0x8094B908; // type:func -BossVa_BariPhase3Stunned = 0x8094B964; // type:func -BossVa_SetupBariDeath = 0x8094BB80; // type:func -BossVa_BariDeath = 0x8094BBD8; // type:func -BossVa_SetupDoor = 0x8094BC0C; // type:func -BossVa_Door = 0x8094BC5C; // type:func -BossVa_Update = 0x8094BCD0; // type:func -BossVa_BodyOverrideLimbDraw = 0x8094BEDC; // type:func -BossVa_BodyPostLimbDraw = 0x8094C080; // type:func -BossVa_SupportOverrideLimbDraw = 0x8094C584; // type:func -BossVa_SupportPostLimbDraw = 0x8094C5C8; // type:func -BossVa_ZapperOverrideLimbDraw = 0x8094C818; // type:func -BossVa_ZapperPostLimbDraw = 0x8094C9F4; // type:func -BossVa_BariOverrideLimbDraw = 0x8094CE54; // type:func -BossVa_BariPostLimbDraw = 0x8094CEE4; // type:func -BossVa_Draw = 0x8094D070; // type:func -BossVa_UpdateEffects = 0x8094D668; // type:func -BossVa_DrawEffects = 0x8094E008; // type:func -BossVa_SpawnSpark = 0x8094EE10; // type:func -BossVa_SpawnSparkBall = 0x8094F100; // type:func -BossVa_SpawnBloodDroplets = 0x8094F28C; // type:func -BossVa_SpawnBloodSplatter = 0x8094F458; // type:func -BossVa_SpawnTumor = 0x8094F5F4; // type:func -BossVa_SpawnGore = 0x8094F798; // type:func -BossVa_SpawnZapperCharge = 0x8094F9B8; // type:func -BossVa_DrawDoor = 0x8094FB0C; // type:func -Demo6K_SetupAction = 0x8095A470; // type:func -Demo6K_Init = 0x8095A47C; // type:func -Demo6K_Destroy = 0x8095A864; // type:func -Demo6K_WaitForObject = 0x8095A898; // type:func -func_80966E04 = 0x8095A8F0; // type:func -func_80966E98 = 0x8095A988; // type:func -func_80966F84 = 0x8095AA7C; // type:func -func_809670AC = 0x8095ABA4; // type:func -func_8096712C = 0x8095AC24; // type:func -func_80967244 = 0x8095AD3C; // type:func -func_80967410 = 0x8095AF08; // type:func -func_809674E0 = 0x8095AFD8; // type:func -func_809676A4 = 0x8095B19C; // type:func -func_8096784C = 0x8095B344; // type:func -func_80967A04 = 0x8095B500; // type:func -func_80967AD0 = 0x8095B5CC; // type:func -func_80967BF8 = 0x8095B6F8; // type:func -func_80967DBC = 0x8095B8BC; // type:func -func_80967F10 = 0x8095BA08; // type:func -Demo6K_Update = 0x8095BAD4; // type:func -func_80967FFC = 0x8095BAF8; // type:func -func_80968298 = 0x8095BD54; // type:func -func_8096865C = 0x8095C0D8; // type:func -func_809688C4 = 0x8095C2F8; // type:func -func_80968B70 = 0x8095C574; // type:func -func_80968FB0 = 0x8095C974; // type:func -func_809691BC = 0x8095CB38; // type:func -DemoDu_Destroy = 0x8095D1D0; // type:func -DemoDu_UpdateEyes = 0x8095D1F4; // type:func -DemoDu_SetEyeTexIndex = 0x8095D27C; // type:func -DemoDu_SetMouthTexIndex = 0x8095D294; // type:func -DemoDu_UpdateSkelAnime = 0x8095D2AC; // type:func -DemoDu_UpdateBgCheckInfo = 0x8095D2D0; // type:func -DemoDu_GetCue = 0x8095D318; // type:func -DemoDu_CheckForCue = 0x8095D340; // type:func -DemoDu_CheckForNoCue = 0x8095D38C; // type:func -DemoDu_SetStartPosRotFromCue = 0x8095D3D8; // type:func -func_80969DDC = 0x8095D458; // type:func -DemoDu_InitCs_FireMedallion = 0x8095D4E8; // type:func -DemoDu_CsFireMedallion_SpawnDoorWarp = 0x8095D558; // type:func -func_80969F38 = 0x8095D5B4; // type:func -func_80969FB4 = 0x8095D630; // type:func -DemoDu_CsFireMedallion_AdvanceTo01 = 0x8095D650; // type:func -DemoDu_CsFireMedallion_AdvanceTo02 = 0x8095D6E8; // type:func -DemoDu_CsFireMedallion_AdvanceTo03 = 0x8095D738; // type:func -DemoDu_CsFireMedallion_AdvanceTo04 = 0x8095D764; // type:func -DemoDu_CsFireMedallion_AdvanceTo05 = 0x8095D7F8; // type:func -DemoDu_CsFireMedallion_AdvanceTo06 = 0x8095D864; // type:func -DemoDu_UpdateCs_FM_00 = 0x8095D8B0; // type:func -DemoDu_UpdateCs_FM_01 = 0x8095D8D0; // type:func -DemoDu_UpdateCs_FM_02 = 0x8095D8F0; // type:func -DemoDu_UpdateCs_FM_03 = 0x8095D924; // type:func -DemoDu_UpdateCs_FM_04 = 0x8095D964; // type:func -DemoDu_UpdateCs_FM_05 = 0x8095D99C; // type:func -DemoDu_UpdateCs_FM_06 = 0x8095D9DC; // type:func -DemoDu_InitCs_GoronsRuby = 0x8095DA08; // type:func -DemoDu_CsPlaySfx_GoronLanding = 0x8095DA58; // type:func -DemoDu_CsPlaySfx_DaruniaFalling = 0x8095DA80; // type:func -DemoDu_CsPlaySfx_DaruniaHitsLink = 0x8095DAB0; // type:func -DemoDu_CsPlaySfx_HitBreast = 0x8095DB08; // type:func -DemoDu_CsPlaySfx_LinkEscapeFromGorons = 0x8095DB30; // type:func -DemoDu_CsPlaySfx_LinkSurprised = 0x8095DB88; // type:func -DemoDu_CsGoronsRuby_UpdateFaceTextures = 0x8095DBE0; // type:func -func_8096A630 = 0x8095DCE8; // type:func -DemoDu_CsGoronsRuby_SpawnDustWhenHittingLink = 0x8095DD9C; // type:func -DemoDu_CsGoronsRuby_DaruniaFalling = 0x8095E030; // type:func -DemoDu_CsGoronsRuby_AdvanceTo01 = 0x8095E10C; // type:func -DemoDu_CsGoronsRuby_AdvanceTo02 = 0x8095E120; // type:func -DemoDu_CsGoronsRuby_AdvanceTo03 = 0x8095E1C4; // type:func -DemoDu_CsGoronsRuby_AdvanceTo04 = 0x8095E218; // type:func -DemoDu_CsGoronsRuby_AdvanceTo05 = 0x8095E250; // type:func -DemoDu_CsGoronsRuby_AdvanceTo06 = 0x8095E2BC; // type:func -DemoDu_CsGoronsRuby_AdvanceTo07 = 0x8095E354; // type:func -DemoDu_CsGoronsRuby_AdvanceTo08 = 0x8095E3C0; // type:func -DemoDu_CsGoronsRuby_AdvanceTo09 = 0x8095E454; // type:func -DemoDu_CsGoronsRuby_AdvanceTo10 = 0x8095E4C4; // type:func -DemoDu_CsGoronsRuby_AdvanceTo11 = 0x8095E530; // type:func -DemoDu_CsGoronsRuby_AdvanceTo12 = 0x8095E5C4; // type:func -DemoDu_CsGoronsRuby_AdvanceTo13 = 0x8095E630; // type:func -DemoDu_UpdateCs_GR_00 = 0x8095E6C0; // type:func -DemoDu_UpdateCs_GR_01 = 0x8095E6F4; // type:func -DemoDu_UpdateCs_GR_02 = 0x8095E730; // type:func -DemoDu_UpdateCs_GR_03 = 0x8095E78C; // type:func -DemoDu_UpdateCs_GR_04 = 0x8095E7CC; // type:func -DemoDu_UpdateCs_GR_05 = 0x8095E81C; // type:func -DemoDu_UpdateCs_GR_06 = 0x8095E868; // type:func -DemoDu_UpdateCs_GR_07 = 0x8095E8C8; // type:func -DemoDu_UpdateCs_GR_08 = 0x8095E914; // type:func -DemoDu_UpdateCs_GR_09 = 0x8095E978; // type:func -DemoDu_UpdateCs_GR_10 = 0x8095E9D8; // type:func -DemoDu_UpdateCs_GR_11 = 0x8095EA24; // type:func -DemoDu_UpdateCs_GR_12 = 0x8095EA74; // type:func -DemoDu_UpdateCs_GR_13 = 0x8095EAC0; // type:func -DemoDu_InitCs_AfterGanon = 0x8095EB08; // type:func -DemoDu_CsPlaySfx_WhiteOut = 0x8095EBA8; // type:func -DemoDu_CsAfterGanon_SpawnDemo6K = 0x8095EBC8; // type:func -DemoDu_CsAfterGanon_AdvanceTo01 = 0x8095EC48; // type:func -DemoDu_CsAfterGanon_AdvanceTo02 = 0x8095EC9C; // type:func -DemoDu_CsAfterGanon_BackTo01 = 0x8095EDF0; // type:func -DemoDu_UpdateCs_AG_00 = 0x8095EE8C; // type:func -DemoDu_UpdateCs_AG_01 = 0x8095EEAC; // type:func -DemoDu_UpdateCs_AG_02 = 0x8095EEF4; // type:func -DemoDu_Draw_02 = 0x8095EF3C; // type:func -DemoDu_InitCs_Credits = 0x8095F0F8; // type:func -DemoDu_CsCredits_UpdateShadowAlpha = 0x8095F164; // type:func -DemoDu_CsCredits_AdvanceTo01 = 0x8095F1F0; // type:func -DemoDu_CsCredits_AdvanceTo02 = 0x8095F228; // type:func -DemoDu_CsCredits_AdvanceTo03 = 0x8095F274; // type:func -DemoDu_CsCredits_AdvanceTo04 = 0x8095F2B4; // type:func -DemoDu_CsCredits_BackTo02 = 0x8095F2F4; // type:func -DemoDu_CsCredits_HandleCues = 0x8095F33C; // type:func -DemoDu_UpdateCs_CR_00 = 0x8095F3E8; // type:func -DemoDu_UpdateCs_CR_01 = 0x8095F408; // type:func -DemoDu_UpdateCs_CR_02 = 0x8095F454; // type:func -DemoDu_UpdateCs_CR_03 = 0x8095F49C; // type:func -DemoDu_UpdateCs_CR_04 = 0x8095F4E4; // type:func -DemoDu_Update = 0x8095F528; // type:func -DemoDu_Init = 0x8095F570; // type:func -DemoDu_Draw_NoDraw = 0x8095F614; // type:func -DemoDu_Draw_01 = 0x8095F624; // type:func -DemoDu_Draw = 0x8095F7CC; // type:func -DemoEc_Destroy = 0x809609B0; // type:func -DemoEc_Init = 0x809609D4; // type:func -DemoEc_UpdateSkelAnime = 0x80960A1C; // type:func -DemoEc_UpdateBgFlags = 0x80960A40; // type:func -func_8096D594 = 0x80960A88; // type:func -func_8096D5D4 = 0x80960AC8; // type:func -func_8096D64C = 0x80960B40; // type:func -DemoEc_UpdateEyes = 0x80960B80; // type:func -DemoEc_SetEyeTexIndex = 0x80960C08; // type:func -DemoEc_InitSkelAnime = 0x80960C20; // type:func -DemoEc_ChangeAnimation = 0x80960C98; // type:func -DemoEc_AllocColorDList = 0x80960D54; // type:func -DemoEc_DrawSkeleton = 0x80960DAC; // type:func -DemoEc_DrawSkeletonCustomColor = 0x80960F3C; // type:func -DemoEc_UseDrawObject = 0x8096119C; // type:func -DemoEc_UseAnimationObject = 0x809611F8; // type:func -DemoEc_GetCue = 0x80961230; // type:func -DemoEc_SetStartPosRotFromCue = 0x80961258; // type:func -DemoEc_InitIngo = 0x809612D8; // type:func -DemoEc_UpdateIngo = 0x80961378; // type:func -DemoEc_DrawIngo = 0x809613B8; // type:func -DemoEc_InitTalon = 0x809613EC; // type:func -DemoEc_UpdateTalon = 0x8096148C; // type:func -DemoEc_DrawTalon = 0x809614CC; // type:func -DemoEc_InitWindmillMan = 0x80961500; // type:func -DemoEc_UpdateWindmillMan = 0x809615A0; // type:func -DemoEc_DrawWindmillMan = 0x809615E0; // type:func -DemoEc_InitKokiriBoy = 0x80961614; // type:func -DemoEc_InitDancingKokiriBoy = 0x809616B4; // type:func -DemoEc_UpdateKokiriBoy = 0x80961758; // type:func -DemoEc_UpdateDancingKokiriBoy = 0x80961798; // type:func -DemoEc_DrawKokiriBoy = 0x809617B8; // type:func -DemoEc_InitKokiriGirl = 0x809617FC; // type:func -DemoEc_InitDancingKokiriGirl = 0x8096189C; // type:func -DemoEc_UpdateKokiriGirl = 0x80961940; // type:func -DemoEc_UpdateDancingKokiriGirl = 0x80961988; // type:func -DemoEc_DrawKokiriGirl = 0x809619A8; // type:func -DemoEc_InitOldMan = 0x809619FC; // type:func -DemoEc_UpdateOldMan = 0x80961A9C; // type:func -DemoEc_DrawOldMan = 0x80961AE4; // type:func -DemoEc_InitBeardedMan = 0x80961B38; // type:func -DemoEc_UpdateBeardedMan = 0x80961BD8; // type:func -DemoEc_DrawBeardedMan = 0x80961C20; // type:func -DemoEc_InitWoman = 0x80961C74; // type:func -DemoEc_UpdateWoman = 0x80961D14; // type:func -DemoEc_DrawWoman = 0x80961D5C; // type:func -DemoEc_InitOldWoman = 0x80961D98; // type:func -DemoEc_UpdateOldWoman = 0x80961E38; // type:func -DemoEc_DrawOldWoman = 0x80961E78; // type:func -DemoEc_InitBossCarpenter = 0x80961EA8; // type:func -DemoEc_UpdateBossCarpenter = 0x80961F48; // type:func -DemoEc_DrawBossCarpenter = 0x80961F88; // type:func -DemoEc_InitCarpenter = 0x80961FB4; // type:func -DemoEc_UpdateCarpenter = 0x80962054; // type:func -DemoEc_CarpenterOverrideLimbDraw = 0x80962094; // type:func -DemoEc_GetCarpenterPostLimbDList = 0x80962198; // type:func -DemoEc_CarpenterPostLimbDraw = 0x80962200; // type:func -DemoEc_DrawCarpenter = 0x80962284; // type:func -DemoEc_InitGerudo = 0x809622C0; // type:func -DemoEc_UpdateGerudo = 0x80962364; // type:func -DemoEc_GetGerudoPostLimbDList = 0x809623AC; // type:func -DemoEc_GerudoPostLimbDraw = 0x80962400; // type:func -DemoEc_DrawGerudo = 0x80962484; // type:func -DemoEc_InitDancingZora = 0x809624C8; // type:func -DemoEc_UpdateDancingZora = 0x8096256C; // type:func -DemoEc_DrawDancingZora = 0x809625B4; // type:func -DemoEc_InitKingZora = 0x809625F0; // type:func -func_8096F1D4 = 0x809626A0; // type:func -func_8096F224 = 0x809626F0; // type:func -func_8096F26C = 0x80962738; // type:func -func_8096F2B0 = 0x80962780; // type:func -DemoEc_UpdateKingZora = 0x809627E4; // type:func -func_8096F378 = 0x8096284C; // type:func -func_8096F3D4 = 0x809628AC; // type:func -DemoEc_DrawKingZora = 0x809628F4; // type:func -DemoEc_InitMido = 0x80962930; // type:func -func_8096F4FC = 0x809629E0; // type:func -func_8096F544 = 0x80962A28; // type:func -func_8096F578 = 0x80962A5C; // type:func -DemoEc_UpdateMido = 0x80962AC0; // type:func -func_8096F640 = 0x80962B28; // type:func -DemoEc_DrawMido = 0x80962B88; // type:func -DemoEc_InitCucco = 0x80962BC4; // type:func -DemoEc_UpdateCucco = 0x80962C94; // type:func -DemoEc_DrawCucco = 0x80962CD4; // type:func -DemoEc_InitCuccoLady = 0x80962D00; // type:func -DemoEc_UpdateCuccoLady = 0x80962DA4; // type:func -DemoEc_DrawCuccoLady = 0x80962DEC; // type:func -DemoEc_InitPotionShopOwner = 0x80962E28; // type:func -DemoEc_UpdatePotionShopOwner = 0x80962ECC; // type:func -DemoEc_DrawPotionShopOwner = 0x80962F14; // type:func -DemoEc_InitMaskShopOwner = 0x80962F50; // type:func -DemoEc_UpdateMaskShopOwner = 0x80962FF4; // type:func -DemoEc_DrawMaskShopOwner = 0x80963034; // type:func -DemoEc_InitFishingOwner = 0x80963064; // type:func -DemoEc_UpdateFishingOwner = 0x80963108; // type:func -DemoEc_FishingOwnerPostLimbDraw = 0x80963150; // type:func -DemoEc_DrawFishingOwner = 0x809631D0; // type:func -DemoEc_InitBombchuShopOwner = 0x80963214; // type:func -DempEc_UpdateBombchuShopOwner = 0x809632B8; // type:func -DemoEc_DrawBombchuShopOwner = 0x80963300; // type:func -DemoEc_InitGorons = 0x8096333C; // type:func -DemoEc_UpdateGorons = 0x80963474; // type:func -DemoEc_DrawGorons = 0x809634BC; // type:func -DemoEc_InitMalon = 0x809634FC; // type:func -DemoEc_UpdateMalon = 0x809635A0; // type:func -DemoEc_DrawMalon = 0x809635E8; // type:func -DemoEc_InitNpc = 0x80963628; // type:func -DemoEc_InitCommon = 0x80963674; // type:func -DemoEc_Update = 0x80963748; // type:func -DemoEc_DrawCommon = 0x809637C0; // type:func -DemoEc_Draw = 0x809637D0; // type:func -DemoEffect_SetupUpdate = 0x80964210; // type:func -DemoEffect_InterpolateCsFrames = 0x8096421C; // type:func -DemoEffect_InitJewel = 0x8096427C; // type:func -DemoEffect_InitGetItem = 0x8096433C; // type:func -DemoEffect_Init = 0x80964388; // type:func -DemoEffect_Destroy = 0x80964B88; // type:func -DemoEffect_WaitForObject = 0x80964BD8; // type:func -DemoEffect_UpdatePositionToParent = 0x80964C30; // type:func -DemoEffect_UpdateCrystalLight = 0x80964C60; // type:func -DemoEffect_MedalSparkle = 0x80964C94; // type:func -DemoEffect_UpdateGetItem = 0x80964E2C; // type:func -DemoEffect_InitTimeWarp = 0x8096506C; // type:func -DemoEffect_UpdateTimeWarpPullMasterSword = 0x80965228; // type:func -DemoEffect_TimewarpShrink = 0x809652CC; // type:func -DemoEffect_UpdateTimeWarpReturnFromChamberOfSages = 0x809653F0; // type:func -DemoEffect_UpdateTimeWarpTimeblock = 0x809654A8; // type:func -DemoEffect_InitTimeWarpTimeblock = 0x80965564; // type:func -DemoEffect_UpdateTriforceSpot = 0x809655E8; // type:func -DemoEffect_UpdateLightRingShrinking = 0x809658D0; // type:func -DemoEffect_UpdateLightRingExpanding = 0x80965960; // type:func -DemoEffect_UpdateLightRingTriforce = 0x809659D4; // type:func -DemoEffect_UpdateCreationFireball = 0x80965A90; // type:func -DemoEffect_InitCreationFireball = 0x80965BE4; // type:func -DemoEffect_UpdateBlueOrbShrink = 0x80965C34; // type:func -DemoEffect_UpdateBlueOrbGrow = 0x80965C9C; // type:func -DemoEffect_UpdateLightEffect = 0x80965D7C; // type:func -DemoEffect_UpdateLgtShower = 0x80966074; // type:func -DemoEffect_UpdateGodLgtDin = 0x809660E0; // type:func -DemoEffect_UpdateGodLgtNayru = 0x8096627C; // type:func -DemoEffect_UpdateGodLgtFarore = 0x80966474; // type:func -DemoEffect_MoveTowardTarget = 0x80966618; // type:func -DemoEffect_InitJewelColor = 0x80966678; // type:func -DemoEffect_SetJewelColor = 0x80966778; // type:func -DemoEffect_MoveJewelSplit = 0x80966EEC; // type:func -DemoEffect_MoveJewelSpherical = 0x80966F48; // type:func -DemoEffect_MoveJewelActivateDoorOfTime = 0x8096712C; // type:func -DemoEffect_JewelSparkle = 0x80967398; // type:func -DemoEffect_PlayJewelSfx = 0x809674FC; // type:func -DemoEffect_UpdateJewelAdult = 0x80967560; // type:func -DemoEffect_UpdateJewelChild = 0x809675A4; // type:func -DemoEffect_UpdateDust = 0x809677B8; // type:func -DemoEffect_Update = 0x809678DC; // type:func -DemoEffect_CheckForCue = 0x80967900; // type:func -DemoEffect_DrawJewel = 0x80967944; // type:func -DemoEffect_DrawCrystalLight = 0x80967D84; // type:func -DemoEffect_DrawFireBall = 0x8096805C; // type:func -DemoEffect_DrawGodLgt = 0x809681E8; // type:func -DemoEffect_DrawLightEffect = 0x809685B8; // type:func -DemoEffect_DrawBlueOrb = 0x809687F0; // type:func -DemoEffect_DrawLgtShower = 0x80968918; // type:func -DemoEffect_DrawLightRing = 0x80968A9C; // type:func -DemoEffect_DrawTriforceSpot = 0x80968C04; // type:func -DemoEffect_DrawGetItem = 0x80969188; // type:func -DemoEffect_OverrideLimbDrawTimeWarp = 0x80969220; // type:func -DemoEffect_DrawTimeWarp = 0x809693A0; // type:func -DemoEffect_FaceTowardPoint = 0x80969478; // type:func -DemoEffect_SetPosRotFromCue = 0x80969528; // type:func -DemoEffect_MoveTowardCuePos = 0x80969688; // type:func -DemoEffect_SetStartPosFromCue = 0x80969734; // type:func -DemoExt_Destroy = 0x80969DB0; // type:func -DemoExt_Init = 0x80969DC0; // type:func -DemoExt_PlayVortexSFX = 0x80969E78; // type:func -DemoExt_GetCue = 0x80969F00; // type:func -DemoExt_SetupWait = 0x80969F28; // type:func -DemoExt_SetupMaintainVortex = 0x80969F38; // type:func -DemoExt_SetupDispellVortex = 0x80969FC4; // type:func -DemoExt_FinishClosing = 0x80969FDC; // type:func -DemoExt_HandleCues = 0x8096A048; // type:func -DemoExt_SetScrollAndRotation = 0x8096A0F4; // type:func -DemoExt_SetColorsAndScales = 0x8096A144; // type:func -DemoExt_Wait = 0x8096A280; // type:func -DemoExt_MaintainVortex = 0x8096A2A0; // type:func -DemoExt_DispellVortex = 0x8096A2DC; // type:func -DemoExt_Update = 0x8096A31C; // type:func -DemoExt_DrawNothing = 0x8096A364; // type:func -DemoExt_DrawVortex = 0x8096A374; // type:func -DemoExt_Draw = 0x8096A5F4; // type:func -DemoGeff_Destroy = 0x8096A700; // type:func -DemoGeff_Init = 0x8096A710; // type:func -func_80977EA8 = 0x8096A758; // type:func -func_80977F80 = 0x8096A7F4; // type:func -func_80978030 = 0x8096A850; // type:func -func_809781FC = 0x8096AA1C; // type:func -func_809782A0 = 0x8096AAC0; // type:func -func_80978308 = 0x8096AB28; // type:func -func_80978344 = 0x8096AB60; // type:func -func_80978370 = 0x8096AB90; // type:func -func_809783D4 = 0x8096ABDC; // type:func -DemoGeff_Update = 0x8096AC78; // type:func -func_809784D4 = 0x8096ACC0; // type:func -DemoGeff_Draw = 0x8096ACD0; // type:func -DemoGj_GetCollectibleType = 0x8096AF20; // type:func -DemoGj_GetCollectibleAmount = 0x8096AF34; // type:func -DemoGj_GetType = 0x8096AF48; // type:func -DemoGj_InitCylinder = 0x8096AF58; // type:func -DemoGj_HitByExplosion = 0x8096AFA0; // type:func -DemoGj_DestroyCylinder = 0x8096AFD8; // type:func -DemoGj_Destroy = 0x8096B090; // type:func -DemoGj_PlayExplosionSfx = 0x8096B0D4; // type:func -DemoGj_SpawnSmoke = 0x8096B10C; // type:func -DemoGj_DropCollectible = 0x8096B1A0; // type:func -DemoGj_Explode = 0x8096B234; // type:func -DemoGj_IsCutsceneLayer = 0x8096B4D0; // type:func -DemoGj_FindGanon = 0x8096B4F8; // type:func -DemoGj_InitCommon = 0x8096B544; // type:func -DemoGj_InitSetIndices = 0x8096B5BC; // type:func -DemoGj_DrawCommon = 0x8096B620; // type:func -DemoGj_DrawRotated = 0x8096B6BC; // type:func -DemoGj_SetupRotation = 0x8096B798; // type:func -func_809797E4 = 0x8096BD30; // type:func -DemoGj_IsGanondorfRisingFromRubble = 0x8096BD64; // type:func -DemoGj_IsGanondorfFloatingInAir = 0x8096BD88; // type:func -DemoGj_SetupMovement = 0x8096BDAC; // type:func -DemoGj_CheckIfTransformedIntoGanon = 0x8096C4D0; // type:func -DemoGj_InitRubblePile1 = 0x8096C508; // type:func -func_8097A000 = 0x8096C538; // type:func -DemoGj_SpawnSmokePreBattle1 = 0x8096C5B4; // type:func -func_8097A0E4 = 0x8096C620; // type:func -func_8097A130 = 0x8096C674; // type:func -DemoGj_Update01 = 0x8096C6A8; // type:func -DemoGj_Update08 = 0x8096C6E0; // type:func -DemoGj_DrawRubble2 = 0x8096C718; // type:func -DemoGj_DrawRotatedRubble2 = 0x8096C73C; // type:func -DemoGj_InitRubblePile2 = 0x8096C760; // type:func -func_8097A238 = 0x8096C790; // type:func -DemoGj_SpawnSmokePreBattle2 = 0x8096C80C; // type:func -func_8097A320 = 0x8096C87C; // type:func -func_8097A36C = 0x8096C8D0; // type:func -DemoGj_Update02 = 0x8096C904; // type:func -DemoGj_Update09 = 0x8096C93C; // type:func -DemoGj_DrawRubble3 = 0x8096C974; // type:func -DemoGj_DrawRotatedRubble3 = 0x8096C998; // type:func -DemoGj_InitRubblePile3 = 0x8096C9BC; // type:func -func_8097A474 = 0x8096C9EC; // type:func -func_8097A4F0 = 0x8096CA68; // type:func -func_8097A53C = 0x8096CABC; // type:func -DemoGj_Update03 = 0x8096CAF0; // type:func -DemoGj_Update10 = 0x8096CB28; // type:func -DemoGj_DrawRubble4 = 0x8096CB60; // type:func -DemoGj_DrawRotatedRubble4 = 0x8096CB84; // type:func -DemoGj_InitRubblePile4 = 0x8096CBA8; // type:func -func_8097A644 = 0x8096CBD8; // type:func -func_8097A6C0 = 0x8096CC54; // type:func -func_8097A70C = 0x8096CCA8; // type:func -DemoGj_Update04 = 0x8096CCDC; // type:func -DemoGj_Update11 = 0x8096CD14; // type:func -DemoGj_DrawRubble5 = 0x8096CD4C; // type:func -DemoGj_DrawRotatedRubble5 = 0x8096CD70; // type:func -DemoGj_InitRubblePile5 = 0x8096CD94; // type:func -func_8097A814 = 0x8096CDC4; // type:func -func_8097A890 = 0x8096CE40; // type:func -func_8097A8DC = 0x8096CE94; // type:func -DemoGj_Update05 = 0x8096CEC8; // type:func -DemoGj_Update12 = 0x8096CF00; // type:func -DemoGj_DrawRubble6 = 0x8096CF38; // type:func -DemoGj_DrawRotatedRubble6 = 0x8096CF5C; // type:func -DemoGj_InitRubblePile6 = 0x8096CF80; // type:func -func_8097A9E4 = 0x8096CFB0; // type:func -func_8097AA60 = 0x8096D02C; // type:func -func_8097AAAC = 0x8096D080; // type:func -DemoGj_Update06 = 0x8096D0B4; // type:func -DemoGj_Update13 = 0x8096D0EC; // type:func -DemoGj_DrawRubble7 = 0x8096D124; // type:func -DemoGj_DrawRotatedRubble7 = 0x8096D148; // type:func -DemoGj_InitRubblePile7 = 0x8096D16C; // type:func -func_8097ABB4 = 0x8096D19C; // type:func -DemoGj_SpawnSmokePreBattle3 = 0x8096D218; // type:func -func_8097AC9C = 0x8096D288; // type:func -func_8097ACE8 = 0x8096D2DC; // type:func -DemoGj_Update07 = 0x8096D310; // type:func -DemoGj_Update14 = 0x8096D348; // type:func -DemoGj_DrawRubbleTall = 0x8096D380; // type:func -DemoGj_DrawRotatedRubbleTall = 0x8096D3A4; // type:func -DemoGj_InitRubbleAroundArena = 0x8096D3C8; // type:func -DemoGj_UpdateRubbleAroundArena = 0x8096D3F8; // type:func -DemoGj_DrawRubbleAroundArena = 0x8096D448; // type:func -DemoGj_InitDestructableRubble1 = 0x8096D46C; // type:func -func_8097AEE8 = 0x8096D4F4; // type:func -DemoGj_SetCylindersAsAC = 0x8096D688; // type:func -DemoGj_DirectedExplosion = 0x8096D6F4; // type:func -func_8097B128 = 0x8096D730; // type:func -DemoGj_HasCylinderAnyExploded = 0x8096D7C0; // type:func -func_8097B22C = 0x8096D83C; // type:func -DemoGj_Update15 = 0x8096D954; // type:func -DemoGj_Update18 = 0x8096D98C; // type:func -DemoGj_DrawDestructableRubble1 = 0x8096D9AC; // type:func -DemoGj_InitDestructableRubble2 = 0x8096D9D0; // type:func -func_8097B450 = 0x8096DA58; // type:func -DemoGj_SetCylindersAsAC2 = 0x8096DBA8; // type:func -DemoGj_HasCylinderAnyExploded2 = 0x8096DC14; // type:func -DemoGj_DirectedExplosion2 = 0x8096DC90; // type:func -func_8097B6C4 = 0x8096DCCC; // type:func -func_8097B750 = 0x8096DD5C; // type:func -DemoGj_Update16 = 0x8096DE74; // type:func -DemoGj_Update19 = 0x8096DEAC; // type:func -DemoGj_DemoGj_InitDestructableRubble2 = 0x8096DECC; // type:func -DemoGj_InitDestructableRubbleTall = 0x8096DEF0; // type:func -DemoGj_DirectedDoubleExplosion = 0x8096DF3C; // type:func -func_8097B9BC = 0x8096DFC0; // type:func -func_8097BA48 = 0x8096E050; // type:func -DemoGj_Update17 = 0x8096E184; // type:func -DemoGj_Update20 = 0x8096E1BC; // type:func -DemoGj_DemoGj_InitDestructableRubbleTall = 0x8096E1DC; // type:func -DemoGj_Update = 0x8096E200; // type:func -DemoGj_Init = 0x8096E248; // type:func -DemoGj_DrawNothing = 0x8096E350; // type:func -DemoGj_Draw = 0x8096E360; // type:func -DemoGo_GetCueChannel = 0x8096EBD0; // type:func -func_8097C8A8 = 0x8096EC0C; // type:func -DemoGo_Destroy = 0x8096EC78; // type:func -func_8097C930 = 0x8096EC9C; // type:func -func_8097C9B8 = 0x8096ED24; // type:func -func_8097C9DC = 0x8096ED4C; // type:func -func_8097CA30 = 0x8096EDA4; // type:func -func_8097CA78 = 0x8096EDEC; // type:func -func_8097CB0C = 0x8096EE84; // type:func -func_8097CC08 = 0x8096EF84; // type:func -func_8097CCC0 = 0x8096F03C; // type:func -func_8097CCE0 = 0x8096F05C; // type:func -DemoGo_UpdateSkelAnime = 0x8096F114; // type:func -func_8097CDB0 = 0x8096F138; // type:func -func_8097CE10 = 0x8096F1A4; // type:func -func_8097CE20 = 0x8096F1B8; // type:func -func_8097CE78 = 0x8096F214; // type:func -func_8097CEEC = 0x8096F28C; // type:func -func_8097CF20 = 0x8096F2C4; // type:func -func_8097CF9C = 0x8096F340; // type:func -func_8097CFDC = 0x8096F380; // type:func -func_8097CFFC = 0x8096F3A0; // type:func -func_8097D01C = 0x8096F3C0; // type:func -func_8097D058 = 0x8096F404; // type:func -func_8097D088 = 0x8096F43C; // type:func -func_8097D0D0 = 0x8096F48C; // type:func -func_8097D130 = 0x8096F4F4; // type:func -DemoGo_Update = 0x8096F554; // type:func -DemoGo_Init = 0x8096F59C; // type:func -func_8097D290 = 0x8096F648; // type:func -func_8097D29C = 0x8096F658; // type:func -DemoGo_Draw = 0x8096F768; // type:func -DemoGt_Destroy = 0x8096F920; // type:func -DemoGt_PlayEarthquakeSfx = 0x8096F968; // type:func -DemoGt_PlayExplosion1Sfx = 0x8096F988; // type:func -DemoGt_PlayExplosion2Sfx = 0x8096F9AC; // type:func -DemoGt_Rumble = 0x8096F9D0; // type:func -DemoGt_SpawnDust = 0x8096FA00; // type:func -func_8097D7D8 = 0x8096FA90; // type:func -DemoGt_SpawnCloudRing = 0x8096FC18; // type:func -DemoGt_SpawnExplosionWithSound = 0x8096FC78; // type:func -DemoGt_SpawnExplosionNoSound = 0x8096FD2C; // type:func -func_8097DAC8 = 0x8096FD80; // type:func -func_8097DD28 = 0x8096FFE0; // type:func -func_8097DF70 = 0x80970228; // type:func -func_8097E1D4 = 0x8097048C; // type:func -func_8097E454 = 0x8097070C; // type:func -DemoGt_IsCutsceneIdle = 0x8097095C; // type:func -DemoGt_GetCue = 0x8097097C; // type:func -func_8097E704 = 0x809709C8; // type:func -func_8097E744 = 0x80970A08; // type:func -func_8097E824 = 0x80970AE8; // type:func -func_8097ED64 = 0x80971024; // type:func -DemoGt_IsCutsceneLayer = 0x8097105C; // type:func -func_8097EDD8 = 0x80971084; // type:func -func_8097EE44 = 0x809710FC; // type:func -func_8097EEA8_Init0 = 0x80971160; // type:func -func_8097EF00 = 0x809711B8; // type:func -func_8097EF34 = 0x809711EC; // type:func -func_8097EF40 = 0x809711FC; // type:func -func_8097F0AC = 0x80971354; // type:func -func_8097F19C = 0x80971438; // type:func -func_8097F1D8 = 0x8097147C; // type:func -func_8097F280 = 0x80971524; // type:func -func_8097F3EC = 0x80971698; // type:func -DemoGt_Update0 = 0x809716D8; // type:func -DemoGt_Update8 = 0x80971750; // type:func -DemoGt_Draw1 = 0x809717C8; // type:func -func_8097F904_Init1 = 0x80971B8C; // type:func -func_8097F960 = 0x80971BE8; // type:func -func_8097F96C = 0x80971BF8; // type:func -func_8097FA1C = 0x80971C8C; // type:func -func_8097FAFC = 0x80971D54; // type:func -func_8097FC1C = 0x80971E5C; // type:func -func_8097FCE4 = 0x80971F10; // type:func -func_8097FD70 = 0x80971F8C; // type:func -func_8097FDDC = 0x80972000; // type:func -func_8097FED8 = 0x80972100; // type:func -DemoGt_Update1 = 0x80972140; // type:func -DemoGt_Update9 = 0x80972190; // type:func -DemoGt_Draw2 = 0x809721D8; // type:func -func_80980110_Init2 = 0x8097230C; // type:func -func_8098016C = 0x80972368; // type:func -func_80980178 = 0x80972378; // type:func -func_80980184 = 0x80972388; // type:func -func_80980218 = 0x8097241C; // type:func -func_809802AC = 0x809724B0; // type:func -func_8098036C = 0x80972574; // type:func -func_80980430 = 0x8097263C; // type:func -func_80980504 = 0x809726FC; // type:func -func_809805D8 = 0x809727BC; // type:func -func_809806B8 = 0x80972884; // type:func -func_8098078C = 0x80972944; // type:func -func_8098085C = 0x80972A00; // type:func -func_809809C0 = 0x80972B4C; // type:func -func_80980AD4 = 0x80972C50; // type:func -func_80980B68 = 0x80972CD0; // type:func -func_80980BFC = 0x80972D50; // type:func -func_80980C90 = 0x80972DD0; // type:func -func_80980D74 = 0x80972EBC; // type:func -DemoGt_Update2 = 0x80972EFC; // type:func -DemoGt_Update10 = 0x80972F40; // type:func -DemoGt_Draw3 = 0x80972F7C; // type:func -func_80980F00_Init5 = 0x80973018; // type:func -func_80980F58 = 0x80973070; // type:func -func_80980F8C = 0x809730A8; // type:func -func_8098103C = 0x8097315C; // type:func -DemoGt_Update3 = 0x809731C0; // type:func -DemoGt_Update11 = 0x80973204; // type:func -DemoGt_Update16 = 0x80973240; // type:func -DemoGt_Draw4 = 0x809732D8; // type:func -func_809813CC_Init6 = 0x809734C0; // type:func -func_80981424 = 0x80973518; // type:func -func_80981458 = 0x80973550; // type:func -func_80981524 = 0x80973608; // type:func -DemoGt_Update4 = 0x8097366C; // type:func -DemoGt_Update12 = 0x809736B0; // type:func -DemoGt_Update17 = 0x809736EC; // type:func -DemoGt_Draw5 = 0x80973784; // type:func -func_809818A4_Init7 = 0x80973960; // type:func -func_809818FC = 0x809739B8; // type:func -func_80981930 = 0x809739F0; // type:func -DemoGt_Update5 = 0x80973A54; // type:func -DemoGt_Update13 = 0x80973A98; // type:func -DemoGt_Update18 = 0x80973AD4; // type:func -DemoGt_Draw6 = 0x80973B6C; // type:func -func_80981C94_Init23 = 0x80973D24; // type:func -func_80981CEC = 0x80973D7C; // type:func -func_80981D20 = 0x80973DB4; // type:func -func_80981DC8 = 0x80973E5C; // type:func -DemoGt_Update6 = 0x80973E9C; // type:func -DemoGt_Update14 = 0x80973EE0; // type:func -DemoGt_Draw7 = 0x80973F24; // type:func -func_80982054_Init24 = 0x809740BC; // type:func -func_809820AC = 0x80974114; // type:func -func_809820E0 = 0x8097414C; // type:func -func_80982188 = 0x809741F4; // type:func -DemoGt_Update7 = 0x80974234; // type:func -DemoGt_Update15 = 0x80974278; // type:func -DemoGt_Draw8 = 0x809742BC; // type:func -DemoGt_Update = 0x80974458; // type:func -DemoGt_Init = 0x809744A0; // type:func -DemoGt_Draw0 = 0x80974564; // type:func -DemoGt_Draw = 0x80974574; // type:func -DemoIk_Destroy = 0x80974F30; // type:func -DemoIk_BgCheck = 0x80974F40; // type:func -DemoIk_UpdateSkelAnime = 0x80974F88; // type:func -DemoIk_GetCue = 0x80974FAC; // type:func -DemoIk_CheckForCue = 0x80974FD4; // type:func -DemoIk_SetMove = 0x80975014; // type:func -DemoIk_EndMove = 0x80975054; // type:func -DemoIk_GetCurFrame = 0x80975068; // type:func -DemoIk_SetColors = 0x80975074; // type:func -DemoIk_GetCueChannel = 0x80975118; // type:func -DemoIk_Type1PlaySfx = 0x80975144; // type:func -DemoIk_SpawnDeadDb = 0x80975244; // type:func -DemoIk_MoveToStartPos = 0x809753E8; // type:func -DemoIk_Type1Init = 0x80975468; // type:func -func_8098393C = 0x80975584; // type:func -func_8098394C = 0x80975598; // type:func -func_809839AC = 0x809755FC; // type:func -func_809839D0 = 0x80975624; // type:func -DemoIk_Type1Action0 = 0x809756E4; // type:func -DemoIk_Type1Action1 = 0x80975704; // type:func -DemoIk_Type1Action2 = 0x8097573C; // type:func -DemoIk_Type1PostLimbDraw = 0x809757A4; // type:func -DemoIk_Type1Draw = 0x809758A0; // type:func -DemoIk_Type2Init = 0x809759F8; // type:func -DemoIk_Type2PlaySfxOnFrame = 0x80975B00; // type:func -DemoIk_Type2PlaySfx = 0x80975B60; // type:func -func_80983FDC = 0x80975BB0; // type:func -func_80983FEC = 0x80975BC4; // type:func -func_8098402C = 0x80975C04; // type:func -func_80984048 = 0x80975C24; // type:func -DemoIk_Type2Action0 = 0x80975CEC; // type:func -DemoIk_Type2Action1 = 0x80975D0C; // type:func -DemoIk_Type2Action2 = 0x80975D2C; // type:func -DemoIk_Type2OverrideLimbDraw = 0x80975D68; // type:func -DemoIk_Type2PostLimbDraw = 0x80975DC4; // type:func -DemoIk_Type2Draw = 0x80975F94; // type:func -DemoIk_Update = 0x809760F8; // type:func -DemoIk_DrawNothing = 0x80976140; // type:func -DemoIk_Draw = 0x80976150; // type:func -DemoIk_Init = 0x80976198; // type:func -func_80984BE0 = 0x80976440; // type:func -DemoIm_InitCollider = 0x809764C8; // type:func -DemoIm_DestroyCollider = 0x80976514; // type:func -DemoIm_UpdateCollider = 0x80976540; // type:func -func_80984DB8 = 0x80976584; // type:func -func_80984E58 = 0x80976628; // type:func -func_80984F10 = 0x809766E0; // type:func -func_80984F94 = 0x80976768; // type:func -DemoIm_UpdateBgCheckInfo = 0x809767F0; // type:func -DemoIm_UpdateSkelAnime = 0x80976838; // type:func -DemoIm_IsCutsceneIdle = 0x8097685C; // type:func -DemoIm_GetCue = 0x8097687C; // type:func -func_809850E8 = 0x809768C8; // type:func -func_80985134 = 0x80976914; // type:func -func_80985180 = 0x80976960; // type:func -func_80985200 = 0x809769E0; // type:func -DemoIm_ChangeAnim = 0x80976A60; // type:func -func_80985310 = 0x80976AF0; // type:func -func_80985358 = 0x80976B38; // type:func -func_809853B4 = 0x80976B94; // type:func -func_80985430 = 0x80976C10; // type:func -func_8098544C = 0x80976C30; // type:func -func_809854DC = 0x80976CCC; // type:func -func_8098557C = 0x80976D6C; // type:func -func_809855A8 = 0x80976D98; // type:func -func_80985640 = 0x80976E30; // type:func -func_809856AC = 0x80976E9C; // type:func -func_809856F8 = 0x80976EE8; // type:func -func_80985718 = 0x80976F08; // type:func -func_80985738 = 0x80976F28; // type:func -func_80985770 = 0x80976F64; // type:func -func_809857B0 = 0x80976FAC; // type:func -func_809857F0 = 0x80976FF0; // type:func -func_80985830 = 0x80977038; // type:func -func_80985860 = 0x8097706C; // type:func -func_809858A8 = 0x809770B0; // type:func -DemoIm_SpawnLightBall = 0x809770D0; // type:func -func_80985948 = 0x80977150; // type:func -func_809859E0 = 0x809771EC; // type:func -func_80985B34 = 0x80977340; // type:func -func_80985C10 = 0x80977424; // type:func -func_80985C40 = 0x80977444; // type:func -func_80985C94 = 0x8097748C; // type:func -DemoIm_DrawTranslucent = 0x809774D4; // type:func -func_80985E60 = 0x8097761C; // type:func -func_80985EAC = 0x80977668; // type:func -func_80985EF4 = 0x809776B0; // type:func -func_80985F54 = 0x80977710; // type:func -func_80985F64 = 0x80977724; // type:func -func_80985FE8 = 0x809777A8; // type:func -func_8098604C = 0x8097780C; // type:func -func_809860C8 = 0x80977888; // type:func -func_809860DC = 0x809778A0; // type:func -func_80986148 = 0x8097790C; // type:func -func_809861C4 = 0x80977988; // type:func -func_8098629C = 0x80977A4C; // type:func -func_809862E0 = 0x80977A90; // type:func -func_809863BC = 0x80977B58; // type:func -func_809863DC = 0x80977B78; // type:func -func_80986430 = 0x80977BD4; // type:func -func_80986494 = 0x80977C40; // type:func -func_809864D4 = 0x80977C88; // type:func -func_8098652C = 0x80977CE8; // type:func -func_80986570 = 0x80977D2C; // type:func -func_809865F8 = 0x80977DB4; // type:func -func_80986700 = 0x80977EC4; // type:func -func_80986710 = 0x80977ED8; // type:func -func_80986794 = 0x80977F5C; // type:func -func_8098680C = 0x80977FD4; // type:func -func_809868E8 = 0x8097809C; // type:func -func_80986908 = 0x809780BC; // type:func -func_80986948 = 0x80978104; // type:func -func_809869B0 = 0x80978174; // type:func -func_809869F8 = 0x809781B8; // type:func -func_80986A5C = 0x8097821C; // type:func -func_80986AD0 = 0x80978290; // type:func -func_80986B2C = 0x809782EC; // type:func -func_80986BA0 = 0x80978360; // type:func -func_80986BE4 = 0x809783A4; // type:func -func_80986BF8 = 0x809783B8; // type:func -func_80986C30 = 0x809783F0; // type:func -func_80986CC8 = 0x80978494; // type:func -func_80986CFC = 0x809784C8; // type:func -func_80986D40 = 0x80978510; // type:func -func_80986DC8 = 0x80978578; // type:func -func_80986E20 = 0x809785D4; // type:func -func_80986E40 = 0x809785F4; // type:func -func_80986EAC = 0x80978668; // type:func -func_80986F08 = 0x809786CC; // type:func -func_80986F28 = 0x809786EC; // type:func -func_80986F88 = 0x80978754; // type:func -func_80986FA8 = 0x80978778; // type:func -func_80987018 = 0x809787F0; // type:func -func_80987064 = 0x80978838; // type:func -func_809870F0 = 0x809788C4; // type:func -func_80987128 = 0x809788FC; // type:func -func_80987174 = 0x80978948; // type:func -func_809871B4 = 0x80978988; // type:func -func_809871E8 = 0x809789BC; // type:func -func_80987288 = 0x80978A48; // type:func -func_809872A8 = 0x80978A68; // type:func -func_809872F0 = 0x80978AB4; // type:func -func_80987330 = 0x80978AFC; // type:func -DemoIm_Update = 0x80978B40; // type:func -DemoIm_Init = 0x80978B88; // type:func -DemoIm_Destroy = 0x80978CB0; // type:func -DemoIm_OverrideLimbDraw = 0x80978CD0; // type:func -DemoIm_PostLimbDraw = 0x80978D80; // type:func -DemoIm_DrawNothing = 0x80978E0C; // type:func -DemoIm_DrawSolid = 0x80978E1C; // type:func -DemoIm_Draw = 0x80978F60; // type:func -DemoKankyo_SetupAction = 0x8097A3B0; // type:func -DemoKankyo_Init = 0x8097A3BC; // type:func -DemoKankyo_Destroy = 0x8097A7A0; // type:func -DemoKankyo_SetupType = 0x8097A7AC; // type:func -DemoKankyo_DoNothing = 0x8097ABE4; // type:func -DemoKankyo_DoNothing2 = 0x8097ABF4; // type:func -DemoKankyo_SetPosFromCue = 0x8097AC1C; // type:func -DemoKankyo_UpdateRock = 0x8097AD0C; // type:func -DemoKankyo_UpdateClouds = 0x8097AD84; // type:func -DemoKankyo_UpdateDoorOfTime = 0x8097ADD0; // type:func -DemoKankyo_KillDoorOfTimeCollision = 0x8097AE6C; // type:func -DemoKankyo_Update = 0x8097AE98; // type:func -DemoKankyo_Draw = 0x8097AEBC; // type:func -func_80989B54 = 0x8097B064; // type:func -DemoKankyo_DrawRain = 0x8097B234; // type:func -DemoKankyo_DrawRock = 0x8097B840; // type:func -DemoKankyo_DrawClouds = 0x8097B984; // type:func -DemoKankyo_DrawDoorOfTime = 0x8097BCB0; // type:func -DemoKankyo_DrawLightPlane = 0x8097BDC0; // type:func -DemoKankyo_Vec3fCopy = 0x8097BEA8; // type:func -DemoKankyo_AddVecGeoToVec3f = 0x8097BEC8; // type:func -DemoKankyo_Vec3fAddPosRot = 0x8097BF48; // type:func -DemoKankyo_DrawWarpSparkles = 0x8097BFA4; // type:func -DemoKankyo_DrawSparkles = 0x8097C700; // type:func -DemoKekkai_CheckEventFlag = 0x8097E0A0; // type:func -DemoKekkai_Init = 0x8097E0E4; // type:func -DemoKekkai_Destroy = 0x8097E314; // type:func -DemoKekkai_SpawnParticles = 0x8097E354; // type:func -DemoKekkai_TowerBarrier = 0x8097E5A8; // type:func -DemoKekkai_Update = 0x8097E6C4; // type:func -DemoKekkai_TrialBarrierDispel = 0x8097E7F0; // type:func -DemoKekkai_TrialBarrierIdle = 0x8097E950; // type:func -DemoKekkai_DrawTrialBarrier = 0x8097EA74; // type:func -DemoKekkai_DrawTowerBarrier = 0x8097EF88; // type:func -DemoSa_Destroy = 0x8097F390; // type:func -func_8098E480 = 0x8097F3B4; // type:func -DemoSa_SetEyeIndex = 0x8097F43C; // type:func -DemoSa_SetMouthIndex = 0x8097F454; // type:func -func_8098E5C8 = 0x8097F46C; // type:func -DemoSa_UpdateSkelAnime = 0x8097F4B4; // type:func -DemoSa_GetCue = 0x8097F4D8; // type:func -func_8098E654 = 0x8097F500; // type:func -func_8098E6A0 = 0x8097F54C; // type:func -func_8098E6EC = 0x8097F598; // type:func -func_8098E76C = 0x8097F618; // type:func -func_8098E7FC = 0x8097F6A8; // type:func -func_8098E86C = 0x8097F718; // type:func -func_8098E8C8 = 0x8097F774; // type:func -func_8098E944 = 0x8097F7F0; // type:func -func_8098E960 = 0x8097F810; // type:func -func_8098E9EC = 0x8097F8A8; // type:func -func_8098EA3C = 0x8097F8F8; // type:func -func_8098EA68 = 0x8097F924; // type:func -func_8098EB00 = 0x8097F9BC; // type:func -func_8098EB6C = 0x8097FA28; // type:func -func_8098EBB8 = 0x8097FA74; // type:func -func_8098EBD8 = 0x8097FA94; // type:func -func_8098EBF8 = 0x8097FAB4; // type:func -func_8098EC28 = 0x8097FAE8; // type:func -func_8098EC60 = 0x8097FB28; // type:func -func_8098EC94 = 0x8097FB60; // type:func -func_8098ECCC = 0x8097FBA0; // type:func -func_8098ECF4 = 0x8097FBCC; // type:func -func_8098EDB0 = 0x8097FC88; // type:func -func_8098EE08 = 0x8097FCE0; // type:func -func_8098EE28 = 0x8097FD00; // type:func -func_8098EEA8 = 0x8097FD80; // type:func -func_8098EEFC = 0x8097FDD4; // type:func -func_8098F050 = 0x8097FF28; // type:func -func_8098F0E8 = 0x8097FFC4; // type:func -func_8098F118 = 0x8097FFE4; // type:func -func_8098F16C = 0x8098002C; // type:func -DemoSa_DrawXlu = 0x80980074; // type:func -func_8098F390 = 0x80980214; // type:func -func_8098F3F0 = 0x80980274; // type:func -func_8098F420 = 0x809802A8; // type:func -func_8098F480 = 0x80980304; // type:func -func_8098F50C = 0x80980390; // type:func -func_8098F544 = 0x809803C8; // type:func -func_8098F590 = 0x80980414; // type:func -func_8098F5D0 = 0x80980454; // type:func -func_8098F610 = 0x80980494; // type:func -func_8098F654 = 0x809804DC; // type:func -func_8098F714 = 0x80980588; // type:func -func_8098F734 = 0x809805A8; // type:func -func_8098F77C = 0x809805F4; // type:func -func_8098F7BC = 0x8098063C; // type:func -func_8098F7FC = 0x80980684; // type:func -func_8098F83C = 0x809806C8; // type:func -func_8098F8F8 = 0x80980784; // type:func -func_8098F984 = 0x80980810; // type:func -func_8098F998 = 0x80980828; // type:func -func_8098FA2C = 0x809808BC; // type:func -func_8098FA84 = 0x80980914; // type:func -func_8098FAE0 = 0x80980970; // type:func -func_8098FB34 = 0x809809C4; // type:func -func_8098FB68 = 0x809809F8; // type:func -func_8098FC44 = 0x80980AC0; // type:func -func_8098FC64 = 0x80980AE0; // type:func -func_8098FC9C = 0x80980B1C; // type:func -func_8098FCD4 = 0x80980B5C; // type:func -func_8098FD0C = 0x80980B9C; // type:func -DemoSa_Update = 0x80980BE8; // type:func -DemoSa_Init = 0x80980C30; // type:func -DemoSa_OverrideLimbDraw = 0x80980CF8; // type:func -DemoSa_DrawNothing = 0x80980D30; // type:func -DemoSa_DrawOpa = 0x80980D40; // type:func -DemoSa_Draw = 0x80980ED4; // type:func -DemoShd_SetupAction = 0x80981EB0; // type:func -DemoShd_Init = 0x80981EBC; // type:func -DemoShd_Destroy = 0x80981F0C; // type:func -func_80991298 = 0x80981F1C; // type:func -DemoShd_Update = 0x80982074; // type:func -DemoShd_Draw = 0x80982098; // type:func -DemoTreLgt_Init = 0x809842C0; // type:func -DemoTreLgt_Destroy = 0x8098431C; // type:func -func_80993754 = 0x80984348; // type:func -func_8099375C = 0x80984354; // type:func -func_809937B4 = 0x809843AC; // type:func -func_80993848 = 0x80984444; // type:func -DemoTreLgt_Update = 0x809846F8; // type:func -DemoTreLgt_OverrideLimbDraw = 0x8098472C; // type:func -DemoTreLgt_Draw = 0x80984880; // type:func -DoorAna_SetupAction = 0x809849D0; // type:func -DoorAna_Init = 0x809849DC; // type:func -DoorAna_Destroy = 0x80984A98; // type:func -DoorAna_WaitClosed = 0x80984AD4; // type:func -DoorAna_WaitOpen = 0x80984C0C; // type:func -DoorAna_GrabPlayer = 0x80984DC0; // type:func -DoorAna_Update = 0x80984E6C; // type:func -DoorAna_Draw = 0x80984EC0; // type:func -DoorGerudo_Init = 0x80985040; // type:func -DoorGerudo_Destroy = 0x809850F0; // type:func -func_809946BC = 0x80985124; // type:func -func_80994750 = 0x809851BC; // type:func -func_8099485C = 0x809852C8; // type:func -func_8099496C = 0x809853D8; // type:func -func_809949C8 = 0x80985434; // type:func -DoorGerudo_Update = 0x80985490; // type:func -DoorGerudo_Draw = 0x809854B4; // type:func -DoorKiller_Init = 0x80985630; // type:func -DoorKiller_Destroy = 0x80985988; // type:func -DoorKiller_SpawnRubble = 0x809859D8; // type:func -DoorKiller_FallAsRubble = 0x80985B80; // type:func -DoorKiller_IsHit = 0x80985C40; // type:func -DoorKiller_SetAC = 0x80985C74; // type:func -DoorKiller_Die = 0x80985CD4; // type:func -DoorKiller_RiseBackUp = 0x80985D24; // type:func -DoorKiller_FallOver = 0x80985ED4; // type:func -DoorKiller_Wobble = 0x809862A0; // type:func -DoorKiller_WaitBeforeWobble = 0x80986410; // type:func -DoorKiller_Wait = 0x80986444; // type:func -DoorKiller_UpdateTexture = 0x809866A4; // type:func -DoorKiller_WaitForObject = 0x80986738; // type:func -DoorKiller_Update = 0x809867EC; // type:func -DoorKiller_SetTexture = 0x80986810; // type:func -DoorKiller_DrawDoor = 0x8098683C; // type:func -DoorKiller_DrawRubble = 0x80986898; // type:func -DoorShutter_SetupAction = 0x80986BA0; // type:func -DoorShutter_SetupDoor = 0x80986BB0; // type:func -DoorShutter_Init = 0x80986D98; // type:func -DoorShutter_Destroy = 0x80986FB0; // type:func -DoorShutter_WaitForObject = 0x80987020; // type:func -DoorShutter_GetPlayerDistance = 0x8098715C; // type:func -DoorShutter_GetPlayerSide = 0x809871F4; // type:func -DoorShutter_WaitClear = 0x80987374; // type:func -DoorShutter_Unopenable = 0x80987420; // type:func -DoorShutter_Idle = 0x80987430; // type:func -DoorShutter_InitOpeningDoorCam = 0x80987584; // type:func -DoorShutter_UpdateOpening = 0x8098763C; // type:func -DoorShutter_UpdateBarsClosed = 0x80987734; // type:func -DoorShutter_BarAndWaitSwitchFlag = 0x80987818; // type:func -DoorShutter_UnbarredCheckSwitchFlag = 0x809878D0; // type:func -DoorShutter_Open = 0x8098793C; // type:func -DoorShutter_Unbar = 0x80987A8C; // type:func -DoorShutter_SetupClosed = 0x80987B5C; // type:func -DoorShutter_Close = 0x80987D28; // type:func -DoorShutter_JabuDoorClose = 0x80987E6C; // type:func -DoorShutter_WaitPlayerSurprised = 0x80987EB0; // type:func -DoorShutter_GohmaBlockFall = 0x80987F08; // type:func -DoorShutter_GohmaBlockBounce = 0x80988004; // type:func -DoorShutter_PhantomGanonBarsRaise = 0x80988090; // type:func -DoorShutter_Update = 0x80988120; // type:func -DoorShutter_DrawJabuJabuDoor = 0x80988174; // type:func -DoorShutter_ShouldDraw = 0x80988364; // type:func -DoorShutter_Draw = 0x80988410; // type:func -DoorShutter_RequestQuakeAndRumble = 0x80988964; // type:func -DoorToki_Init = 0x80988E60; // type:func -DoorToki_Destroy = 0x80988EC8; // type:func -DoorToki_Update = 0x80988EFC; // type:func -DoorWarp1_SetupAction = 0x80988FC0; // type:func -DoorWarp1_Init = 0x80988FCC; // type:func -DoorWarp1_Destroy = 0x8098913C; // type:func -DoorWarp1_SetupWarp = 0x809891C4; // type:func -DoorWarp1_SetupAdultDungeonWarp = 0x809894CC; // type:func -DoorWarp1_SetupBlueCrystal = 0x80989698; // type:func -DoorWarp1_SetupPurpleCrystal = 0x80989830; // type:func -DoorWarp1_SetPlayerPos = 0x809899D0; // type:func -DoorWarp1_BlueCrystal = 0x80989A08; // type:func -func_80999214 = 0x80989A54; // type:func -func_80999348 = 0x80989B88; // type:func -DoorWarp1_FloatPlayer = 0x80989C50; // type:func -DoorWarp1_PurpleCrystal = 0x80989C6C; // type:func -DoorWarp1_ChooseInitialAction = 0x80989D4C; // type:func -DoorWarp1_AwaitClearFlag = 0x80989DC4; // type:func -func_809995D4 = 0x80989E1C; // type:func -DoorWarp1_WarpAppear = 0x80989F6C; // type:func -func_809998A4 = 0x8098A0F0; // type:func -DoorWarp1_PlayerInRange = 0x8098A188; // type:func -DoorWarp1_ChildWarpIdle = 0x8098A1F4; // type:func -DoorWarp1_ChildWarpOut = 0x8098A2C0; // type:func -DoorWarp1_RutoWarpIdle = 0x8098A6B4; // type:func -func_80999EE0 = 0x8098A734; // type:func -func_80999FE4 = 0x8098A83C; // type:func -DoorWarp1_RutoWarpOut = 0x8098A8F4; // type:func -func_8099A3A4 = 0x8098AC00; // type:func -DoorWarp1_AdultWarpIdle = 0x8098ACCC; // type:func -func_8099A508 = 0x8098AD6C; // type:func -DoorWarp1_AdultWarpOut = 0x8098AE50; // type:func -DoorWarp1_Destination = 0x8098B734; // type:func -DoorWarp1_DoNothing = 0x8098B864; // type:func -func_8099B020 = 0x8098B874; // type:func -DoorWarp1_Update = 0x8098B930; // type:func -DoorWarp1_DrawBlueCrystal = 0x8098B994; // type:func -DoorWarp1_DrawPurpleCrystal = 0x8098BB64; // type:func -DoorWarp1_DrawWarp = 0x8098BDE8; // type:func -DoorWarp1_Draw = 0x8098CC94; // type:func -EfcErupc_SetupAction = 0x8098D2D0; // type:func -EfcErupc_Init = 0x8098D2DC; // type:func -EfcErupc_Destroy = 0x8098D348; // type:func -EfcErupc_UpdateAction = 0x8098D358; // type:func -EfcErupc_Update = 0x8098D5A4; // type:func -EfcErupc_Draw = 0x8098D5E0; // type:func -EfcErupc_DrawEffects = 0x8098D920; // type:func -EfcErupc_UpdateEffects = 0x8098DADC; // type:func -EfcErupc_SpawnEffect = 0x8098DC00; // type:func -EfcErupc_InitEffects = 0x8098DCCC; // type:func -EffDust_SetupAction = 0x8098DDC0; // type:func -EffDust_SetupDraw = 0x8098DDCC; // type:func -EffDust_InitPosAndDistance = 0x8098DDD8; // type:func -EffDust_Init = 0x8098DE50; // type:func -EffDust_Destroy = 0x8098E010; // type:func -EffDust_UpdateFunc_8099DB28 = 0x8098E020; // type:func -EffDust_UpdateFunc_8099DD74 = 0x8098E26C; // type:func -EffDust_UpdateFunc_8099DFC0 = 0x8098E4B8; // type:func -EffDust_Update = 0x8098E9CC; // type:func -EffDust_DrawFunc_8099E4F4 = 0x8098E9F0; // type:func -EffDust_DrawFunc_8099E784 = 0x8098EC44; // type:func -EffDust_Draw = 0x8098EFA8; // type:func -EffectSsBlast_Init = 0x8098F190; // type:func -EffectSsBlast_Draw = 0x8098F2EC; // type:func -EffectSsBlast_Update = 0x8098F458; // type:func -EffectSsBomb_Init = 0x8098F520; // type:func -EffectSsBomb_Draw = 0x8098F5E8; // type:func -EffectSsBomb_Update = 0x8098F820; // type:func -EffectSsBomb2_Init = 0x8098F950; // type:func -EffectSsBomb2_DrawFade = 0x8098FA48; // type:func -EffectSsBomb2_DrawLayered = 0x8098FC38; // type:func -EffectSsBomb2_Update = 0x8098FF6C; // type:func -EffectSsBubble_Init = 0x80990250; // type:func -EffectSsBubble_Draw = 0x809903E0; // type:func -EffectSsBubble_Update = 0x80990534; // type:func -EffectSsDFire_Init = 0x809906D0; // type:func -EffectSsDFire_Draw = 0x8099081C; // type:func -EffectSsDFire_Update = 0x80990A64; // type:func -EffectSsDeadDb_Init = 0x80990BC0; // type:func -EffectSsDeadDb_Draw = 0x80990CDC; // type:func -EffectSsDeadDb_Update = 0x80990EB0; // type:func -EffectSsDeadDd_Init = 0x809910A0; // type:func -EffectSsDeadDd_Draw = 0x80991368; // type:func -EffectSsDeadDd_Update = 0x80991538; // type:func -EffectSsDeadDs_Init = 0x80991630; // type:func -EffectSsDeadDs_Draw = 0x80991718; // type:func -EffectSsDeadDs_Update = 0x809919EC; // type:func -EffectSsDeadSound_Init = 0x80991AB0; // type:func -EffectSsDeadSound_Update = 0x80991B3C; // type:func -EffectSsDtBubble_Init = 0x80991BF0; // type:func -EffectSsDtBubble_Draw = 0x80991E44; // type:func -EffectSsDtBubble_Update = 0x80992084; // type:func -EffectSsDust_Init = 0x80992180; // type:func -EffectSsDust_Draw = 0x80992334; // type:func -EffectSsDust_Update = 0x8099267C; // type:func -EffectSsDust_UpdateFire = 0x80992774; // type:func -EffectSsEnFire_Init = 0x809929C0; // type:func -EffectSsEnFire_Draw = 0x80992B88; // type:func -EffectSsEnFire_Update = 0x80992E90; // type:func -EffectSsEnIce_Init = 0x80993110; // type:func -EffectSsEnIce_Draw = 0x809933B8; // type:func -EffectSsEnIce_UpdateFlying = 0x80993728; // type:func -EffectSsEnIce_Update = 0x80993900; // type:func -EffectSsExtra_Init = 0x809939D0; // type:func -EffectSsExtra_Draw = 0x80993B14; // type:func -EffectSsExtra_Update = 0x80993CC8; // type:func -EffectSsFcircle_Init = 0x80993D90; // type:func -EffectSsFcircle_Draw = 0x80993E50; // type:func -EffectSsFcircle_Update = 0x8099411C; // type:func -EffectSsFhgFlash_Init = 0x80994240; // type:func -EffectSsFhgFlash_DrawLightBall = 0x8099458C; // type:func -EffectSsFhgFlash_DrawShock = 0x80994780; // type:func -EffectSsFhgFlash_UpdateLightBall = 0x8099498C; // type:func -EffectSsFhgFlash_UpdateShock = 0x80994A24; // type:func -EffectSsFireTail_Init = 0x809951C0; // type:func -EffectSsFireTail_Draw = 0x809952DC; // type:func -EffectSsFireTail_Update = 0x809957E4; // type:func -EffectSsGFire_Init = 0x809958C0; // type:func -EffectSsGFire_Draw = 0x80995A00; // type:func -EffectSsGFire_Update = 0x80995AA8; // type:func -EffectSsGMagma_Init = 0x80995B50; // type:func -EffectSsGMagma_Draw = 0x80995CA8; // type:func -EffectSsGMagma_Update = 0x80995D04; // type:func -EffectSsGMagma2_Init = 0x80995DB0; // type:func -EffectSsGMagma2_Draw = 0x80995F7C; // type:func -EffectSsGMagma2_Update = 0x80996194; // type:func -EffectSsGRipple_Init = 0x809962C0; // type:func -EffectSsGRipple_DrawRipple = 0x8099643C; // type:func -EffectSsGRipple_Draw = 0x80996638; // type:func -EffectSsGRipple_Update = 0x80996670; // type:func -EffectSsGSpk_Init = 0x80996820; // type:func -EffectSsGSpk_Draw = 0x80996990; // type:func -EffectSsGSpk_Update = 0x80996B84; // type:func -EffectSsGSpk_UpdateNoAccel = 0x80996C8C; // type:func -EffectSsGSplash_Init = 0x80996DD0; // type:func -EffectSsGSplash_Draw = 0x80996FF0; // type:func -EffectSsGSplash_Update = 0x809970F8; // type:func -EffectSsHahen_CheckForObject = 0x80997280; // type:func -EffectSsHahen_Init = 0x809972F4; // type:func -EffectSsHahen_Draw = 0x80997490; // type:func -EffectSsHahen_DrawGray = 0x809975F0; // type:func -EffectSsHahen_Update = 0x80997798; // type:func -EffectSsHitMark_Init = 0x809978C0; // type:func -EffectSsHitMark_Draw = 0x809979C0; // type:func -EffectSsHitMark_Update = 0x80997BCC; // type:func -EffectSsIcePiece_Init = 0x80997E10; // type:func -EffectSsIcePiece_Draw = 0x80997F5C; // type:func -EffectSsIcePiece_Update = 0x80998190; // type:func -EffectSsIceSmoke_Init = 0x80998250; // type:func -EffectSsIceSmoke_Draw = 0x80998370; // type:func -EffectSsIceSmoke_Update = 0x80998650; // type:func -EffectSsKFire_Init = 0x80998730; // type:func -EffectSsKFire_Draw = 0x80998800; // type:func -EffectSsKFire_Update = 0x80998A68; // type:func -EffectSsKakera_Init = 0x80998B70; // type:func -func_809A9818 = 0x80998CFC; // type:func -EffectSsKakera_Draw = 0x80998D38; // type:func -func_809A9BA8 = 0x80999024; // type:func -func_809A9C10 = 0x80999090; // type:func -func_809A9DC0 = 0x80999240; // type:func -func_809A9DD8 = 0x8099925C; // type:func -func_809A9DEC = 0x80999278; // type:func -func_809A9E28 = 0x809992B4; // type:func -func_809A9E68 = 0x809992F4; // type:func -func_809A9E88 = 0x80999314; // type:func -func_809A9F10 = 0x809993A4; // type:func -func_809A9F4C = 0x809993E4; // type:func -func_809A9FD8 = 0x80999478; // type:func -func_809AA0B8 = 0x80999554; // type:func -func_809AA0EC = 0x8099958C; // type:func -func_809AA230 = 0x809996D4; // type:func -EffectSsKakera_Update = 0x809998D4; // type:func -EffectSsKiraKira_Init = 0x80999C00; // type:func -EffectSsKiraKira_Draw = 0x80999DA0; // type:func -func_809AABF0 = 0x80999FBC; // type:func -func_809AACAC = 0x8099A074; // type:func -func_809AAD6C = 0x8099A130; // type:func -EffectSsLightning_Init = 0x8099A270; // type:func -EffectSsLightning_NewLightning = 0x8099A358; // type:func -EffectSsLightning_Draw = 0x8099A3FC; // type:func -EffectSsLightning_Update = 0x8099A694; // type:func -EffectSsSibuki_Init = 0x8099A940; // type:func -EffectSsSibuki_Draw = 0x8099AAF8; // type:func -EffectSsSibuki_Update = 0x8099ACA8; // type:func -EffectSsSibuki2_Init = 0x8099B010; // type:func -EffectSsSibuki2_Draw = 0x8099B0C0; // type:func -EffectSsSibuki2_Update = 0x8099B2A4; // type:func -EffectSsSolderSrchBall_Init = 0x8099B340; // type:func -EffectSsSolderSrchBall_Update = 0x8099B3C0; // type:func -EffectSsStick_Init = 0x8099B4F0; // type:func -EffectSsStick_Draw = 0x8099B650; // type:func -EffectSsStick_Update = 0x8099B7F0; // type:func -EffectSsStone1_Init = 0x8099B890; // type:func -EffectSsStone1_Draw = 0x8099B91C; // type:func -EffectSsStone1_Update = 0x8099BB18; // type:func -ElfMsg_SetupAction = 0x8099BC10; // type:func -ElfMsg_KillCheck = 0x8099BC1C; // type:func -ElfMsg_Init = 0x8099BD54; // type:func -ElfMsg_Destroy = 0x8099BE48; // type:func -ElfMsg_GetMessageId = 0x8099BE58; // type:func -ElfMsg_CallNaviCuboid = 0x8099BE84; // type:func -ElfMsg_WithinXZDistance = 0x8099BF54; // type:func -ElfMsg_CallNaviCylinder = 0x8099BFA8; // type:func -ElfMsg_Update = 0x8099C070; // type:func -ElfMsg2_SetupAction = 0x8099C200; // type:func -ElfMsg2_KillCheck = 0x8099C20C; // type:func -ElfMsg2_Init = 0x8099C344; // type:func -ElfMsg2_Destroy = 0x8099C404; // type:func -ElfMsg2_GetMessageId = 0x8099C414; // type:func -ElfMsg2_WaitForTextClose = 0x8099C428; // type:func -ElfMsg2_WaitForTextRead = 0x8099C4A8; // type:func -ElfMsg2_WaitUntilActivated = 0x8099C4E0; // type:func -ElfMsg2_Update = 0x8099C55C; // type:func -EnAm_SetupAction = 0x8099C670; // type:func -EnAm_CanMove = 0x8099C67C; // type:func -EnAm_Init = 0x8099C7A8; // type:func -EnAm_Destroy = 0x8099C974; // type:func -EnAm_SpawnEffects = 0x8099C9CC; // type:func -EnAm_SetupSleep = 0x8099CB68; // type:func -EnAm_SetupStatue = 0x8099CC04; // type:func -EnAm_SetupLunge = 0x8099CC94; // type:func -EnAm_SetupCooldown = 0x8099CCF8; // type:func -EnAm_SetupMoveToHome = 0x8099CD64; // type:func -EnAm_SetupRotateToInit = 0x8099CDC0; // type:func -EnAm_SetupRotateToHome = 0x8099CE1C; // type:func -EnAm_SetupRecoilFromDamage = 0x8099CE78; // type:func -EnAm_SetupRicochet = 0x8099CF50; // type:func -EnAm_Sleep = 0x8099D004; // type:func -EnAm_RotateToHome = 0x8099D270; // type:func -EnAm_RotateToInit = 0x8099D374; // type:func -EnAm_MoveToHome = 0x8099D4E0; // type:func -EnAm_RecoilFromDamage = 0x8099D650; // type:func -EnAm_Cooldown = 0x8099D6F4; // type:func -EnAm_Lunge = 0x8099D82C; // type:func -EnAm_Statue = 0x8099DA60; // type:func -EnAm_SetupStunned = 0x8099DCB0; // type:func -EnAm_Stunned = 0x8099DD9C; // type:func -EnAm_Ricochet = 0x8099DE70; // type:func -EnAm_TransformSwordHitbox = 0x8099DF24; // type:func -EnAm_UpdateDamage = 0x8099DFBC; // type:func -EnAm_Update = 0x8099E154; // type:func -EnAm_PostLimbDraw = 0x8099E4F8; // type:func -EnAm_Draw = 0x8099E540; // type:func -EnAni_SetupAction = 0x8099EA70; // type:func -EnAni_Init = 0x8099EA7C; // type:func -EnAni_Destroy = 0x8099EB94; // type:func -EnAni_SetText = 0x8099EBC0; // type:func -func_809B04F0 = 0x8099EBFC; // type:func -func_809B0524 = 0x8099EC34; // type:func -func_809B0558 = 0x8099EC6C; // type:func -func_809B05F0 = 0x8099ED08; // type:func -func_809B064C = 0x8099ED6C; // type:func -func_809B07F8 = 0x8099EF18; // type:func -func_809B0988 = 0x8099F0A8; // type:func -func_809B0994 = 0x8099F0B8; // type:func -func_809B0A28 = 0x8099F14C; // type:func -func_809B0A6C = 0x8099F190; // type:func -EnAni_Update = 0x8099F23C; // type:func -EnAni_OverrideLimbDraw = 0x8099F4B8; // type:func -EnAni_PostLimbDraw = 0x8099F500; // type:func -EnAni_Draw = 0x8099F540; // type:func -EnAnubice_Hover = 0x8099F7E0; // type:func -EnAnubice_AimFireball = 0x8099F884; // type:func -EnAnubice_Init = 0x8099F964; // type:func -EnAnubice_Destroy = 0x8099FA7C; // type:func -EnAnubice_FindFlameCircles = 0x8099FAD8; // type:func -EnAnubice_SetupIdle = 0x8099FB60; // type:func -EnAnubice_Idle = 0x8099FC08; // type:func -EnAnubice_GoToHome = 0x8099FCE8; // type:func -EnAnubice_SetupShootFireball = 0x8099FE38; // type:func -EnAnubice_ShootFireball = 0x8099FEC0; // type:func -EnAnubice_SetupDie = 0x8099FFC0; // type:func -EnAnubice_Die = 0x809A0090; // type:func -EnAnubice_Update = 0x809A0344; // type:func -EnAnubice_OverrideLimbDraw = 0x809A0748; // type:func -EnAnubice_PostLimbDraw = 0x809A0794; // type:func -EnAnubice_Draw = 0x809A0850; // type:func -EnAnubiceFire_Init = 0x809A0A90; // type:func -EnAnubiceFire_Destroy = 0x809A0BB0; // type:func -func_809B26EC = 0x809A0BDC; // type:func -func_809B27D8 = 0x809A0CC8; // type:func -func_809B2B48 = 0x809A1038; // type:func -EnAnubiceFire_Update = 0x809A11E4; // type:func -EnAnubiceFire_Draw = 0x809A13E0; // type:func -EnAnubiceTag_Init = 0x809A1850; // type:func -EnAnubiceTag_Destroy = 0x809A18A0; // type:func -EnAnubiceTag_SpawnAnubis = 0x809A18B0; // type:func -EnAnubiceTag_ManageAnubis = 0x809A1928; // type:func -EnAnubiceTag_Update = 0x809A1A8C; // type:func -EnAnubiceTag_Draw = 0x809A1AB0; // type:func -EnArowTrap_Init = 0x809A1B20; // type:func -EnArowTrap_Destroy = 0x809A1B70; // type:func -EnArowTrap_Update = 0x809A1B80; // type:func -EnArrow_SetupAction = 0x809A1C70; // type:func -EnArrow_Init = 0x809A1C7C; // type:func -EnArrow_Destroy = 0x809A1E84; // type:func -EnArrow_Shoot = 0x809A1F0C; // type:func -func_809B3CEC = 0x809A2024; // type:func -EnArrow_CarryActor = 0x809A210C; // type:func -EnArrow_Fly = 0x809A2310; // type:func -func_809B45E0 = 0x809A2918; // type:func -func_809B4640 = 0x809A2978; // type:func -EnArrow_Update = 0x809A29E0; // type:func -func_809B4800 = 0x809A2B3C; // type:func -EnArrow_Draw = 0x809A2CA4; // type:func -EnAttackNiw_Init = 0x809A3370; // type:func -EnAttackNiw_Destroy = 0x809A34A4; // type:func -func_809B5268 = 0x809A34D8; // type:func -func_809B55EC = 0x809A3860; // type:func -func_809B5670 = 0x809A38E4; // type:func -func_809B59B0 = 0x809A3C24; // type:func -func_809B5C18 = 0x809A3E94; // type:func -EnAttackNiw_Update = 0x809A3F58; // type:func -func_809B5F98 = 0x809A421C; // type:func -EnAttackNiw_Draw = 0x809A4374; // type:func -EnBa_SetupAction = 0x809A45D0; // type:func -EnBa_Init = 0x809A45DC; // type:func -EnBa_Destroy = 0x809A47C8; // type:func -EnBa_SetupIdle = 0x809A47F4; // type:func -EnBa_Idle = 0x809A4834; // type:func -EnBa_SetupFallAsBlob = 0x809A4C60; // type:func -EnBa_FallAsBlob = 0x809A4CD0; // type:func -EnBa_SetupSwingAtPlayer = 0x809A4D90; // type:func -EnBa_SwingAtPlayer = 0x809A4DE4; // type:func -func_809B7174 = 0x809A5404; // type:func -EnBa_RecoilFromDamage = 0x809A5480; // type:func -func_809B75A0 = 0x809A5834; // type:func -EnBa_Die = 0x809A5AB0; // type:func -EnBa_Update = 0x809A5DE0; // type:func -EnBa_Draw = 0x809A5EC0; // type:func -EnBb_SetupAction = 0x809A64A0; // type:func -EnBb_FindExplosive = 0x809A64AC; // type:func -EnBb_SpawnFlameTrail = 0x809A6540; // type:func -EnBb_KillFlameTrail = 0x809A66DC; // type:func -EnBb_Init = 0x809A6728; // type:func -EnBb_Destroy = 0x809A6AD0; // type:func -EnBb_SetupFlameTrail = 0x809A6AFC; // type:func -EnBb_FlameTrail = 0x809A6B50; // type:func -EnBb_SetupDeath = 0x809A6CCC; // type:func -EnBb_Death = 0x809A6D60; // type:func -EnBb_SetupDamage = 0x809A6EDC; // type:func -EnBb_Damage = 0x809A6F9C; // type:func -EnBb_SetupBlue = 0x809A7008; // type:func -EnBb_Blue = 0x809A70C8; // type:func -EnBb_SetupDown = 0x809A78BC; // type:func -EnBb_Down = 0x809A794C; // type:func -EnBb_SetupRed = 0x809A7C20; // type:func -EnBb_Red = 0x809A7D30; // type:func -EnBb_FaceWaypoint = 0x809A80F8; // type:func -EnBb_SetWaypoint = 0x809A812C; // type:func -EnBb_SetupWhite = 0x809A81F8; // type:func -EnBb_White = 0x809A82A8; // type:func -EnBb_InitGreen = 0x809A862C; // type:func -EnBb_SetupGreen = 0x809A8764; // type:func -EnBb_Green = 0x809A87FC; // type:func -EnBb_SetupStunned = 0x809A8E6C; // type:func -EnBb_Stunned = 0x809A8F80; // type:func -EnBb_CollisionCheck = 0x809A9124; // type:func -EnBb_Update = 0x809A9458; // type:func -EnBb_PostLimbDraw = 0x809A96D8; // type:func -EnBb_Draw = 0x809A9728; // type:func -EnBdfire_SetupAction = 0x809AA180; // type:func -EnbdFire_SetupDraw = 0x809AA18C; // type:func -EnBdfire_Init = 0x809AA198; // type:func -EnBdfire_Destroy = 0x809AA3C8; // type:func -func_809BC2A4 = 0x809AA400; // type:func -func_809BC598 = 0x809AA6F4; // type:func -EnBdfire_Update = 0x809AA9E4; // type:func -EnBdfire_DrawFire = 0x809AAA20; // type:func -EnBdfire_Draw = 0x809AABE0; // type:func -EnBigokuta_Init = 0x809AAD20; // type:func -EnBigokuta_Destroy = 0x809AAE8C; // type:func -func_809BCE3C = 0x809AAF00; // type:func -func_809BCEBC = 0x809AAF7C; // type:func -func_809BCF68 = 0x809AB02C; // type:func -func_809BD1C8 = 0x809AB294; // type:func -func_809BD2E4 = 0x809AB3B0; // type:func -func_809BD318 = 0x809AB3E4; // type:func -func_809BD370 = 0x809AB43C; // type:func -func_809BD3AC = 0x809AB478; // type:func -func_809BD3E0 = 0x809AB4B0; // type:func -func_809BD3F8 = 0x809AB4CC; // type:func -func_809BD47C = 0x809AB550; // type:func -func_809BD4A4 = 0x809AB57C; // type:func -func_809BD524 = 0x809AB5FC; // type:func -func_809BD5E0 = 0x809AB6B8; // type:func -func_809BD658 = 0x809AB730; // type:func -func_809BD6B8 = 0x809AB790; // type:func -func_809BD768 = 0x809AB840; // type:func -func_809BD7F0 = 0x809AB8C8; // type:func -func_809BD84C = 0x809AB928; // type:func -func_809BD8DC = 0x809AB9B8; // type:func -func_809BDAE8 = 0x809ABBC4; // type:func -func_809BDB90 = 0x809ABC6C; // type:func -func_809BDC08 = 0x809ABCE4; // type:func -func_809BDF34 = 0x809AC014; // type:func -func_809BDFC8 = 0x809AC0A8; // type:func -func_809BE058 = 0x809AC138; // type:func -func_809BE180 = 0x809AC260; // type:func -func_809BE26C = 0x809AC34C; // type:func -func_809BE3E4 = 0x809AC4C4; // type:func -func_809BE4A4 = 0x809AC584; // type:func -func_809BE518 = 0x809AC5F8; // type:func -func_809BE568 = 0x809AC648; // type:func -func_809BE798 = 0x809AC878; // type:func -EnBigokuta_UpdateDamage = 0x809AC9BC; // type:func -EnBigokuta_Update = 0x809ACAAC; // type:func -EnBigokuta_OverrideLimbDraw = 0x809ACCA4; // type:func -EnBigokuta_Draw = 0x809AD11C; // type:func -EnBili_Init = 0x809AD820; // type:func -EnBili_Destroy = 0x809AD918; // type:func -EnBili_SetupFloatIdle = 0x809AD944; // type:func -EnBili_SetupSpawnedFlyApart = 0x809AD9A0; // type:func -EnBili_SetupDischargeLightning = 0x809ADA18; // type:func -EnBili_SetupClimb = 0x809ADA74; // type:func -EnBili_SetupApproachPlayer = 0x809ADACC; // type:func -EnBili_SetupSetNewHomeHeight = 0x809ADAEC; // type:func -EnBili_SetupRecoil = 0x809ADB54; // type:func -EnBili_SetupBurnt = 0x809ADBDC; // type:func -EnBili_SetupDie = 0x809ADC7C; // type:func -EnBili_SetupStunned = 0x809ADCB0; // type:func -EnBili_SetupFrozen = 0x809ADD28; // type:func -EnBili_UpdateTentaclesIndex = 0x809ADF00; // type:func -EnBili_UpdateFloating = 0x809AE020; // type:func -EnBili_FloatIdle = 0x809AE108; // type:func -EnBili_SpawnedFlyApart = 0x809AE1F4; // type:func -EnBili_DischargeLightning = 0x809AE24C; // type:func -EnBili_Climb = 0x809AE448; // type:func -EnBili_ApproachPlayer = 0x809AE504; // type:func -EnBili_SetNewHomeHeight = 0x809AE594; // type:func -EnBili_Recoil = 0x809AE610; // type:func -EnBili_Burnt = 0x809AE674; // type:func -EnBili_Die = 0x809AE6E8; // type:func -EnBili_Stunned = 0x809AE910; // type:func -EnBili_Frozen = 0x809AE970; // type:func -EnBili_UpdateDamage = 0x809AEA00; // type:func -EnBili_Update = 0x809AEBCC; // type:func -EnBili_PulseLimb3 = 0x809AEDA0; // type:func -EnBili_PulseLimb2 = 0x809AEFB8; // type:func -EnBili_PulseLimb4 = 0x809AF1D8; // type:func -EnBili_OverrideLimbDraw = 0x809AF340; // type:func -EnBili_Draw = 0x809AF430; // type:func -EnBird_SetupAction = 0x809AFAF0; // type:func -EnBird_Init = 0x809AFAFC; // type:func -EnBird_Destroy = 0x809AFBE8; // type:func -EnBird_SetupIdle = 0x809AFBF8; // type:func -EnBird_Idle = 0x809AFCAC; // type:func -EnBird_SetupMove = 0x809AFD4C; // type:func -EnBird_Move = 0x809AFD8C; // type:func -EnBird_Update = 0x809AFEA8; // type:func -EnBird_Draw = 0x809AFED8; // type:func -EnBlkobj_SetupAction = 0x809AFFB0; // type:func -EnBlkobj_Init = 0x809AFFC0; // type:func -EnBlkobj_Destroy = 0x809B0070; // type:func -EnBlkobj_Wait = 0x809B00A4; // type:func -EnBlkobj_SpawnDarkLink = 0x809B00F8; // type:func -EnBlkobj_DarkLinkFight = 0x809B0170; // type:func -EnBlkobj_DoNothing = 0x809B024C; // type:func -EnBlkobj_Update = 0x809B025C; // type:func -EnBlkobj_DrawAlpha = 0x809B0280; // type:func -EnBlkobj_Draw = 0x809B02FC; // type:func -EnBom_SetupAction = 0x809B0510; // type:func -EnBom_Init = 0x809B051C; // type:func -EnBom_Destroy = 0x809B0634; // type:func -EnBom_Move = 0x809B0674; // type:func -EnBom_WaitForRelease = 0x809B0844; // type:func -EnBom_Explode = 0x809B0890; // type:func -EnBom_Update = 0x809B09E0; // type:func -EnBom_Draw = 0x809B1070; // type:func -EnBomBowlMan_Init = 0x809B13E0; // type:func -EnBomBowlMan_Destroy = 0x809B15A0; // type:func -EnBomBowlMan_SetupWaitAsleep = 0x809B15B0; // type:func -EnBomBowlMan_WaitAsleep = 0x809B1638; // type:func -EnBomBowlMan_TalkAsleep = 0x809B16EC; // type:func -EnBomBowlMan_WakeUp = 0x809B1764; // type:func -EnBomBowlMan_BlinkAwake = 0x809B17E8; // type:func -EnBomBowlMan_CheckBeatenDC = 0x809B18E4; // type:func -EnBomBowlMan_WaitNotBeatenDC = 0x809B1A10; // type:func -EnBomBowlMan_TalkNotBeatenDC = 0x809B1A6C; // type:func -EnBomBowlMan_SetupRunGame = 0x809B1ADC; // type:func -EnBomBowlMan_RunGame = 0x809B1B60; // type:func -EnBomBowlMan_HandlePlayChoice = 0x809B1D70; // type:func -func_809C41FC = 0x809B1F2C; // type:func -EnBomBowlMan_SetupChooseShowPrize = 0x809B2048; // type:func -EnBomBowlMan_ChooseShowPrize = 0x809B214C; // type:func -EnBomBowlMan_BeginPlayGame = 0x809B2394; // type:func -EnBomBowlMan_Update = 0x809B2450; // type:func -EnBomBowlMan_OverrideLimbDraw = 0x809B25C8; // type:func -EnBomBowlMan_Draw = 0x809B2610; // type:func -EnBomBowlPit_Init = 0x809B2920; // type:func -EnBomBowlPit_Destroy = 0x809B2938; // type:func -EnBomBowlPit_SetupDetectHit = 0x809B2948; // type:func -EnBomBowlPit_DetectHit = 0x809B2974; // type:func -EnBomBowlPit_CameraDollyIn = 0x809B2C6C; // type:func -EnBomBowlPit_SpawnPrize = 0x809B2E48; // type:func -EnBomBowlPit_SetupGivePrize = 0x809B2ED8; // type:func -EnBomBowlPit_GivePrize = 0x809B2F90; // type:func -EnBomBowlPit_WaitTillPrizeGiven = 0x809B3094; // type:func -EnBomBowlPit_Reset = 0x809B30F0; // type:func -EnBomBowlPit_Update = 0x809B3170; // type:func -EnBomChu_Init = 0x809B3290; // type:func -EnBomChu_Destroy = 0x809B3430; // type:func -EnBomChu_Explode = 0x809B3480; // type:func -EnBomChu_CrossProduct = 0x809B35A0; // type:func -EnBomChu_UpdateFloorPoly = 0x809B3614; // type:func -EnBomChu_WaitForRelease = 0x809B3848; // type:func -EnBomChu_Move = 0x809B39B8; // type:func -EnBomChu_WaitForKill = 0x809B3ED0; // type:func -EnBomChu_ModelToWorld = 0x809B3F10; // type:func -EnBomChu_SpawnRipples = 0x809B3FC0; // type:func -EnBomChu_Update = 0x809B404C; // type:func -EnBomChu_Draw = 0x809B4410; // type:func -EnBombf_SetupAction = 0x809B4930; // type:func -EnBombf_Init = 0x809B493C; // type:func -EnBombf_Destroy = 0x809B4B18; // type:func -EnBombf_SetupGrowBomb = 0x809B4B58; // type:func -EnBombf_GrowBomb = 0x809B4B80; // type:func -EnBombf_Move = 0x809B4E90; // type:func -EnBombf_WaitForRelease = 0x809B4FB4; // type:func -EnBombf_Explode = 0x809B5018; // type:func -EnBombf_Update = 0x809B516C; // type:func -EnBombf_NewMtxDList = 0x809B5918; // type:func -EnBombf_Draw = 0x809B59A4; // type:func -EnBoom_SetupAction = 0x809B5DC0; // type:func -EnBoom_Init = 0x809B5DCC; // type:func -EnBoom_Destroy = 0x809B5EE8; // type:func -EnBoom_Fly = 0x809B5F28; // type:func -EnBoom_Update = 0x809B6368; // type:func -EnBoom_Draw = 0x809B63C0; // type:func -EnBox_SetupAction = 0x809B6690; // type:func -EnBox_ClipToGround = 0x809B669C; // type:func -EnBox_Init = 0x809B6728; // type:func -EnBox_Destroy = 0x809B6B98; // type:func -EnBox_RandomDustKinematic = 0x809B6BCC; // type:func -EnBox_SpawnDust = 0x809B6CD0; // type:func -EnBox_Fall = 0x809B6D84; // type:func -EnBox_FallOnSwitchFlag = 0x809B6F08; // type:func -func_809C9700 = 0x809B6FD8; // type:func -EnBox_AppearOnSwitchFlag = 0x809B7168; // type:func -EnBox_AppearOnRoomClear = 0x809B71E8; // type:func -EnBox_AppearInit = 0x809B72A0; // type:func -EnBox_AppearAnimation = 0x809B735C; // type:func -EnBox_WaitOpen = 0x809B7408; // type:func -EnBox_Open = 0x809B763C; // type:func -EnBox_SpawnIceSmoke = 0x809B77C4; // type:func -EnBox_Update = 0x809B7A70; // type:func -EnBox_PostLimbDraw = 0x809B7BAC; // type:func -EnBox_EmptyDList = 0x809B7D14; // type:func -func_809CA4A0 = 0x809B7D38; // type:func -func_809CA518 = 0x809B7D78; // type:func -EnBox_Draw = 0x809B7DB8; // type:func -EnBrob_Init = 0x809B81F0; // type:func -EnBrob_Destroy = 0x809B8464; // type:func -EnBrob_SetupIdle = 0x809B84BC; // type:func -EnBrob_SetupMoveUp = 0x809B8524; // type:func -EnBrob_SetupWobble = 0x809B8584; // type:func -EnBrob_SetupStunned = 0x809B85D8; // type:func -EnBrob_SetupMoveDown = 0x809B866C; // type:func -EnBrob_SetupShock = 0x809B86EC; // type:func -EnBrob_Idle = 0x809B8738; // type:func -EnBrob_MoveUp = 0x809B87F8; // type:func -EnBrob_Wobble = 0x809B88FC; // type:func -EnBrob_Stunned = 0x809B899C; // type:func -EnBrob_MoveDown = 0x809B8A38; // type:func -EnBrob_Shock = 0x809B8B3C; // type:func -EnBrob_Update = 0x809B8D54; // type:func -EnBrob_PostLimbDraw = 0x809B8FF0; // type:func -EnBrob_Draw = 0x809B90C4; // type:func -EnBubble_SetDimensions = 0x809B92E0; // type:func -func_809CBCBC = 0x809B939C; // type:func -func_809CBCEC = 0x809B93D0; // type:func -EnBubble_DamagePlayer = 0x809B93F4; // type:func -EnBubble_Explosion = 0x809B9460; // type:func -func_809CBFD4 = 0x809B96BC; // type:func -func_809CC020 = 0x809B9708; // type:func -EnBubble_Vec3fNormalizedReflect = 0x809B975C; // type:func -EnBubble_Vec3fNormalize = 0x809B97E4; // type:func -EnBubble_Fly = 0x809B985C; // type:func -func_809CC648 = 0x809B9D38; // type:func -EnBubble_DetectPop = 0x809B9DD4; // type:func -func_809CC774 = 0x809B9E64; // type:func -EnBubble_Init = 0x809B9F78; // type:func -EnBubble_Destroy = 0x809BA078; // type:func -EnBubble_Wait = 0x809BA0A4; // type:func -EnBubble_Pop = 0x809BA158; // type:func -EnBubble_Disappear = 0x809BA1A8; // type:func -EnBubble_Regrow = 0x809BA1F0; // type:func -EnBubble_Update = 0x809BA260; // type:func -EnBubble_Draw = 0x809BA2DC; // type:func -EnButte_SelectFlightParams = 0x809BA700; // type:func -EnButte_ResetTransformationEffect = 0x809BA784; // type:func -EnButte_UpdateTransformationEffect = 0x809BA7A0; // type:func -EnButte_DrawTransformationEffect = 0x809BA7D8; // type:func -EnButte_Init = 0x809BAA14; // type:func -EnButte_Destroy = 0x809BAB88; // type:func -func_809CD56C = 0x809BABB4; // type:func -func_809CD634 = 0x809BAC7C; // type:func -EnButte_Turn = 0x809BAD44; // type:func -EnButte_SetupFlyAround = 0x809BADE0; // type:func -EnButte_FlyAround = 0x809BAE2C; // type:func -EnButte_SetupFollowLink = 0x809BB210; // type:func -EnButte_FollowLink = 0x809BB25C; // type:func -EnButte_SetupTransformIntoFairy = 0x809BB610; // type:func -EnButte_TransformIntoFairy = 0x809BB660; // type:func -EnButte_SetupWaitToDie = 0x809BB71C; // type:func -EnButte_WaitToDie = 0x809BB73C; // type:func -EnButte_Update = 0x809BB76C; // type:func -EnButte_Draw = 0x809BB8AC; // type:func -EnBw_SetupAction = 0x809BBCD0; // type:func -EnBw_Init = 0x809BBCDC; // type:func -EnBw_Destroy = 0x809BBE3C; // type:func -func_809CE884 = 0x809BBE7C; // type:func -func_809CE9A8 = 0x809BBFA0; // type:func -func_809CEA24 = 0x809BC01C; // type:func -func_809CF72C = 0x809BCD24; // type:func -func_809CF7AC = 0x809BCDA4; // type:func -func_809CF8F0 = 0x809BCEE8; // type:func -func_809CF984 = 0x809BCF7C; // type:func -func_809CFBA8 = 0x809BD1A4; // type:func -func_809CFC4C = 0x809BD248; // type:func -func_809CFF10 = 0x809BD50C; // type:func -func_809CFF98 = 0x809BD594; // type:func -func_809D00F4 = 0x809BD6F0; // type:func -func_809D014C = 0x809BD748; // type:func -func_809D01CC = 0x809BD7C8; // type:func -func_809D0268 = 0x809BD864; // type:func -func_809D03CC = 0x809BD9C8; // type:func -func_809D0424 = 0x809BDA20; // type:func -func_809D0584 = 0x809BDB80; // type:func -EnBw_Update = 0x809BDE8C; // type:func -EnBw_OverrideLimbDraw = 0x809BE31C; // type:func -EnBw_Draw = 0x809BE534; // type:func -EnBx_Init = 0x809BF060; // type:func -EnBx_Destroy = 0x809BF268; // type:func -func_809D1D0C = 0x809BF294; // type:func -EnBx_Update = 0x809BF364; // type:func -EnBx_Draw = 0x809BF688; // type:func -EnChanger_Destroy = 0x809BFB60; // type:func -EnChanger_Init = 0x809BFB70; // type:func -EnChanger_Wait = 0x809C008C; // type:func -EnChanger_OpenChests = 0x809C0130; // type:func -EnChanger_SetHeartPieceFlag = 0x809C02E0; // type:func -EnChanger_Update = 0x809C0330; // type:func -EnClearTag_CreateDebrisEffect = 0x809C0540; // type:func -EnClearTag_CreateFireEffect = 0x809C0638; // type:func -EnClearTag_CreateSmokeEffect = 0x809C0728; // type:func -EnClearTag_CreateFlashEffect = 0x809C084C; // type:func -EnClearTag_Destroy = 0x809C0924; // type:func -EnClearTag_Init = 0x809C0950; // type:func -EnClearTag_CalculateFloorTangent = 0x809C0B14; // type:func -EnClearTag_Update = 0x809C0BD0; // type:func -EnClearTag_Draw = 0x809C1984; // type:func -EnClearTag_UpdateEffects = 0x809C1F18; // type:func -EnClearTag_DrawEffects = 0x809C22E0; // type:func -EnCow_RotateY = 0x809CBAE0; // type:func -EnCow_SetColliderPos = 0x809CBB78; // type:func -EnCow_SetTailPos = 0x809CBC6C; // type:func -EnCow_Init = 0x809CBCE8; // type:func -EnCow_Destroy = 0x809CC120; // type:func -EnCow_UpdateAnimation = 0x809CC16C; // type:func -EnCow_TalkEnd = 0x809CC394; // type:func -EnCow_GiveMilkEnd = 0x809CC40C; // type:func -EnCow_GiveMilkWait = 0x809CC454; // type:func -EnCow_GiveMilk = 0x809CC4B8; // type:func -EnCow_CheckForEmptyBottle = 0x809CC554; // type:func -EnCow_Talk = 0x809CC5E4; // type:func -EnCow_Idle = 0x809CC658; // type:func -EnCow_IdleTail = 0x809CC774; // type:func -EnCow_Update = 0x809CC90C; // type:func -EnCow_UpdateTail = 0x809CCB88; // type:func -EnCow_OverrideLimbDraw = 0x809CCC74; // type:func -EnCow_PostLimbDraw = 0x809CCCC4; // type:func -EnCow_Draw = 0x809CCD04; // type:func -EnCow_DrawTail = 0x809CCD64; // type:func -EnCrow_Init = 0x809CCF40; // type:func -EnCrow_Destroy = 0x809CD030; // type:func -EnCrow_SetupFlyIdle = 0x809CD05C; // type:func -EnCrow_SetupDiveAttack = 0x809CD090; // type:func -EnCrow_SetupDamaged = 0x809CD0C4; // type:func -EnCrow_SetupDie = 0x809CD3E4; // type:func -EnCrow_SetupTurnAway = 0x809CD3FC; // type:func -EnCrow_SetupRespawn = 0x809CD484; // type:func -EnCrow_FlyIdle = 0x809CD578; // type:func -EnCrow_DiveAttack = 0x809CD9A4; // type:func -EnCrow_Damaged = 0x809CDB48; // type:func -EnCrow_Die = 0x809CDC70; // type:func -EnCrow_TurnAway = 0x809CDD20; // type:func -EnCrow_Respawn = 0x809CDDC4; // type:func -EnCrow_UpdateDamage = 0x809CDE90; // type:func -EnCrow_Update = 0x809CDF40; // type:func -EnCrow_OverrideLimbDraw = 0x809CE15C; // type:func -EnCrow_PostLimbDraw = 0x809CE248; // type:func -EnCrow_Draw = 0x809CE308; // type:func -EnCs_ChangeAnim = 0x809CE5E0; // type:func -EnCs_Init = 0x809CE704; // type:func -EnCs_Destroy = 0x809CE898; // type:func -EnCs_GetTalkState = 0x809CE8C4; // type:func -EnCs_GetTextId = 0x809CE9F8; // type:func -EnCs_HandleTalking = 0x809CEA7C; // type:func -EnCs_GetwaypointCount = 0x809CEBC8; // type:func -EnCs_GetPathPoint = 0x809CEBDC; // type:func -EnCs_HandleWalking = 0x809CEC70; // type:func -EnCs_Walk = 0x809CEE88; // type:func -EnCs_Wait = 0x809CF028; // type:func -EnCs_Talk = 0x809CF0B4; // type:func -EnCs_Update = 0x809CF178; // type:func -EnCs_Draw = 0x809CF2E8; // type:func -EnCs_OverrideLimbDraw = 0x809CF49C; // type:func -EnCs_PostLimbDraw = 0x809CF52C; // type:func -EnDaiku_ChangeAnim = 0x809CF810; // type:func -EnDaiku_Init = 0x809CF8C4; // type:func -EnDaiku_Destroy = 0x809CFC0C; // type:func -EnDaiku_UpdateTalking = 0x809CFC38; // type:func -EnDaiku_UpdateText = 0x809CFD54; // type:func -EnDaiku_TentIdle = 0x809D0024; // type:func -EnDaiku_Jailed = 0x809D005C; // type:func -EnDaiku_WaitFreedom = 0x809D012C; // type:func -EnDaiku_InitEscape = 0x809D0190; // type:func -EnDaiku_EscapeRotate = 0x809D0398; // type:func -EnDaiku_InitSubCamera = 0x809D0404; // type:func -EnDaiku_UpdateSubCamera = 0x809D0590; // type:func -EnDaiku_EscapeSuccess = 0x809D0648; // type:func -EnDaiku_EscapeRun = 0x809D0784; // type:func -EnDaiku_Update = 0x809D0990; // type:func -EnDaiku_Draw = 0x809D0AA8; // type:func -EnDaiku_OverrideLimbDraw = 0x809D0BD0; // type:func -EnDaiku_PostLimbDraw = 0x809D0C54; // type:func -EnDaikuKakariko_ChangeAnim = 0x809D0F50; // type:func -EnDaikuKakariko_Init = 0x809D1004; // type:func -EnDaikuKakariko_Destroy = 0x809D135C; // type:func -EnDaikuKakariko_GetTalkState = 0x809D1388; // type:func -EnDaikuKakariko_HandleTalking = 0x809D142C; // type:func -EnDaikuKakariko_Talk = 0x809D15E8; // type:func -EnDaikuKakariko_Wait = 0x809D16BC; // type:func -EnDaikuKakariko_StopRunning = 0x809D1758; // type:func -EnDaikuKakariko_Run = 0x809D1808; // type:func -EnDaikuKakariko_Update = 0x809D1B88; // type:func -EnDaikuKakariko_OverrideLimbDraw = 0x809D1D00; // type:func -EnDaikuKakariko_PostLimbDraw = 0x809D1EC0; // type:func -EnDaikuKakariko_Draw = 0x809D1F3C; // type:func -EnDekubaba_Init = 0x809D2310; // type:func -EnDekubaba_Destroy = 0x809D2554; // type:func -EnDekubaba_DisableACColliderElems = 0x809D2580; // type:func -EnDekubaba_SetupWait = 0x809D2608; // type:func -EnDekubaba_SetupGrow = 0x809D2870; // type:func -EnDekubaba_SetupRetract = 0x809D29A0; // type:func -EnDekubaba_SetupDecideLunge = 0x809D2A88; // type:func -EnDekubaba_SetupPrepareLunge = 0x809D2AE0; // type:func -EnDekubaba_SetupLunge = 0x809D2B04; // type:func -EnDekubaba_SetupPullBack = 0x809D2B48; // type:func -EnDekubaba_SetupRecover = 0x809D2BC0; // type:func -EnDekubaba_SetupHit = 0x809D2BF4; // type:func -EnDekubaba_SetupPrunedSomersault = 0x809D2CBC; // type:func -EnDekubaba_SetupShrinkDie = 0x809D2D30; // type:func -EnDekubaba_SetupStunnedVertical = 0x809D2DB0; // type:func -EnDekubaba_SetupSway = 0x809D2F34; // type:func -EnDekubaba_SetupDeadStickDrop = 0x809D2FA0; // type:func -EnDekubaba_Wait = 0x809D3040; // type:func -EnDekubaba_Grow = 0x809D30EC; // type:func -EnDekubaba_Retract = 0x809D3554; // type:func -EnDekubaba_UpdateHeadPosition = 0x809D391C; // type:func -EnDekubaba_DecideLunge = 0x809D3A20; // type:func -EnDekubaba_Lunge = 0x809D3C50; // type:func -EnDekubaba_PrepareLunge = 0x809D3ED8; // type:func -EnDekubaba_PullBack = 0x809D3FA4; // type:func -EnDekubaba_Recover = 0x809D4330; // type:func -EnDekubaba_Hit = 0x809D4428; // type:func -EnDekubaba_StunnedVertical = 0x809D4538; // type:func -EnDekubaba_Sway = 0x809D45D4; // type:func -EnDekubaba_PrunedSomersault = 0x809D46FC; // type:func -EnDekubaba_ShrinkDie = 0x809D4A60; // type:func -EnDekubaba_DeadStickDrop = 0x809D4C24; // type:func -EnDekubaba_UpdateDamage = 0x809D4C8C; // type:func -EnDekubaba_Update = 0x809D4F40; // type:func -EnDekubaba_DrawStemRetracted = 0x809D50E0; // type:func -EnDekubaba_DrawStemExtended = 0x809D51D0; // type:func -EnDekubaba_DrawStemBasePruned = 0x809D54C0; // type:func -EnDekubaba_DrawBaseShadow = 0x809D5580; // type:func -EnDekubaba_PostLimbDraw = 0x809D5674; // type:func -EnDekubaba_Draw = 0x809D56B0; // type:func -EnDekunuts_Init = 0x809D5DC0; // type:func -EnDekunuts_Destroy = 0x809D5F2C; // type:func -EnDekunuts_SetupWait = 0x809D5F68; // type:func -EnDekunuts_SetupLookAround = 0x809D5FDC; // type:func -EnDekunuts_SetupThrowNut = 0x809D6024; // type:func -EnDekunuts_SetupStand = 0x809D6068; // type:func -EnDekunuts_SetupBurrow = 0x809D60D0; // type:func -EnDekunuts_SetupBeginRun = 0x809D6120; // type:func -EnDekunuts_SetupRun = 0x809D6188; // type:func -EnDekunuts_SetupGasp = 0x809D61E0; // type:func -EnDekunuts_SetupBeDamaged = 0x809D6240; // type:func -EnDekunuts_SetupBeStunned = 0x809D631C; // type:func -EnDekunuts_SetupDie = 0x809D63B0; // type:func -EnDekunuts_Wait = 0x809D6400; // type:func -EnDekunuts_LookAround = 0x809D6664; // type:func -EnDekunuts_Stand = 0x809D66E8; // type:func -EnDekunuts_ThrowNut = 0x809D67D4; // type:func -EnDekunuts_Burrow = 0x809D692C; // type:func -EnDekunuts_BeginRun = 0x809D6A40; // type:func -EnDekunuts_Run = 0x809D6AA8; // type:func -EnDekunuts_Gasp = 0x809D6CE8; // type:func -EnDekunuts_BeDamaged = 0x809D6D50; // type:func -EnDekunuts_BeStunned = 0x809D6DA0; // type:func -EnDekunuts_Die = 0x809D6E1C; // type:func -EnDekunuts_ColliderCheck = 0x809D6F78; // type:func -EnDekunuts_Update = 0x809D709C; // type:func -EnDekunuts_OverrideLimbDraw = 0x809D7204; // type:func -EnDekunuts_Draw = 0x809D7338; // type:func -EnDh_SetupAction = 0x809D75C0; // type:func -EnDh_Init = 0x809D75CC; // type:func -EnDh_Destroy = 0x809D7708; // type:func -EnDh_SpawnDebris = 0x809D7750; // type:func -EnDh_SetupWait = 0x809D78E8; // type:func -EnDh_Wait = 0x809D799C; // type:func -EnDh_SetupWalk = 0x809D7BC0; // type:func -EnDh_Walk = 0x809D7C5C; // type:func -EnDh_SetupRetreat = 0x809D7D64; // type:func -EnDh_Retreat = 0x809D7DC8; // type:func -EnDh_SetupAttack = 0x809D7E54; // type:func -EnDh_Attack = 0x809D7EB4; // type:func -EnDh_SetupBurrow = 0x809D81C4; // type:func -EnDh_Burrow = 0x809D8248; // type:func -EnDh_SetupDamage = 0x809D83D8; // type:func -EnDh_Damage = 0x809D8458; // type:func -EnDh_SetupDeath = 0x809D8580; // type:func -EnDh_Death = 0x809D8608; // type:func -EnDh_CollisionCheck = 0x809D8738; // type:func -EnDh_Update = 0x809D8888; // type:func -EnDh_PostLimbDraw = 0x809D8A38; // type:func -EnDh_Draw = 0x809D8AC8; // type:func -EnDha_SetupAction = 0x809D90A0; // type:func -EnDha_Init = 0x809D90AC; // type:func -EnDha_Destroy = 0x809D91C8; // type:func -EnDha_SetupWait = 0x809D91F4; // type:func -EnDha_Wait = 0x809D927C; // type:func -EnDha_SetupTakeDamage = 0x809D978C; // type:func -EnDha_TakeDamage = 0x809D97B8; // type:func -EnDha_SetupDeath = 0x809D9880; // type:func -EnDha_Die = 0x809D98F0; // type:func -EnDha_UpdateHealth = 0x809D9AAC; // type:func -EnDha_Update = 0x809D9BA0; // type:func -EnDha_OverrideLimbDraw = 0x809D9C48; // type:func -EnDha_PostLimbDraw = 0x809D9CE8; // type:func -EnDha_Draw = 0x809D9E00; // type:func -EnDivingGame_Init = 0x809DA0A0; // type:func -EnDivingGame_Destroy = 0x809DA1BC; // type:func -EnDivingGame_SpawnRuppy = 0x809DA1FC; // type:func -EnDivingGame_HasMinigameFinished = 0x809DA328; // type:func -func_809EDCB0 = 0x809DA4D4; // type:func -EnDivingGame_Talk = 0x809DA570; // type:func -EnDivingGame_HandlePlayChoice = 0x809DA700; // type:func -func_809EE048 = 0x809DA86C; // type:func -func_809EE0FC = 0x809DA920; // type:func -func_809EE194 = 0x809DA9B8; // type:func -EnDivingGame_SetupRupeeThrow = 0x809DAA18; // type:func -EnDivingGame_RupeeThrow = 0x809DAC2C; // type:func -EnDivingGame_SetupUnderwaterViewCs = 0x809DAEEC; // type:func -func_809EE780 = 0x809DAFA4; // type:func -func_809EE800 = 0x809DB024; // type:func -func_809EE8F0 = 0x809DB114; // type:func -func_809EE96C = 0x809DB194; // type:func -func_809EEA00 = 0x809DB228; // type:func -func_809EEA90 = 0x809DB2B8; // type:func -func_809EEAF8 = 0x809DB324; // type:func -EnDivingGame_Update = 0x809DB3B4; // type:func -EnDivingGame_EmptyDList = 0x809DB5E0; // type:func -EnDivingGame_OverrideLimbDraw = 0x809DB604; // type:func -EnDivingGame_Draw = 0x809DB764; // type:func -EnDns_Init = 0x809DBA50; // type:func -EnDns_Destroy = 0x809DBBC4; // type:func -EnDns_ChangeAnim = 0x809DBBF0; // type:func -EnDns_CanBuyDekuNuts = 0x809DBC78; // type:func -EnDns_CanBuyDekuSticks = 0x809DBD30; // type:func -EnDns_CanBuyPrice = 0x809DBDE8; // type:func -EnDns_CanBuyDekuSeeds = 0x809DBE18; // type:func -EnDns_CanBuyDekuShield = 0x809DBEE0; // type:func -EnDns_CanBuyBombs = 0x809DBF34; // type:func -EnDns_CanBuyArrows = 0x809DBFD4; // type:func -EnDns_CanBuyBottle = 0x809DC084; // type:func -EnDns_PayPrice = 0x809DC0DC; // type:func -EnDns_PayForDekuNuts = 0x809DC110; // type:func -EnDns_PayForHeartPiece = 0x809DC144; // type:func -EnDns_PayForBombs = 0x809DC18C; // type:func -EnDns_PayForArrows = 0x809DC1C0; // type:func -EnDns_PayForDekuStickUpgrade = 0x809DC1F4; // type:func -EnDns_PayForDekuNutUpgrade = 0x809DC23C; // type:func -EnDns_SetupIdle = 0x809DC284; // type:func -EnDns_Idle = 0x809DC2C8; // type:func -EnDns_Talk = 0x809DC39C; // type:func -EnDns_OfferSaleItem = 0x809DC4D4; // type:func -EnDns_SetupSale = 0x809DC5EC; // type:func -EnDns_Sale = 0x809DC658; // type:func -EnDns_SetupBurrow = 0x809DC6A4; // type:func -EnDns_SetupNoSaleBurrow = 0x809DC798; // type:func -EnDns_Burrow = 0x809DC810; // type:func -EnDns_PostBurrow = 0x809DC88C; // type:func -EnDns_Update = 0x809DC990; // type:func -EnDns_Draw = 0x809DCA80; // type:func -EnDntDemo_Destroy = 0x809DCDE0; // type:func -EnDntDemo_Init = 0x809DCDF0; // type:func -EnDntDemo_Judge = 0x809DCF60; // type:func -EnDntDemo_Results = 0x809DD580; // type:func -EnDntDemo_Prize = 0x809DD7F4; // type:func -EnDntDemo_Update = 0x809DD8D0; // type:func -EnDntJiji_Init = 0x809DDB00; // type:func -EnDntJiji_Destroy = 0x809DDBE0; // type:func -EnDntJiji_SetFlower = 0x809DDC0C; // type:func -EnDntJiji_SetupWait = 0x809DDC4C; // type:func -EnDntJiji_Wait = 0x809DDCFC; // type:func -EnDntJiji_SetupUp = 0x809DDDB4; // type:func -EnDntJiji_Up = 0x809DDE98; // type:func -EnDntJiji_SetupUnburrow = 0x809DDF08; // type:func -EnDntJiji_Unburrow = 0x809DDFEC; // type:func -EnDntJiji_SetupWalk = 0x809DE074; // type:func -EnDntJiji_Walk = 0x809DE124; // type:func -EnDntJiji_SetupBurrow = 0x809DE260; // type:func -EnDntJiji_Burrow = 0x809DE350; // type:func -EnDntJiji_SetupCower = 0x809DE37C; // type:func -EnDntJiji_Cower = 0x809DE4BC; // type:func -EnDntJiji_SetupTalk = 0x809DE560; // type:func -EnDntJiji_Talk = 0x809DE5F4; // type:func -EnDntJiji_SetupGivePrize = 0x809DE6C0; // type:func -EnDntJiji_GivePrize = 0x809DE730; // type:func -EnDntJiji_SetupHide = 0x809DE840; // type:func -EnDntJiji_Hide = 0x809DE8D8; // type:func -EnDntJiji_SetupReturn = 0x809DE944; // type:func -EnDntJiji_Return = 0x809DE9F4; // type:func -EnDntJiji_Update = 0x809DEB6C; // type:func -EnDntJiji_Draw = 0x809DED44; // type:func -EnDntNomal_Init = 0x809DF020; // type:func -EnDntNomal_Destroy = 0x809DF148; // type:func -EnDntNomal_WaitForObject = 0x809DF194; // type:func -EnDntNomal_SetFlower = 0x809DF2E4; // type:func -EnDntNomal_SetupTargetWait = 0x809DF33C; // type:func -EnDntNomal_TargetWait = 0x809DF3E4; // type:func -EnDntNomal_SetupTargetUnburrow = 0x809DF6C0; // type:func -EnDntNomal_TargetUnburrow = 0x809DF7DC; // type:func -EnDntNomal_SetupTargetWalk = 0x809DF848; // type:func -EnDntNomal_TargetWalk = 0x809DF8EC; // type:func -EnDntNomal_TargetFacePlayer = 0x809DF9D8; // type:func -EnDntNomal_SetupTargetTalk = 0x809DFA8C; // type:func -EnDntNomal_TargetTalk = 0x809DFB38; // type:func -EnDntNomal_SetupTargetGivePrize = 0x809DFBE0; // type:func -EnDntNomal_TargetGivePrize = 0x809DFC78; // type:func -EnDntNomal_TargetReturn = 0x809DFDE0; // type:func -EnDntNomal_TargetBurrow = 0x809DFFB0; // type:func -EnDntNomal_SetupStageWait = 0x809E001C; // type:func -EnDntNomal_StageWait = 0x809E00D4; // type:func -EnDntNomal_SetupStageUp = 0x809E0100; // type:func -EnDntNomal_StageUp = 0x809E020C; // type:func -EnDntNomal_SetupStageUnburrow = 0x809E0440; // type:func -EnDntNomal_StageUnburrow = 0x809E0534; // type:func -EnDntNomal_SetupStageCelebrate = 0x809E060C; // type:func -EnDntNomal_StageCelebrate = 0x809E06B4; // type:func -EnDntNomal_SetupStageDance = 0x809E08BC; // type:func -EnDntNomal_StageDance = 0x809E09CC; // type:func -EnDntNomal_SetupStageHide = 0x809E0B30; // type:func -EnDntNomal_StageHide = 0x809E0C0C; // type:func -EnDntNomal_StageAttackHide = 0x809E0DD0; // type:func -EnDntNomal_SetupStageAttack = 0x809E0E04; // type:func -EnDntNomal_StageAttack = 0x809E0ED0; // type:func -EnDntNomal_StageSetupReturn = 0x809E1194; // type:func -EnDntNomal_StageReturn = 0x809E1238; // type:func -EnDntNomal_Update = 0x809E133C; // type:func -EnDntNomal_OverrideLimbDraw = 0x809E1600; // type:func -EnDntNomal_PostLimbDraw = 0x809E16B0; // type:func -EnDntNomal_DrawStageScrub = 0x809E1738; // type:func -EnDntNomal_DrawTargetScrub = 0x809E1928; // type:func -EnDodojr_Init = 0x809E1E20; // type:func -EnDodojr_Destroy = 0x809E1F08; // type:func -EnDodojr_DoSwallowedBombEffects = 0x809E1F34; // type:func -EnDodojr_SpawnLargeDust = 0x809E1F78; // type:func -EnDodojr_SpawnSmallDust = 0x809E2198; // type:func -EnDodojr_UpdateBounces = 0x809E2318; // type:func -EnDodojr_SetupCrawlTowardsTarget = 0x809E23FC; // type:func -EnDodojr_SetupFlipBounce = 0x809E2484; // type:func -EnDodojr_SetupSwallowedBombDeathSequence = 0x809E2528; // type:func -EnDodojr_SetupJumpAttackBounce = 0x809E2598; // type:func -EnDodojr_SetupDespawn = 0x809E261C; // type:func -EnDodojr_SetupEatBomb = 0x809E2688; // type:func -EnDodojr_CheckNearbyBombs = 0x809E2704; // type:func -EnDodojr_TryEatBomb = 0x809E2830; // type:func -EnDodojr_UpdateCrawl = 0x809E28B4; // type:func -EnDodojr_IsPlayerWithinAttackRange = 0x809E2AC8; // type:func -EnDodojr_SetupStandardDeathBounce = 0x809E2AF8; // type:func -EnDodojr_CheckDamaged = 0x809E2B44; // type:func -EnDodojr_UpdateCollider = 0x809E2D00; // type:func -EnDodojr_WaitUnderground = 0x809E2E10; // type:func -EnDodojr_EmergeFromGround = 0x809E2F28; // type:func -EnDodojr_CrawlTowardsTarget = 0x809E2FF0; // type:func -EnDodojr_EatBomb = 0x809E30F4; // type:func -EnDodojr_SwallowBomb = 0x809E31A4; // type:func -EnDodojr_SwallowedBombDeathBounce = 0x809E3214; // type:func -EnDodojr_SwallowedBombDeathSequence = 0x809E32B4; // type:func -EnDodojr_StunnedBounce = 0x809E32D4; // type:func -EnDodojr_Stunned = 0x809E3354; // type:func -EnDodojr_JumpAttackBounce = 0x809E3404; // type:func -EnDodojr_Despawn = 0x809E346C; // type:func -EnDodojr_StandardDeathBounce = 0x809E3524; // type:func -EnDodojr_DeathSequence = 0x809E35AC; // type:func -EnDodojr_DropItem = 0x809E3658; // type:func -EnDodojr_WaitFreezeFrames = 0x809E36BC; // type:func -EnDodojr_Update = 0x809E3704; // type:func -EnDodojr_OverrideLimbDraw = 0x809E37C4; // type:func -EnDodojr_PostLimbDraw = 0x809E3870; // type:func -EnDodojr_Draw = 0x809E3888; // type:func -EnDodongo_SetupAction = 0x809E3CC0; // type:func -EnDodongo_SpawnBombSmoke = 0x809E3CCC; // type:func -EnDodongo_Init = 0x809E41BC; // type:func -EnDodongo_Destroy = 0x809E43E4; // type:func -EnDodongo_SetupIdle = 0x809E4444; // type:func -EnDodongo_SetupWalk = 0x809E44AC; // type:func -EnDodongo_SetupBreatheFire = 0x809E4550; // type:func -EnDodongo_SetupEndBreatheFire = 0x809E45A4; // type:func -EnDodongo_SetupSwallowBomb = 0x809E45F4; // type:func -EnDodongo_SetupStunned = 0x809E4674; // type:func -EnDodongo_Idle = 0x809E470C; // type:func -EnDodongo_EndBreatheFire = 0x809E4784; // type:func -EnDodongo_BreatheFire = 0x809E47D4; // type:func -EnDodongo_SwallowBomb = 0x809E49AC; // type:func -EnDodongo_Walk = 0x809E4EA4; // type:func -EnDodongo_SetupSweepTail = 0x809E51E4; // type:func -EnDodongo_SweepTail = 0x809E5244; // type:func -EnDodongo_SetupDeath = 0x809E5508; // type:func -EnDodongo_Death = 0x809E5580; // type:func -EnDodongo_Stunned = 0x809E56CC; // type:func -EnDodongo_CollisionCheck = 0x809E5730; // type:func -EnDodongo_UpdateQuad = 0x809E5858; // type:func -EnDodongo_Update = 0x809E59C4; // type:func -EnDodongo_OverrideLimbDraw = 0x809E5B90; // type:func -EnDodongo_PostLimbDraw = 0x809E5BE4; // type:func -EnDodongo_Draw = 0x809E6020; // type:func -EnDodongo_ShiftVecRadial = 0x809E6110; // type:func -EnDodongo_AteBomb = 0x809E6170; // type:func -EnDog_PlayWalkSFX = 0x809E6A60; // type:func -EnDog_PlayRunSFX = 0x809E6AC8; // type:func -EnDog_PlayBarkSFX = 0x809E6B30; // type:func -EnDog_PlayAnimAndSFX = 0x809E6B98; // type:func -EnDog_CanFollow = 0x809E6D30; // type:func -EnDog_UpdateWaypoint = 0x809E6DB4; // type:func -EnDog_Orient = 0x809E6E40; // type:func -EnDog_Init = 0x809E6EE4; // type:func -EnDog_Destroy = 0x809E7134; // type:func -EnDog_FollowPath = 0x809E7160; // type:func -EnDog_ChooseMovement = 0x809E72F8; // type:func -EnDog_FollowPlayer = 0x809E73E8; // type:func -EnDog_RunAway = 0x809E7568; // type:func -EnDog_FaceLink = 0x809E760C; // type:func -EnDog_Wait = 0x809E7714; // type:func -EnDog_Update = 0x809E776C; // type:func -EnDog_OverrideLimbDraw = 0x809E7838; // type:func -EnDog_PostLimbDraw = 0x809E7854; // type:func -EnDog_Draw = 0x809E786C; // type:func -EnDoor_Init = 0x809E7C10; // type:func -EnDoor_Destroy = 0x809E7E2C; // type:func -EnDoor_SetupType = 0x809E7E60; // type:func -EnDoor_Idle = 0x809E8018; // type:func -EnDoor_WaitForCheck = 0x809E82D0; // type:func -EnDoor_Check = 0x809E831C; // type:func -EnDoor_AjarWait = 0x809E8354; // type:func -EnDoor_AjarOpen = 0x809E8388; // type:func -EnDoor_AjarClose = 0x809E83F8; // type:func -EnDoor_Open = 0x809E8440; // type:func -EnDoor_Update = 0x809E8694; // type:func -EnDoor_OverrideLimbDraw = 0x809E86B8; // type:func -EnDoor_Draw = 0x809E87EC; // type:func -EnDs_Init = 0x809E8A50; // type:func -EnDs_Destroy = 0x809E8B20; // type:func -EnDs_Talk = 0x809E8B30; // type:func -EnDs_TalkNoEmptyBottle = 0x809E8B80; // type:func -EnDs_TalkAfterGiveOddPotion = 0x809E8BEC; // type:func -EnDs_DisplayOddPotionText = 0x809E8C48; // type:func -EnDs_GiveOddPotion = 0x809E8CA8; // type:func -EnDs_TalkAfterBrewOddPotion = 0x809E8D14; // type:func -EnDs_BrewOddPotion3 = 0x809E8D94; // type:func -EnDs_BrewOddPotion2 = 0x809E8E38; // type:func -EnDs_BrewOddPotion1 = 0x809E8E8C; // type:func -EnDs_OfferOddPotion = 0x809E8F2C; // type:func -EnDs_CheckRupeesAndBottle = 0x809E8FF8; // type:func -EnDs_GiveBluePotion = 0x809E9048; // type:func -EnDs_OfferBluePotion = 0x809E90AC; // type:func -EnDs_Wait = 0x809E91E4; // type:func -EnDs_Update = 0x809E9368; // type:func -EnDs_OverrideLimbDraw = 0x809E9470; // type:func -EnDs_PostLimbDraw = 0x809E94B8; // type:func -EnDs_Draw = 0x809E94F8; // type:func -EnDu_SetupAction = 0x809E9670; // type:func -EnDu_GetTextId = 0x809E967C; // type:func -EnDu_UpdateTalkState = 0x809E9720; // type:func -func_809FDDB4 = 0x809E97FC; // type:func -func_809FDE24 = 0x809E986C; // type:func -func_809FDE9C = 0x809E98E4; // type:func -func_809FDFC0 = 0x809E9A08; // type:func -func_809FE000 = 0x809E9A4C; // type:func -func_809FE040 = 0x809E9A90; // type:func -func_809FE104 = 0x809E9B54; // type:func -EnDu_Init = 0x809E9BFC; // type:func -EnDu_Destroy = 0x809E9DCC; // type:func -func_809FE3B4 = 0x809E9E0C; // type:func -func_809FE3C0 = 0x809E9E1C; // type:func -func_809FE4A4 = 0x809E9F04; // type:func -func_809FE638 = 0x809EA09C; // type:func -func_809FE6CC = 0x809EA134; // type:func -func_809FE740 = 0x809EA1A8; // type:func -func_809FE798 = 0x809EA200; // type:func -func_809FE890 = 0x809EA2F8; // type:func -func_809FEB08 = 0x809EA574; // type:func -func_809FEC14 = 0x809EA680; // type:func -func_809FEC70 = 0x809EA6DC; // type:func -func_809FECE4 = 0x809EA754; // type:func -EnDu_Update = 0x809EA78C; // type:func -EnDu_OverrideLimbDraw = 0x809EA918; // type:func -EnDu_PostLimbDraw = 0x809EAA94; // type:func -EnDu_Draw = 0x809EAAF0; // type:func -EnDyExtra_Destroy = 0x809EB100; // type:func -EnDyExtra_Init = 0x809EB110; // type:func -EnDyExtra_WaitForTrigger = 0x809EB184; // type:func -EnDyExtra_FallAndKill = 0x809EB218; // type:func -EnDyExtra_Update = 0x809EB2D0; // type:func -EnDyExtra_Draw = 0x809EB33C; // type:func -EnEg_PlayVoidOutSFX = 0x809EB6A0; // type:func -EnEg_Destroy = 0x809EB6C0; // type:func -EnEg_Init = 0x809EB6D0; // type:func -func_809FFDC8 = 0x809EB6E0; // type:func -EnEg_Update = 0x809EB778; // type:func -EnEg_Draw = 0x809EB7C0; // type:func -EnEiyer_Init = 0x809EB850; // type:func -EnEiyer_Destroy = 0x809EBA30; // type:func -EnEiyer_RotateAroundHome = 0x809EBA5C; // type:func -EnEiyer_SetupAppearFromGround = 0x809EBACC; // type:func -EnEiyer_SetupUnderground = 0x809EBC0C; // type:func -EnEiyer_SetupInactive = 0x809EBC6C; // type:func -EnEiyer_SetupAmbush = 0x809EBC98; // type:func -EnEiyer_SetupGlide = 0x809EBD78; // type:func -EnEiyer_SetupStartAttack = 0x809EBDF4; // type:func -EnEiyer_SetupDiveAttack = 0x809EBE08; // type:func -EnEiyer_SetupLand = 0x809EBE50; // type:func -EnEiyer_SetupHurt = 0x809EBEC8; // type:func -EnEiyer_SetupDie = 0x809EBF78; // type:func -EnEiyer_SetupDead = 0x809EC038; // type:func -EnEiyer_SetupStunned = 0x809EC064; // type:func -EnEiyer_AppearFromGround = 0x809EC128; // type:func -EnEiyer_CheckPlayerCollision = 0x809EC178; // type:func -EnEiyer_CircleUnderground = 0x809EC1A8; // type:func -EnEiyer_WanderUnderground = 0x809EC224; // type:func -EnEiyer_Inactive = 0x809EC358; // type:func -EnEiyer_Ambush = 0x809EC3EC; // type:func -EnEiyer_Glide = 0x809EC544; // type:func -EnEiyer_StartAttack = 0x809EC760; // type:func -EnEiyer_DiveAttack = 0x809EC85C; // type:func -EnEiyer_Land = 0x809EC8E8; // type:func -EnEiyer_Hurt = 0x809EC9DC; // type:func -EnEiyer_Die = 0x809ECB14; // type:func -EnEiyer_Dead = 0x809ECBC8; // type:func -EnEiyer_Stunned = 0x809ECC48; // type:func -EnEiyer_UpdateDamage = 0x809ECD00; // type:func -EnEiyer_Update = 0x809ECE48; // type:func -EnEiyer_OverrideLimbDraw = 0x809ED06C; // type:func -EnEiyer_Draw = 0x809ED0C0; // type:func -EnElf_SetupAction = 0x809ED4B0; // type:func -func_80A01C38 = 0x809ED4BC; // type:func -func_80A01F90 = 0x809ED814; // type:func -func_80A01FE0 = 0x809ED868; // type:func -func_80A020A4 = 0x809ED930; // type:func -func_80A0214C = 0x809ED9DC; // type:func -func_80A0232C = 0x809EDBBC; // type:func -EnElf_GetColorValue = 0x809EDC34; // type:func -EnElf_Init = 0x809EDCA4; // type:func -func_80A0299C = 0x809EE210; // type:func -func_80A029A8 = 0x809EE220; // type:func -EnElf_Destroy = 0x809EE248; // type:func -func_80A02A20 = 0x809EE298; // type:func -func_80A02AA4 = 0x809EE31C; // type:func -func_80A02B38 = 0x809EE3B0; // type:func -func_80A02BD8 = 0x809EE44C; // type:func -func_80A02C98 = 0x809EE50C; // type:func -func_80A02E30 = 0x809EE6A4; // type:func -func_80A02EC0 = 0x809EE730; // type:func -func_80A02F2C = 0x809EE79C; // type:func -func_80A03018 = 0x809EE888; // type:func -func_80A03148 = 0x809EE9BC; // type:func -func_80A0329C = 0x809EEB14; // type:func -func_80A0353C = 0x809EEDB8; // type:func -func_80A03604 = 0x809EEE80; // type:func -func_80A03610 = 0x809EEE90; // type:func -func_80A03814 = 0x809EF098; // type:func -func_80A03990 = 0x809EF218; // type:func -func_80A03AB0 = 0x809EF33C; // type:func -EnElf_UpdateLights = 0x809EF3A0; // type:func -func_80A03CF8 = 0x809EF574; // type:func -EnElf_ChangeColor = 0x809EFC0C; // type:func -func_80A04414 = 0x809EFC98; // type:func -func_80A0461C = 0x809EFEA4; // type:func -EnElf_SpawnSparkles = 0x809F0240; // type:func -func_80A04D90 = 0x809F0620; // type:func -func_80A04DE4 = 0x809F0674; // type:func -func_80A04F94 = 0x809F0828; // type:func -func_80A05040 = 0x809F08D8; // type:func -func_80A05114 = 0x809F09B4; // type:func -func_80A05188 = 0x809F0A30; // type:func -func_80A05208 = 0x809F0AB8; // type:func -func_80A052F4 = 0x809F0BAC; // type:func -func_80A053F0 = 0x809F0CB0; // type:func -EnElf_Update = 0x809F0F2C; // type:func -EnElf_OverrideLimbDraw = 0x809F0F88; // type:func -EnElf_Draw = 0x809F10AC; // type:func -EnElf_GetCuePos = 0x809F1724; // type:func -EnEncount1_Init = 0x809F1E70; // type:func -EnEncount1_SpawnLeevers = 0x809F1FA4; // type:func -EnEncount1_SpawnTektites = 0x809F2300; // type:func -EnEncount1_SpawnStalchildOrWolfos = 0x809F2498; // type:func -EnEncount1_Update = 0x809F28EC; // type:func -EnEncount2_Init = 0x809F29D0; // type:func -EnEncount2_Wait = 0x809F2A44; // type:func -EnEncount2_SpawnRocks = 0x809F2C9C; // type:func -EnEncount2_Update = 0x809F3264; // type:func -EnEncount2_Draw = 0x809F3630; // type:func -EnEncount2_SpawnEffect = 0x809F3650; // type:func -EnEncount2_UpdateEffects = 0x809F3704; // type:func -EnEncount2_DrawEffects = 0x809F38D8; // type:func -EnExItem_Destroy = 0x809F3C00; // type:func -EnExItem_Init = 0x809F3C10; // type:func -EnExItem_WaitForObject = 0x809F3D6C; // type:func -EnExItem_BowlPrize = 0x809F40E8; // type:func -EnExItem_SetupBowlCounter = 0x809F42D4; // type:func -EnExItem_BowlCounter = 0x809F42FC; // type:func -EnExItem_ExitChest = 0x809F4334; // type:func -EnExItem_FairyMagic = 0x809F439C; // type:func -EnExItem_TargetPrizeApproach = 0x809F43B4; // type:func -EnExItem_TargetPrizeGive = 0x809F4608; // type:func -EnExItem_TargetPrizeFinish = 0x809F4694; // type:func -EnExItem_Update = 0x809F46F4; // type:func -EnExItem_Draw = 0x809F4748; // type:func -EnExItem_DrawItems = 0x809F47F8; // type:func -EnExItem_DrawHeartPiece = 0x809F485C; // type:func -EnExItem_DrawMagic = 0x809F4890; // type:func -EnExItem_DrawKey = 0x809F48D8; // type:func -EnExItem_DrawRupee = 0x809F49C8; // type:func -EnExRuppy_Init = 0x809F4D80; // type:func -EnExRuppy_Destroy = 0x809F5158; // type:func -EnExRuppy_SpawnSparkles = 0x809F5168; // type:func -EnExRuppy_DropIntoWater = 0x809F5384; // type:func -EnExRuppy_EnterWater = 0x809F5464; // type:func -EnExRuppy_Sink = 0x809F55D0; // type:func -EnExRuppy_WaitInGame = 0x809F56D0; // type:func -EnExRuppy_Kill = 0x809F5828; // type:func -EnExRuppy_WaitToBlowUp = 0x809F586C; // type:func -EnExRuppy_WaitAsCollectible = 0x809F5998; // type:func -EnExRuppy_GalleryTarget = 0x809F5A1C; // type:func -EnExRuppy_Update = 0x809F5A7C; // type:func -EnExRuppy_Draw = 0x809F5B08; // type:func -EnFd_SpawnCore = 0x809F5E40; // type:func -EnFd_SpawnChildFire = 0x809F5F38; // type:func -EnFd_SpawnDot = 0x809F6058; // type:func -EnFd_CheckHammer = 0x809F61C4; // type:func -EnFd_ColliderCheck = 0x809F6260; // type:func -EnFd_CanSeeActor = 0x809F63F8; // type:func -EnFd_FindBomb = 0x809F6508; // type:func -EnFd_FindPotentialTheat = 0x809F65C8; // type:func -EnFd_GetPosAdjAroundCircle = 0x809F663C; // type:func -EnFd_ShouldStopRunning = 0x809F6704; // type:func -EnFd_Fade = 0x809F6838; // type:func -EnFd_Init = 0x809F6948; // type:func -EnFd_Destroy = 0x809F6A84; // type:func -EnFd_Reappear = 0x809F6AB0; // type:func -EnFd_SpinAndGrow = 0x809F6B40; // type:func -EnFd_JumpToGround = 0x809F6C14; // type:func -EnFd_Land = 0x809F6C90; // type:func -EnFd_SpinAndSpawnFire = 0x809F6D70; // type:func -EnFd_Run = 0x809F6F90; // type:func -EnFd_WaitForCore = 0x809F71F0; // type:func -EnFd_Update = 0x809F7268; // type:func -EnFd_OverrideLimbDraw = 0x809F7464; // type:func -EnFd_PostLimbDraw = 0x809F74A0; // type:func -EnFd_Draw = 0x809F77CC; // type:func -EnFd_SpawnEffect = 0x809F7B78; // type:func -EnFd_UpdateEffectsFlames = 0x809F7C68; // type:func -EnFd_UpdateEffectsDots = 0x809F7D80; // type:func -EnFd_DrawEffectsFlames = 0x809F7E9C; // type:func -EnFd_DrawEffectsDots = 0x809F8270; // type:func -EnFdFire_UpdatePos = 0x809F8AE0; // type:func -EnFdFire_CheckCollider = 0x809F8BA8; // type:func -EnFdFire_Init = 0x809F8C0C; // type:func -EnFdFire_Destroy = 0x809F8D14; // type:func -func_80A0E70C = 0x809F8D40; // type:func -EnFdFire_WaitToDie = 0x809F8E7C; // type:func -EnFdFire_DanceTowardsPlayer = 0x809F8EB8; // type:func -EnFdFire_Disappear = 0x809F9068; // type:func -EnFdFire_Update = 0x809F911C; // type:func -EnFdFire_Draw = 0x809F9218; // type:func -EnFhgFire_SetUpdate = 0x809F97F0; // type:func -EnFhgFire_Init = 0x809F97FC; // type:func -EnFhgFire_Destroy = 0x809F9C0C; // type:func -EnFhgFire_LightningStrike = 0x809F9C7C; // type:func -EnFhgFire_LightningTrail = 0x809FA014; // type:func -EnFhgFire_LightningShock = 0x809FA1B4; // type:func -EnFhgFire_LightningBurst = 0x809FA2F8; // type:func -EnFhgFire_SpearLight = 0x809FA574; // type:func -EnFhgFire_EnergyBall = 0x809FA768; // type:func -EnFhgFire_PhantomWarp = 0x809FB414; // type:func -EnFhgFire_Update = 0x809FB5D0; // type:func -EnFhgFire_Draw = 0x809FB620; // type:func -EnFireRock_Init = 0x809FBE90; // type:func -EnFireRock_Destroy = 0x809FC280; // type:func -EnFireRock_Fall = 0x809FC2E4; // type:func -EnFireRock_SpawnMoreBrokenPieces = 0x809FC638; // type:func -FireRock_WaitSpawnRocksFromCeiling = 0x809FC7B8; // type:func -FireRock_WaitOnFloor = 0x809FC8A8; // type:func -EnFireRock_Update = 0x809FC98C; // type:func -EnFireRock_Draw = 0x809FCC38; // type:func -EnFirefly_Extinguish = 0x809FCFA0; // type:func -EnFirefly_Ignite = 0x809FCFCC; // type:func -EnFirefly_Init = 0x809FD00C; // type:func -EnFirefly_Destroy = 0x809FD204; // type:func -EnFirefly_SetupFlyIdle = 0x809FD230; // type:func -EnFirefly_SetupFall = 0x809FD2DC; // type:func -EnFirefly_SetupDie = 0x809FD380; // type:func -EnFirefly_SetupRebound = 0x809FD3A4; // type:func -EnFirefly_SetupDiveAttack = 0x809FD3E0; // type:func -EnFirefly_SetupFlyAway = 0x809FD450; // type:func -EnFirefly_SetupStunned = 0x809FD480; // type:func -EnFirefly_SetupFrozenFall = 0x809FD4F0; // type:func -EnFirefly_SetupPerch = 0x809FD690; // type:func -EnFirefly_SetupDisturbDiveAttack = 0x809FD6B4; // type:func -EnFirefly_ReturnToPerch = 0x809FD6F0; // type:func -EnFirefly_SeekTorch = 0x809FD80C; // type:func -EnFirefly_FlyIdle = 0x809FD95C; // type:func -EnFirefly_Fall = 0x809FDBEC; // type:func -EnFirefly_Die = 0x809FDCBC; // type:func -EnFirefly_DiveAttack = 0x809FDD38; // type:func -EnFirefly_Rebound = 0x809FDF4C; // type:func -EnFirefly_FlyAway = 0x809FDFE0; // type:func -EnFirefly_Stunned = 0x809FE148; // type:func -EnFirefly_FrozenFall = 0x809FE1EC; // type:func -EnFirefly_Perch = 0x809FE24C; // type:func -EnFirefly_DisturbDiveAttack = 0x809FE30C; // type:func -EnFirefly_Combust = 0x809FE3E4; // type:func -EnFirefly_UpdateDamage = 0x809FE464; // type:func -EnFirefly_Update = 0x809FE614; // type:func -EnFirefly_OverrideLimbDraw = 0x809FE8BC; // type:func -EnFirefly_PostLimbDraw = 0x809FE910; // type:func -EnFirefly_Draw = 0x809FECA0; // type:func -EnFirefly_DrawInvisible = 0x809FED54; // type:func -EnFish_XZDistanceSquared = 0x809FF110; // type:func -EnFish_SetInWaterAnimation = 0x809FF140; // type:func -EnFish_SetOutOfWaterAnimation = 0x809FF1A4; // type:func -EnFish_BeginRespawn = 0x809FF208; // type:func -EnFish_SetCutsceneData = 0x809FF23C; // type:func -EnFish_ClearCutsceneData = 0x809FF2D4; // type:func -EnFish_Init = 0x809FF2FC; // type:func -EnFish_Destroy = 0x809FF440; // type:func -EnFish_SetYOffset = 0x809FF46C; // type:func -EnFish_InBottleRange = 0x809FF524; // type:func -EnFish_CheckXZDistanceToPlayer = 0x809FF614; // type:func -EnFish_Respawning_SetupSlowDown = 0x809FF644; // type:func -EnFish_Respawning_SlowDown = 0x809FF69C; // type:func -EnFish_Respawning_SetupFollowChild = 0x809FF790; // type:func -EnFish_Respawning_FollowChild = 0x809FF7E8; // type:func -EnFish_Respawning_SetupFleePlayer = 0x809FF97C; // type:func -EnFish_Respawning_FleePlayer = 0x809FF9D4; // type:func -EnFish_Respawning_SetupApproachPlayer = 0x809FFBC4; // type:func -EnFish_Respawning_ApproachPlayer = 0x809FFC1C; // type:func -EnFish_Dropped_SetupFall = 0x809FFDE0; // type:func -EnFish_Dropped_Fall = 0x809FFE40; // type:func -EnFish_Dropped_SetupFlopOnGround = 0x809FFF48; // type:func -EnFish_Dropped_FlopOnGround = 0x80A0008C; // type:func -EnFish_Dropped_SetupSwimAway = 0x80A00268; // type:func -EnFish_Dropped_SwimAway = 0x80A002DC; // type:func -EnFish_Unique_SetupSwimIdle = 0x80A004A4; // type:func -EnFish_Unique_SwimIdle = 0x80A004FC; // type:func -EnFish_Cutscene_FlopOnGround = 0x80A00724; // type:func -EnFish_Cutscene_WiggleFlyingThroughAir = 0x80A00854; // type:func -EnFish_UpdateCutscene = 0x80A008F0; // type:func -EnFish_OrdinaryUpdate = 0x80A00AB0; // type:func -EnFish_RespawningUpdate = 0x80A00C34; // type:func -EnFish_Update = 0x80A00D48; // type:func -EnFish_Draw = 0x80A00DF4; // type:func -EnFloormas_Init = 0x80A01220; // type:func -EnFloormas_Destroy = 0x80A01434; // type:func -EnFloormas_MakeInvulnerable = 0x80A01460; // type:func -EnFloormas_MakeVulnerable = 0x80A01484; // type:func -EnFloormas_SetupBigDecideAction = 0x80A014A0; // type:func -EnFloormas_SetupStand = 0x80A014E8; // type:func -EnFloormas_SetupBigWalk = 0x80A0152C; // type:func -EnFloormas_SetupBigStopWalk = 0x80A015B8; // type:func -EnFloormas_SetupRun = 0x80A01600; // type:func -EnFloormas_SetupTurn = 0x80A01630; // type:func -EnFloormas_SetupHover = 0x80A01760; // type:func -EnFloormas_SetupCharge = 0x80A01838; // type:func -EnFloormas_SetupLand = 0x80A0186C; // type:func -EnFloormas_SetupSplit = 0x80A01918; // type:func -EnFloormas_SetupSmallWalk = 0x80A01A78; // type:func -EnFloormas_SetupSmallDecideAction = 0x80A01AC8; // type:func -EnFloormas_SetupSmallShrink = 0x80A01B28; // type:func -EnFloormas_SetupSmallFollowerJumpAtLeader = 0x80A01C00; // type:func -EnFloormas_SetupJumpAtLink = 0x80A01C6C; // type:func -EnFloormas_SetupGrabLink = 0x80A01CD8; // type:func -EnFloormas_SetupMerge = 0x80A01EAC; // type:func -EnFloormas_SetupSmallWait = 0x80A01F04; // type:func -EnFloormas_SetupTakeDamage = 0x80A01F88; // type:func -EnFloormas_SetupRecover = 0x80A02044; // type:func -EnFloormas_SetupFreeze = 0x80A02098; // type:func -EnFloormas_Die = 0x80A02198; // type:func -EnFloormas_BigDecideAction = 0x80A02234; // type:func -EnFloormas_Stand = 0x80A022F8; // type:func -EnFloormas_BigWalk = 0x80A02384; // type:func -EnFloormas_BigStopWalk = 0x80A024E0; // type:func -EnFloormas_Run = 0x80A0251C; // type:func -EnFloormas_Turn = 0x80A02628; // type:func -EnFloormas_Hover = 0x80A027EC; // type:func -EnFloormas_Slide = 0x80A02870; // type:func -EnFloormas_Charge = 0x80A029B0; // type:func -EnFloormas_Land = 0x80A02AA0; // type:func -EnFloormas_Split = 0x80A02C88; // type:func -EnFloormas_SmallWalk = 0x80A02D10; // type:func -EnFloormas_SmallDecideAction = 0x80A02E00; // type:func -EnFloormas_SmallShrink = 0x80A02F68; // type:func -EnFloormas_JumpAtLink = 0x80A02FC0; // type:func -EnFloormas_GrabLink = 0x80A030FC; // type:func -EnFloormas_SmallFollowerJumpAtLeader = 0x80A03418; // type:func -EnFloormas_Merge = 0x80A03628; // type:func -EnFloormas_SmallWait = 0x80A038D8; // type:func -EnFloormas_TakeDamage = 0x80A038E8; // type:func -EnFloormas_Recover = 0x80A039AC; // type:func -EnFloormas_Freeze = 0x80A039E8; // type:func -EnFloormas_ColliderCheck = 0x80A03A5C; // type:func -EnFloormas_Update = 0x80A03C0C; // type:func -EnFloormas_OverrideLimbDraw = 0x80A03E74; // type:func -EnFloormas_PostLimbDraw = 0x80A03EB0; // type:func -EnFloormas_Draw = 0x80A03FA0; // type:func -EnFloormas_DrawHighlighted = 0x80A0406C; // type:func -EnFr_OrientUnderwater = 0x80A04600; // type:func -EnFr_Init = 0x80A04714; // type:func -EnFr_DrawIdle = 0x80A047CC; // type:func -EnFr_DrawActive = 0x80A047F4; // type:func -EnFr_Update = 0x80A04808; // type:func -EnFr_Destroy = 0x80A04B00; // type:func -EnFr_IsDivingIntoWater = 0x80A04B34; // type:func -EnFr_DivingIntoWater = 0x80A04BB8; // type:func -EnFr_IsBelowLogSpot = 0x80A04C64; // type:func -EnFr_IsAboveAndWithin30DistXZ = 0x80A04CC0; // type:func -EnFr_DecrementBlinkTimer = 0x80A04D3C; // type:func -EnFr_DecrementBlinkTimerUpdate = 0x80A04D64; // type:func -EnFr_SetupJumpingOutOfWater = 0x80A04DF4; // type:func -EnFr_JumpingOutOfWater = 0x80A04E94; // type:func -EnFr_OrientOnLogSpot = 0x80A05034; // type:func -EnFr_ChooseJumpFromLogSpot = 0x80A050F4; // type:func -EnFr_JumpingUp = 0x80A05208; // type:func -EnFr_JumpingBackIntoWater = 0x80A05348; // type:func -EnFr_SetScaleActive = 0x80A054A0; // type:func -EnFr_ButterflyPath = 0x80A055A8; // type:func -EnFr_UpdateActive = 0x80A05704; // type:func -EnFr_SetupJumpingUp = 0x80A057E8; // type:func -EnFr_Idle = 0x80A05888; // type:func -EnFr_Activate = 0x80A05968; // type:func -EnFr_ActivateCheckFrogSong = 0x80A059D0; // type:func -func_80A1BE98 = 0x80A05A74; // type:func -EnFr_ListeningToOcarinaNotes = 0x80A05AEC; // type:func -EnFr_ChildSong = 0x80A05C38; // type:func -EnFr_ChildSongFirstTime = 0x80A05D70; // type:func -EnFr_TalkBeforeFrogSong = 0x80A05DC8; // type:func -EnFr_CheckOcarinaInputFrogSong = 0x80A05E30; // type:func -EnFr_DeactivateButterfly = 0x80A05F2C; // type:func -EnFr_GetNextNoteFrogSong = 0x80A05F74; // type:func -EnFr_SetupFrogSong = 0x80A05FF0; // type:func -EnFr_IsFrogSongComplete = 0x80A06064; // type:func -EnFr_OcarinaMistake = 0x80A06114; // type:func -EnFr_ContinueFrogSong = 0x80A06170; // type:func -EnFr_SetupReward = 0x80A06314; // type:func -EnFr_PrintTextBox = 0x80A06390; // type:func -EnFr_TalkBeforeReward = 0x80A063D0; // type:func -EnFr_SetReward = 0x80A06438; // type:func -EnFr_Deactivate = 0x80A0654C; // type:func -EnFr_GiveReward = 0x80A0664C; // type:func -EnFr_SetIdle = 0x80A066AC; // type:func -EnFr_UpdateIdle = 0x80A06700; // type:func -EnFr_OverrideLimbDraw = 0x80A0672C; // type:func -EnFr_PostLimbDraw = 0x80A06758; // type:func -EnFr_Draw = 0x80A06810; // type:func -EnFu_Init = 0x80A07090; // type:func -EnFu_Destroy = 0x80A071A4; // type:func -func_80A1D94C = 0x80A071D0; // type:func -func_80A1DA04 = 0x80A0728C; // type:func -EnFu_WaitChild = 0x80A07328; // type:func -func_80A1DB60 = 0x80A073EC; // type:func -func_80A1DBA0 = 0x80A0742C; // type:func -func_80A1DBD4 = 0x80A07464; // type:func -EnFu_WaitForPlayback = 0x80A075D4; // type:func -EnFu_TeachSong = 0x80A0763C; // type:func -EnFu_WaitAdult = 0x80A076B8; // type:func -EnFu_Update = 0x80A07808; // type:func -EnFu_OverrideLimbDraw = 0x80A079B0; // type:func -EnFu_PostLimbDraw = 0x80A07B0C; // type:func -EnFu_Draw = 0x80A07B4C; // type:func -EnFw_DoBounce = 0x80A07DE0; // type:func -EnFw_PlayerInRange = 0x80A07EA8; // type:func -EnFw_GetPosAdjAroundCircle = 0x80A07FA4; // type:func -EnFw_CheckCollider = 0x80A08078; // type:func -EnFw_SpawnDust = 0x80A08138; // type:func -EnFw_Init = 0x80A08380; // type:func -EnFw_Destroy = 0x80A08488; // type:func -EnFw_Bounce = 0x80A084B4; // type:func -EnFw_Run = 0x80A08520; // type:func -EnFw_TurnToParentInitPos = 0x80A08AF4; // type:func -EnFw_JumpToParentInitPos = 0x80A08BE8; // type:func -EnFw_Update = 0x80A08C9C; // type:func -EnFw_OverrideLimbDraw = 0x80A08D7C; // type:func -EnFw_PostLimbDraw = 0x80A08D98; // type:func -EnFw_Draw = 0x80A08E34; // type:func -EnFw_SpawnEffectDust = 0x80A08EBC; // type:func -EnFw_UpdateEffects = 0x80A08F60; // type:func -EnFw_DrawEffects = 0x80A0906C; // type:func -EnFz_Init = 0x80A095A0; // type:func -EnFz_Destroy = 0x80A09720; // type:func -EnFz_UpdateTargetPos = 0x80A09770; // type:func -EnFz_ReachedTarget = 0x80A09890; // type:func -EnFz_Damaged = 0x80A098E0; // type:func -EnFz_SpawnIceSmokeHiddenState = 0x80A09AD4; // type:func -EnFz_SpawnIceSmokeGrowingState = 0x80A09AE0; // type:func -EnFz_SpawnIceSmokeActiveState = 0x80A09BC0; // type:func -EnFz_ApplyDamage = 0x80A09C84; // type:func -EnFz_SetYawTowardsPlayer = 0x80A09EEC; // type:func -EnFz_SetupDisappear = 0x80A09F2C; // type:func -EnFz_Disappear = 0x80A09F5C; // type:func -EnFz_SetupWait = 0x80A09FDC; // type:func -EnFz_Wait = 0x80A0A01C; // type:func -EnFz_SetupAppear = 0x80A0A06C; // type:func -EnFz_Appear = 0x80A0A098; // type:func -EnFz_SetupAimForMove = 0x80A0A128; // type:func -EnFz_AimForMove = 0x80A0A16C; // type:func -EnFz_SetupMoveTowardsPlayer = 0x80A0A1A8; // type:func -EnFz_MoveTowardsPlayer = 0x80A0A1DC; // type:func -EnFz_SetupAimForFreeze = 0x80A0A218; // type:func -EnFz_AimForFreeze = 0x80A0A248; // type:func -EnFz_SetupBlowSmoke = 0x80A0A284; // type:func -EnFz_BlowSmoke = 0x80A0A2BC; // type:func -EnFz_SetupDespawn = 0x80A0A4A8; // type:func -EnFz_Despawn = 0x80A0A548; // type:func -EnFz_SetupMelt = 0x80A0A578; // type:func -EnFz_Melt = 0x80A0A5BC; // type:func -EnFz_SetupBlowSmokeStationary = 0x80A0A684; // type:func -EnFz_BlowSmokeStationary = 0x80A0A6C8; // type:func -EnFz_Update = 0x80A0A8C0; // type:func -EnFz_Draw = 0x80A0AA50; // type:func -EnFz_SpawnIceSmokeNoFreeze = 0x80A0AC0C; // type:func -EnFz_SpawnIceSmokeFreeze = 0x80A0ACB0; // type:func -EnFz_UpdateIceSmoke = 0x80A0AD6C; // type:func -EnFz_DrawEffects = 0x80A0B058; // type:func -EnGSwitch_Init = 0x80A0B5B0; // type:func -EnGSwitch_Destroy = 0x80A0B848; // type:func -EnGSwitch_Break = 0x80A0B874; // type:func -EnGSwitch_WaitForObject = 0x80A0BA1C; // type:func -EnGSwitch_SilverRupeeTracker = 0x80A0BAB4; // type:func -EnGSwitch_SilverRupeeIdle = 0x80A0BB98; // type:func -EnGSwitch_SilverRupeeCollected = 0x80A0BC80; // type:func -EnGSwitch_GalleryRupee = 0x80A0BD64; // type:func -EnGSwitch_ArcheryPot = 0x80A0C104; // type:func -EnGSwitch_Kill = 0x80A0C3EC; // type:func -EnGSwitch_Update = 0x80A0C41C; // type:func -EnGSwitch_DrawPot = 0x80A0C550; // type:func -EnGSwitch_DrawRupee = 0x80A0C5E4; // type:func -EnGSwitch_SpawnEffects = 0x80A0C714; // type:func -EnGSwitch_UpdateEffects = 0x80A0C828; // type:func -EnGSwitch_DrawEffects = 0x80A0C9E8; // type:func -EnGanonMant_Init = 0x80A0CDD0; // type:func -EnGanonMant_Destroy = 0x80A0CDEC; // type:func -EnGanonMant_Tear = 0x80A0CDFC; // type:func -EnGanonMant_UpdateStrand = 0x80A0D058; // type:func -EnGanonMant_UpdateVertices = 0x80A0D61C; // type:func -EnGanonMant_Update = 0x80A0D840; // type:func -EnGanonMant_DrawCloak = 0x80A0D8FC; // type:func -EnGanonMant_Draw = 0x80A0DA18; // type:func -EnGanonOrgan_Init = 0x80A11000; // type:func -EnGanonOrgan_Destroy = 0x80A1101C; // type:func -EnGanonOrgan_Update = 0x80A1102C; // type:func -EnGanonOrgan_EmptyDList = 0x80A11070; // type:func -func_80A280BC = 0x80A11094; // type:func -func_80A28148 = 0x80A1110C; // type:func -EnGanonOrgan_Draw = 0x80A1117C; // type:func -func_80A2F180 = 0x80A18040; // type:func -EnGb_Init = 0x80A18070; // type:func -EnGb_Destroy = 0x80A18470; // type:func -func_80A2F608 = 0x80A184CC; // type:func -func_80A2F760 = 0x80A18624; // type:func -func_80A2F7C0 = 0x80A18684; // type:func -func_80A2F83C = 0x80A18700; // type:func -func_80A2F94C = 0x80A1881C; // type:func -func_80A2F9C0 = 0x80A18894; // type:func -func_80A2FA50 = 0x80A18928; // type:func -func_80A2FB40 = 0x80A18A18; // type:func -func_80A2FBB0 = 0x80A18A8C; // type:func -func_80A2FC0C = 0x80A18AEC; // type:func -func_80A2FC70 = 0x80A18B54; // type:func -EnGb_Update = 0x80A18C58; // type:func -EnGb_Draw = 0x80A18D90; // type:func -EnGb_UpdateCagedSouls = 0x80A18EB0; // type:func -EnGb_DrawCagedSouls = 0x80A19208; // type:func -EnGe1_Init = 0x80A19770; // type:func -EnGe1_Destroy = 0x80A19A34; // type:func -EnGe1_SetTalkAction = 0x80A19A60; // type:func -EnGe1_SetAnimationIdle = 0x80A19B40; // type:func -EnGe1_CheckCarpentersFreed = 0x80A19BC4; // type:func -EnGe1_KickPlayer = 0x80A19C00; // type:func -EnGe1_SpotPlayer = 0x80A19CE0; // type:func -EnGe1_WatchForPlayerFrontOnly = 0x80A19D40; // type:func -EnGe1_ChooseActionFromTextId = 0x80A19DF8; // type:func -EnGe1_SetNormalText = 0x80A19E8C; // type:func -EnGe1_WatchForAndSensePlayer = 0x80A19EBC; // type:func -EnGe1_GetReaction_ValleyFloor = 0x80A19F88; // type:func -EnGe1_WaitTillOpened_GTGGuard = 0x80A19FDC; // type:func -EnGe1_Open_GTGGuard = 0x80A1A02C; // type:func -EnGe1_SetupOpen_GTGGuard = 0x80A1A0DC; // type:func -EnGe1_RefuseEntryTooPoor_GTGGuard = 0x80A1A19C; // type:func -EnGe1_OfferOpen_GTGGuard = 0x80A1A1DC; // type:func -EnGe1_RefuseOpenNoCard_GTGGuard = 0x80A1A2CC; // type:func -EnGe1_CheckForCard_GTGGuard = 0x80A1A310; // type:func -EnGe1_WaitGateOpen_GateOp = 0x80A1A378; // type:func -EnGe1_WaitUntilGateOpened_GateOp = 0x80A1A3EC; // type:func -EnGe1_OpenGate_GateOp = 0x80A1A43C; // type:func -EnGe1_SetupOpenGate_GateOp = 0x80A1A4EC; // type:func -EnGe1_CheckGate_GateOp = 0x80A1A5B8; // type:func -EnGe1_Talk_GateGuard = 0x80A1A634; // type:func -EnGe1_GetReaction_GateGuard = 0x80A1A678; // type:func -EnGe1_SetupWait_Archery = 0x80A1A72C; // type:func -EnGe1_WaitTillItemGiven_Archery = 0x80A1A764; // type:func -EnGe1_BeginGiveItem_Archery = 0x80A1A858; // type:func -EnGe1_TalkWinPrize_Archery = 0x80A1A920; // type:func -EnGe1_TalkTooPoor_Archery = 0x80A1A980; // type:func -EnGe1_WaitDoNothing = 0x80A1A9E4; // type:func -EnGe1_BeginGame_Archery = 0x80A1A9F4; // type:func -EnGe1_TalkOfferPlay_Archery = 0x80A1AB94; // type:func -EnGe1_TalkNoPrize_Archery = 0x80A1ABF4; // type:func -EnGe1_TalkAfterGame_Archery = 0x80A1AC40; // type:func -EnGe1_TalkNoHorse_Archery = 0x80A1AD44; // type:func -EnGe1_Wait_Archery = 0x80A1AD88; // type:func -EnGe1_TurnToFacePlayer = 0x80A1AE20; // type:func -EnGe1_LookAtPlayer = 0x80A1AF38; // type:func -EnGe1_Update = 0x80A1B014; // type:func -EnGe1_CueUpAnimation = 0x80A1B15C; // type:func -EnGe1_StopFidget = 0x80A1B19C; // type:func -EnGe1_OverrideLimbDraw = 0x80A1B1F4; // type:func -EnGe1_PostLimbDraw = 0x80A1B348; // type:func -EnGe1_Draw = 0x80A1B3B4; // type:func -EnGe2_ChangeAction = 0x80A1B7A0; // type:func -EnGe2_Init = 0x80A1B848; // type:func -EnGe2_Destroy = 0x80A1BA60; // type:func -Ge2_DetectPlayerInAction = 0x80A1BA8C; // type:func -Ge2_DetectPlayerInUpdate = 0x80A1BB38; // type:func -EnGe2_CheckCarpentersFreed = 0x80A1BC68; // type:func -EnGe2_CaptureClose = 0x80A1BC94; // type:func -EnGe2_CaptureCharge = 0x80A1BD68; // type:func -EnGe2_CaptureTurn = 0x80A1BE9C; // type:func -EnGe2_KnockedOut = 0x80A1BF14; // type:func -EnGe2_TurnPlayerSpotted = 0x80A1C00C; // type:func -EnGe2_AboutTurn = 0x80A1C114; // type:func -EnGe2_Walk = 0x80A1C1CC; // type:func -EnGe2_Stand = 0x80A1C294; // type:func -EnGe2_TurnToFacePlayer = 0x80A1C2D4; // type:func -EnGe2_LookAtPlayer = 0x80A1C3EC; // type:func -EnGe2_SetActionAfterTalk = 0x80A1C500; // type:func -EnGe2_WaitLookAtPlayer = 0x80A1C5C4; // type:func -EnGe2_WaitTillCardGiven = 0x80A1C5E4; // type:func -EnGe2_GiveCard = 0x80A1C648; // type:func -EnGe2_ForceTalk = 0x80A1C6DC; // type:func -EnGe2_SetupCapturePlayer = 0x80A1C760; // type:func -EnGe2_MaintainColliderAndSetAnimState = 0x80A1C7D0; // type:func -EnGe2_MoveAndBlink = 0x80A1C878; // type:func -EnGe2_UpdateFriendly = 0x80A1C904; // type:func -EnGe2_UpdateAfterTalk = 0x80A1C9DC; // type:func -EnGe2_Update = 0x80A1CA30; // type:func -EnGe2_UpdateStunned = 0x80A1CC18; // type:func -EnGe2_OverrideLimbDraw = 0x80A1CD4C; // type:func -EnGe2_PostLimbDraw = 0x80A1CD94; // type:func -EnGe2_Draw = 0x80A1CDD4; // type:func -EnGe3_ChangeAction = 0x80A1D140; // type:func -EnGe3_Init = 0x80A1D1E8; // type:func -EnGe3_Destroy = 0x80A1D2F0; // type:func -EnGe3_TurnToFacePlayer = 0x80A1D31C; // type:func -EnGe3_LookAtPlayer = 0x80A1D434; // type:func -EnGe3_Wait = 0x80A1D548; // type:func -EnGe3_WaitLookAtPlayer = 0x80A1D5AC; // type:func -EnGe3_WaitTillCardGiven = 0x80A1D5CC; // type:func -EnGe3_GiveCard = 0x80A1D630; // type:func -EnGe3_ForceTalk = 0x80A1D6C4; // type:func -EnGe3_UpdateCollision = 0x80A1D77C; // type:func -EnGe3_MoveAndBlink = 0x80A1D824; // type:func -EnGe3_UpdateWhenNotTalking = 0x80A1D8B0; // type:func -EnGe3_Update = 0x80A1D964; // type:func -EnGe3_OverrideLimbDraw = 0x80A1D9B0; // type:func -EnGe3_PostLimbDraw = 0x80A1DB04; // type:func -EnGe3_Draw = 0x80A1DB60; // type:func -EnGeldB_SetupAction = 0x80A1DD80; // type:func -EnGeldB_Init = 0x80A1DD8C; // type:func -EnGeldB_Destroy = 0x80A1DFB0; // type:func -EnGeldB_ReactToPlayer = 0x80A1E018; // type:func -EnGeldB_SetupWait = 0x80A1E3F0; // type:func -EnGeldB_Wait = 0x80A1E484; // type:func -EnGeldB_SetupFlee = 0x80A1E608; // type:func -EnGeldB_Flee = 0x80A1E6A0; // type:func -EnGeldB_SetupReady = 0x80A1E7C8; // type:func -EnGeldB_Ready = 0x80A1E850; // type:func -EnGeldB_SetupAdvance = 0x80A1EB34; // type:func -EnGeldB_Advance = 0x80A1EBB4; // type:func -EnGeldB_SetupRollForward = 0x80A1F060; // type:func -EnGeldB_RollForward = 0x80A1F114; // type:func -EnGeldB_SetupPivot = 0x80A1F26C; // type:func -EnGeldB_Pivot = 0x80A1F2B8; // type:func -EnGeldB_SetupCircle = 0x80A1F498; // type:func -EnGeldB_Circle = 0x80A1F56C; // type:func -EnGeldB_SetupSpinDodge = 0x80A1FB48; // type:func -EnGeldB_SpinDodge = 0x80A1FCB0; // type:func -EnGeldB_SetupSlash = 0x80A20100; // type:func -EnGeldB_Slash = 0x80A20170; // type:func -EnGeldB_SetupSpinAttack = 0x80A203C0; // type:func -EnGeldB_SpinAttack = 0x80A20454; // type:func -EnGeldB_SetupRollBack = 0x80A20808; // type:func -EnGeldB_RollBack = 0x80A20884; // type:func -EnGeldB_SetupStunned = 0x80A20988; // type:func -EnGeldB_Stunned = 0x80A20A34; // type:func -EnGeldB_SetupDamaged = 0x80A20AF0; // type:func -EnGeldB_Damaged = 0x80A20B88; // type:func -EnGeldB_SetupJump = 0x80A20D30; // type:func -EnGeldB_Jump = 0x80A20DE8; // type:func -EnGeldB_SetupBlock = 0x80A20ED0; // type:func -EnGeldB_Block = 0x80A20F88; // type:func -EnGeldB_SetupSidestep = 0x80A21274; // type:func -EnGeldB_Sidestep = 0x80A21404; // type:func -EnGeldB_SetupDefeated = 0x80A21B24; // type:func -EnGeldB_Defeated = 0x80A21BC8; // type:func -EnGeldB_TurnHead = 0x80A21C84; // type:func -EnGeldB_CollisionCheck = 0x80A21D84; // type:func -EnGeldB_Update = 0x80A21F50; // type:func -EnGeldB_OverrideLimbDraw = 0x80A2213C; // type:func -EnGeldB_PostLimbDraw = 0x80A22284; // type:func -EnGeldB_Draw = 0x80A224FC; // type:func -EnGeldB_DodgeRanged = 0x80A2286C; // type:func -EnGirlA_SetupAction = 0x80A23130; // type:func -EnGirlA_TryChangeShopItem = 0x80A2313C; // type:func -EnGirlA_InitItem = 0x80A232B4; // type:func -EnGirlA_Init = 0x80A23358; // type:func -EnGirlA_Destroy = 0x80A2338C; // type:func -EnGirlA_CanBuy_Arrows = 0x80A233BC; // type:func -EnGirlA_CanBuy_Bombs = 0x80A2346C; // type:func -EnGirlA_CanBuy_DekuNuts = 0x80A2350C; // type:func -EnGirlA_CanBuy_DekuSticks = 0x80A235C4; // type:func -EnGirlA_CanBuy_Fish = 0x80A2367C; // type:func -EnGirlA_CanBuy_RedPotion = 0x80A236F4; // type:func -EnGirlA_CanBuy_GreenPotion = 0x80A2376C; // type:func -EnGirlA_CanBuy_BluePotion = 0x80A237E4; // type:func -EnGirlA_CanBuy_Longsword = 0x80A2385C; // type:func -EnGirlA_CanBuy_HylianShield = 0x80A238F0; // type:func -EnGirlA_CanBuy_DekuShield = 0x80A23970; // type:func -EnGirlA_CanBuy_GoronTunic = 0x80A239F0; // type:func -EnGirlA_CanBuy_ZoraTunic = 0x80A23A98; // type:func -EnGirlA_CanBuy_RecoveryHeart = 0x80A23B40; // type:func -EnGirlA_CanBuy_MilkBottle = 0x80A23B8C; // type:func -EnGirlA_CanBuy_WeirdEgg = 0x80A23BE8; // type:func -EnGirlA_CanBuy_Unk19 = 0x80A23C44; // type:func -EnGirlA_CanBuy_Unk20 = 0x80A23C58; // type:func -EnGirlA_CanBuy_Bombchus = 0x80A23C6C; // type:func -EnGirlA_CanBuy_DekuSeeds = 0x80A23CF0; // type:func -EnGirlA_CanBuy_SoldOut = 0x80A23DA0; // type:func -EnGirlA_CanBuy_BlueFire = 0x80A23DB4; // type:func -EnGirlA_CanBuy_Bugs = 0x80A23E2C; // type:func -EnGirlA_CanBuy_Poe = 0x80A23EA4; // type:func -EnGirlA_CanBuy_Fairy = 0x80A23F1C; // type:func -EnGirlA_ItemGive_Arrows = 0x80A23F94; // type:func -EnGirlA_ItemGive_Bombs = 0x80A23FDC; // type:func -EnGirlA_ItemGive_DekuNuts = 0x80A2407C; // type:func -EnGirlA_ItemGive_DekuSticks = 0x80A240EC; // type:func -EnGirlA_ItemGive_Longsword = 0x80A24128; // type:func -EnGirlA_ItemGive_HylianShield = 0x80A24170; // type:func -EnGirlA_ItemGive_DekuShield = 0x80A241AC; // type:func -EnGirlA_ItemGive_GoronTunic = 0x80A241E8; // type:func -EnGirlA_ItemGive_ZoraTunic = 0x80A24224; // type:func -EnGirlA_ItemGive_Health = 0x80A24260; // type:func -EnGirlA_ItemGive_MilkBottle = 0x80A242A0; // type:func -EnGirlA_ItemGive_WeirdEgg = 0x80A242DC; // type:func -EnGirlA_ItemGive_Unk19 = 0x80A24318; // type:func -EnGirlA_ItemGive_Unk20 = 0x80A24348; // type:func -EnGirlA_ItemGive_DekuSeeds = 0x80A24378; // type:func -EnGirlA_ItemGive_BottledItem = 0x80A243B4; // type:func -EnGirlA_BuyEvent_ShieldDiscount = 0x80A244E4; // type:func -EnGirlA_BuyEvent_GoronTunic = 0x80A24584; // type:func -EnGirlA_BuyEvent_ZoraTunic = 0x80A245B4; // type:func -EnGirlA_BuyEvent_ObtainBombchuPack = 0x80A245E4; // type:func -EnGirlA_Noop = 0x80A246F8; // type:func -EnGirlA_SetItemDescription = 0x80A24708; // type:func -EnGirlA_SetItemOutOfStock = 0x80A24830; // type:func -EnGirlA_UpdateStockedItem = 0x80A24864; // type:func -EnGirlA_TrySetMaskItemDescription = 0x80A248DC; // type:func -EnGirlA_WaitForObject = 0x80A2496C; // type:func -EnGirlA_Update2 = 0x80A24D1C; // type:func -EnGirlA_Update = 0x80A24DD8; // type:func -func_80A3C498 = 0x80A24DFC; // type:func -EnGirlA_Draw = 0x80A24E40; // type:func -EnGm_Init = 0x80A25A50; // type:func -EnGm_Destroy = 0x80A25AB0; // type:func -func_80A3D7C8 = 0x80A25ADC; // type:func -func_80A3D838 = 0x80A25B4C; // type:func -EnGm_UpdateEye = 0x80A25CEC; // type:func -EnGm_SetTextID = 0x80A25D64; // type:func -func_80A3DB04 = 0x80A25E18; // type:func -func_80A3DBF4 = 0x80A25F08; // type:func -func_80A3DC44 = 0x80A25F5C; // type:func -func_80A3DD7C = 0x80A26098; // type:func -EnGm_ProcessChoiceIndex = 0x80A26130; // type:func -func_80A3DF00 = 0x80A26220; // type:func -func_80A3DF60 = 0x80A26284; // type:func -func_80A3DFBC = 0x80A262E4; // type:func -EnGm_Update = 0x80A26398; // type:func -func_80A3E090 = 0x80A263BC; // type:func -EnGm_Draw = 0x80A2651C; // type:func -EnGo_SetupAction = 0x80A26780; // type:func -EnGo_GetTextID = 0x80A2678C; // type:func -EnGo_UpdateTalkState = 0x80A26B1C; // type:func -EnGo_UpdateTalking = 0x80A26F3C; // type:func -EnGo_ChangeAnim = 0x80A26FFC; // type:func -EnGo_IsActorSpawned = 0x80A270AC; // type:func -EnGo_GetPlayerTrackingYOffset = 0x80A2720C; // type:func -func_80A3F060 = 0x80A27284; // type:func -func_80A3F0E4 = 0x80A27308; // type:func -EnGo_IsCameraModified = 0x80A27380; // type:func -EnGo_ReverseAnimation = 0x80A27484; // type:func -EnGo_UpdateShadow = 0x80A2749C; // type:func -EnGo_FollowPath = 0x80A27528; // type:func -EnGo_SetMovedPos = 0x80A276E4; // type:func -EnGo_SpawnDust = 0x80A277BC; // type:func -EnGo_IsRollingOnGround = 0x80A279E8; // type:func -func_80A3F908 = 0x80A27B34; // type:func -EnGo_Init = 0x80A27D64; // type:func -EnGo_Destroy = 0x80A280B4; // type:func -func_80A3FEB4 = 0x80A280F4; // type:func -EnGo_StopRolling = 0x80A28138; // type:func -func_80A4008C = 0x80A282CC; // type:func -EnGo_GoronLinkRolling = 0x80A2835C; // type:func -EnGo_FireGenericActionFunc = 0x80A28454; // type:func -EnGo_CurledUp = 0x80A28464; // type:func -EnGo_WakeUp = 0x80A28564; // type:func -func_80A40494 = 0x80A286E0; // type:func -func_80A405CC = 0x80A28818; // type:func -EnGo_BiggoronActionFunc = 0x80A2892C; // type:func -func_80A408D8 = 0x80A28B24; // type:func -func_80A40A54 = 0x80A28CA0; // type:func -func_80A40B1C = 0x80A28D68; // type:func -EnGo_GetItem = 0x80A28DC0; // type:func -func_80A40C78 = 0x80A28EC8; // type:func -EnGo_Eyedrops = 0x80A28FB0; // type:func -func_80A40DCC = 0x80A29020; // type:func -EnGo_Update = 0x80A290A4; // type:func -EnGo_DrawCurledUp = 0x80A291B4; // type:func -EnGo_DrawRolling = 0x80A29280; // type:func -EnGo_OverrideLimbDraw = 0x80A293AC; // type:func -EnGo_PostLimbDraw = 0x80A295C8; // type:func -EnGo_Draw = 0x80A29624; // type:func -EnGo_SpawnEffectDust = 0x80A297C4; // type:func -EnGo_UpdateEffects = 0x80A29868; // type:func -EnGo_DrawEffects = 0x80A29974; // type:func -EnGo2_SpawnEffectDust = 0x80A2ADC0; // type:func -EnGo2_UpdateEffects = 0x80A2AE64; // type:func -EnGo2_DrawEffects = 0x80A2AF70; // type:func -EnGo2_SpawnDust = 0x80A2B268; // type:func -EnGo2_GetItem = 0x80A2B480; // type:func -EnGo2_GetDialogState = 0x80A2B4C4; // type:func -EnGo2_GoronFireGenericGetTextId = 0x80A2B544; // type:func -EnGo2_GetTextIdGoronCityRollingBig = 0x80A2B5C0; // type:func -EnGo2_UpdateTalkStateGoronCityRollingBig = 0x80A2B648; // type:func -EnGo2_GetTextIdGoronDmtBombFlower = 0x80A2B740; // type:func -EnGo2_UpdateTalkStateGoronDmtBombFlower = 0x80A2B77C; // type:func -EnGo2_GetTextIdGoronDmtRollingSmall = 0x80A2B894; // type:func -EnGo2_UpdateTalkStateGoronDmtRollingSmall = 0x80A2B8EC; // type:func -EnGo2_GetTextIdGoronDmtDcEntrance = 0x80A2B928; // type:func -EnGo2_UpdateTalkStateGoronDmtDcEntrance = 0x80A2B9C4; // type:func -EnGo2_GetTextIdGoronCityEntrance = 0x80A2BA24; // type:func -EnGo2_UpdateTalkStateGoronCityEntrance = 0x80A2BAA4; // type:func -EnGo2_GetTextIdGoronCityIsland = 0x80A2BB04; // type:func -EnGo2_UpdateTalkStateGoronCityIsland = 0x80A2BB84; // type:func -EnGo2_GetTextIdGoronCityLowestFloor = 0x80A2BBE4; // type:func -EnGo2_UpdateTalkStateGoronCityLowestFloor = 0x80A2BCC0; // type:func -EnGo2_GetTextIdGoronCityLink = 0x80A2BD20; // type:func -EnGo2_UpdateTalkStateGoronCityLink = 0x80A2BDFC; // type:func -EnGo2_GetTextIdGoronDmtBiggoron = 0x80A2C014; // type:func -EnGo2_UpdateTalkStateGoronDmtBiggoron = 0x80A2C094; // type:func -EnGo2_GetTextIdGoronFireGeneric = 0x80A2C2A8; // type:func -EnGo2_UpdateTalkStateGoronFireGeneric = 0x80A2C2E0; // type:func -EnGo2_GetTextIdGoronCityStairwell = 0x80A2C37C; // type:func -EnGo2_UpdateTalkStateGoronCityStairwell = 0x80A2C3CC; // type:func -EnGo2_GetTextIdGoronMarketBazaar = 0x80A2C42C; // type:func -EnGo2_UpdateTalkStateGoronMarketBazaar = 0x80A2C440; // type:func -EnGo2_GetTextIdGoronCityLostWoods = 0x80A2C47C; // type:func -EnGo2_UpdateTalkStateGoronCityLostWoods = 0x80A2C4EC; // type:func -EnGo2_GetTextIdGoronDmtFairyHint = 0x80A2C54C; // type:func -EnGo2_UpdateTalkStateGoronDmtFairyHint = 0x80A2C5A4; // type:func -EnGo2_GetTextId = 0x80A2C5E0; // type:func -EnGo2_UpdateTalkState = 0x80A2C724; // type:func -func_80A44790 = 0x80A2C83C; // type:func -EnGo2_SetColliderDim = 0x80A2C938; // type:func -EnGo2_SetShape = 0x80A2C974; // type:func -EnGo2_CheckCollision = 0x80A2C9EC; // type:func -EnGo2_SwapInitialFrameAnimFrameCount = 0x80A2CB48; // type:func -func_80A44AB0 = 0x80A2CB60; // type:func -EnGo2_UpdateWaypoint = 0x80A2CD1C; // type:func -EnGo2_Orient = 0x80A2CD98; // type:func -func_80A44D84 = 0x80A2CE3C; // type:func -EnGo2_IsWakingUp = 0x80A2CE74; // type:func -EnGo2_IsRollingOnGround = 0x80A2CFA4; // type:func -EnGo2_BiggoronSetTextId = 0x80A2D140; // type:func -func_80A45288 = 0x80A2D340; // type:func -func_80A45360 = 0x80A2D41C; // type:func -EnGo2_RollForward = 0x80A2D528; // type:func -func_80A454CC = 0x80A2D588; // type:func -EnGo2_GetTargetXZSpeed = 0x80A2D634; // type:func -EnGo2_IsCameraModified = 0x80A2D6D8; // type:func -EnGo2_DefaultWakingUp = 0x80A2D7F4; // type:func -EnGo2_WakingUp = 0x80A2D84C; // type:func -EnGo2_BiggoronWakingUp = 0x80A2D8BC; // type:func -EnGo2_SelectGoronWakingUp = 0x80A2D90C; // type:func -EnGo2_EyeMouthTexState = 0x80A2D9F0; // type:func -EnGo2_SitDownAnimation = 0x80A2DAC4; // type:func -EnGo2_GetDustData = 0x80A2DBDC; // type:func -EnGo2_RollingAnimation = 0x80A2DC64; // type:func -EnGo2_WakeUp = 0x80A2DD18; // type:func -EnGo2_GetItemAnimation = 0x80A2DE0C; // type:func -EnGo2_SetupRolling = 0x80A2DE70; // type:func -EnGo2_StopRolling = 0x80A2DF18; // type:func -EnGo2_IsFreeingGoronInFire = 0x80A2DFD8; // type:func -EnGo2_IsGoronDmtBombFlower = 0x80A2E070; // type:func -EnGo2_IsGoronRollingBig = 0x80A2E0F0; // type:func -EnGo2_IsGoronFireGeneric = 0x80A2E150; // type:func -EnGo2_IsGoronLinkReversing = 0x80A2E18C; // type:func -EnGo2_IsRolling = 0x80A2E1E8; // type:func -EnGo2_GoronLinkAnimation = 0x80A2E27C; // type:func -EnGo2_GoronFireCamera = 0x80A2E3B0; // type:func -EnGo2_GoronFireClearCamera = 0x80A2E4B0; // type:func -EnGo2_BiggoronAnimation = 0x80A2E4F0; // type:func -EnGo2_Init = 0x80A2E5A4; // type:func -EnGo2_Destroy = 0x80A2EA38; // type:func -EnGo2_CurledUp = 0x80A2EA48; // type:func -func_80A46B40 = 0x80A2EC1C; // type:func -EnGo2_GoronDmtBombFlowerAnimation = 0x80A2EDB4; // type:func -EnGo2_GoronRollingBigContinueRolling = 0x80A2EE38; // type:func -EnGo2_ContinueRolling = 0x80A2EE98; // type:func -EnGo2_SlowRolling = 0x80A2EF30; // type:func -EnGo2_GroundRolling = 0x80A2F068; // type:func -EnGo2_ReverseRolling = 0x80A2F104; // type:func -EnGo2_SetupGetItem = 0x80A2F1CC; // type:func -EnGo2_SetGetItem = 0x80A2F240; // type:func -EnGo2_BiggoronEyedrops = 0x80A2F348; // type:func -EnGo2_GoronLinkStopRolling = 0x80A2F57C; // type:func -EnGo2_GoronFireGenericAction = 0x80A2F66C; // type:func -EnGo2_Update = 0x80A2F998; // type:func -EnGo2_DrawCurledUp = 0x80A2FAAC; // type:func -EnGo2_DrawRolling = 0x80A2FB70; // type:func -EnGo2_OverrideLimbDraw = 0x80A2FCAC; // type:func -EnGo2_PostLimbDraw = 0x80A2FEC8; // type:func -EnGo2_Draw = 0x80A2FF24; // type:func -EnGoma_Init = 0x80A30E00; // type:func -EnGoma_Destroy = 0x80A3118C; // type:func -EnGoma_SetupFlee = 0x80A311DC; // type:func -EnGoma_Flee = 0x80A31280; // type:func -EnGoma_EggFallToGround = 0x80A31320; // type:func -EnGoma_Egg = 0x80A315AC; // type:func -EnGoma_SetupHatch = 0x80A317EC; // type:func -EnGoma_Hatch = 0x80A318B4; // type:func -EnGoma_SetupHurt = 0x80A318FC; // type:func -EnGoma_Hurt = 0x80A319E8; // type:func -EnGoma_SetupDie = 0x80A31A70; // type:func -EnGoma_Die = 0x80A31B30; // type:func -EnGoma_SetupDead = 0x80A31BD4; // type:func -EnGoma_Dead = 0x80A31C4C; // type:func -EnGoma_SetupStand = 0x80A31DBC; // type:func -EnGoma_SetupChasePlayer = 0x80A31E48; // type:func -EnGoma_SetupPrepareJump = 0x80A31EC8; // type:func -EnGoma_PrepareJump = 0x80A31F44; // type:func -EnGoma_SetupLand = 0x80A31FDC; // type:func -EnGoma_Land = 0x80A32054; // type:func -EnGoma_SetupJump = 0x80A320C0; // type:func -EnGoma_Jump = 0x80A32168; // type:func -EnGoma_Stand = 0x80A32220; // type:func -EnGoma_ChasePlayer = 0x80A3229C; // type:func -EnGoma_SetupStunned = 0x80A323A4; // type:func -EnGoma_Stunned = 0x80A32440; // type:func -EnGoma_LookAtPlayer = 0x80A32540; // type:func -EnGoma_UpdateHit = 0x80A325EC; // type:func -EnGoma_UpdateEyeEnvColor = 0x80A3281C; // type:func -EnGoma_SetFloorRot = 0x80A328AC; // type:func -EnGoma_Update = 0x80A329C0; // type:func -EnGoma_OverrideLimbDraw = 0x80A32C0C; // type:func -EnGoma_NoBackfaceCullingDlist = 0x80A32D68; // type:func -EnGoma_Draw = 0x80A32DD4; // type:func -EnGoma_Debris = 0x80A33260; // type:func -EnGoma_SpawnHatchDebris = 0x80A332A4; // type:func -EnGoma_BossLimb = 0x80A33408; // type:func -EnGoroiwa_UpdateCollider = 0x80A33AB0; // type:func -EnGoroiwa_InitCollider = 0x80A33B1C; // type:func -EnGoroiwa_UpdateFlags = 0x80A33B84; // type:func -EnGoroiwa_Vec3fNormalize = 0x80A33BA8; // type:func -EnGoroiwa_SetSpeed = 0x80A33C2C; // type:func -EnGoroiwa_FaceNextWaypoint = 0x80A33C54; // type:func -EnGoroiwa_GetPrevWaypointDiff = 0x80A33D2C; // type:func -EnGoroiw_CheckEndOfPath = 0x80A33E88; // type:func -EnGoroiwa_SetNextWaypoint = 0x80A33F3C; // type:func -EnGoroiwa_ReverseDirection = 0x80A33F6C; // type:func -EnGoroiwa_InitPath = 0x80A33F94; // type:func -EnGoroiwa_TeleportToWaypoint = 0x80A33FD4; // type:func -EnGoroiwa_InitRotation = 0x80A34078; // type:func -EnGoroiwa_GetAscendDirection = 0x80A34094; // type:func -EnGoroiwa_SpawnDust = 0x80A34158; // type:func -EnGoroiwa_SpawnWaterEffects = 0x80A34348; // type:func -EnGoroiwa_MoveAndFall = 0x80A3447C; // type:func -EnGoroiwa_Move = 0x80A345B0; // type:func -EnGoroiwa_MoveUpToNextWaypoint = 0x80A347DC; // type:func -EnGoroiwa_MoveDownToNextWaypoint = 0x80A348FC; // type:func -EnGoroiwa_UpdateRotation = 0x80A34C5C; // type:func -EnGoroiwa_NextWaypoint = 0x80A34DFC; // type:func -EnGoroiwa_SpawnFragments = 0x80A34E84; // type:func -EnGoroiwa_Init = 0x80A351A0; // type:func -EnGoroiwa_Destroy = 0x80A352D0; // type:func -EnGoroiwa_SetupRoll = 0x80A352FC; // type:func -EnGoroiwa_Roll = 0x80A3533C; // type:func -EnGoroiwa_SetupMoveAndFallToGround = 0x80A355C0; // type:func -EnGoroiwa_MoveAndFallToGround = 0x80A35634; // type:func -EnGoroiwa_SetupWait = 0x80A356D4; // type:func -EnGoroiwa_Wait = 0x80A35730; // type:func -EnGoroiwa_SetupMoveUp = 0x80A35770; // type:func -EnGoroiwa_MoveUp = 0x80A357C0; // type:func -EnGoroiwa_SetupMoveDown = 0x80A35880; // type:func -EnGoroiwa_MoveDown = 0x80A358EC; // type:func -EnGoroiwa_Update = 0x80A359B4; // type:func -EnGoroiwa_Draw = 0x80A35B14; // type:func -EnGs_Init = 0x80A35E70; // type:func -EnGs_Destroy = 0x80A35F34; // type:func -func_80A4E3EC = 0x80A35F44; // type:func -func_80A4E470 = 0x80A35FCC; // type:func -func_80A4E648 = 0x80A3618C; // type:func -func_80A4E754 = 0x80A3629C; // type:func -func_80A4E910 = 0x80A3645C; // type:func -func_80A4EA08 = 0x80A36558; // type:func -func_80A4EB3C = 0x80A3668C; // type:func -func_80A4ED34 = 0x80A36884; // type:func -func_80A4F13C = 0x80A36C90; // type:func -func_80A4F700 = 0x80A37254; // type:func -func_80A4F734 = 0x80A37288; // type:func -func_80A4F77C = 0x80A372D0; // type:func -EnGs_Update = 0x80A3734C; // type:func -EnGs_Draw = 0x80A374E4; // type:func -EnGuest_Init = 0x80A37CE0; // type:func -EnGuest_Destroy = 0x80A37D40; // type:func -EnGuest_Update = 0x80A37D6C; // type:func -func_80A5046C = 0x80A37EDC; // type:func -func_80A50518 = 0x80A37F88; // type:func -func_80A5057C = 0x80A37FF0; // type:func -func_80A505CC = 0x80A38044; // type:func -func_80A50708 = 0x80A38184; // type:func -EnGuest_OverrideLimbDraw = 0x80A381F0; // type:func -EnGuest_Draw = 0x80A38418; // type:func -EnHata_Init = 0x80A38680; // type:func -EnHata_Destroy = 0x80A387B8; // type:func -EnHata_Update = 0x80A38800; // type:func -EnHata_OverrideLimbDraw = 0x80A38A1C; // type:func -EnHata_PostLimbDraw = 0x80A38AA0; // type:func -EnHata_Draw = 0x80A38AB8; // type:func -EnHeishi1_Init = 0x80A38C10; // type:func -EnHeishi1_Destroy = 0x80A38E28; // type:func -EnHeishi1_SetupWalk = 0x80A38E38; // type:func -EnHeishi1_Walk = 0x80A38EEC; // type:func -EnHeishi1_SetupMoveToLink = 0x80A3920C; // type:func -EnHeishi1_MoveToLink = 0x80A392C8; // type:func -EnHeishi1_SetupWait = 0x80A393C0; // type:func -EnHeishi1_Wait = 0x80A39488; // type:func -EnHeishi1_SetupTurnTowardLink = 0x80A39644; // type:func -EnHeishi1_TurnTowardLink = 0x80A396E0; // type:func -EnHeishi1_SetupKick = 0x80A3978C; // type:func -EnHeishi1_Kick = 0x80A39820; // type:func -EnHeishi1_SetupWaitNight = 0x80A398F4; // type:func -EnHeishi1_WaitNight = 0x80A39988; // type:func -EnHeishi1_Update = 0x80A39A08; // type:func -EnHeishi1_OverrideLimbDraw = 0x80A39D1C; // type:func -EnHeishi1_Draw = 0x80A39D60; // type:func -EnHeishi2_Init = 0x80A3A120; // type:func -EnHeishi2_Destroy = 0x80A3A3A0; // type:func -EnHeishi2_DoNothing1 = 0x80A3A3E4; // type:func -EnHeishi_DoNothing2 = 0x80A3A3F4; // type:func -func_80A531E4 = 0x80A3A404; // type:func -func_80A53278 = 0x80A3A498; // type:func -func_80A5344C = 0x80A3A618; // type:func -func_80A53538 = 0x80A3A704; // type:func -func_80A535BC = 0x80A3A78C; // type:func -func_80A53638 = 0x80A3A808; // type:func -func_80A5372C = 0x80A3A8F4; // type:func -func_80A53850 = 0x80A3AA18; // type:func -func_80A53908 = 0x80A3AAD0; // type:func -func_80A5399C = 0x80A3AB64; // type:func -func_80A53AD4 = 0x80A3AC88; // type:func -func_80A53C0C = 0x80A3ADC4; // type:func -func_80A53C90 = 0x80A3AE4C; // type:func -func_80A53D0C = 0x80A3AEC8; // type:func -func_80A53DF8 = 0x80A3AFAC; // type:func -func_80A53F30 = 0x80A3B0E4; // type:func -func_80A54038 = 0x80A3B1EC; // type:func -func_80A540C0 = 0x80A3B278; // type:func -func_80A541FC = 0x80A3B3B4; // type:func -func_80A5427C = 0x80A3B438; // type:func -func_80A54320 = 0x80A3B4DC; // type:func -func_80A543A0 = 0x80A3B55C; // type:func -func_80A544AC = 0x80A3B668; // type:func -func_80A5455C = 0x80A3B718; // type:func -func_80A546DC = 0x80A3B88C; // type:func -func_80A5475C = 0x80A3B90C; // type:func -func_80A54954 = 0x80A3BB04; // type:func -func_80A549E8 = 0x80A3BB98; // type:func -EnHeishi2_Update = 0x80A3BC28; // type:func -EnHeishi2_OverrideLimbDraw = 0x80A3BD74; // type:func -EnHeishi2_PostLimbDraw = 0x80A3BDEC; // type:func -EnHeishi2_DrawKingGuard = 0x80A3BE24; // type:func -EnHeishi2_Draw = 0x80A3BE98; // type:func -EnHeishi3_Init = 0x80A3C320; // type:func -EnHeishi3_Destroy = 0x80A3C44C; // type:func -EnHeishi3_SetupGuardType = 0x80A3C478; // type:func -EnHeishi3_StandSentinelInGrounds = 0x80A3C528; // type:func -EnHeishi3_StandSentinelInCastle = 0x80A3C684; // type:func -EnHeishi3_CatchStart = 0x80A3C7F4; // type:func -func_80A55BD4 = 0x80A3C89C; // type:func -EnHeishi3_ResetAnimationToIdle = 0x80A3C934; // type:func -func_80A55D00 = 0x80A3C9C8; // type:func -EnHeishi3_Update = 0x80A3CA78; // type:func -EnHeishi3_OverrideLimbDraw = 0x80A3CB58; // type:func -EnHeishi3_Draw = 0x80A3CBC0; // type:func -EnHeishi4_Init = 0x80A3CCF0; // type:func -EnHeishi4_Destroy = 0x80A3CED0; // type:func -func_80A56328 = 0x80A3CEFC; // type:func -func_80A563BC = 0x80A3CF90; // type:func -func_80A56544 = 0x80A3D118; // type:func -func_80A56614 = 0x80A3D1DC; // type:func -func_80A5673C = 0x80A3D304; // type:func -func_80A56874 = 0x80A3D418; // type:func -func_80A56900 = 0x80A3D4A4; // type:func -func_80A56994 = 0x80A3D538; // type:func -func_80A56A50 = 0x80A3D5F4; // type:func -func_80A56ACC = 0x80A3D670; // type:func -func_80A56B40 = 0x80A3D6E4; // type:func -EnHeishi4_Update = 0x80A3D858; // type:func -EnHeishi_OverrideLimbDraw = 0x80A3D9BC; // type:func -EnHeishi4_Draw = 0x80A3DA24; // type:func -EnHintnuts_Init = 0x80A3DBF0; // type:func -EnHintnuts_Destroy = 0x80A3DD90; // type:func -EnHintnuts_HitByScrubProjectile1 = 0x80A3DDCC; // type:func -EnHintnuts_SetupWait = 0x80A3DE50; // type:func -EnHintnuts_SetupLookAround = 0x80A3DED0; // type:func -EnHintnuts_SetupThrowScrubProjectile = 0x80A3DF18; // type:func -EnHintnuts_SetupStand = 0x80A3DF58; // type:func -EnHintnuts_SetupBurrow = 0x80A3DFC0; // type:func -EnHintnuts_HitByScrubProjectile2 = 0x80A3E010; // type:func -EnHintnuts_SetupRun = 0x80A3E100; // type:func -EnHintnuts_SetupTalk = 0x80A3E148; // type:func -EnHintnuts_SetupLeave = 0x80A3E194; // type:func -EnHintnuts_SetupFreeze = 0x80A3E254; // type:func -EnHintnuts_Wait = 0x80A3E300; // type:func -EnHintnuts_LookAround = 0x80A3E564; // type:func -EnHintnuts_Stand = 0x80A3E5E8; // type:func -EnHintnuts_ThrowNut = 0x80A3E6AC; // type:func -EnHintnuts_Burrow = 0x80A3E7E8; // type:func -EnHintnuts_BeginRun = 0x80A3E8FC; // type:func -EnHintnuts_BeginFreeze = 0x80A3E960; // type:func -EnHintnuts_CheckProximity = 0x80A3E99C; // type:func -EnHintnuts_Run = 0x80A3EA30; // type:func -EnHintnuts_Talk = 0x80A3ECC0; // type:func -EnHintnuts_Leave = 0x80A3ED2C; // type:func -EnHintnuts_Freeze = 0x80A3EEE8; // type:func -EnHintnuts_ColliderCheck = 0x80A3F014; // type:func -EnHintnuts_Update = 0x80A3F0C8; // type:func -EnHintnuts_OverrideLimbDraw = 0x80A3F250; // type:func -EnHintnuts_Draw = 0x80A3F384; // type:func -EnHoll_SetupAction = 0x80A3F620; // type:func -EnHoll_IsKokiriLayer8 = 0x80A3F62C; // type:func -EnHoll_ChooseAction = 0x80A3F65C; // type:func -EnHoll_Init = 0x80A3F6C4; // type:func -EnHoll_Destroy = 0x80A3F700; // type:func -EnHoll_SwapRooms = 0x80A3F730; // type:func -EnHoll_HorizontalVisibleNarrow = 0x80A3F7EC; // type:func -EnHoll_HorizontalInvisible = 0x80A3FA2C; // type:func -EnHoll_VerticalDownBgCoverLarge = 0x80A3FBDC; // type:func -EnHoll_VerticalBgCover = 0x80A3FDC8; // type:func -EnHoll_VerticalInvisible = 0x80A3FF48; // type:func -EnHoll_HorizontalBgCoverSwitchFlag = 0x80A40040; // type:func -EnHoll_WaitRoomLoaded = 0x80A40250; // type:func -EnHoll_Update = 0x80A402C8; // type:func -EnHoll_Draw = 0x80A402EC; // type:func -EnHonotrap_FlameCollisionCheck = 0x80A405F0; // type:func -EnHonotrap_GetNormal = 0x80A40684; // type:func -EnHonotrap_InitEye = 0x80A40718; // type:func -EnHonotrap_InitFlame = 0x80A408B4; // type:func -EnHonotrap_Init = 0x80A409F4; // type:func -EnHonotrap_Destroy = 0x80A40A4C; // type:func -EnHonotrap_SetupEyeIdle = 0x80A40A98; // type:func -EnHonotrap_EyeIdle = 0x80A40AB4; // type:func -EnHonotrap_SetupEyeOpen = 0x80A40B6C; // type:func -EnHonotrap_EyeOpen = 0x80A40BC0; // type:func -EnHonotrap_SetupEyeAttack = 0x80A40C90; // type:func -EnHonotrap_EyeAttack = 0x80A40CA8; // type:func -EnHonotrap_SetupEyeClose = 0x80A40CD8; // type:func -EnHonotrap_EyeClose = 0x80A40CEC; // type:func -EnHonotrap_SetupFlameGrow = 0x80A40D38; // type:func -EnHonotrap_FlameGrow = 0x80A40D4C; // type:func -EnHonotrap_SetupFlameDrop = 0x80A40DE0; // type:func -EnHonotrap_FlameDrop = 0x80A40E48; // type:func -EnHonotrap_SetupFlameMove = 0x80A40F8C; // type:func -EnHonotrap_FlameMove = 0x80A41018; // type:func -EnHonotrap_SetupFlameChase = 0x80A411E4; // type:func -EnHonotrap_FlameChase = 0x80A41224; // type:func -EnHonotrap_SetupFlameVanish = 0x80A413D8; // type:func -EnHonotrap_FlameVanish = 0x80A413EC; // type:func -EnHonotrap_Update = 0x80A4147C; // type:func -EnHonotrap_DrawEye = 0x80A415C4; // type:func -EnHonotrap_DrawFlame = 0x80A416B4; // type:func -EnHonotrap_Draw = 0x80A4184C; // type:func -EnHorse_BgCheckBridgeJumpPoint = 0x80A41B50; // type:func -EnHorse_CheckBridgeJumps = 0x80A41CB0; // type:func -EnHorse_RaceWaypointPos = 0x80A41DF0; // type:func -EnHorse_RotateToPoint = 0x80A41E44; // type:func -EnHorse_UpdateIngoRaceInfo = 0x80A41E80; // type:func -EnHorse_PlayWalkingSfx = 0x80A42234; // type:func -EnHorse_PlayTrottingSfx = 0x80A422F0; // type:func -EnHorse_PlayGallopingSfx = 0x80A42338; // type:func -EnHorse_SlopeSpeedMultiplier = 0x80A42380; // type:func -func_80A5BB90 = 0x80A42400; // type:func -func_80A5BBBC = 0x80A42430; // type:func -EnHorse_IdleAnimSounds = 0x80A424E0; // type:func -EnHorse_Spawn = 0x80A4260C; // type:func -EnHorse_ResetCutscene = 0x80A42850; // type:func -EnHorse_ResetRace = 0x80A42868; // type:func -EnHorse_PlayerCanMove = 0x80A42878; // type:func -EnHorse_ResetHorsebackArchery = 0x80A42934; // type:func -EnHorse_ClearDustFlags = 0x80A4294C; // type:func -EnHorse_Init = 0x80A42958; // type:func -EnHorse_Destroy = 0x80A43088; // type:func -EnHorse_RotateToPlayer = 0x80A430F8; // type:func -EnHorse_Freeze = 0x80A43168; // type:func -EnHorse_Frozen = 0x80A431E8; // type:func -EnHorse_UpdateSpeed = 0x80A43358; // type:func -EnHorse_StartMountedIdleResetAnim = 0x80A4379C; // type:func -EnHorse_StartMountedIdle = 0x80A437D8; // type:func -EnHorse_MountedIdle = 0x80A43914; // type:func -EnHorse_MountedIdleAnim = 0x80A43A14; // type:func -EnHorse_MountedIdleWhinney = 0x80A43A38; // type:func -EnHorse_MountedIdleWhinneying = 0x80A43B34; // type:func -EnHorse_StartTurning = 0x80A43C34; // type:func -EnHorse_MountedTurn = 0x80A43CDC; // type:func -EnHorse_StartWalkingFromIdle = 0x80A43EA0; // type:func -EnHorse_StartWalkingInterruptable = 0x80A43EF0; // type:func -EnHorse_StartWalking = 0x80A43F14; // type:func -EnHorse_MountedWalkingReset = 0x80A43FC0; // type:func -EnHorse_MountedWalk = 0x80A44014; // type:func -EnHorse_StartTrotting = 0x80A442E4; // type:func -EnHorse_MountedTrotReset = 0x80A44388; // type:func -EnHorse_MountedTrot = 0x80A443D4; // type:func -EnHorse_StartGallopingInterruptable = 0x80A4450C; // type:func -EnHorse_StartGalloping = 0x80A44530; // type:func -EnHorse_MountedGallopReset = 0x80A445D8; // type:func -EnHorse_JumpLanding = 0x80A44630; // type:func -EnHorse_MountedGallop = 0x80A446B4; // type:func -EnHorse_StartRearing = 0x80A44888; // type:func -EnHorse_MountedRearing = 0x80A449AC; // type:func -EnHorse_StartBraking = 0x80A44B28; // type:func -EnHorse_Stopping = 0x80A44C18; // type:func -EnHorse_StartReversingInterruptable = 0x80A44E04; // type:func -EnHorse_StartReversing = 0x80A44E28; // type:func -EnHorse_Reverse = 0x80A44ECC; // type:func -EnHorse_LowJumpInit = 0x80A4527C; // type:func -EnHorse_StartLowJump = 0x80A452A0; // type:func -EnHorse_Stub1 = 0x80A453D0; // type:func -EnHorse_LowJump = 0x80A453DC; // type:func -EnHorse_HighJumpInit = 0x80A455A0; // type:func -EnHorse_StartHighJump = 0x80A455C4; // type:func -EnHorse_Stub2 = 0x80A45700; // type:func -EnHorse_HighJump = 0x80A4570C; // type:func -EnHorse_InitInactive = 0x80A458D0; // type:func -EnHorse_Inactive = 0x80A45920; // type:func -EnHorse_PlayIdleAnimation = 0x80A45A4C; // type:func -EnHorse_ChangeIdleAnimation = 0x80A45C1C; // type:func -EnHorse_ResetIdleAnimation = 0x80A45C44; // type:func -EnHorse_StartIdleRidable = 0x80A45C78; // type:func -EnHorse_Idle = 0x80A45CAC; // type:func -EnHorse_StartMovingAnimation = 0x80A45E94; // type:func -EnHorse_SetFollowAnimation = 0x80A45FFC; // type:func -EnHorse_FollowPlayer = 0x80A46130; // type:func -EnHorse_InitIngoHorse = 0x80A46554; // type:func -EnHorse_SetIngoAnimation = 0x80A465D8; // type:func -EnHorse_UpdateIngoHorseAnim = 0x80A4667C; // type:func -EnHorse_UpdateIngoRace = 0x80A46990; // type:func -EnHorse_CsMoveInit = 0x80A46B40; // type:func -EnHorse_CsMoveToPoint = 0x80A46BAC; // type:func -EnHorse_CsSetAnimHighJump = 0x80A46CFC; // type:func -EnHorse_CsPlayHighJumpAnim = 0x80A46D20; // type:func -EnHorse_CsJumpInit = 0x80A46E54; // type:func -EnHorse_CsJump = 0x80A46E8C; // type:func -EnHorse_CsRearingInit = 0x80A470E4; // type:func -EnHorse_CsRearing = 0x80A47204; // type:func -EnHorse_WarpMoveInit = 0x80A473AC; // type:func -EnHorse_CsWarpMoveToPoint = 0x80A47494; // type:func -EnHorse_CsWarpRearingInit = 0x80A475E4; // type:func -EnHorse_CsWarpRearing = 0x80A4776C; // type:func -EnHorse_InitCutscene = 0x80A47914; // type:func -EnHorse_GetCutsceneFunctionIndex = 0x80A47938; // type:func -EnHorse_CutsceneUpdate = 0x80A47988; // type:func -EnHorse_UpdateHbaRaceInfo = 0x80A47AE0; // type:func -EnHorse_InitHorsebackArchery = 0x80A47CD0; // type:func -EnHorse_UpdateHbaAnim = 0x80A47D04; // type:func -EnHorse_UpdateHorsebackArchery = 0x80A4803C; // type:func -EnHorse_InitFleePlayer = 0x80A482C8; // type:func -EnHorse_FleePlayer = 0x80A482F0; // type:func -EnHorse_BridgeJumpInit = 0x80A48B44; // type:func -EnHorse_StartBridgeJump = 0x80A48D7C; // type:func -EnHorse_BridgeJumpMove = 0x80A48E2C; // type:func -EnHorse_CheckBridgeJumpLanding = 0x80A48F88; // type:func -EnHorse_BridgeJump = 0x80A49074; // type:func -EnHorse_Vec3fOffset = 0x80A490B8; // type:func -EnHorse_CalcFloorHeight = 0x80A49134; // type:func -EnHorse_ObstructMovement = 0x80A49274; // type:func -EnHorse_CheckFloors = 0x80A4939C; // type:func -EnHorse_MountDismount = 0x80A4991C; // type:func -EnHorse_StickDirection = 0x80A49A20; // type:func -EnHorse_UpdateStick = 0x80A49AAC; // type:func -EnHorse_ResolveCollision = 0x80A49AEC; // type:func -EnHorse_BgCheckSlowMoving = 0x80A49C44; // type:func -EnHorse_UpdateBgCheckInfo = 0x80A49D84; // type:func -EnHorse_CheckBoost = 0x80A4A890; // type:func -EnHorse_RegenBoost = 0x80A4AA3C; // type:func -EnHorse_UpdatePlayerDir = 0x80A4AC68; // type:func -EnHorse_TiltBody = 0x80A4AD74; // type:func -EnHorse_UpdateConveyors = 0x80A4AE70; // type:func -EnHorse_RandInt = 0x80A4AF78; // type:func -EnHorse_Update = 0x80A4AFAC; // type:func -EnHorse_PlayerDirToMountSide = 0x80A4B7D8; // type:func -EnHorse_MountSideCheck = 0x80A4B818; // type:func -EnHorse_GetMountSide = 0x80A4B91C; // type:func -EnHorse_RandomOffset = 0x80A4B974; // type:func -EnHorse_PostDraw = 0x80A4BA10; // type:func -EnHorse_OverrideLimbDraw = 0x80A4C508; // type:func -EnHorse_Draw = 0x80A4C608; // type:func -EnHorseGameCheck_InitIngoRace = 0x80A4DDB0; // type:func -EnHorseGameCheck_DestroyIngoRace = 0x80A4DE6C; // type:func -EnHorseGameCheck_FinishIngoRace = 0x80A4DE80; // type:func -EnHorseGameCheck_UpdateIngoRace = 0x80A4DFCC; // type:func -EnHorseGameCheck_InitGerudoArchery = 0x80A4E444; // type:func -EnHorseGameCheck_DestroyGerudoArchery = 0x80A4E464; // type:func -EnHorseGameCheck_UpdateGerudoArchery = 0x80A4E478; // type:func -EnHorseGameCheck_InitType3 = 0x80A4E4C0; // type:func -EnHorseGameCheck_DestroyType3 = 0x80A4E4DC; // type:func -EnHorseGameCheck_UpdateType3 = 0x80A4E4F0; // type:func -EnHorseGameCheck_InitMalonRace = 0x80A4E504; // type:func -EnHorseGameCheck_DestroyMalonRace = 0x80A4E554; // type:func -EnHorseGameCheck_FinishMalonRace = 0x80A4E568; // type:func -EnHorseGameCheck_UpdateMalonRace = 0x80A4E65C; // type:func -EnHorseGameCheck_Init = 0x80A4EB74; // type:func -EnHorseGameCheck_Destroy = 0x80A4EBF8; // type:func -EnHorseGameCheck_Update = 0x80A4EC34; // type:func -EnHorseGameCheck_Draw = 0x80A4EC70; // type:func -func_80A68660 = 0x80A4EE80; // type:func -func_80A686A8 = 0x80A4EECC; // type:func -func_80A68870 = 0x80A4F094; // type:func -EnHorseGanon_Init = 0x80A4F150; // type:func -EnHorseGanon_Destroy = 0x80A4F29C; // type:func -func_80A68AC4 = 0x80A4F2EC; // type:func -func_80A68AF0 = 0x80A4F31C; // type:func -func_80A68B20 = 0x80A4F350; // type:func -func_80A68DB0 = 0x80A4F5E0; // type:func -func_80A68E14 = 0x80A4F644; // type:func -EnHorseGanon_Update = 0x80A4F708; // type:func -EnHorseGanon_PostDraw = 0x80A4F7DC; // type:func -EnHorseGanon_Draw = 0x80A4F968; // type:func -func_80A693D0 = 0x80A4FC00; // type:func -func_80A6948C = 0x80A4FCBC; // type:func -func_80A695A4 = 0x80A4FDD4; // type:func -EnHorseLinkChild_Init = 0x80A4FE9C; // type:func -EnHorseLinkChild_Destroy = 0x80A50074; // type:func -func_80A6988C = 0x80A500C4; // type:func -func_80A698F4 = 0x80A50128; // type:func -func_80A6993C = 0x80A50170; // type:func -func_80A699FC = 0x80A50230; // type:func -func_80A69B7C = 0x80A503B8; // type:func -func_80A69C18 = 0x80A50458; // type:func -func_80A69EC0 = 0x80A50700; // type:func -func_80A69F5C = 0x80A507A0; // type:func -func_80A6A068 = 0x80A508AC; // type:func -func_80A6A4DC = 0x80A50D28; // type:func -func_80A6A5A4 = 0x80A50DF0; // type:func -func_80A6A724 = 0x80A50F70; // type:func -func_80A6A7D0 = 0x80A51020; // type:func -EnHorseLinkChild_Update = 0x80A512FC; // type:func -EnHorseLinkChild_PostDraw = 0x80A51454; // type:func -EnHorseLinkChild_OverrideLimbDraw = 0x80A515E0; // type:func -EnHorseLinkChild_Draw = 0x80A51668; // type:func -func_80A6B250 = 0x80A51A00; // type:func -func_80A6B30C = 0x80A51ABC; // type:func -EnHorseNormal_Init = 0x80A51B84; // type:func -EnHorseNormal_Destroy = 0x80A52074; // type:func -func_80A6B91C = 0x80A520D4; // type:func -EnHorseNormal_FollowPath = 0x80A5218C; // type:func -EnHorseNormal_NextAnimation = 0x80A52368; // type:func -EnHorseNormal_CycleAnimations = 0x80A523BC; // type:func -func_80A6BC48 = 0x80A52404; // type:func -func_80A6BCEC = 0x80A524AC; // type:func -func_80A6BD7C = 0x80A5253C; // type:func -EnHorseNormal_Wander = 0x80A52630; // type:func -func_80A6C4CC = 0x80A52C94; // type:func -EnHorseNormal_Wait = 0x80A52D3C; // type:func -func_80A6C6B0 = 0x80A52E7C; // type:func -EnHorseNormal_WaitClone = 0x80A52F30; // type:func -func_80A6C8E0 = 0x80A530B4; // type:func -EnHorseNormal_Update = 0x80A53178; // type:func -EnHorseNormal_PostDraw = 0x80A532D4; // type:func -func_80A6CC88 = 0x80A53460; // type:func -EnHorseNormal_Draw = 0x80A53648; // type:func -EnHorseZelda_GetFieldPosition = 0x80A54020; // type:func -EnHorseZelda_Move = 0x80A5406C; // type:func -EnHorseZelda_Init = 0x80A54234; // type:func -EnHorseZelda_Destroy = 0x80A54384; // type:func -EnHorseZelda_SetupStop = 0x80A543D4; // type:func -EnHorseZelda_Stop = 0x80A54424; // type:func -EnHorseZelda_Spur = 0x80A5446C; // type:func -EnHorseZelda_Gallop = 0x80A54554; // type:func -EnHorseZelda_SetRotate = 0x80A54594; // type:func -EnHorseZelda_Update = 0x80A54658; // type:func -EnHorseZelda_PostDraw = 0x80A54734; // type:func -EnHorseZelda_Draw = 0x80A548C0; // type:func -func_80A6E3A0 = 0x80A54B10; // type:func -EnHs_Init = 0x80A54B1C; // type:func -EnHs_Destroy = 0x80A54C60; // type:func -func_80A6E53C = 0x80A54C8C; // type:func -func_80A6E5EC = 0x80A54D40; // type:func -func_80A6E630 = 0x80A54D84; // type:func -func_80A6E6B0 = 0x80A54E04; // type:func -func_80A6E6D8 = 0x80A54E2C; // type:func -func_80A6E70C = 0x80A54E64; // type:func -func_80A6E740 = 0x80A54E9C; // type:func -func_80A6E7BC = 0x80A54F1C; // type:func -func_80A6E8CC = 0x80A5502C; // type:func -func_80A6E9AC = 0x80A55108; // type:func -EnHs_Update = 0x80A55250; // type:func -EnHs_OverrideLimbDraw = 0x80A553BC; // type:func -EnHs_PostLimbDraw = 0x80A55478; // type:func -EnHs_Draw = 0x80A554B8; // type:func -EnHs2_Init = 0x80A556B0; // type:func -EnHs2_Destroy = 0x80A55790; // type:func -func_80A6F0B4 = 0x80A557BC; // type:func -func_80A6F164 = 0x80A55870; // type:func -func_80A6F1A4 = 0x80A558AC; // type:func -EnHs2_Update = 0x80A558F8; // type:func -EnHs2_OverrideLimbDraw = 0x80A55A64; // type:func -EnHs2_PostLimbDraw = 0x80A55AEC; // type:func -EnHs2_Draw = 0x80A55B2C; // type:func -EnHy_FindSkelAndHeadObjects = 0x80A55C90; // type:func -EnHy_AreSkelAndHeadObjectsLoaded = 0x80A55DA4; // type:func -EnHy_FindOsAnimeObject = 0x80A55E2C; // type:func -EnHy_IsOsAnimeObjectLoaded = 0x80A55E7C; // type:func -func_80A6F7CC = 0x80A55EBC; // type:func -EnHy_GetTextId = 0x80A55F00; // type:func -EnHy_UpdateTalkState = 0x80A56748; // type:func -EnHy_UpdateEyes = 0x80A56C94; // type:func -EnHy_InitCollider = 0x80A56D50; // type:func -EnHy_InitSetProperties = 0x80A56D8C; // type:func -EnHy_UpdateCollider = 0x80A56E24; // type:func -func_80A70834 = 0x80A56F28; // type:func -func_80A70978 = 0x80A57070; // type:func -EnHy_ShouldSpawn = 0x80A571E0; // type:func -EnHy_Init = 0x80A5747C; // type:func -EnHy_Destroy = 0x80A5750C; // type:func -EnHy_InitImpl = 0x80A57538; // type:func -func_80A710F8 = 0x80A57804; // type:func -func_80A711B4 = 0x80A578C0; // type:func -func_80A7127C = 0x80A5798C; // type:func -EnHy_DoNothing = 0x80A579C4; // type:func -func_80A712C0 = 0x80A579D4; // type:func -func_80A7134C = 0x80A57A60; // type:func -func_80A714C4 = 0x80A57BDC; // type:func -func_80A71530 = 0x80A57C4C; // type:func -EnHy_Update = 0x80A57CFC; // type:func -EnHy_OverrideLimbDraw = 0x80A57DDC; // type:func -EnHy_PostLimbDraw = 0x80A58148; // type:func -EnHy_SetEnvColor = 0x80A58254; // type:func -EnHy_Draw = 0x80A582C0; // type:func -EnIceHono_XZDistanceSquared = 0x80A595D0; // type:func -EnIceHono_InitCapturableFlame = 0x80A59600; // type:func -EnIceHono_InitDroppedFlame = 0x80A596A4; // type:func -EnIceHono_InitSmallFlame = 0x80A597AC; // type:func -EnIceHono_Init = 0x80A59814; // type:func -EnIceHono_Destroy = 0x80A59974; // type:func -EnIceHono_InBottleRange = 0x80A599CC; // type:func -EnIceHono_SetupActionCapturableFlame = 0x80A59ABC; // type:func -EnIceHono_CapturableFlame = 0x80A59AE4; // type:func -EnIceHono_SetupActionDroppedFlame = 0x80A59B94; // type:func -EnIceHono_DropFlame = 0x80A59BB8; // type:func -EnIceHono_SetupActionSpreadFlames = 0x80A59D78; // type:func -EnIceHono_SpreadFlames = 0x80A59D9C; // type:func -EnIceHono_SetupActionSmallFlame = 0x80A59FF8; // type:func -EnIceHono_SmallFlameMove = 0x80A5A0CC; // type:func -EnIceHono_Update = 0x80A5A224; // type:func -EnIceHono_Draw = 0x80A5A3B8; // type:func -EnIk_Destroy = 0x80A5A7C0; // type:func -EnIk_SetupAction = 0x80A5A840; // type:func -EnIk_InitImpl = 0x80A5A84C; // type:func -EnIk_HandleBlocking = 0x80A5AA98; // type:func -EnIk_FindBreakableProp = 0x80A5AB28; // type:func -EnIk_SetupStandUp = 0x80A5ABC8; // type:func -EnIk_StandUp = 0x80A5AC74; // type:func -EnIk_SetupIdle = 0x80A5AD54; // type:func -EnIk_Idle = 0x80A5ADE4; // type:func -EnIk_SetupWalkOrRun = 0x80A5AF64; // type:func -EnIk_WalkOrRun = 0x80A5B05C; // type:func -EnIk_SetupVerticalAttack = 0x80A5B2E4; // type:func -EnIk_VerticalAttack = 0x80A5B374; // type:func -EnIk_SetupPullOutAxe = 0x80A5B528; // type:func -EnIk_PullOutAxe = 0x80A5B5C8; // type:func -EnIk_SetupDoubleHorizontalAttack = 0x80A5B684; // type:func -EnIk_DoubleHorizontalAttack = 0x80A5B71C; // type:func -EnIk_SetupRecoverFromHorizontalAttack = 0x80A5B88C; // type:func -EnIk_RecoverFromHorizontalAttack = 0x80A5B918; // type:func -EnIk_SetupSingleHorizontalAttack = 0x80A5B960; // type:func -EnIk_SingleHorizontalAttack = 0x80A5B9F0; // type:func -EnIk_SetupStopAndBlock = 0x80A5BAB0; // type:func -EnIk_StopAndBlock = 0x80A5BB3C; // type:func -EnIk_SetupReactToAttack = 0x80A5BC50; // type:func -EnIk_ReactToAttack = 0x80A5BD70; // type:func -EnIk_SetupDie = 0x80A5BE4C; // type:func -EnIk_Die = 0x80A5BEF8; // type:func -EnIk_UpdateDamage = 0x80A5C0F4; // type:func -EnIk_UpdateEnemy = 0x80A5C460; // type:func -EnIk_SetPrimEnvColors = 0x80A5C678; // type:func -EnIk_OverrideLimbDrawEnemy = 0x80A5C730; // type:func -EnIk_PostLimbDrawEnemy = 0x80A5C7F0; // type:func -EnIk_DrawEnemy = 0x80A5CC04; // type:func -EnIk_StartMinibossBgm = 0x80A5D03C; // type:func -EnIk_UpdateAction2Sfx = 0x80A5D05C; // type:func -EnIk_PlayAxeSpawnSfx = 0x80A5D228; // type:func -EnIk_SpawnAxeSmoke = 0x80A5D278; // type:func -EnIk_UpdateBgCheckInfo = 0x80A5D484; // type:func -EnIk_UpdateSkelAnime = 0x80A5D4CC; // type:func -EnIk_GetCue = 0x80A5D4F0; // type:func -EnIk_SetStartPosRotFromCue = 0x80A5D518; // type:func -EnIk_GetAnimCurFrame = 0x80A5D598; // type:func -EnIk_SetupCsAction0 = 0x80A5D5A4; // type:func -EnIk_SetupCsAction1 = 0x80A5D5B8; // type:func -EnIk_SetupCsAction2 = 0x80A5D644; // type:func -EnIk_HandleEnemyChange = 0x80A5D6C4; // type:func -EnIk_PlayArmorFallSfx = 0x80A5D704; // type:func -EnIk_PlayDeathSfx = 0x80A5D74C; // type:func -EnIk_SetupCsAction3 = 0x80A5D7C0; // type:func -EnIk_SetupCsAction4 = 0x80A5D898; // type:func -EnIk_SetupCsAction5 = 0x80A5D8D4; // type:func -EnIk_CsAction3 = 0x80A5D8F0; // type:func -EnIk_CsAction4 = 0x80A5D928; // type:func -EnIk_CsAction5 = 0x80A5D968; // type:func -EnIk_OverrideLimbDrawDefeat = 0x80A5D9A4; // type:func -EnIk_PostLimbDrawDefeat = 0x80A5DA10; // type:func -EnIk_CsDrawDefeat = 0x80A5DC5C; // type:func -EnIk_HandleCsCues = 0x80A5DDC0; // type:func -EnIk_CsAction0 = 0x80A5DEBC; // type:func -EnIk_CsAction1 = 0x80A5DEDC; // type:func -EnIk_CsAction2 = 0x80A5DF14; // type:func -EnIk_UpdateCutscene = 0x80A5DF78; // type:func -EnIk_OverrideLimbDrawIntro = 0x80A5DFC0; // type:func -EnIk_PostLimbDrawIntro = 0x80A5E044; // type:func -EnIk_CsDrawNothing = 0x80A5E230; // type:func -EnIk_CsDrawIntro = 0x80A5E240; // type:func -EnIk_DrawCutscene = 0x80A5E3A4; // type:func -EnIk_CsInit = 0x80A5E3EC; // type:func -EnIk_ChangeToEnemy = 0x80A5E45C; // type:func -EnIk_StartDefeatCutscene = 0x80A5E4C8; // type:func -EnIk_Init = 0x80A5E55C; // type:func -EnIn_GetTextIdChild = 0x80A5EE20; // type:func -EnIn_GetTextIdAdult = 0x80A5EE80; // type:func -EnIn_GetTextId = 0x80A5EFD8; // type:func -EnIn_UpdateTalkStateOnClosing = 0x80A5F03C; // type:func -EnIn_UpdateTalkStateOnChoice = 0x80A5F0B0; // type:func -EnIn_UpdateTalkStateOnEvent = 0x80A5F300; // type:func -EnIn_UpdateTalkState = 0x80A5F36C; // type:func -func_80A795C8 = 0x80A5F434; // type:func -func_80A79690 = 0x80A5F4FC; // type:func -EnIn_ChangeAnim = 0x80A5F558; // type:func -func_80A7975C = 0x80A5F5C8; // type:func -func_80A79830 = 0x80A5F69C; // type:func -EnIn_UpdateEyes = 0x80A5F898; // type:func -func_80A79AB4 = 0x80A5F920; // type:func -func_80A79BAC = 0x80A5FA18; // type:func -func_80A79C78 = 0x80A5FAE4; // type:func -EnIn_Init = 0x80A5FCD8; // type:func -EnIn_Destroy = 0x80A5FDE4; // type:func -EnIn_WaitForObject = 0x80A5FE28; // type:func -func_80A7A304 = 0x80A60180; // type:func -func_80A7A4BC = 0x80A60338; // type:func -func_80A7A4C8 = 0x80A60348; // type:func -func_80A7A568 = 0x80A603EC; // type:func -func_80A7A770 = 0x80A605F4; // type:func -func_80A7A848 = 0x80A606CC; // type:func -func_80A7A940 = 0x80A607C4; // type:func -func_80A7AA40 = 0x80A608C4; // type:func -func_80A7ABD4 = 0x80A60A58; // type:func -func_80A7AE84 = 0x80A60D0C; // type:func -func_80A7AEF0 = 0x80A60D78; // type:func -func_80A7B018 = 0x80A60EA4; // type:func -func_80A7B024 = 0x80A60EB4; // type:func -EnIn_Update = 0x80A60FA0; // type:func -EnIn_OverrideLimbDraw = 0x80A611B4; // type:func -EnIn_PostLimbDraw = 0x80A61408; // type:func -EnIn_Draw = 0x80A61518; // type:func -EnInsect_InitFlags = 0x80A61BC0; // type:func -EnInsect_XZDistanceSquared = 0x80A61BE4; // type:func -EnInsect_InBottleRange = 0x80A61C14; // type:func -EnInsect_SetCrawlAnim = 0x80A61D04; // type:func -EnInsect_TryFindNearbySoil = 0x80A61D50; // type:func -EnInsect_UpdateCrawlSfx = 0x80A61E08; // type:func -EnInsect_Init = 0x80A61E9C; // type:func -EnInsect_Destroy = 0x80A620E8; // type:func -EnInsect_SetupSlowDown = 0x80A62158; // type:func -EnInsect_SlowDown = 0x80A621A8; // type:func -EnInsect_SetupCrawl = 0x80A6234C; // type:func -EnInsect_Crawl = 0x80A6239C; // type:func -EnInsect_SetupRunFromPlayer = 0x80A625C8; // type:func -EnInsect_RunFromPlayer = 0x80A62618; // type:func -EnInsect_SetupCaught = 0x80A62810; // type:func -EnInsect_Caught = 0x80A6287C; // type:func -EnInsect_SetupDig = 0x80A62974; // type:func -EnInsect_Dig = 0x80A629EC; // type:func -EnInsect_SetupWalkOnWater = 0x80A62C10; // type:func -EnInsect_WalkOnWater = 0x80A62C70; // type:func -EnInsect_SetupDrown = 0x80A62FA4; // type:func -EnInsect_Drown = 0x80A6301C; // type:func -EnInsect_SetupDropped = 0x80A6314C; // type:func -EnInsect_Dropped = 0x80A63214; // type:func -EnInsect_Update = 0x80A63944; // type:func -EnInsect_Draw = 0x80A63B8C; // type:func -EnIshi_InitCollider = 0x80A640E0; // type:func -EnIshi_SnapToFloor = 0x80A64158; // type:func -EnIshi_SpawnFragmentsSmall = 0x80A641FC; // type:func -EnIshi_SpawnFragmentsLarge = 0x80A64478; // type:func -EnIshi_SpawnDustSmall = 0x80A64764; // type:func -EnIshi_SpawnDustLarge = 0x80A64858; // type:func -EnIshi_DropCollectible = 0x80A6494C; // type:func -EnIshi_Fall = 0x80A649BC; // type:func -func_80A7ED94 = 0x80A649F0; // type:func -EnIshi_SpawnBugs = 0x80A64A74; // type:func -EnIshi_Init = 0x80A64B30; // type:func -EnIshi_Destroy = 0x80A64CCC; // type:func -EnIshi_SetupWait = 0x80A64CF8; // type:func -EnIshi_Wait = 0x80A64D0C; // type:func -EnIshi_SetupLiftedUp = 0x80A64F64; // type:func -EnIshi_LiftedUp = 0x80A64F8C; // type:func -EnIshi_SetupFly = 0x80A65060; // type:func -EnIshi_Fly = 0x80A6518C; // type:func -EnIshi_Update = 0x80A654F8; // type:func -EnIshi_DrawSmall = 0x80A6551C; // type:func -EnIshi_DrawLarge = 0x80A6554C; // type:func -EnIshi_Draw = 0x80A655F4; // type:func -EnIt_Init = 0x80A6D230; // type:func -EnIt_Destroy = 0x80A6D29C; // type:func -EnIt_Update = 0x80A6D2C8; // type:func -EnJj_SetupAction = 0x80A6D3C0; // type:func -EnJj_Init = 0x80A6D3CC; // type:func -EnJj_Destroy = 0x80A6D65C; // type:func -EnJj_Blink = 0x80A6D6EC; // type:func -EnJj_OpenMouth = 0x80A6D76C; // type:func -EnJj_WaitToOpenMouth = 0x80A6D7C0; // type:func -EnJj_WaitForFish = 0x80A6D804; // type:func -EnJj_BeginCutscene = 0x80A6D8C0; // type:func -EnJj_CutsceneUpdate = 0x80A6D968; // type:func -EnJj_RemoveDust = 0x80A6DAC4; // type:func -EnJj_UpdateStaticCollision = 0x80A6DB1C; // type:func -EnJj_Update = 0x80A6DB2C; // type:func -EnJj_Draw = 0x80A6DBD8; // type:func -En_Js_SetupAction = 0x80A6E990; // type:func -EnJs_Init = 0x80A6E99C; // type:func -EnJs_Destroy = 0x80A6EAC0; // type:func -func_80A88F64 = 0x80A6EAEC; // type:func -func_80A89008 = 0x80A6EB94; // type:func -func_80A89078 = 0x80A6EC08; // type:func -func_80A890C0 = 0x80A6EC54; // type:func -func_80A8910C = 0x80A6ECA4; // type:func -func_80A89160 = 0x80A6ECF8; // type:func -func_80A891C4 = 0x80A6ED60; // type:func -func_80A89294 = 0x80A6EE34; // type:func -func_80A89304 = 0x80A6EEA8; // type:func -EnJs_Update = 0x80A6EEE0; // type:func -EnJs_OverrideLimbDraw = 0x80A6F16C; // type:func -EnJs_PostLimbDraw = 0x80A6F1A4; // type:func -EnJs_Draw = 0x80A6F1E4; // type:func -EnJsjutan_Init = 0x80A6F360; // type:func -EnJsjutan_Destroy = 0x80A6F3F4; // type:func -func_80A89860 = 0x80A6F428; // type:func -func_80A89A6C = 0x80A6F634; // type:func -EnJsjutan_Update = 0x80A70114; // type:func -EnJsjutan_Draw = 0x80A701EC; // type:func -EnKakasi_Destroy = 0x80A74C90; // type:func -EnKakasi_Init = 0x80A74CBC; // type:func -func_80A8F28C = 0x80A74D84; // type:func -func_80A8F320 = 0x80A74E18; // type:func -func_80A8F660 = 0x80A75158; // type:func -func_80A8F75C = 0x80A75254; // type:func -func_80A8F8D0 = 0x80A753D0; // type:func -func_80A8F9C8 = 0x80A754BC; // type:func -func_80A8FAA4 = 0x80A7559C; // type:func -func_80A8FBB8 = 0x80A756A0; // type:func -EnKakasi_Update = 0x80A75738; // type:func -EnKakasi_Draw = 0x80A7583C; // type:func -EnKakasi2_Init = 0x80A759D0; // type:func -EnKakasi2_Destroy = 0x80A75B2C; // type:func -func_80A90264 = 0x80A75B58; // type:func -func_80A904D8 = 0x80A75CB0; // type:func -func_80A90578 = 0x80A75D50; // type:func -func_80A9062C = 0x80A75E04; // type:func -func_80A906C4 = 0x80A75E9C; // type:func -EnKakasi2_Update = 0x80A75F0C; // type:func -func_80A90948 = 0x80A75FCC; // type:func -EnKakasi3_Destroy = 0x80A760F0; // type:func -EnKakasi3_Init = 0x80A7611C; // type:func -func_80A90E28 = 0x80A761E4; // type:func -func_80A90EBC = 0x80A76278; // type:func -func_80A911F0 = 0x80A765AC; // type:func -func_80A91284 = 0x80A76640; // type:func -func_80A91348 = 0x80A76704; // type:func -func_80A915B8 = 0x80A7697C; // type:func -func_80A91620 = 0x80A769E8; // type:func -func_80A91760 = 0x80A76B28; // type:func -func_80A917FC = 0x80A76BC8; // type:func -func_80A9187C = 0x80A76C50; // type:func -func_80A918E4 = 0x80A76CBC; // type:func -func_80A91A90 = 0x80A76E00; // type:func -EnKakasi3_Update = 0x80A76F00; // type:func -EnKakasi3_Draw = 0x80A76FF8; // type:func -EnKanban_SetFloorRot = 0x80A771D0; // type:func -EnKanban_Init = 0x80A7728C; // type:func -EnKanban_Destroy = 0x80A773B4; // type:func -EnKanban_Message = 0x80A773EC; // type:func -EnKanban_Update = 0x80A774A4; // type:func -EnKanban_Draw = 0x80A78D20; // type:func -EnKarebaba_Init = 0x80A7A320; // type:func -EnKarebaba_Destroy = 0x80A7A454; // type:func -EnKarebaba_ResetCollider = 0x80A7A494; // type:func -EnKarebaba_SetupGrow = 0x80A7A4D0; // type:func -EnKarebaba_SetupIdle = 0x80A7A520; // type:func -EnKarebaba_SetupAwaken = 0x80A7A574; // type:func -EnKarebaba_SetupUpright = 0x80A7A5F0; // type:func -EnKarebaba_SetupSpin = 0x80A7A690; // type:func -EnKarebaba_SetupDying = 0x80A7A6AC; // type:func -EnKarebaba_SetupDeadItemDrop = 0x80A7A720; // type:func -EnKarebaba_SetupRetract = 0x80A7A7C0; // type:func -EnKarebaba_SetupDead = 0x80A7A840; // type:func -EnKarebaba_SetupRegrow = 0x80A7A8CC; // type:func -EnKarebaba_Grow = 0x80A7A920; // type:func -EnKarebaba_Idle = 0x80A7A9B8; // type:func -EnKarebaba_Awaken = 0x80A7AA18; // type:func -EnKarebaba_Upright = 0x80A7AAEC; // type:func -EnKarebaba_Spin = 0x80A7ABE0; // type:func -EnKarebaba_Dying = 0x80A7AD74; // type:func -EnKarebaba_DeadItemDrop = 0x80A7B02C; // type:func -EnKarebaba_Retract = 0x80A7B094; // type:func -EnKarebaba_Dead = 0x80A7B168; // type:func -EnKarebaba_Regrow = 0x80A7B1C0; // type:func -EnKarebaba_Update = 0x80A7B28C; // type:func -EnKarebaba_DrawBaseShadow = 0x80A7B440; // type:func -EnKarebaba_Draw = 0x80A7B52C; // type:func -EnKo_AreObjectsAvailable = 0x80A7BC10; // type:func -EnKo_AreObjectsLoaded = 0x80A7BD28; // type:func -EnKo_IsOsAnimeAvailable = 0x80A7BDB0; // type:func -EnKo_IsOsAnimeLoaded = 0x80A7BE00; // type:func -EnKo_GetTextIdChild = 0x80A7BE40; // type:func -EnKo_GetTextIdAdult = 0x80A7C1A8; // type:func -EnKo_GetTextId = 0x80A7C480; // type:func -EnKo_UpdateTalkState = 0x80A7C5AC; // type:func -EnKo_GetForestQuestState = 0x80A7C9AC; // type:func -func_80A97BC0 = 0x80A7CA34; // type:func -func_80A97C7C = 0x80A7CAF0; // type:func -EnKo_IsWithinTalkAngle = 0x80A7CB74; // type:func -func_80A97D68 = 0x80A7CBE0; // type:func -func_80A97E18 = 0x80A7CC90; // type:func -func_80A97EB0 = 0x80A7CD2C; // type:func -func_80A97F20 = 0x80A7CDA0; // type:func -func_80A97F70 = 0x80A7CDF0; // type:func -func_80A98034 = 0x80A7CEB4; // type:func -func_80A98124 = 0x80A7CFA8; // type:func -func_80A98174 = 0x80A7CFF8; // type:func -EnKo_ChildStart = 0x80A7D0DC; // type:func -EnKo_ChildStone = 0x80A7D1E4; // type:func -EnKo_ChildSaria = 0x80A7D2EC; // type:func -EnKo_AdultEnemy = 0x80A7D3F4; // type:func -EnKo_AdultSaved = 0x80A7D4FC; // type:func -func_80A9877C = 0x80A7D604; // type:func -EnKo_CanSpawn = 0x80A7D7C0; // type:func -EnKo_Blink = 0x80A7DAA4; // type:func -func_80A98CD8 = 0x80A7DB64; // type:func -EnKo_GetForestQuestState2 = 0x80A7DBBC; // type:func -func_80A98DB4 = 0x80A7DC48; // type:func -func_80A98ECC = 0x80A7DD60; // type:func -EnKo_Init = 0x80A7DE28; // type:func -EnKo_Destroy = 0x80A7DEB8; // type:func -func_80A99048 = 0x80A7DEE4; // type:func -func_80A99384 = 0x80A7E214; // type:func -func_80A99438 = 0x80A7E2C8; // type:func -func_80A99504 = 0x80A7E394; // type:func -func_80A99560 = 0x80A7E3F4; // type:func -func_80A995CC = 0x80A7E464; // type:func -EnKo_Update = 0x80A7E5A0; // type:func -EnKo_OverrideLimbDraw = 0x80A7E704; // type:func -EnKo_PostLimbDraw = 0x80A7EA64; // type:func -EnKo_SetEnvColor = 0x80A7EB34; // type:func -EnKo_Draw = 0x80A7EBA0; // type:func -EnKusa_SetupAction = 0x80A7FD50; // type:func -EnKusa_SnapToFloor = 0x80A7FD60; // type:func -EnKusa_DropCollectible = 0x80A7FE04; // type:func -EnKusa_UpdateVelY = 0x80A7FED0; // type:func -EnKusa_RandScaleVecToZero = 0x80A7FF04; // type:func -EnKusa_SetScaleSmall = 0x80A7FF88; // type:func -EnKusa_SpawnFragments = 0x80A7FFAC; // type:func -EnKusa_SpawnBugs = 0x80A80304; // type:func -EnKusa_InitCollider = 0x80A803C0; // type:func -EnKusa_Init = 0x80A80418; // type:func -EnKusa_Destroy = 0x80A80540; // type:func -EnKusa_SetupWaitForObject = 0x80A8056C; // type:func -EnKusa_WaitForObject = 0x80A80590; // type:func -EnKusa_SetupMain = 0x80A80620; // type:func -EnKusa_Main = 0x80A80658; // type:func -EnKusa_SetupLiftedUp = 0x80A80820; // type:func -EnKusa_LiftedUp = 0x80A8085C; // type:func -EnKusa_SetupFall = 0x80A8093C; // type:func -EnKusa_Fall = 0x80A809A8; // type:func -EnKusa_SetupCut = 0x80A80C38; // type:func -EnKusa_CutWaitRegrow = 0x80A80C88; // type:func -EnKusa_DoNothing = 0x80A80CBC; // type:func -EnKusa_SetupUprootedWaitRegrow = 0x80A80CCC; // type:func -EnKusa_UprootedWaitRegrow = 0x80A80D38; // type:func -EnKusa_SetupRegrow = 0x80A80D9C; // type:func -EnKusa_Regrow = 0x80A80DF4; // type:func -EnKusa_Update = 0x80A80E8C; // type:func -EnKusa_Draw = 0x80A80EF0; // type:func -EnKz_GetTextIdChild = 0x80A81230; // type:func -EnKz_GetTextIdAdult = 0x80A8128C; // type:func -EnKz_GetTextId = 0x80A8133C; // type:func -EnKz_UpdateTalkState = 0x80A813A4; // type:func -EnKz_UpdateEyes = 0x80A815C8; // type:func -EnKz_UpdateTalking = 0x80A81640; // type:func -func_80A9CB18 = 0x80A817FC; // type:func -EnKz_FollowPath = 0x80A819BC; // type:func -EnKz_SetMovedPos = 0x80A81B28; // type:func -EnKz_Init = 0x80A81BF0; // type:func -EnKz_Destroy = 0x80A81D7C; // type:func -EnKz_PreMweepWait = 0x80A81DA8; // type:func -EnKz_SetupMweep = 0x80A81E18; // type:func -EnKz_Mweep = 0x80A81F44; // type:func -EnKz_StopMweep = 0x80A820B0; // type:func -EnKz_Wait = 0x80A82114; // type:func -EnKz_SetupGetItem = 0x80A8217C; // type:func -EnKz_StartTimer = 0x80A82210; // type:func -EnKz_Update = 0x80A822A8; // type:func -EnKz_OverrideLimbDraw = 0x80A82364; // type:func -EnKz_PostLimbDraw = 0x80A82434; // type:func -EnKz_Draw = 0x80A82490; // type:func -EnLight_Init = 0x80A827D0; // type:func -EnLight_Destroy = 0x80A829B0; // type:func -EnLight_UpdatePosRot = 0x80A829E4; // type:func -EnLight_Update = 0x80A82A60; // type:func -EnLight_UpdateSwitch = 0x80A82D04; // type:func -EnLight_Draw = 0x80A8313C; // type:func -EnLightbox_Init = 0x80A835D0; // type:func -EnLightbox_Destroy = 0x80A836FC; // type:func -EnLightbox_Update = 0x80A83730; // type:func -EnLightbox_Draw = 0x80A839B8; // type:func -EnMFire1_Init = 0x80A83A50; // type:func -EnMFire1_Destroy = 0x80A83ABC; // type:func -EnMFire1_Update = 0x80A83AE8; // type:func -func_80A9EFE0 = 0x80A83BF0; // type:func -EnMThunder_Init = 0x80A83BFC; // type:func -EnMThunder_Destroy = 0x80A83EBC; // type:func -func_80A9F314 = 0x80A83F2C; // type:func -func_80A9F350 = 0x80A83F68; // type:func -func_80A9F408 = 0x80A84020; // type:func -func_80A9F938 = 0x80A84554; // type:func -func_80A9F9B4 = 0x80A845D0; // type:func -EnMThunder_Update = 0x80A8473C; // type:func -EnMThunder_Draw = 0x80A84910; // type:func -EnMa1_GetTextId = 0x80A851F0; // type:func -EnMa1_UpdateTalkState = 0x80A852D8; // type:func -EnMa1_ShouldSpawn = 0x80A85424; // type:func -EnMa1_UpdateEyes = 0x80A85570; // type:func -EnMa1_ChangeAnim = 0x80A855E8; // type:func -EnMa1_UpdateTracking = 0x80A85658; // type:func -EnMa1_UpdateSinging = 0x80A856D8; // type:func -EnMa1_Init = 0x80A85750; // type:func -EnMa1_Destroy = 0x80A858B8; // type:func -EnMa1_Idle = 0x80A858F8; // type:func -EnMa1_GiveWeirdEgg = 0x80A85A10; // type:func -EnMa1_FinishGivingWeirdEgg = 0x80A85A70; // type:func -EnMa1_IdleTeachSong = 0x80A85AB8; // type:func -EnMa1_StartTeachSong = 0x80A85BE4; // type:func -EnMa1_TeachSong = 0x80A85C68; // type:func -EnMa1_WaitForPlayback = 0x80A85CD0; // type:func -EnMa1_DoNothing = 0x80A85D48; // type:func -EnMa1_Update = 0x80A85D58; // type:func -EnMa1_OverrideLimbDraw = 0x80A85E44; // type:func -EnMa1_PostLimbDraw = 0x80A85FD4; // type:func -EnMa1_Draw = 0x80A86030; // type:func -EnMa2_GetTextId = 0x80A864D0; // type:func -EnMa2_UpdateTalkState = 0x80A86568; // type:func -func_80AA1AE4 = 0x80A86618; // type:func -func_80AA1B58 = 0x80A8668C; // type:func -func_80AA1C68 = 0x80A8679C; // type:func -EnMa2_UpdateEyes = 0x80A867F4; // type:func -EnMa2_ChangeAnim = 0x80A86880; // type:func -func_80AA1DB4 = 0x80A868F0; // type:func -EnMa2_Init = 0x80A8697C; // type:func -EnMa2_Destroy = 0x80A86B20; // type:func -func_80AA2018 = 0x80A86B60; // type:func -func_80AA204C = 0x80A86B94; // type:func -func_80AA20E4 = 0x80A86C30; // type:func -func_80AA21C8 = 0x80A86D1C; // type:func -EnMa2_Update = 0x80A86DBC; // type:func -EnMa2_OverrideLimbDraw = 0x80A86EAC; // type:func -EnMa2_PostLimbDraw = 0x80A870EC; // type:func -EnMa2_Draw = 0x80A871A0; // type:func -EnMa3_GetTextId = 0x80A87530; // type:func -EnMa3_UpdateTalkState = 0x80A87668; // type:func -func_80AA2E54 = 0x80A878E8; // type:func -func_80AA2EC8 = 0x80A8795C; // type:func -func_80AA2F28 = 0x80A879C0; // type:func -EnMa3_UpdateEyes = 0x80A87A18; // type:func -EnMa3_ChangeAnim = 0x80A87AA4; // type:func -EnMa3_Init = 0x80A87B14; // type:func -EnMa3_Destroy = 0x80A87C68; // type:func -func_80AA3200 = 0x80A87CA8; // type:func -EnMa3_Update = 0x80A87CDC; // type:func -EnMa3_OverrideLimbDraw = 0x80A87DF0; // type:func -EnMa3_PostLimbDraw = 0x80A88030; // type:func -EnMa3_Draw = 0x80A880E4; // type:func -EnMag_Init = 0x80A884E0; // type:func -EnMag_Destroy = 0x80A88768; // type:func -EnMag_Update = 0x80A88778; // type:func -EnMag_DrawTextureI8 = 0x80A88E50; // type:func -EnMag_DrawEffectTextures = 0x80A89078; // type:func -EnMag_DrawImageRGBA32 = 0x80A894B0; // type:func -EnMag_DrawCharTexture = 0x80A89890; // type:func -EnMag_DrawInner = 0x80A89A5C; // type:func -EnMag_Draw = 0x80A8ABE4; // type:func -EnMb_SetupAction = 0x80A8AE10; // type:func -EnMb_Init = 0x80A8AE1C; // type:func -EnMb_Destroy = 0x80A8B180; // type:func -EnMb_FaceWaypoint = 0x80A8B1D0; // type:func -EnMb_NextWaypoint = 0x80A8B208; // type:func -EnMb_IsPlayerInCorridor = 0x80A8B2F4; // type:func -EnMb_FindWaypointTowardsPlayer = 0x80A8B468; // type:func -EnMb_SetupSpearGuardLookAround = 0x80A8B5F8; // type:func -EnMb_SetupClubWaitPlayerNear = 0x80A8B660; // type:func -EnMb_SetupSpearPatrolTurnTowardsWaypoint = 0x80A8B6C4; // type:func -EnMb_SetupSpearGuardWalk = 0x80A8B73C; // type:func -EnMb_SetupSpearPatrolWalkTowardsWaypoint = 0x80A8B7E0; // type:func -EnMb_SetupSpearPrepareAndCharge = 0x80A8B890; // type:func -EnMb_SetupSpearPatrolImmediateCharge = 0x80A8B948; // type:func -EnMb_SetupClubAttack = 0x80A8B9B8; // type:func -EnMb_SetupSpearEndChargeQuick = 0x80A8BA88; // type:func -EnMb_SetupSpearPatrolEndCharge = 0x80A8BAE8; // type:func -EnMb_SetupClubWaitAfterAttack = 0x80A8BB6C; // type:func -EnMb_SetupClubDamaged = 0x80A8BBE4; // type:func -EnMb_SetupClubDamagedWhileKneeling = 0x80A8BC44; // type:func -EnMb_SetupClubDead = 0x80A8BCCC; // type:func -EnMb_SetupStunned = 0x80A8BD54; // type:func -EnMb_Stunned = 0x80A8BDF8; // type:func -EnMb_SpearGuardLookAround = 0x80A8BF04; // type:func -EnMb_SpearPatrolTurnTowardsWaypoint = 0x80A8BF7C; // type:func -EnMb_SpearEndChargeQuick = 0x80A8C0E0; // type:func -EnMb_ClubWaitAfterAttack = 0x80A8C248; // type:func -EnMb_SpearPatrolEndCharge = 0x80A8C28C; // type:func -EnMb_SpearGuardPrepareAndCharge = 0x80A8C5A4; // type:func -EnMb_ClubAttack = 0x80A8C70C; // type:func -EnMb_SpearPatrolPrepareAndCharge = 0x80A8CA84; // type:func -EnMb_SpearPatrolImmediateCharge = 0x80A8CDE8; // type:func -EnMb_ClubDamaged = 0x80A8D158; // type:func -EnMb_ClubDamagedWhileKneeling = 0x80A8D1EC; // type:func -EnMb_ClubDead = 0x80A8D2F8; // type:func -EnMb_SpearGuardWalk = 0x80A8D5BC; // type:func -EnMb_SpearPatrolWalkTowardsWaypoint = 0x80A8D8CC; // type:func -EnMb_ClubWaitPlayerNear = 0x80A8DBB8; // type:func -EnMb_SetupSpearDamaged = 0x80A8DC68; // type:func -EnMb_SpearDamaged = 0x80A8DD30; // type:func -EnMb_SetupSpearDead = 0x80A8DDA8; // type:func -EnMb_SpearDead = 0x80A8DE80; // type:func -EnMb_SpearUpdateAttackCollider = 0x80A8E098; // type:func -EnMb_ClubUpdateAttackCollider = 0x80A8E224; // type:func -EnMb_CheckColliding = 0x80A8E2BC; // type:func -EnMb_Update = 0x80A8E488; // type:func -EnMb_PostLimbDraw = 0x80A8E65C; // type:func -EnMb_Draw = 0x80A8E7F8; // type:func -func_80AAA250 = 0x80A8F040; // type:func -func_80AAA274 = 0x80A8F068; // type:func -func_80AAA308 = 0x80A8F0FC; // type:func -func_80AAA39C = 0x80A8F190; // type:func -func_80AAA474 = 0x80A8F268; // type:func -func_80AAA508 = 0x80A8F2FC; // type:func -func_80AAA5A4 = 0x80A8F398; // type:func -func_80AAA638 = 0x80A8F42C; // type:func -func_80AAA6D4 = 0x80A8F4C8; // type:func -func_80AAA768 = 0x80A8F55C; // type:func -func_80AAA7FC = 0x80A8F5F0; // type:func -func_80AAA890 = 0x80A8F684; // type:func -func_80AAA92C = 0x80A8F720; // type:func -func_80AAA93C = 0x80A8F738; // type:func -func_80AAAA24 = 0x80A8F820; // type:func -func_80AAAC78 = 0x80A8FA74; // type:func -EnMd_GetTextIdKokiriForest = 0x80A8FAF4; // type:func -EnMd_GetTextIdMidosHouse = 0x80A8FBDC; // type:func -EnMd_GetTextIdLostWoods = 0x80A8FC10; // type:func -EnMd_GetTextId = 0x80A8FC90; // type:func -EnMd_UpdateTalkState = 0x80A8FD00; // type:func -EnMd_ShouldSpawn = 0x80A8FE38; // type:func -EnMd_UpdateEyes = 0x80A8FEDC; // type:func -func_80AAB158 = 0x80A8FF54; // type:func -EnMd_FollowPath = 0x80A90170; // type:func -EnMd_SetMovedPos = 0x80A902DC; // type:func -func_80AAB5A4 = 0x80A903A4; // type:func -EnMd_Init = 0x80A90450; // type:func -EnMd_Destroy = 0x80A9064C; // type:func -func_80AAB874 = 0x80A90678; // type:func -func_80AAB8F8 = 0x80A906FC; // type:func -func_80AAB948 = 0x80A9074C; // type:func -func_80AABC10 = 0x80A90A1C; // type:func -func_80AABD0C = 0x80A90B18; // type:func -EnMd_Update = 0x80A90C40; // type:func -EnMd_OverrideLimbDraw = 0x80A90D00; // type:func -EnMd_PostLimbDraw = 0x80A90F1C; // type:func -EnMd_Draw = 0x80A90F78; // type:func -EnMk_Init = 0x80A916B0; // type:func -EnMk_Destroy = 0x80A917C8; // type:func -func_80AACA40 = 0x80A917F4; // type:func -func_80AACA94 = 0x80A91844; // type:func -func_80AACB14 = 0x80A918CC; // type:func -func_80AACB6C = 0x80A91928; // type:func -func_80AACBAC = 0x80A91964; // type:func -func_80AACC04 = 0x80A919BC; // type:func -func_80AACCA0 = 0x80A91A58; // type:func -func_80AACD48 = 0x80A91B00; // type:func -func_80AACE2C = 0x80A91BE4; // type:func -func_80AACEE8 = 0x80A91CA0; // type:func -func_80AACFA0 = 0x80A91D58; // type:func -func_80AAD014 = 0x80A91DD0; // type:func -EnMk_Wait = 0x80A91E3C; // type:func -EnMk_Update = 0x80A92090; // type:func -EnMk_OverrideLimbDraw = 0x80A922DC; // type:func -EnMk_PostLimbDraw = 0x80A92324; // type:func -EnMk_Draw = 0x80A92364; // type:func -EnMm_ChangeAnim = 0x80A92540; // type:func -EnMm_Init = 0x80A92664; // type:func -EnMm_Destroy = 0x80A92820; // type:func -func_80AADA70 = 0x80A9284C; // type:func -func_80AADAA0 = 0x80A92880; // type:func -EnMm_GetTextId = 0x80A92A14; // type:func -func_80AADCD0 = 0x80A92AB4; // type:func -EnMm_GetPointCount = 0x80A92C34; // type:func -func_80AADE60 = 0x80A92C48; // type:func -func_80AADEF0 = 0x80A92CDC; // type:func -func_80AAE224 = 0x80A93014; // type:func -func_80AAE294 = 0x80A93084; // type:func -func_80AAE50C = 0x80A932FC; // type:func -func_80AAE598 = 0x80A93388; // type:func -EnMm_Update = 0x80A93430; // type:func -EnMm_Draw = 0x80A934A4; // type:func -EnMm_OverrideLimbDraw = 0x80A93738; // type:func -EnMm_PostLimbDraw = 0x80A937CC; // type:func -EnMm2_ChangeAnim = 0x80A93BA0; // type:func -func_80AAEF70 = 0x80A93CC4; // type:func -EnMm2_Init = 0x80A93D94; // type:func -EnMm2_Destroy = 0x80A93F4C; // type:func -func_80AAF224 = 0x80A93F78; // type:func -func_80AAF2BC = 0x80A94014; // type:func -func_80AAF330 = 0x80A94088; // type:func -func_80AAF3C0 = 0x80A94118; // type:func -func_80AAF57C = 0x80A942D4; // type:func -func_80AAF5EC = 0x80A94348; // type:func -func_80AAF668 = 0x80A943C4; // type:func -EnMm2_Update = 0x80A944B8; // type:func -EnMm2_Draw = 0x80A94600; // type:func -EnMm2_OverrideLimbDraw = 0x80A946CC; // type:func -EnMm2_PostLimbDraw = 0x80A94754; // type:func -EnMs_SetOfferText = 0x80A94960; // type:func -EnMs_Init = 0x80A949DC; // type:func -EnMs_Destroy = 0x80A94B00; // type:func -EnMs_Wait = 0x80A94B2C; // type:func -EnMs_Talk = 0x80A94BD8; // type:func -EnMs_Sell = 0x80A94CF4; // type:func -EnMs_TalkAfterPurchase = 0x80A94D90; // type:func -EnMs_Update = 0x80A94DF0; // type:func -EnMs_Draw = 0x80A94EE8; // type:func -EnMu_SetupAction = 0x80A95050; // type:func -EnMu_Interact = 0x80A9505C; // type:func -EnMu_GetTextId = 0x80A951BC; // type:func -EnMu_UpdateTalkState = 0x80A95200; // type:func -EnMu_Init = 0x80A9526C; // type:func -EnMu_Destroy = 0x80A95344; // type:func -EnMu_Pose = 0x80A95368; // type:func -EnMu_Update = 0x80A953A0; // type:func -EnMu_OverrideLimbDraw = 0x80A954E8; // type:func -EnMu_PostLimbDraw = 0x80A955D4; // type:func -EnMu_DisplayListSetColor = 0x80A955EC; // type:func -EnMu_Draw = 0x80A95658; // type:func -EnNb_GetPath = 0x80A95970; // type:func -EnNb_GetType = 0x80A95984; // type:func -EnNb_UpdatePath = 0x80A95994; // type:func -EnNb_SetupCollider = 0x80A95AC0; // type:func -EnNb_UpdateCollider = 0x80A95B0C; // type:func -EnNb_Destroy = 0x80A95B50; // type:func -func_80AB0FBC = 0x80A95B7C; // type:func -func_80AB1040 = 0x80A95C04; // type:func -func_80AB10C4 = 0x80A95C8C; // type:func -EnNb_UpdateEyes = 0x80A95D30; // type:func -func_80AB1284 = 0x80A95DB8; // type:func -EnNb_UpdateSkelAnime = 0x80A95E00; // type:func -EnNb_GetCue = 0x80A95E24; // type:func -EnNb_SetStartPosRotFromCue1 = 0x80A95E4C; // type:func -func_80AB1390 = 0x80A95ECC; // type:func -func_80AB13D8 = 0x80A95F18; // type:func -EnNb_SetStartPosRotFromCue2 = 0x80A95F64; // type:func -EnNb_SetCurrentAnim = 0x80A95FE4; // type:func -EnNb_SetChamberAnim = 0x80A96074; // type:func -EnNb_SpawnBlueWarp = 0x80A960BC; // type:func -EnNb_GiveMedallion = 0x80A96118; // type:func -EnNb_ComeUpImpl = 0x80A96194; // type:func -EnNb_SetupChamberCsImpl = 0x80A961B4; // type:func -EnNb_SetupChamberWarpImpl = 0x80A96250; // type:func -EnNb_SetupDefaultChamberIdle = 0x80A962A0; // type:func -EnNb_SetupArmRaise = 0x80A962CC; // type:func -EnNb_SetupRaisedArmTransition = 0x80A96360; // type:func -EnNb_SetupMedallion = 0x80A963CC; // type:func -EnNb_SetupChamberCs = 0x80A96418; // type:func -EnNb_SetupChamberWarp = 0x80A96438; // type:func -EnNb_ComeUp = 0x80A96458; // type:func -func_80AB193C = 0x80A96494; // type:func -EnNb_RaiseArm = 0x80A964DC; // type:func -func_80AB19BC = 0x80A96520; // type:func -func_80AB19FC = 0x80A96568; // type:func -EnNb_SetupLightArrowOrSealingCs = 0x80A9659C; // type:func -EnNb_PlaySealingSfx = 0x80A965E0; // type:func -EnNb_InitializeDemo6K = 0x80A96600; // type:func -EnNb_SetupHide = 0x80A96680; // type:func -EnNb_CheckToFade = 0x80A966D4; // type:func -EnNb_SetupLightOrb = 0x80A96828; // type:func -EnNb_Hide = 0x80A968C4; // type:func -EnNb_Fade = 0x80A968E4; // type:func -EnNb_CreateLightOrb = 0x80A9692C; // type:func -EnNb_DrawTransparency = 0x80A96974; // type:func -EnNb_InitKidnap = 0x80A96ABC; // type:func -EnNb_PlayCrySFX = 0x80A96B14; // type:func -EnNb_PlayAgonySFX = 0x80A96B4C; // type:func -EnNb_SetPosInPortal = 0x80A96B84; // type:func -EnNb_SetupCaptureCutsceneState = 0x80A96C68; // type:func -EnNb_SetRaisedArmCaptureAnim = 0x80A96C9C; // type:func -EnNb_SetupLookAroundInKidnap = 0x80A96CFC; // type:func -EnNb_SetupKidnap = 0x80A96D70; // type:func -EnNb_CheckKidnapCsMode = 0x80A96DE8; // type:func -func_80AB23A8 = 0x80A96EB0; // type:func -EnNb_MovingInPortal = 0x80A96EE8; // type:func -EnNb_SuckedInByPortal = 0x80A96F44; // type:func -EnNb_SetupConfrontation = 0x80A96FA0; // type:func -EnNb_PlayKnuckleDefeatSFX = 0x80A96FE4; // type:func -EnNb_PlayKneelingOnGroundSFX = 0x80A97028; // type:func -EnNb_PlayLookRightSFX = 0x80A9708C; // type:func -EnNb_PlayLookLeftSFX = 0x80A970D8; // type:func -EnNb_InitDemo6KInConfrontation = 0x80A97130; // type:func -func_80AB2688 = 0x80A971A8; // type:func -func_80AB26C8 = 0x80A971E8; // type:func -func_80AB26DC = 0x80A97200; // type:func -EnNb_SetupKneel = 0x80A97298; // type:func -EnNb_CheckIfKneeling = 0x80A97314; // type:func -EnNb_SetupLookRight = 0x80A97380; // type:func -EnNb_CheckIfLookingRight = 0x80A97400; // type:func -EnNb_SetupLookLeft = 0x80A9746C; // type:func -EnNb_CheckIfLookLeft = 0x80A974EC; // type:func -EnNb_SetupDemo6KInConfrontation = 0x80A9754C; // type:func -EnNb_SetupRun = 0x80A9758C; // type:func -EnNb_SetupConfrontationDestroy = 0x80A9760C; // type:func -EnNb_CheckConfrontationCsMode = 0x80A97624; // type:func -EnNb_CheckConfrontationCsModeWrapper = 0x80A9770C; // type:func -func_80AB2C18 = 0x80A9772C; // type:func -EnNb_Kneel = 0x80A97778; // type:func -EnNb_LookRight = 0x80A977E8; // type:func -EnNb_LookLeft = 0x80A97858; // type:func -EnNb_Run = 0x80A978C0; // type:func -EnNb_ConfrontationDestroy = 0x80A97948; // type:func -func_80AB2E70 = 0x80A9799C; // type:func -func_80AB2FC0 = 0x80A97AB8; // type:func -func_80AB2FE4 = 0x80A97AE0; // type:func -EnNb_SetupCreditsSpawn = 0x80A97C1C; // type:func -EnNb_SetAlphaInCredits = 0x80A97C64; // type:func -EnNb_SetupCreditsFadeIn = 0x80A97CF0; // type:func -EnNb_SetupCreditsSit = 0x80A97D28; // type:func -EnNb_SetupCreditsHeadTurn = 0x80A97D74; // type:func -EnNb_CheckIfLookingUp = 0x80A97DB4; // type:func -EnNb_CheckCreditsCsModeImpl = 0x80A97DE8; // type:func -EnNb_CheckCreditsCsMode = 0x80A97E74; // type:func -EnNb_CreditsFade = 0x80A97E94; // type:func -func_80AB3428 = 0x80A97EE0; // type:func -EnNb_LookUp = 0x80A97F28; // type:func -EnNb_CrawlspaceSpawnCheck = 0x80A97F6C; // type:func -func_80AB359C = 0x80A98068; // type:func -EnNb_SetNoticeSFX = 0x80A9812C; // type:func -EnNb_GetNoticedStatus = 0x80A98154; // type:func -func_80AB36DC = 0x80A981AC; // type:func -EnNb_CheckNoticed = 0x80A9825C; // type:func -EnNb_SetupIdleCrawlspace = 0x80A982B4; // type:func -func_80AB3838 = 0x80A9830C; // type:func -EnNb_SetupPathMovement = 0x80A98388; // type:func -EnNb_SetTextIdAsChild = 0x80A983F0; // type:func -func_80AB3A7C = 0x80A9855C; // type:func -func_80AB3B04 = 0x80A985E8; // type:func -func_80AB3B7C = 0x80A98670; // type:func -EnNb_WaitForNotice = 0x80A986BC; // type:func -EnNb_StandUpAfterNotice = 0x80A98718; // type:func -EnNb_BlockCrawlspace = 0x80A98778; // type:func -EnNb_InitCrawlspaceDialogue = 0x80A987E0; // type:func -EnNb_FollowPath = 0x80A98848; // type:func -func_80AB3DB0 = 0x80A988C8; // type:func -func_80AB3E10 = 0x80A98930; // type:func -EnNb_Update = 0x80A98998; // type:func -EnNb_Init = 0x80A989E0; // type:func -EnNb_OverrideLimbDraw = 0x80A98AFC; // type:func -EnNb_PostLimbDraw = 0x80A98B8C; // type:func -EnNb_DrawNothing = 0x80A98C18; // type:func -EnNb_DrawDefault = 0x80A98C28; // type:func -EnNb_Draw = 0x80A98D6C; // type:func -EnNiw_Init = 0x80A99F40; // type:func -EnNiw_Destroy = 0x80A9A444; // type:func -func_80AB5BF8 = 0x80A9A470; // type:func -EnNiw_SpawnAttackCucco = 0x80A9A818; // type:func -func_80AB6100 = 0x80A9A960; // type:func -EnNiw_ResetAction = 0x80A9AADC; // type:func -func_80AB6324 = 0x80A9AB84; // type:func -func_80AB63A8 = 0x80A9AC08; // type:func -func_80AB6450 = 0x80A9ACB0; // type:func -func_80AB6570 = 0x80A9ADD0; // type:func -func_80AB6A38 = 0x80A9B29C; // type:func -func_80AB6BF8 = 0x80A9B45C; // type:func -func_80AB6D08 = 0x80A9B56C; // type:func -func_80AB6EB4 = 0x80A9B718; // type:func -func_80AB6F04 = 0x80A9B768; // type:func -func_80AB70A0 = 0x80A9B908; // type:func -func_80AB70F8 = 0x80A9B960; // type:func -func_80AB714C = 0x80A9B9B4; // type:func -func_80AB7204 = 0x80A9BA6C; // type:func -func_80AB7290 = 0x80A9BAFC; // type:func -func_80AB7328 = 0x80A9BB94; // type:func -func_80AB7420 = 0x80A9BC90; // type:func -func_80AB747C = 0x80A9BCEC; // type:func -EnNiw_Update = 0x80A9BDA4; // type:func -EnNiw_OverrideLimbDraw = 0x80A9C650; // type:func -EnNiw_Draw = 0x80A9C7A8; // type:func -EnNiw_SpawnFeather = 0x80A9C858; // type:func -EnNiw_UpdateEffects = 0x80A9C948; // type:func -EnNiw_DrawEffects = 0x80A9CAFC; // type:func -EnNiwGirl_Init = 0x80A9D270; // type:func -EnNiwGirl_Destroy = 0x80A9D410; // type:func -EnNiwGirl_Jump = 0x80A9D420; // type:func -func_80AB9210 = 0x80A9D4A4; // type:func -EnNiwGirl_Talk = 0x80A9D658; // type:func -func_80AB94D0 = 0x80A9D768; // type:func -EnNiwGirl_Update = 0x80A9D85C; // type:func -EnNiwGirlOverrideLimbDraw = 0x80A9DA84; // type:func -EnNiwGirl_Draw = 0x80A9DAEC; // type:func -EnNiwLady_Init = 0x80A9DD40; // type:func -EnNiwLady_Destroy = 0x80A9DE28; // type:func -EnNiwLady_ChoseAnimation = 0x80A9DE54; // type:func -func_80AB9F24 = 0x80A9E01C; // type:func -func_80ABA21C = 0x80A9E318; // type:func -func_80ABA244 = 0x80A9E344; // type:func -func_80ABA654 = 0x80A9E6C4; // type:func -func_80ABA778 = 0x80A9E7BC; // type:func -func_80ABA878 = 0x80A9E890; // type:func -func_80ABA9B8 = 0x80A9E9D4; // type:func -func_80ABAA9C = 0x80A9EAB8; // type:func -func_80ABAB08 = 0x80A9EB28; // type:func -func_80ABAC00 = 0x80A9EC20; // type:func -func_80ABAC84 = 0x80A9ECA8; // type:func -func_80ABAD38 = 0x80A9ED50; // type:func -func_80ABAD7C = 0x80A9ED70; // type:func -EnNiwLady_Update = 0x80A9EE34; // type:func -EnNiwLady_EmptyDList = 0x80A9F09C; // type:func -EnNiwLady_OverrideLimbDraw = 0x80A9F0C0; // type:func -EnNiwLady_Draw = 0x80A9F21C; // type:func -EnNutsball_Init = 0x80A9F640; // type:func -EnNutsball_Destroy = 0x80A9F6FC; // type:func -func_80ABBB34 = 0x80A9F728; // type:func -func_80ABBBA8 = 0x80A9F7A0; // type:func -EnNutsball_Update = 0x80A9F970; // type:func -EnNutsball_Draw = 0x80A9FA8C; // type:func -EnNwc_SetUpdate = 0x80A9FC60; // type:func -EnNwc_ChickNoop = 0x80A9FC6C; // type:func -EnNwc_ChickBgCheck = 0x80A9FC80; // type:func -EnNwc_ChickFall = 0x80A9FD7C; // type:func -EnNwc_UpdateChicks = 0x80A9FDE8; // type:func -EnNwc_DrawChicks = 0x80A9FFE8; // type:func -EnNwc_Init = 0x80AA0344; // type:func -EnNwc_Destroy = 0x80AA04D0; // type:func -EnNwc_Idle = 0x80AA04FC; // type:func -EnNwc_Update = 0x80AA051C; // type:func -EnNwc_Draw = 0x80AA0570; // type:func -EnNy_Init = 0x80AA0680; // type:func -EnNy_Destroy = 0x80AA07BC; // type:func -func_80ABCD40 = 0x80AA07E8; // type:func -func_80ABCD84 = 0x80AA0830; // type:func -func_80ABCD94 = 0x80AA0844; // type:func -func_80ABCDAC = 0x80AA0860; // type:func -func_80ABCDBC = 0x80AA0874; // type:func -EnNy_SetupTurnToStone = 0x80AA08B8; // type:func -func_80ABCE38 = 0x80AA08F4; // type:func -func_80ABCE50 = 0x80AA0910; // type:func -func_80ABCE90 = 0x80AA0950; // type:func -func_80ABCEEC = 0x80AA09AC; // type:func -EnNy_Move = 0x80AA0A0C; // type:func -EnNy_TurnToStone = 0x80AA0B20; // type:func -func_80ABD11C = 0x80AA0BE0; // type:func -EnNy_CollisionCheck = 0x80AA0C54; // type:func -func_80ABD3B8 = 0x80AA0E7C; // type:func -EnNy_Update = 0x80AA0F64; // type:func -EnNy_SetupDie = 0x80AA11F0; // type:func -EnNy_Die = 0x80AA1474; // type:func -EnNy_UpdateDeath = 0x80AA1680; // type:func -EnNy_UpdateUnused = 0x80AA16C0; // type:func -EnNy_Draw = 0x80AA17F0; // type:func -EnNy_DrawDeathEffect = 0x80AA1AC4; // type:func -EnOE2_SetupAction = 0x80AA1FC0; // type:func -EnOE2_Init = 0x80AA1FCC; // type:func -EnOE2_Destroy = 0x80AA1FF4; // type:func -EnOE2_DoNothing = 0x80AA2004; // type:func -EnOE2_Update = 0x80AA2014; // type:func -EnOE2_Draw = 0x80AA2024; // type:func -EnOkarinaEffect_SetupAction = 0x80AA20A0; // type:func -EnOkarinaEffect_Destroy = 0x80AA20AC; // type:func -EnOkarinaEffect_Init = 0x80AA212C; // type:func -EnOkarinaEffect_TriggerStorm = 0x80AA2174; // type:func -EnOkarinaEffect_ManageStorm = 0x80AA2200; // type:func -EnOkarinaEffect_Update = 0x80AA23D0; // type:func -EnOkarinaTag_Destroy = 0x80AA2460; // type:func -EnOkarinaTag_Init = 0x80AA2470; // type:func -func_80ABEF2C = 0x80AA25D8; // type:func -func_80ABF0CC = 0x80AA273C; // type:func -func_80ABF28C = 0x80AA28FC; // type:func -func_80ABF4C8 = 0x80AA2B44; // type:func -func_80ABF708 = 0x80AA2D84; // type:func -func_80ABF7CC = 0x80AA2E4C; // type:func -EnOkarinaTag_Update = 0x80AA2F10; // type:func -EnOkuta_Init = 0x80AA3960; // type:func -EnOkuta_Destroy = 0x80AA3B6C; // type:func -EnOkuta_SpawnBubbles = 0x80AA3B98; // type:func -EnOkuta_SpawnDust = 0x80AA3C44; // type:func -EnOkuta_SpawnSplash = 0x80AA3CAC; // type:func -EnOkuta_SpawnRipple = 0x80AA3CF0; // type:func -EnOkuta_SetupWaitToAppear = 0x80AA3D94; // type:func -EnOkuta_SetupAppear = 0x80AA3DC4; // type:func -EnOkuta_SetupHide = 0x80AA3E34; // type:func -EnOkuta_SetupWaitToShoot = 0x80AA3E74; // type:func -EnOkuta_SetupShoot = 0x80AA3ED4; // type:func -EnOkuta_SetupWaitToDie = 0x80AA3FC0; // type:func -EnOkuta_SetupDie = 0x80AA4048; // type:func -EnOkuta_SetupFreeze = 0x80AA4090; // type:func -EnOkuta_SpawnProjectile = 0x80AA40DC; // type:func -EnOkuta_WaitToAppear = 0x80AA421C; // type:func -EnOkuta_Appear = 0x80AA4278; // type:func -EnOkuta_Hide = 0x80AA43BC; // type:func -EnOkuta_WaitToShoot = 0x80AA44BC; // type:func -EnOkuta_Shoot = 0x80AA45EC; // type:func -EnOkuta_WaitToDie = 0x80AA476C; // type:func -EnOkuta_Die = 0x80AA47C0; // type:func -EnOkuta_Freeze = 0x80AA4AD4; // type:func -EnOkuta_ProjectileFly = 0x80AA4C50; // type:func -EnOkuta_UpdateHeadScale = 0x80AA4E9C; // type:func -EnOkuta_ColliderCheck = 0x80AA5244; // type:func -EnOkuta_Update = 0x80AA52F4; // type:func -EnOkuta_GetSnoutScale = 0x80AA5674; // type:func -EnOkuta_OverrideLimbDraw = 0x80AA58FC; // type:func -EnOkuta_Draw = 0x80AA59F8; // type:func -EnOssan_SetupAction = 0x80AA5F40; // type:func -ShopItemDisp_Default = 0x80AA5F4C; // type:func -ShopItemDisp_SpookyMask = 0x80AA5F64; // type:func -ShopItemDisp_SkullMask = 0x80AA5F98; // type:func -ShopItemDisp_BunnyHood = 0x80AA5FCC; // type:func -ShopItemDisp_ZoraMask = 0x80AA6000; // type:func -ShopItemDisp_GoronMask = 0x80AA6034; // type:func -ShopItemDisp_GerudoMask = 0x80AA6068; // type:func -EnOssan_SpawnItemsOnShelves = 0x80AA609C; // type:func -EnOssan_UpdateShopOfferings = 0x80AA61F0; // type:func -EnOssan_TalkDefaultShopkeeper = 0x80AA635C; // type:func -EnOssan_TalkKakarikoPotionShopkeeper = 0x80AA637C; // type:func -EnOssan_TalkMarketPotionShopkeeper = 0x80AA63C0; // type:func -EnOssan_TalkKokiriShopkeeper = 0x80AA63E0; // type:func -EnOssan_TalkBazaarShopkeeper = 0x80AA6400; // type:func -EnOssan_TalkBombchuShopkeeper = 0x80AA6444; // type:func -EnOssan_TalkZoraShopkeeper = 0x80AA6464; // type:func -EnOssan_TalkGoronShopkeeper = 0x80AA64BC; // type:func -EnOssan_TalkHappyMaskShopkeeper = 0x80AA6590; // type:func -EnOssan_UpdateCameraDirection = 0x80AA661C; // type:func -EnOssan_TryGetObjBankIndices = 0x80AA6680; // type:func -EnOssan_Init = 0x80AA6744; // type:func -EnOssan_Destroy = 0x80AA6910; // type:func -EnOssan_UpdateCursorPos = 0x80AA6950; // type:func -EnOssan_EndInteraction = 0x80AA69B4; // type:func -EnOssan_TestEndInteraction = 0x80AA6A78; // type:func -EnOssan_TestCancelOption = 0x80AA6AC0; // type:func -EnOssan_SetStateStartShopping = 0x80AA6B24; // type:func -EnOssan_StartShopping = 0x80AA6BA8; // type:func -EnOssan_ChooseTalkToOwner = 0x80AA6C80; // type:func -EnOssan_SetLookToShopkeeperFromShelf = 0x80AA6CE0; // type:func -EnOssan_State_Idle = 0x80AA6D14; // type:func -EnOssan_UpdateJoystickInputState = 0x80AA6DC4; // type:func -EnOssan_SetCursorIndexFromNeutral = 0x80AA6F10; // type:func -EnOssan_CursorRight = 0x80AA7048; // type:func -EnOssan_CursorLeft = 0x80AA70D4; // type:func -EnOssan_TryPaybackMask = 0x80AA713C; // type:func -EnOssan_State_StartConversation = 0x80AA7278; // type:func -EnOssan_FacingShopkeeperDialogResult = 0x80AA7420; // type:func -EnOssan_State_FacingShopkeeper = 0x80AA748C; // type:func -EnOssan_State_TalkingToShopkeeper = 0x80AA75A4; // type:func -EnOssan_State_LookToLeftShelf = 0x80AA75F8; // type:func -EnOssan_State_LookToRightShelf = 0x80AA76E4; // type:func -EnOssan_CursorUpDown = 0x80AA77D0; // type:func -EnOssan_HasPlayerSelectedItem = 0x80AA79E4; // type:func -EnOssan_State_BrowseLeftShelf = 0x80AA7B80; // type:func -EnOssan_State_BrowseRightShelf = 0x80AA7D40; // type:func -EnOssan_State_LookFromShelfToShopkeeper = 0x80AA7F00; // type:func -EnOssan_State_DisplayOnlyBombDialog = 0x80AA7FBC; // type:func -EnOssan_GiveItemWithFanfare = 0x80AA808C; // type:func -EnOssan_SetStateCantGetItem = 0x80AA8158; // type:func -EnOssan_SetStateQuickBuyDialog = 0x80AA818C; // type:func -EnOssan_HandleCanBuyItem = 0x80AA81C0; // type:func -EnOssan_HandleCanBuyLonLonMilk = 0x80AA8368; // type:func -EnOssan_HandleCanBuyWeirdEgg = 0x80AA8474; // type:func -EnOssan_HandleCanBuyBombs = 0x80AA85AC; // type:func -EnOssan_BuyGoronCityBombs = 0x80AA86B0; // type:func -EnOssan_State_ItemSelected = 0x80AA8754; // type:func -EnOssan_State_SelectMilkBottle = 0x80AA8828; // type:func -EnOssan_State_SelectWeirdEgg = 0x80AA88FC; // type:func -EnOssan_State_SelectUnimplementedItem = 0x80AA89D0; // type:func -EnOssan_State_SelectBombs = 0x80AA8A60; // type:func -EnOssan_State_SelectMaskItem = 0x80AA8B58; // type:func -EnOssan_State_CantGetItem = 0x80AA8D34; // type:func -EnOssan_State_QuickBuyDialog = 0x80AA8DB0; // type:func -EnOssan_State_GiveItemWithFanfare = 0x80AA8E58; // type:func -EnOssan_State_ItemPurchased = 0x80AA8EC8; // type:func -EnOssan_State_ContinueShoppingPrompt = 0x80AA900C; // type:func -EnOssan_State_WaitForDisplayOnlyBombDialog = 0x80AA91EC; // type:func -EnOssan_State_21 = 0x80AA9254; // type:func -EnOssan_State_22 = 0x80AA92C8; // type:func -EnOssan_State_GiveLonLonMilk = 0x80AA931C; // type:func -EnOssan_State_LendMaskOfTruth = 0x80AA9370; // type:func -EnOssan_SetStateGiveDiscountDialog = 0x80AA93E0; // type:func -EnOssan_State_GiveDiscountDialog = 0x80AA940C; // type:func -EnOssan_PositionSelectedItem = 0x80AA94A0; // type:func -EnOssan_ResetItemPosition = 0x80AA9588; // type:func -EnOssan_TakeItemOffShelf = 0x80AA95AC; // type:func -EnOssan_ReturnItemToShelf = 0x80AA9648; // type:func -EnOssan_UpdateItemSelectedProperty = 0x80AA96D4; // type:func -EnOssan_UpdateCursorAnim = 0x80AA9810; // type:func -EnOssan_UpdateStickDirectionPromptAnim = 0x80AA98E4; // type:func -EnOssan_WaitForBlink = 0x80AA9A94; // type:func -EnOssan_Blink = 0x80AA9AC8; // type:func -EnOssan_AreShopkeeperObjectsLoaded = 0x80AA9B68; // type:func -EnOssan_InitBazaarShopkeeper = 0x80AA9C04; // type:func -EnOssan_InitKokiriShopkeeper = 0x80AA9C64; // type:func -EnOssan_InitGoronShopkeeper = 0x80AA9D7C; // type:func -EnOssan_InitZoraShopkeeper = 0x80AA9E58; // type:func -EnOssan_InitPotionShopkeeper = 0x80AA9F34; // type:func -EnOssan_InitHappyMaskShopkeeper = 0x80AA9F94; // type:func -EnOssan_InitBombchuShopkeeper = 0x80AA9FF4; // type:func -EnOssan_SetupHelloDialog = 0x80AAA054; // type:func -EnOssan_InitActionFunc = 0x80AAA1BC; // type:func -EnOssan_Obj3ToSeg6 = 0x80AAA474; // type:func -EnOssan_MainActionFunc = 0x80AAA4AC; // type:func -EnOssan_Update = 0x80AAA5C8; // type:func -EnOssan_OverrideLimbDrawDefaultShopkeeper = 0x80AAA5F4; // type:func -EnOssan_DrawCursor = 0x80AAA62C; // type:func -EnOssan_DrawTextRec = 0x80AAA88C; // type:func -EnOssan_DrawStickDirectionPrompts = 0x80AAAA28; // type:func -EnOssan_DrawBazaarShopkeeper = 0x80AAADD0; // type:func -EnOssan_OverrideLimbDrawKokiriShopkeeper = 0x80AAAEC4; // type:func -EnOssan_EmptyDList = 0x80AAAFBC; // type:func -EnOssan_SetEnvColor = 0x80AAAFE0; // type:func -EnOssan_DrawKokiriShopkeeper = 0x80AAB04C; // type:func -EnOssan_DrawGoronShopkeeper = 0x80AAB1AC; // type:func -EnOssan_OverrideLimbDrawZoraShopkeeper = 0x80AAB2E0; // type:func -EnOssan_DrawZoraShopkeeper = 0x80AAB318; // type:func -EnOssan_DrawPotionShopkeeper = 0x80AAB45C; // type:func -EnOssan_DrawHappyMaskShopkeeper = 0x80AAB548; // type:func -EnOssan_DrawBombchuShopkeeper = 0x80AAB634; // type:func -EnOwl_Init = 0x80AAC520; // type:func -EnOwl_Destroy = 0x80AAC904; // type:func -EnOwl_LookAtLink = 0x80AAC930; // type:func -EnOwl_CheckInitTalk = 0x80AAC96C; // type:func -func_80ACA558 = 0x80AACAD8; // type:func -func_80ACA5C8 = 0x80AACB4C; // type:func -func_80ACA62C = 0x80AACBAC; // type:func -func_80ACA690 = 0x80AACBF8; // type:func -func_80ACA6C0 = 0x80AACC28; // type:func -func_80ACA71C = 0x80AACC84; // type:func -func_80ACA76C = 0x80AACCD0; // type:func -func_80ACA7E0 = 0x80AACD44; // type:func -EnOwl_ConfirmKokiriMessage = 0x80AACDF0; // type:func -EnOwl_WaitOutsideKokiri = 0x80AACE90; // type:func -func_80ACA998 = 0x80AACF08; // type:func -func_80ACAA54 = 0x80AACFC8; // type:func -func_80ACAAC0 = 0x80AAD038; // type:func -EnOwl_WaitHyruleCastle = 0x80AAD0A8; // type:func -func_80ACAB88 = 0x80AAD10C; // type:func -func_80ACAC6C = 0x80AAD1F4; // type:func -EnOwl_WaitKakariko = 0x80AAD264; // type:func -func_80ACAD34 = 0x80AAD2C8; // type:func -func_80ACADF0 = 0x80AAD388; // type:func -EnOwl_WaitGerudo = 0x80AAD3F8; // type:func -func_80ACAEB8 = 0x80AAD45C; // type:func -func_80ACAF74 = 0x80AAD51C; // type:func -EnOwl_WaitLakeHylia = 0x80AAD58C; // type:func -func_80ACB03C = 0x80AAD5F0; // type:func -EnOwl_WaitZoraRiver = 0x80AAD664; // type:func -func_80ACB148 = 0x80AAD704; // type:func -EnOwl_WaitHyliaShortcut = 0x80AAD764; // type:func -func_80ACB22C = 0x80AAD7F0; // type:func -func_80ACB274 = 0x80AAD83C; // type:func -EnOwl_WaitDeathMountainShortcut = 0x80AAD880; // type:func -func_80ACB344 = 0x80AAD914; // type:func -func_80ACB3E0 = 0x80AAD9B4; // type:func -func_80ACB440 = 0x80AADA1C; // type:func -func_80ACB4FC = 0x80AADADC; // type:func -EnOwl_WaitLWPreSaria = 0x80AADB4C; // type:func -func_80ACB5C4 = 0x80AADBB0; // type:func -func_80ACB680 = 0x80AADC70; // type:func -EnOwl_WaitLWPostSaria = 0x80AADCE0; // type:func -func_80ACB748 = 0x80AADD44; // type:func -func_80ACB904 = 0x80AADF00; // type:func -func_80ACB994 = 0x80AADF98; // type:func -EnOwl_WaitDefault = 0x80AAE030; // type:func -func_80ACBAB8 = 0x80AAE0C4; // type:func -func_80ACBC0C = 0x80AAE218; // type:func -func_80ACBD4C = 0x80AAE354; // type:func -func_80ACBEA0 = 0x80AAE4A8; // type:func -func_80ACBF50 = 0x80AAE558; // type:func -func_80ACC00C = 0x80AAE614; // type:func -func_80ACC23C = 0x80AAE7D8; // type:func -func_80ACC30C = 0x80AAE8A4; // type:func -func_80ACC390 = 0x80AAE928; // type:func -func_80ACC460 = 0x80AAE9F8; // type:func -func_80ACC540 = 0x80AAEAD8; // type:func -func_80ACC5CC = 0x80AAEB64; // type:func -func_80ACC624 = 0x80AAEBBC; // type:func -EnOwl_Update = 0x80AAEC38; // type:func -EnOwl_OverrideLimbDraw = 0x80AAF388; // type:func -EnOwl_PostLimbUpdate = 0x80AAF4B4; // type:func -EnOwl_Draw = 0x80AAF538; // type:func -EnOwl_ChangeMode = 0x80AAF604; // type:func -func_80ACD130 = 0x80AAF67C; // type:func -func_80ACD1C4 = 0x80AAF710; // type:func -func_80ACD220 = 0x80AAF770; // type:func -func_80ACD2CC = 0x80AAF81C; // type:func -func_80ACD4D4 = 0x80AAFA24; // type:func -EnPart_Init = 0x80AB00C0; // type:func -EnPart_Destroy = 0x80AB00D0; // type:func -func_80ACDDE8 = 0x80AB00E0; // type:func -func_80ACE13C = 0x80AB0434; // type:func -func_80ACE5B8 = 0x80AB08B0; // type:func -func_80ACE5C8 = 0x80AB08C4; // type:func -func_80ACE7E8 = 0x80AB0AE8; // type:func -EnPart_Update = 0x80AB0CE4; // type:func -func_80ACEAC0 = 0x80AB0DC4; // type:func -EnPart_Draw = 0x80AB0E7C; // type:func -EnPeehat_SetupAction = 0x80AB1720; // type:func -EnPeehat_Init = 0x80AB172C; // type:func -EnPeehat_Destroy = 0x80AB199C; // type:func -EnPeehat_SpawnDust = 0x80AB1A10; // type:func -EnPeehat_HitWhenGrounded = 0x80AB1BA8; // type:func -EnPeehat_Ground_SetStateGround = 0x80AB1DC4; // type:func -EnPeehat_Ground_StateGround = 0x80AB1E5C; // type:func -EnPeehat_Flying_SetStateGround = 0x80AB1FB0; // type:func -EnPeehat_Flying_StateGrounded = 0x80AB203C; // type:func -EnPeehat_Flying_SetStateFly = 0x80AB2140; // type:func -EnPeehat_Flying_StateFly = 0x80AB2188; // type:func -EnPeehat_Ground_SetStateRise = 0x80AB2300; // type:func -EnPeehat_Ground_StateRise = 0x80AB23A8; // type:func -EnPeehat_Flying_SetStateRise = 0x80AB2570; // type:func -EnPeehat_Flying_StateRise = 0x80AB2618; // type:func -EnPeehat_Ground_SetStateSeekPlayer = 0x80AB27E0; // type:func -EnPeehat_Ground_StateSeekPlayer = 0x80AB2830; // type:func -EnPeehat_Larva_SetStateSeekPlayer = 0x80AB29AC; // type:func -EnPeehat_Larva_StateSeekPlayer = 0x80AB29F8; // type:func -EnPeehat_Ground_SetStateLanding = 0x80AB2DD0; // type:func -EnPeehat_Ground_StateLanding = 0x80AB2E18; // type:func -EnPeehat_Flying_SetStateLanding = 0x80AB2FCC; // type:func -EnPeehat_Flying_StateLanding = 0x80AB3014; // type:func -EnPeehat_Ground_SetStateHover = 0x80AB31C4; // type:func -EnPeehat_Ground_StateHover = 0x80AB3254; // type:func -EnPeehat_Ground_SetStateReturnHome = 0x80AB34B0; // type:func -EnPeehat_Ground_StateReturnHome = 0x80AB34E8; // type:func -EnPeehat_SetStateAttackRecoil = 0x80AB36D4; // type:func -EnPeehat_StateAttackRecoil = 0x80AB3734; // type:func -EnPeehat_SetStateBoomerangStunned = 0x80AB3910; // type:func -EnPeehat_StateBoomerangStunned = 0x80AB3994; // type:func -EnPeehat_Adult_SetStateDie = 0x80AB3A10; // type:func -EnPeehat_Adult_StateDie = 0x80AB3A7C; // type:func -EnPeehat_SetStateExplode = 0x80AB3D3C; // type:func -EnPeehat_StateExplode = 0x80AB3D94; // type:func -EnPeehat_Adult_CollisionCheck = 0x80AB3E6C; // type:func -EnPeehat_Update = 0x80AB4058; // type:func -EnPeehat_OverrideLimbDraw = 0x80AB44BC; // type:func -EnPeehat_PostLimbDraw = 0x80AB4694; // type:func -EnPeehat_Draw = 0x80AB4848; // type:func -EnPoDesert_Init = 0x80AB4E20; // type:func -EnPoDesert_Destroy = 0x80AB4F90; // type:func -EnPoDesert_SetNextPathPoint = 0x80AB4FD8; // type:func -EnPoDesert_SetupMoveToNextPoint = 0x80AB5134; // type:func -EnPoDesert_SetupDisappear = 0x80AB5178; // type:func -EnPoDesert_UpdateSpeedModifier = 0x80AB51D8; // type:func -EnPoDesert_WaitForPlayer = 0x80AB5248; // type:func -EnPoDesert_MoveToNextPoint = 0x80AB5314; // type:func -EnPoDesert_Disappear = 0x80AB54A8; // type:func -EnPoDesert_Update = 0x80AB5590; // type:func -EnPoDesert_OverrideLimbDraw = 0x80AB5684; // type:func -EnPoDesert_PostLimbDraw = 0x80AB5710; // type:func -EnPoDesert_Draw = 0x80AB5964; // type:func -EnPoField_Init = 0x80AB5BE0; // type:func -EnPoField_Destroy = 0x80AB5DE8; // type:func -EnPoField_SetupWaitForSpawn = 0x80AB5E48; // type:func -EnPoField_SetupAppear = 0x80AB5F0C; // type:func -EnPoField_SetupCirclePlayer = 0x80AB602C; // type:func -EnPoField_SetupFlee = 0x80AB60D4; // type:func -EnPoField_SetupDamage = 0x80AB6168; // type:func -EnPoField_SetupDeath = 0x80AB6224; // type:func -EnPoField_SetupDisappear = 0x80AB6278; // type:func -EnPoField_SetupSoulIdle = 0x80AB62F0; // type:func -func_80AD42B0 = 0x80AB63A0; // type:func -func_80AD4384 = 0x80AB6474; // type:func -EnPoField_SetupSoulDisappear = 0x80AB652C; // type:func -EnPoField_SetupInteractWithSoul = 0x80AB6540; // type:func -EnPoField_CorrectYPos = 0x80AB6568; // type:func -EnPoField_SetFleeSpeed = 0x80AB664C; // type:func -EnPoField_WaitForSpawn = 0x80AB675C; // type:func -EnPoField_Appear = 0x80AB69C4; // type:func -EnPoField_CirclePlayer = 0x80AB6B60; // type:func -EnPoField_Flee = 0x80AB6DA0; // type:func -EnPoField_Damage = 0x80AB6F44; // type:func -EnPoField_Death = 0x80AB6FD4; // type:func -EnPoField_Disappear = 0x80AB73EC; // type:func -EnPoField_SoulIdle = 0x80AB74EC; // type:func -EnPoField_SoulUpdateProperties = 0x80AB75D0; // type:func -func_80AD587C = 0x80AB7978; // type:func -func_80AD58D4 = 0x80AB79D0; // type:func -EnPoField_SoulDisappear = 0x80AB7BD4; // type:func -EnPoField_SoulInteract = 0x80AB7C14; // type:func -EnPoField_TestForDamage = 0x80AB7D74; // type:func -EnPoField_SpawnFlame = 0x80AB7E0C; // type:func -EnPoField_UpdateFlame = 0x80AB7E60; // type:func -EnPoField_DrawFlame = 0x80AB7F8C; // type:func -func_80AD619C = 0x80AB8264; // type:func -func_80AD6330 = 0x80AB83F8; // type:func -EnPoField_Update = 0x80AB856C; // type:func -EnPoField_OverrideLimbDraw2 = 0x80AB8698; // type:func -EnPoField_PostLimDraw2 = 0x80AB87A0; // type:func -EnPoField_Draw = 0x80AB89B0; // type:func -EnPoField_UpdateDead = 0x80AB8C94; // type:func -EnPoField_DrawSoul = 0x80AB8CF0; // type:func -EnPoRelay_Init = 0x80AB9670; // type:func -EnPoRelay_Destroy = 0x80AB97F8; // type:func -EnPoRelay_SetupIdle = 0x80AB9840; // type:func -EnPoRelay_Vec3sToVec3f = 0x80AB987C; // type:func -EnPoRelay_SetupRace = 0x80AB98C0; // type:func -EnPoRelay_SetupEndRace = 0x80AB9988; // type:func -EnPoRelay_CorrectY = 0x80AB99C8; // type:func -EnPoRelay_Idle = 0x80AB9A70; // type:func -EnPoRelay_Talk = 0x80AB9B2C; // type:func -EnPoRelay_Race = 0x80AB9BA0; // type:func -EnPoRelay_EndRace = 0x80ABA0B4; // type:func -EnPoRelay_Talk2 = 0x80ABA174; // type:func -EnPoRelay_DisappearAndReward = 0x80ABA24C; // type:func -EnPoRelay_Update = 0x80ABA718; // type:func -EnPoRelay_PostLimbDraw = 0x80ABA80C; // type:func -EnPoRelay_Draw = 0x80ABAA00; // type:func -EnPoSisters_Init = 0x80ABAD80; // type:func -EnPoSisters_Destroy = 0x80ABAFCC; // type:func -func_80AD9240 = 0x80ABB034; // type:func -func_80AD9368 = 0x80ABB160; // type:func -func_80AD93C4 = 0x80ABB1BC; // type:func -func_80AD943C = 0x80ABB234; // type:func -func_80AD944C = 0x80ABB248; // type:func -func_80AD94E0 = 0x80ABB2DC; // type:func -func_80AD9568 = 0x80ABB364; // type:func -func_80AD95D8 = 0x80ABB3D4; // type:func -func_80AD96A4 = 0x80ABB4A0; // type:func -func_80AD9718 = 0x80ABB514; // type:func -func_80AD97C8 = 0x80ABB5C4; // type:func -func_80AD98F4 = 0x80ABB6F0; // type:func -func_80AD99D4 = 0x80ABB7D0; // type:func -func_80AD9A54 = 0x80ABB850; // type:func -func_80AD9AA8 = 0x80ABB8A4; // type:func -func_80AD9C24 = 0x80ABBA20; // type:func -func_80AD9D44 = 0x80ABBB40; // type:func -func_80AD9DF0 = 0x80ABBBEC; // type:func -func_80AD9E60 = 0x80ABBC5C; // type:func -func_80AD9F1C = 0x80ABBD18; // type:func -func_80AD9F90 = 0x80ABBD8C; // type:func -func_80ADA028 = 0x80ABBE24; // type:func -func_80ADA094 = 0x80ABBE90; // type:func -func_80ADA10C = 0x80ABBF08; // type:func -func_80ADA1B8 = 0x80ABBFB8; // type:func -func_80ADA25C = 0x80ABC05C; // type:func -func_80ADA2BC = 0x80ABC0BC; // type:func -func_80ADA35C = 0x80ABC15C; // type:func -func_80ADA4A8 = 0x80ABC2A8; // type:func -func_80ADA530 = 0x80ABC330; // type:func -func_80ADA6A0 = 0x80ABC4A0; // type:func -func_80ADA7F0 = 0x80ABC5F0; // type:func -func_80ADA8C0 = 0x80ABC6C0; // type:func -func_80ADA9E8 = 0x80ABC7E8; // type:func -func_80ADAAA4 = 0x80ABC8A4; // type:func -func_80ADAC70 = 0x80ABCA70; // type:func -func_80ADAD54 = 0x80ABCB54; // type:func -func_80ADAE6C = 0x80ABCC6C; // type:func -func_80ADAFC0 = 0x80ABCDC0; // type:func -func_80ADB17C = 0x80ABCF7C; // type:func -func_80ADB2B8 = 0x80ABD0B8; // type:func -func_80ADB338 = 0x80ABD134; // type:func -func_80ADB4B0 = 0x80ABD2B0; // type:func -func_80ADB51C = 0x80ABD31C; // type:func -func_80ADB770 = 0x80ABD570; // type:func -func_80ADB9F0 = 0x80ABD7F0; // type:func -func_80ADBB6C = 0x80ABD96C; // type:func -func_80ADBBF4 = 0x80ABD9F4; // type:func -func_80ADBC88 = 0x80ABDA88; // type:func -func_80ADBD38 = 0x80ABDB3C; // type:func -func_80ADBD8C = 0x80ABDB90; // type:func -func_80ADBEE8 = 0x80ABDCF0; // type:func -func_80ADBF58 = 0x80ABDD60; // type:func -func_80ADC034 = 0x80ABDE3C; // type:func -func_80ADC10C = 0x80ABDF14; // type:func -EnPoSisters_Update = 0x80ABE0D8; // type:func -func_80ADC55C = 0x80ABE36C; // type:func -EnPoSisters_OverrideLimbDraw = 0x80ABE58C; // type:func -EnPoSisters_PostLimbDraw = 0x80ABE77C; // type:func -EnPoSisters_Draw = 0x80ABEE4C; // type:func -EnPoh_Init = 0x80ABFA70; // type:func -EnPoh_Destroy = 0x80ABFDB8; // type:func -func_80ADE114 = 0x80ABFE38; // type:func -EnPoh_SetupIdle = 0x80ABFE90; // type:func -func_80ADE1BC = 0x80ABFEE0; // type:func -EnPoh_SetupAttack = 0x80ABFF30; // type:func -func_80ADE28C = 0x80ABFFB0; // type:func -func_80ADE368 = 0x80AC008C; // type:func -EnPoh_SetupInitialAction = 0x80AC0100; // type:func -func_80ADE48C = 0x80AC01B0; // type:func -func_80ADE4C8 = 0x80AC01F0; // type:func -func_80ADE514 = 0x80AC023C; // type:func -EnPoh_SetupDisappear = 0x80AC0294; // type:func -EnPoh_SetupAppear = 0x80AC02EC; // type:func -EnPoh_SetupDeath = 0x80AC0338; // type:func -func_80ADE6D4 = 0x80AC0404; // type:func -EnPoh_Talk = 0x80AC04F0; // type:func -func_80ADE950 = 0x80AC0688; // type:func -func_80ADE998 = 0x80AC06D4; // type:func -func_80ADE9BC = 0x80AC06FC; // type:func -EnPoh_MoveTowardsPlayerHeight = 0x80AC0710; // type:func -func_80ADEA5C = 0x80AC07A4; // type:func -func_80ADEAC4 = 0x80AC0814; // type:func -EnPoh_Idle = 0x80AC08D0; // type:func -func_80ADEC9C = 0x80AC09EC; // type:func -EnPoh_Attack = 0x80AC0B50; // type:func -func_80ADEECC = 0x80AC0C20; // type:func -func_80ADEF38 = 0x80AC0C8C; // type:func -EnPoh_ComposerAppear = 0x80AC0E0C; // type:func -func_80ADF15C = 0x80AC0EB0; // type:func -func_80ADF574 = 0x80AC12C8; // type:func -func_80ADF5E0 = 0x80AC1334; // type:func -EnPoh_Disappear = 0x80AC13B4; // type:func -EnPoh_Appear = 0x80AC14D0; // type:func -func_80ADF894 = 0x80AC15F0; // type:func -EnPoh_Death = 0x80AC16F0; // type:func -func_80ADFA90 = 0x80AC17F0; // type:func -func_80ADFE28 = 0x80AC1B88; // type:func -func_80ADFE80 = 0x80AC1BE0; // type:func -func_80AE009C = 0x80AC1DFC; // type:func -EnPoh_TalkRegular = 0x80AC1E3C; // type:func -EnPoh_TalkComposer = 0x80AC1F68; // type:func -func_80AE032C = 0x80AC2094; // type:func -EnPoh_UpdateVisibility = 0x80AC212C; // type:func -EnPoh_Update = 0x80AC229C; // type:func -func_80AE067C = 0x80AC23E8; // type:func -func_80AE089C = 0x80AC2608; // type:func -EnPoh_UpdateLiving = 0x80AC2788; // type:func -EnPoh_OverrideLimbDraw = 0x80AC2968; // type:func -EnPoh_PostLimbDraw = 0x80AC2A5C; // type:func -EnPoh_DrawRegular = 0x80AC2C4C; // type:func -EnPoh_DrawComposer = 0x80AC2E74; // type:func -EnPoh_UpdateDead = 0x80AC32F0; // type:func -EnPoh_DrawSoul = 0x80AC3344; // type:func -EnPubox_Init = 0x80AC3C60; // type:func -EnPubox_Destroy = 0x80AC3D98; // type:func -EnPubox_Update = 0x80AC3DCC; // type:func -EnPubox_Draw = 0x80AC3F1C; // type:func -EnRd_SetupAction = 0x80AC3FA0; // type:func -EnRd_Init = 0x80AC3FAC; // type:func -EnRd_Destroy = 0x80AC4198; // type:func -EnRd_UpdateMourningTarget = 0x80AC41DC; // type:func -EnRd_SetupIdle = 0x80AC4248; // type:func -EnRd_Idle = 0x80AC42F0; // type:func -EnRd_SetupRiseFromCoffin = 0x80AC451C; // type:func -EnRd_RiseFromCoffin = 0x80AC45BC; // type:func -EnRd_SetupWalkToPlayer = 0x80AC473C; // type:func -EnRd_WalkToPlayer = 0x80AC47C8; // type:func -EnRd_SetupWalkToHome = 0x80AC4AFC; // type:func -EnRd_WalkToHome = 0x80AC4B7C; // type:func -EnRd_SetupWalkToParent = 0x80AC4D90; // type:func -EnRd_WalkToParent = 0x80AC4E14; // type:func -EnRd_SetupGrab = 0x80AC4FA8; // type:func -EnRd_Grab = 0x80AC500C; // type:func -EnRd_SetupAttemptPlayerFreeze = 0x80AC5378; // type:func -EnRd_AttemptPlayerFreeze = 0x80AC53F0; // type:func -EnRd_SetupStandUp = 0x80AC54E8; // type:func -EnRd_StandUp = 0x80AC5534; // type:func -EnRd_SetupCrouch = 0x80AC5590; // type:func -EnRd_Crouch = 0x80AC5610; // type:func -EnRd_SetupDamaged = 0x80AC564C; // type:func -EnRd_Damaged = 0x80AC56D8; // type:func -EnRd_SetupDead = 0x80AC57E8; // type:func -EnRd_Dead = 0x80AC5860; // type:func -EnRd_SetupStunned = 0x80AC59AC; // type:func -EnRd_Stunned = 0x80AC5A98; // type:func -EnRd_TurnTowardsPlayer = 0x80AC5B6C; // type:func -EnRd_UpdateDamage = 0x80AC5CE4; // type:func -EnRd_Update = 0x80AC5EB0; // type:func -EnRd_OverrideLimbDraw = 0x80AC609C; // type:func -EnRd_PostLimbDraw = 0x80AC60F8; // type:func -EnRd_Draw = 0x80AC6240; // type:func -EnReeba_Init = 0x80AC6860; // type:func -EnReeba_Destroy = 0x80AC6A3C; // type:func -EnReeba_SetupSurface = 0x80AC6AB4; // type:func -EnReeba_Surface = 0x80AC6BC8; // type:func -EnReeba_Move = 0x80AC6DE8; // type:func -EnReeba_SetupMoveBig = 0x80AC6F04; // type:func -EnReeba_MoveBig = 0x80AC6F28; // type:func -EnReeba_Recoiled = 0x80AC7198; // type:func -EnReeba_SetupSink = 0x80AC7204; // type:func -EnReeba_Sink = 0x80AC725C; // type:func -EnReeba_SetupDamaged = 0x80AC736C; // type:func -EnReeba_Damaged = 0x80AC73D0; // type:func -EnReeba_SetupStunned = 0x80AC7468; // type:func -EnReeba_Stunned = 0x80AC74B8; // type:func -EnReeba_StunDie = 0x80AC761C; // type:func -EnReeba_SetupDie = 0x80AC7744; // type:func -EnReeba_Die = 0x80AC77B8; // type:func -EnReeba_StunRecover = 0x80AC7998; // type:func -EnReeba_CheckDamage = 0x80AC7A2C; // type:func -EnReeba_Update = 0x80AC7C68; // type:func -EnReeba_Draw = 0x80AC7F18; // type:func -EnRiverSound_Init = 0x80AC82D0; // type:func -EnRiverSound_Destroy = 0x80AC83A0; // type:func -EnRiverSound_FindClosestPointOnLineSegment = 0x80AC83F8; // type:func -EnRiverSound_GetSfxPos = 0x80AC8564; // type:func -EnRiverSound_Update = 0x80AC8860; // type:func -EnRiverSound_Draw = 0x80AC8A30; // type:func -EnRl_Destroy = 0x80AC8C60; // type:func -func_80AE72D0 = 0x80AC8C84; // type:func -func_80AE744C = 0x80AC8D0C; // type:func -func_80AE7494 = 0x80AC8D54; // type:func -func_80AE74B4 = 0x80AC8D78; // type:func -func_80AE74FC = 0x80AC8DC4; // type:func -func_80AE7544 = 0x80AC8E10; // type:func -func_80AE7590 = 0x80AC8E5C; // type:func -func_80AE7668 = 0x80AC8F3C; // type:func -func_80AE7698 = 0x80AC8F70; // type:func -func_80AE772C = 0x80AC9004; // type:func -func_80AE7798 = 0x80AC9070; // type:func -func_80AE77B8 = 0x80AC9090; // type:func -func_80AE77F8 = 0x80AC90D8; // type:func -func_80AE7838 = 0x80AC911C; // type:func -func_80AE7878 = 0x80AC9164; // type:func -func_80AE78D4 = 0x80AC91BC; // type:func -func_80AE7954 = 0x80AC923C; // type:func -func_80AE79A4 = 0x80AC928C; // type:func -func_80AE7AF8 = 0x80AC93E0; // type:func -func_80AE7BF8 = 0x80AC94EC; // type:func -func_80AE7C64 = 0x80AC9558; // type:func -func_80AE7C94 = 0x80AC9578; // type:func -func_80AE7CE8 = 0x80AC95C0; // type:func -func_80AE7D40 = 0x80AC9604; // type:func -func_80AE7D94 = 0x80AC964C; // type:func -EnRl_Update = 0x80AC9794; // type:func -EnRl_Init = 0x80AC97DC; // type:func -func_80AE7FD0 = 0x80AC9848; // type:func -func_80AE7FDC = 0x80AC9858; // type:func -EnRl_Draw = 0x80AC998C; // type:func -EnRr_Init = 0x80AC9B40; // type:func -EnRr_Destroy = 0x80AC9CE0; // type:func -EnRr_Move = 0x80AC9D20; // type:func -EnRr_SetupReach = 0x80AC9D48; // type:func -EnRr_SetupNeutral = 0x80AC9E48; // type:func -EnRr_SetupGrabPlayer = 0x80AC9F14; // type:func -EnRr_GetMessage = 0x80ACA01C; // type:func -EnRr_SetupReleasePlayer = 0x80ACA070; // type:func -EnRr_SetupDamage = 0x80ACA26C; // type:func -EnRr_SetupApproach = 0x80ACA338; // type:func -EnRr_SetupDeath = 0x80ACA3F0; // type:func -EnRr_SetupStunned = 0x80ACA490; // type:func -EnRr_CollisionCheck = 0x80ACA59C; // type:func -EnRr_InitBodySegments = 0x80ACA92C; // type:func -EnRr_UpdateBodySegments = 0x80ACAAEC; // type:func -EnRr_Approach = 0x80ACAC70; // type:func -EnRr_Reach = 0x80ACAD30; // type:func -EnRr_GrabPlayer = 0x80ACAE4C; // type:func -EnRr_Damage = 0x80ACAF44; // type:func -EnRr_Death = 0x80ACAFBC; // type:func -EnRr_Retreat = 0x80ACB330; // type:func -EnRr_Stunned = 0x80ACB3C4; // type:func -EnRr_Update = 0x80ACB42C; // type:func -EnRr_Draw = 0x80ACB858; // type:func -func_80AEAC10 = 0x80ACC070; // type:func -func_80AEAC54 = 0x80ACC0B4; // type:func -func_80AEACDC = 0x80ACC13C; // type:func -func_80AEAD20 = 0x80ACC180; // type:func -EnRu1_DestroyColliders = 0x80ACC1F8; // type:func -func_80AEADD8 = 0x80ACC238; // type:func -func_80AEADE0 = 0x80ACC244; // type:func -func_80AEADF0 = 0x80ACC258; // type:func -EnRu1_Destroy = 0x80ACC268; // type:func -EnRu1_UpdateEyes = 0x80ACC288; // type:func -EnRu1_SetEyeIndex = 0x80ACC310; // type:func -EnRu1_SetMouthIndex = 0x80ACC328; // type:func -func_80AEAECC = 0x80ACC340; // type:func -EnRu1_IsCsStateIdle = 0x80ACC3A8; // type:func -EnRu1_GetCue = 0x80ACC3C8; // type:func -func_80AEAFA0 = 0x80ACC414; // type:func -func_80AEAFE0 = 0x80ACC454; // type:func -func_80AEB020 = 0x80ACC494; // type:func -EnRu1_FindSwitch = 0x80ACC4FC; // type:func -func_80AEB0EC = 0x80ACC544; // type:func -func_80AEB104 = 0x80ACC55C; // type:func -func_80AEB124 = 0x80ACC57C; // type:func -func_80AEB174 = 0x80ACC5CC; // type:func -func_80AEB1B4 = 0x80ACC610; // type:func -func_80AEB264 = 0x80ACC63C; // type:func -EnRu1_UpdateSkelAnime = 0x80ACC6F8; // type:func -func_80AEB364 = 0x80ACC73C; // type:func -func_80AEB3A4 = 0x80ACC77C; // type:func -func_80AEB3CC = 0x80ACC7A4; // type:func -func_80AEB3DC = 0x80ACC7B8; // type:func -EnRu1_GetCueChannel3 = 0x80ACC814; // type:func -func_80AEB458 = 0x80ACC834; // type:func -func_80AEB480 = 0x80ACC85C; // type:func -EnRu1_SpawnRipple = 0x80ACC884; // type:func -func_80AEB50C = 0x80ACC8EC; // type:func -func_80AEB59C = 0x80ACC97C; // type:func -EnRu1_SpawnSplash = 0x80ACCA68; // type:func -func_80AEB6E0 = 0x80ACCACC; // type:func -func_80AEB738 = 0x80ACCB28; // type:func -func_80AEB7D0 = 0x80ACCBC0; // type:func -func_80AEB7E0 = 0x80ACCBD4; // type:func -func_80AEB87C = 0x80ACCC70; // type:func -func_80AEB89C = 0x80ACCC94; // type:func -func_80AEB914 = 0x80ACCD0C; // type:func -func_80AEB934 = 0x80ACCD2C; // type:func -func_80AEB954 = 0x80ACCD4C; // type:func -func_80AEB974 = 0x80ACCD6C; // type:func -func_80AEBA0C = 0x80ACCE04; // type:func -func_80AEBA2C = 0x80ACCE24; // type:func -func_80AEBAFC = 0x80ACCEF4; // type:func -func_80AEBB3C = 0x80ACCF38; // type:func -func_80AEBB78 = 0x80ACCF78; // type:func -func_80AEBBF4 = 0x80ACCFF8; // type:func -func_80AEBC30 = 0x80ACD038; // type:func -func_80AEBC84 = 0x80ACD090; // type:func -func_80AEBCB8 = 0x80ACD0C8; // type:func -func_80AEBD1C = 0x80ACD12C; // type:func -func_80AEBD94 = 0x80ACD1A4; // type:func -func_80AEBE3C = 0x80ACD24C; // type:func -func_80AEBEC8 = 0x80ACD2DC; // type:func -func_80AEBF60 = 0x80ACD374; // type:func -func_80AEBFD8 = 0x80ACD3F0; // type:func -func_80AEC070 = 0x80ACD488; // type:func -func_80AEC0B4 = 0x80ACD4D0; // type:func -func_80AEC100 = 0x80ACD524; // type:func -func_80AEC130 = 0x80ACD558; // type:func -func_80AEC17C = 0x80ACD5A8; // type:func -func_80AEC1D4 = 0x80ACD608; // type:func -func_80AEC244 = 0x80ACD67C; // type:func -func_80AEC2C0 = 0x80ACD6FC; // type:func -func_80AEC320 = 0x80ACD760; // type:func -func_80AEC40C = 0x80ACD854; // type:func -func_80AEC4CC = 0x80ACD914; // type:func -func_80AEC4F4 = 0x80ACD93C; // type:func -func_80AEC5FC = 0x80ACDA44; // type:func -func_80AEC650 = 0x80ACDA98; // type:func -func_80AEC6B0 = 0x80ACDAFC; // type:func -func_80AEC6E4 = 0x80ACDB34; // type:func -func_80AEC780 = 0x80ACDBD4; // type:func -func_80AEC81C = 0x80ACDC74; // type:func -func_80AEC8B8 = 0x80ACDD10; // type:func -func_80AEC93C = 0x80ACDD98; // type:func -func_80AEC9C4 = 0x80ACDE20; // type:func -func_80AECA18 = 0x80ACDE74; // type:func -func_80AECA44 = 0x80ACDEA4; // type:func -func_80AECA94 = 0x80ACDEF8; // type:func -func_80AECAB4 = 0x80ACDF18; // type:func -func_80AECAD4 = 0x80ACDF38; // type:func -func_80AECB18 = 0x80ACDF80; // type:func -func_80AECB60 = 0x80ACDFCC; // type:func -func_80AECBB8 = 0x80ACE028; // type:func -func_80AECC1C = 0x80ACE090; // type:func -func_80AECC84 = 0x80ACE0FC; // type:func -func_80AECCB0 = 0x80ACE128; // type:func -func_80AECDA0 = 0x80ACE218; // type:func -func_80AECE04 = 0x80ACE27C; // type:func -func_80AECE20 = 0x80ACE29C; // type:func -func_80AECEB4 = 0x80ACE32C; // type:func -func_80AECF6C = 0x80ACE3E4; // type:func -func_80AED084 = 0x80ACE4FC; // type:func -func_80AED0B0 = 0x80ACE528; // type:func -func_80AED0C8 = 0x80ACE540; // type:func -func_80AED0D8 = 0x80ACE554; // type:func -func_80AED110 = 0x80ACE58C; // type:func -func_80AED154 = 0x80ACE5D0; // type:func -func_80AED19C = 0x80ACE618; // type:func -func_80AED218 = 0x80ACE694; // type:func -func_80AED304 = 0x80ACE784; // type:func -func_80AED324 = 0x80ACE7A4; // type:func -func_80AED344 = 0x80ACE7C4; // type:func -func_80AED374 = 0x80ACE7F8; // type:func -func_80AED3A4 = 0x80ACE82C; // type:func -func_80AED3E0 = 0x80ACE86C; // type:func -func_80AED414 = 0x80ACE8A4; // type:func -func_80AED44C = 0x80ACE8E4; // type:func -func_80AED4FC = 0x80ACE998; // type:func -func_80AED520 = 0x80ACE9C0; // type:func -func_80AED57C = 0x80ACEA20; // type:func -func_80AED5B8 = 0x80ACEA60; // type:func -func_80AED5DC = 0x80ACEA88; // type:func -func_80AED600 = 0x80ACEAB0; // type:func -func_80AED624 = 0x80ACEAD8; // type:func -func_80AED6DC = 0x80ACEB90; // type:func -func_80AED6F8 = 0x80ACEBB0; // type:func -func_80AED738 = 0x80ACEBF0; // type:func -func_80AED83C = 0x80ACECF8; // type:func -func_80AED8DC = 0x80ACED9C; // type:func -func_80AEDAE0 = 0x80ACEFA0; // type:func -func_80AEDB30 = 0x80ACEFF4; // type:func -func_80AEDEF4 = 0x80ACF3B4; // type:func -func_80AEDFF4 = 0x80ACF4B8; // type:func -func_80AEE02C = 0x80ACF4F8; // type:func -func_80AEE050 = 0x80ACF520; // type:func -func_80AEE264 = 0x80ACF73C; // type:func -func_80AEE2F8 = 0x80ACF7D0; // type:func -func_80AEE394 = 0x80ACF86C; // type:func -func_80AEE488 = 0x80ACF960; // type:func -func_80AEE568 = 0x80ACFA40; // type:func -func_80AEE628 = 0x80ACFB04; // type:func -func_80AEE6D0 = 0x80ACFBA8; // type:func -func_80AEE7C4 = 0x80ACFC9C; // type:func -func_80AEEAC8 = 0x80ACFFBC; // type:func -func_80AEEB24 = 0x80AD0018; // type:func -func_80AEEBB4 = 0x80AD00A8; // type:func -func_80AEEBD4 = 0x80AD00C8; // type:func -func_80AEEC5C = 0x80AD0154; // type:func -func_80AEECF0 = 0x80AD01EC; // type:func -func_80AEED58 = 0x80AD0258; // type:func -func_80AEEDCC = 0x80AD02D0; // type:func -func_80AEEE34 = 0x80AD033C; // type:func -func_80AEEE9C = 0x80AD03A8; // type:func -func_80AEEF08 = 0x80AD0418; // type:func -func_80AEEF5C = 0x80AD0470; // type:func -func_80AEEF68 = 0x80AD0480; // type:func -func_80AEEFEC = 0x80AD0508; // type:func -func_80AEF080 = 0x80AD059C; // type:func -func_80AEF0BC = 0x80AD05DC; // type:func -func_80AEF170 = 0x80AD0694; // type:func -func_80AEF188 = 0x80AD06AC; // type:func -func_80AEF1F0 = 0x80AD0714; // type:func -func_80AEF29C = 0x80AD07C0; // type:func -func_80AEF2AC = 0x80AD07D4; // type:func -func_80AEF2D0 = 0x80AD07FC; // type:func -func_80AEF354 = 0x80AD0888; // type:func -func_80AEF3A8 = 0x80AD08E4; // type:func -func_80AEF40C = 0x80AD094C; // type:func -func_80AEF4A8 = 0x80AD09EC; // type:func -func_80AEF4E0 = 0x80AD0A24; // type:func -func_80AEF51C = 0x80AD0A64; // type:func -func_80AEF540 = 0x80AD0A8C; // type:func -func_80AEF5B8 = 0x80AD0B08; // type:func -func_80AEF624 = 0x80AD0B78; // type:func -func_80AEF728 = 0x80AD0C7C; // type:func -func_80AEF79C = 0x80AD0CF0; // type:func -func_80AEF820 = 0x80AD0D78; // type:func -func_80AEF890 = 0x80AD0DE8; // type:func -func_80AEF930 = 0x80AD0E74; // type:func -func_80AEF99C = 0x80AD0EE4; // type:func -func_80AEF9D8 = 0x80AD0F20; // type:func -func_80AEFA2C = 0x80AD0F64; // type:func -func_80AEFAAC = 0x80AD0FDC; // type:func -func_80AEFB04 = 0x80AD1024; // type:func -func_80AEFB68 = 0x80AD1080; // type:func -func_80AEFBC8 = 0x80AD10D8; // type:func -func_80AEFC24 = 0x80AD1138; // type:func -func_80AEFC54 = 0x80AD116C; // type:func -func_80AEFCE8 = 0x80AD1208; // type:func -func_80AEFD38 = 0x80AD1258; // type:func -func_80AEFDC0 = 0x80AD12E4; // type:func -func_80AEFE38 = 0x80AD1368; // type:func -func_80AEFE84 = 0x80AD13B4; // type:func -func_80AEFE9C = 0x80AD13CC; // type:func -func_80AEFECC = 0x80AD1400; // type:func -func_80AEFF40 = 0x80AD147C; // type:func -func_80AEFF94 = 0x80AD14D8; // type:func -EnRu1_Update = 0x80AD1574; // type:func -EnRu1_Init = 0x80AD15BC; // type:func -func_80AF0278 = 0x80AD16F8; // type:func -EnRu1_OverrideLimbDraw = 0x80AD1768; // type:func -EnRu1_PostLimbDraw = 0x80AD17D4; // type:func -EnRu1_DrawNothing = 0x80AD1860; // type:func -EnRu1_DrawOpa = 0x80AD1870; // type:func -EnRu1_DrawXlu = 0x80AD1A14; // type:func -EnRu1_Draw = 0x80AD1BB4; // type:func -func_80AF2550 = 0x80AD3710; // type:func -func_80AF259C = 0x80AD375C; // type:func -EnRu2_Destroy = 0x80AD37A0; // type:func -func_80AF2608 = 0x80AD37CC; // type:func -func_80AF2690 = 0x80AD3854; // type:func -func_80AF26A0 = 0x80AD3868; // type:func -func_80AF2744 = 0x80AD3878; // type:func -EnRu2_UpdateSkelAnime = 0x80AD38C0; // type:func -EnRu2_GetCue = 0x80AD38E4; // type:func -func_80AF27D0 = 0x80AD390C; // type:func -func_80AF281C = 0x80AD3958; // type:func -func_80AF2868 = 0x80AD39A4; // type:func -func_80AF28E8 = 0x80AD3A24; // type:func -func_80AF2978 = 0x80AD3AB4; // type:func -func_80AF2994 = 0x80AD3AD4; // type:func -func_80AF29DC = 0x80AD3B1C; // type:func -func_80AF2A38 = 0x80AD3B78; // type:func -func_80AF2AB4 = 0x80AD3BF4; // type:func -func_80AF2B44 = 0x80AD3C90; // type:func -func_80AF2B94 = 0x80AD3CE0; // type:func -func_80AF2BC0 = 0x80AD3D0C; // type:func -func_80AF2C54 = 0x80AD3DA0; // type:func -func_80AF2C68 = 0x80AD3DB4; // type:func -func_80AF2CB4 = 0x80AD3E00; // type:func -func_80AF2CD4 = 0x80AD3E20; // type:func -func_80AF2CF4 = 0x80AD3E40; // type:func -func_80AF2D2C = 0x80AD3E7C; // type:func -func_80AF2D6C = 0x80AD3EC4; // type:func -func_80AF2DAC = 0x80AD3F08; // type:func -func_80AF2DEC = 0x80AD3F50; // type:func -func_80AF2E1C = 0x80AD3F84; // type:func -func_80AF2E64 = 0x80AD3FC8; // type:func -func_80AF2E84 = 0x80AD3FE8; // type:func -func_80AF2F04 = 0x80AD4068; // type:func -func_80AF2F58 = 0x80AD40BC; // type:func -func_80AF30AC = 0x80AD4210; // type:func -func_80AF3144 = 0x80AD42AC; // type:func -func_80AF3174 = 0x80AD42CC; // type:func -func_80AF31C8 = 0x80AD4314; // type:func -func_80AF321C = 0x80AD435C; // type:func -func_80AF3394 = 0x80AD44A4; // type:func -func_80AF33E0 = 0x80AD44EC; // type:func -func_80AF346C = 0x80AD4578; // type:func -func_80AF34A4 = 0x80AD45B0; // type:func -func_80AF34F0 = 0x80AD45FC; // type:func -func_80AF3530 = 0x80AD463C; // type:func -func_80AF3564 = 0x80AD4670; // type:func -func_80AF3604 = 0x80AD46FC; // type:func -func_80AF3624 = 0x80AD471C; // type:func -func_80AF366C = 0x80AD4768; // type:func -func_80AF36AC = 0x80AD47B0; // type:func -func_80AF36EC = 0x80AD47F4; // type:func -func_80AF3718 = 0x80AD4824; // type:func -func_80AF3744 = 0x80AD4854; // type:func -func_80AF37AC = 0x80AD48BC; // type:func -func_80AF37CC = 0x80AD48DC; // type:func -func_80AF383C = 0x80AD4948; // type:func -func_80AF3878 = 0x80AD4984; // type:func -func_80AF38D0 = 0x80AD49E4; // type:func -func_80AF390C = 0x80AD4A20; // type:func -func_80AF39DC = 0x80AD4AF0; // type:func -func_80AF3ADC = 0x80AD4BDC; // type:func -func_80AF3B74 = 0x80AD4C74; // type:func -func_80AF3BC8 = 0x80AD4CC8; // type:func -func_80AF3C04 = 0x80AD4D0C; // type:func -func_80AF3C64 = 0x80AD4D74; // type:func -func_80AF3CB8 = 0x80AD4DD0; // type:func -func_80AF3D0C = 0x80AD4E2C; // type:func -func_80AF3D60 = 0x80AD4E88; // type:func -EnRu2_Update = 0x80AD4EEC; // type:func -EnRu2_Init = 0x80AD4F34; // type:func -func_80AF3F14 = 0x80AD502C; // type:func -func_80AF3F20 = 0x80AD503C; // type:func -EnRu2_Draw = 0x80AD5170; // type:func -func_80AF5560 = 0x80AD6490; // type:func -EnSa_GetTextId = 0x80AD6510; // type:func -EnSa_UpdateTalkState = 0x80AD6624; // type:func -func_80AF57D8 = 0x80AD6708; // type:func -func_80AF5894 = 0x80AD67C8; // type:func -func_80AF58B8 = 0x80AD67F0; // type:func -func_80AF594C = 0x80AD6884; // type:func -func_80AF59E0 = 0x80AD6918; // type:func -func_80AF5A74 = 0x80AD69AC; // type:func -func_80AF5B10 = 0x80AD6A48; // type:func -func_80AF5BA4 = 0x80AD6ADC; // type:func -func_80AF5C40 = 0x80AD6B78; // type:func -func_80AF5CD4 = 0x80AD6C0C; // type:func -func_80AF5CE4 = 0x80AD6C24; // type:func -EnSa_ChangeAnim = 0x80AD6CCC; // type:func -func_80AF5DFC = 0x80AD6D3C; // type:func -func_80AF5F34 = 0x80AD6E74; // type:func -func_80AF603C = 0x80AD6F7C; // type:func -func_80AF609C = 0x80AD6FDC; // type:func -func_80AF6130 = 0x80AD7078; // type:func -func_80AF6170 = 0x80AD70BC; // type:func -EnSa_Init = 0x80AD7100; // type:func -EnSa_Destroy = 0x80AD7370; // type:func -func_80AF6448 = 0x80AD739C; // type:func -func_80AF67D0 = 0x80AD7728; // type:func -func_80AF683C = 0x80AD779C; // type:func -func_80AF68E4 = 0x80AD7844; // type:func -func_80AF6B20 = 0x80AD7A84; // type:func -EnSa_Update = 0x80AD7B44; // type:func -EnSa_OverrideLimbDraw = 0x80AD7CD4; // type:func -EnSa_PostLimbDraw = 0x80AD7E7C; // type:func -EnSa_Draw = 0x80AD7ED8; // type:func -EnSb_Init = 0x80AD8700; // type:func -EnSb_Destroy = 0x80AD87E8; // type:func -EnSb_SpawnBubbles = 0x80AD8828; // type:func -EnSb_SetupWaitClosed = 0x80AD88D8; // type:func -EnSb_SetupOpen = 0x80AD8950; // type:func -EnSb_SetupWaitOpen = 0x80AD89CC; // type:func -EnSb_SetupLunge = 0x80AD8A40; // type:func -EnSb_SetupBounce = 0x80AD8AE8; // type:func -EnSb_SetupCooldown = 0x80AD8B60; // type:func -EnSb_WaitClosed = 0x80AD8C64; // type:func -EnSb_Open = 0x80AD8CE4; // type:func -EnSb_WaitOpen = 0x80AD8DAC; // type:func -EnSb_TurnAround = 0x80AD8E60; // type:func -EnSb_Lunge = 0x80AD8F4C; // type:func -EnSb_Bounce = 0x80AD8FF4; // type:func -EnSb_Cooldown = 0x80AD9128; // type:func -EnSb_IsVulnerable = 0x80AD9190; // type:func -EnSb_UpdateDamage = 0x80AD92D8; // type:func -EnSb_Update = 0x80AD95B4; // type:func -EnSb_PostLimbDraw = 0x80AD9734; // type:func -EnSb_Draw = 0x80AD9784; // type:func -EnSceneChange_SetupAction = 0x80AD9B40; // type:func -EnSceneChange_Init = 0x80AD9B4C; // type:func -EnSceneChange_Destroy = 0x80AD9B74; // type:func -EnSceneChange_DoNothing = 0x80AD9B84; // type:func -EnSceneChange_Update = 0x80AD9B94; // type:func -EnSceneChange_Draw = 0x80AD9BB8; // type:func -EnSda_Init = 0x80AD9C70; // type:func -EnSda_Destroy = 0x80AD9C80; // type:func -EnSda_Update = 0x80AD9C90; // type:func -EnSda_Draw = 0x80AD9CCC; // type:func -func_80AF8F60 = 0x80AD9D60; // type:func -func_80AF95C4 = 0x80ADA3C4; // type:func -func_80AF9C70 = 0x80ADAA40; // type:func -EnShopnuts_Init = 0x80ADB360; // type:func -EnShopnuts_Destroy = 0x80ADB49C; // type:func -EnShopnuts_SetupIdle = 0x80ADB4C8; // type:func -EnShopnuts_SetupLookAround = 0x80ADB530; // type:func -EnShopnuts_SetupThrowNut = 0x80ADB578; // type:func -EnShopnuts_SetupPeek = 0x80ADB5B8; // type:func -EnShopnuts_SetupBurrow = 0x80ADB620; // type:func -EnShopnuts_SetupSpawnSalesman = 0x80ADB670; // type:func -EnShopnuts_Idle = 0x80ADB6C8; // type:func -EnShopnuts_LookAround = 0x80ADB92C; // type:func -EnShopnuts_Peek = 0x80ADB9B0; // type:func -EnShopnuts_ThrowNut = 0x80ADBA74; // type:func -EnShopnuts_Burrow = 0x80ADBBB0; // type:func -EnShopnuts_SpawnSalesman = 0x80ADBC74; // type:func -EnShopnuts_ColliderCheck = 0x80ADBD10; // type:func -EnShopnuts_Update = 0x80ADBD70; // type:func -EnShopnuts_OverrideLimbDraw = 0x80ADBEB0; // type:func -EnShopnuts_PostLimbDraw = 0x80ADBEE8; // type:func -EnShopnuts_Draw = 0x80ADC088; // type:func -EnSi_Init = 0x80ADC270; // type:func -EnSi_Destroy = 0x80ADC300; // type:func -func_80AFB748 = 0x80ADC32C; // type:func -func_80AFB768 = 0x80ADC350; // type:func -func_80AFB89C = 0x80ADC484; // type:func -func_80AFB950 = 0x80ADC53C; // type:func -EnSi_Update = 0x80ADC5D0; // type:func -EnSi_Draw = 0x80ADC644; // type:func -EnSiofuki_Init = 0x80ADC770; // type:func -EnSiofuki_Destroy = 0x80ADC98C; // type:func -func_80AFBDC8 = 0x80ADC9C0; // type:func -func_80AFBE8C = 0x80ADCA80; // type:func -func_80AFC1D0 = 0x80ADCDCC; // type:func -func_80AFC218 = 0x80ADCE14; // type:func -func_80AFC34C = 0x80ADCF50; // type:func -func_80AFC3C8 = 0x80ADCFD4; // type:func -func_80AFC478 = 0x80ADD08C; // type:func -func_80AFC544 = 0x80ADD160; // type:func -EnSiofuki_Update = 0x80ADD198; // type:func -EnSiofuki_Draw = 0x80ADD1BC; // type:func -EnSkb_SetupAction = 0x80ADD520; // type:func -EnSkb_SpawnDebris = 0x80ADD52C; // type:func -EnSkb_Init = 0x80ADD6DC; // type:func -EnSkb_Destroy = 0x80ADD894; // type:func -EnSkb_DecideNextAction = 0x80ADD8EC; // type:func -EnSkb_SetupRiseFromGround = 0x80ADD988; // type:func -EnSkb_RiseFromGround = 0x80ADD9EC; // type:func -EnSkb_SetupDespawn = 0x80ADDAD8; // type:func -EnSkb_Despawn = 0x80ADDB80; // type:func -EnSkb_SetupWalkForward = 0x80ADDC34; // type:func -EnSkb_WalkForward = 0x80ADDCCC; // type:func -EnSkb_SetupAttack = 0x80ADDECC; // type:func -EnSkb_Attack = 0x80ADDF64; // type:func -EnSkb_SetupRecoil = 0x80ADE010; // type:func -EnSkb_Recoil = 0x80ADE09C; // type:func -EnSkb_SetupStunned = 0x80ADE0D8; // type:func -EnSkb_Stunned = 0x80ADE134; // type:func -EnSkb_SetupTakeDamage = 0x80ADE1DC; // type:func -EnSkb_TakeDamage = 0x80ADE264; // type:func -EnSkb_SetupDeath = 0x80ADE350; // type:func -EnSkb_Death = 0x80ADE41C; // type:func -EnSkb_CheckDamage = 0x80ADE508; // type:func -EnSkb_Update = 0x80ADE7B8; // type:func -EnSkb_OverrideLimbDraw = 0x80ADE8E0; // type:func -EnSkb_PostLimbDraw = 0x80ADEAB0; // type:func -EnSkb_Draw = 0x80ADEB58; // type:func -EnSkj_ChangeAnim = 0x80ADEE10; // type:func -EnSkj_SetupAction = 0x80ADEE98; // type:func -EnSkj_CalculateCenter = 0x80ADEEF0; // type:func -EnSkj_SetNaviId = 0x80ADEF88; // type:func -EnSkj_Init = 0x80ADF00C; // type:func -EnSkj_Destroy = 0x80ADF358; // type:func -EnSkj_RangeCheck = 0x80ADF384; // type:func -EnSkj_GetItemXzRange = 0x80ADF400; // type:func -EnSkj_GetItemYRange = 0x80ADF448; // type:func -EnSkj_ShootNeedle = 0x80ADF474; // type:func -EnSkj_SpawnBlood = 0x80ADF58C; // type:func -EnSkj_CollisionCheck = 0x80ADF6E4; // type:func -func_80AFEDF8 = 0x80ADF8A0; // type:func -EnSkj_Backflip = 0x80ADF92C; // type:func -EnSkj_Fade = 0x80ADF974; // type:func -EnSkj_SetupWaitToShootNeedle = 0x80ADFA04; // type:func -EnSkj_WaitToShootNeedle = 0x80ADFA40; // type:func -EnSkj_SetupResetFight = 0x80ADFAE0; // type:func -EnSkj_SariasSongKidIdle = 0x80ADFB24; // type:func -EnSkj_SetupDie = 0x80ADFC1C; // type:func -EnSkj_WaitForDeathAnim = 0x80ADFC50; // type:func -func_80AFF1F0 = 0x80ADFCA4; // type:func -EnSkj_PickNextFightAction = 0x80ADFCD8; // type:func -func_80AFF2A0 = 0x80ADFD58; // type:func -EnSkj_WaitForLandAnim = 0x80ADFD9C; // type:func -func_80AFF334 = 0x80ADFDF0; // type:func -EnSkj_ResetFight = 0x80ADFE3C; // type:func -EnSkj_SetupStand = 0x80ADFE8C; // type:func -EnSkj_Fight = 0x80ADFEE0; // type:func -EnSkj_SetupNeedleRecover = 0x80AE00AC; // type:func -EnSkj_NeedleRecover = 0x80AE00E0; // type:func -EnSkj_SetupSpawnDeathEffect = 0x80AE011C; // type:func -EnSkj_SpawnDeathEffect = 0x80AE0144; // type:func -EnSkj_SetupWaitInRange = 0x80AE025C; // type:func -EnSkj_WaitInRange = 0x80AE0294; // type:func -EnSkj_SetupWaitForSong = 0x80AE04A8; // type:func -EnSkj_WaitForSong = 0x80AE04CC; // type:func -EnSkj_SetupAfterSong = 0x80AE07A0; // type:func -EnSkj_AfterSong = 0x80AE07D4; // type:func -EnSkj_SetupTalk = 0x80AE0828; // type:func -EnSkj_SariaSongTalk = 0x80AE0848; // type:func -func_80AFFE24 = 0x80AE08EC; // type:func -func_80AFFE44 = 0x80AE090C; // type:func -EnSkj_SetupPostSariasSong = 0x80AE0984; // type:func -EnSkj_ChangeModeAfterSong = 0x80AE09A4; // type:func -EnSkj_SetupMaskTrade = 0x80AE0A0C; // type:func -EnSkj_StartMaskTrade = 0x80AE0A2C; // type:func -EnSkj_JumpFromStump = 0x80AE0A94; // type:func -EnSkj_WaitForLanding = 0x80AE0AF8; // type:func -EnSkj_SetupWaitForLandAnimFinish = 0x80AE0B48; // type:func -EnSkj_WaitForLandAnimFinish = 0x80AE0B7C; // type:func -EnSkj_SetupWalkToPlayer = 0x80AE0BD0; // type:func -EnSkj_WalkToPlayer = 0x80AE0C14; // type:func -EnSkj_SetupAskForMask = 0x80AE0CB0; // type:func -EnSkj_AskForMask = 0x80AE0CF8; // type:func -EnSkj_SetupTakeMask = 0x80AE0D90; // type:func -EnSkj_TakeMask = 0x80AE0DC8; // type:func -EnSkj_SetupWaitForMaskTextClear = 0x80AE0E60; // type:func -EnSkj_WaitForMaskTextClear = 0x80AE0E80; // type:func -EnSkj_SetupWrongSong = 0x80AE0EE8; // type:func -EnSkj_WrongSong = 0x80AE0F20; // type:func -EnSkj_SetupWaitForTextClear = 0x80AE0F74; // type:func -EnSkj_SariasSongWaitForTextClear = 0x80AE0F94; // type:func -EnSkj_OcarinaGameSetupWaitForPlayer = 0x80AE100C; // type:func -EnSkj_OcarinaGameWaitForPlayer = 0x80AE104C; // type:func -EnSkj_IsLeavingGame = 0x80AE1088; // type:func -EnSkj_SetupIdle = 0x80AE10D8; // type:func -EnSkj_Appear = 0x80AE110C; // type:func -EnSkj_OcarinaGameIdle = 0x80AE1134; // type:func -EnSkj_SetupPlayOcarinaGame = 0x80AE1180; // type:func -EnSkj_PlayOcarinaGame = 0x80AE11B4; // type:func -EnSkj_SetupLeaveOcarinaGame = 0x80AE1200; // type:func -EnSkj_LeaveOcarinaGame = 0x80AE1248; // type:func -EnSkj_Update = 0x80AE1290; // type:func -EnSkj_SariasSongShortStumpUpdate = 0x80AE1474; // type:func -EnSkj_TurnPlayer = 0x80AE149C; // type:func -EnSkj_SetupWaitForOcarina = 0x80AE14E8; // type:func -EnSkj_WaitForOcarina = 0x80AE15A4; // type:func -EnSkj_StartOcarinaMinigame = 0x80AE164C; // type:func -EnSkj_WaitForPlayback = 0x80AE16D8; // type:func -EnSkj_FailedMiniGame = 0x80AE1948; // type:func -EnSkj_WaitForNextRound = 0x80AE1988; // type:func -EnSkj_OfferNextRound = 0x80AE19D8; // type:func -EnSkj_WaitForOfferResponse = 0x80AE1A14; // type:func -EnSkj_WonOcarinaMiniGame = 0x80AE1ABC; // type:func -EnSkj_WaitToGiveReward = 0x80AE1AFC; // type:func -EnSkj_GiveOcarinaGameReward = 0x80AE1B84; // type:func -EnSkj_FinishOcarinaGameRound = 0x80AE1BF8; // type:func -EnSkj_CleanupOcarinaGame = 0x80AE1C94; // type:func -EnSkj_OcarinaMinigameShortStumpUpdate = 0x80AE1D10; // type:func -EnSkj_OverrideLimbDraw = 0x80AE1D94; // type:func -EnSkj_PostLimbDraw = 0x80AE1DB0; // type:func -EnSkj_TranslucentDL = 0x80AE1E80; // type:func -EnSkj_OpaqueDL = 0x80AE1ED8; // type:func -EnSkj_Draw = 0x80AE1F10; // type:func -EnSkjneedle_Init = 0x80AE2760; // type:func -EnSkjneedle_Destroy = 0x80AE27F8; // type:func -EnSkjNeedle_CollisionCheck = 0x80AE2824; // type:func -EnSkjneedle_Update = 0x80AE2854; // type:func -EnSkjneedle_Draw = 0x80AE2944; // type:func -EnSsh_SetupAction = 0x80AE2A70; // type:func -EnSsh_SpawnShockwave = 0x80AE2A7C; // type:func -EnSsh_CreateBlureEffect = 0x80AE2B04; // type:func -EnSsh_CheckCeilingPos = 0x80AE2C00; // type:func -EnSsh_AddBlureVertex = 0x80AE2C98; // type:func -EnSsh_AddBlureSpace = 0x80AE2DA0; // type:func -EnSsh_InitColliders = 0x80AE2DCC; // type:func -EnSsh_SetAnimation = 0x80AE2F0C; // type:func -EnSsh_SetWaitAnimation = 0x80AE3040; // type:func -EnSsh_SetReturnAnimation = 0x80AE3060; // type:func -EnSsh_SetLandAnimation = 0x80AE3094; // type:func -EnSsh_SetDropAnimation = 0x80AE30D8; // type:func -EnSsh_SetStunned = 0x80AE3128; // type:func -EnSsh_SetColliderScale = 0x80AE3154; // type:func -EnSsh_Damaged = 0x80AE32C8; // type:func -EnSsh_Turn = 0x80AE33A4; // type:func -EnSsh_Stunned = 0x80AE3478; // type:func -EnSsh_UpdateYaw = 0x80AE3518; // type:func -EnSsh_Bob = 0x80AE3554; // type:func -EnSsh_IsCloseToLink = 0x80AE35C0; // type:func -EnSsh_IsCloseToHome = 0x80AE36A8; // type:func -EnSsh_IsCloseToGround = 0x80AE36E0; // type:func -EnSsh_Sway = 0x80AE3720; // type:func -EnSsh_CheckBodyStickHit = 0x80AE3864; // type:func -EnSsh_CheckHitPlayer = 0x80AE38D8; // type:func -EnSsh_CheckHitFront = 0x80AE39E0; // type:func -EnSsh_CheckHitBack = 0x80AE3A3C; // type:func -EnSsh_CollisionCheck = 0x80AE3B14; // type:func -EnSsh_SetBodyCylinderAC = 0x80AE3BC8; // type:func -EnSsh_SetLegsCylinderAC = 0x80AE3C0C; // type:func -EnSsh_SetCylinderOC = 0x80AE3CC4; // type:func -EnSsh_SetColliders = 0x80AE3E9C; // type:func -EnSsh_Init = 0x80AE3F64; // type:func -EnSsh_Destroy = 0x80AE40F8; // type:func -EnSsh_Wait = 0x80AE4178; // type:func -EnSsh_Talk = 0x80AE41D4; // type:func -EnSsh_Idle = 0x80AE4220; // type:func -EnSsh_Land = 0x80AE44B8; // type:func -EnSsh_Drop = 0x80AE45A0; // type:func -EnSsh_Return = 0x80AE46A0; // type:func -EnSsh_UpdateColliderScale = 0x80AE4774; // type:func -EnSsh_Start = 0x80AE481C; // type:func -EnSsh_Update = 0x80AE48A4; // type:func -EnSsh_OverrideLimbDraw = 0x80AE49C4; // type:func -EnSsh_PostLimbDraw = 0x80AE4AB4; // type:func -EnSsh_Draw = 0x80AE4AF0; // type:func -EnSt_SetupAction = 0x80AE5060; // type:func -EnSt_SpawnDust = 0x80AE506C; // type:func -EnSt_SpawnBlastEffect = 0x80AE528C; // type:func -EnSt_SpawnDeadEffect = 0x80AE5314; // type:func -EnSt_CreateBlureEffect = 0x80AE5450; // type:func -EnSt_CheckCeilingPos = 0x80AE554C; // type:func -EnSt_AddBlurVertex = 0x80AE561C; // type:func -EnSt_AddBlurSpace = 0x80AE5724; // type:func -EnSt_SetWaitingAnimation = 0x80AE5750; // type:func -EnSt_SetReturnToCeilingAnimation = 0x80AE5780; // type:func -EnSt_SetLandAnimation = 0x80AE57C0; // type:func -EnSt_SetDropAnimAndVel = 0x80AE581C; // type:func -EnSt_InitColliders = 0x80AE587C; // type:func -EnSt_CheckBodyStickHit = 0x80AE59BC; // type:func -EnSt_SetBodyCylinderAC = 0x80AE5A30; // type:func -EnSt_SetLegsCylinderAC = 0x80AE5A74; // type:func -EnSt_SetCylinderOC = 0x80AE5B2C; // type:func -EnSt_UpdateCylinders = 0x80AE5D04; // type:func -EnSt_CheckHitPlayer = 0x80AE5DC8; // type:func -EnSt_CheckHitFrontside = 0x80AE5EB4; // type:func -EnSt_CheckHitBackside = 0x80AE5EF4; // type:func -EnSt_CheckColliders = 0x80AE60E4; // type:func -EnSt_SetColliderScale = 0x80AE616C; // type:func -EnSt_SetTeethColor = 0x80AE62D8; // type:func -EnSt_DecrStunTimer = 0x80AE6408; // type:func -EnSt_UpdateYaw = 0x80AE6428; // type:func -EnSt_IsDoneBouncing = 0x80AE66C8; // type:func -EnSt_Bob = 0x80AE6790; // type:func -EnSt_IsCloseToPlayer = 0x80AE67FC; // type:func -EnSt_IsCloseToInitalPos = 0x80AE68A4; // type:func -EnSt_IsCloseToGround = 0x80AE68DC; // type:func -EnSt_Sway = 0x80AE691C; // type:func -EnSt_Init = 0x80AE6AEC; // type:func -EnSt_Destroy = 0x80AE6C10; // type:func -EnSt_WaitOnCeiling = 0x80AE6C90; // type:func -EnSt_WaitOnGround = 0x80AE6CEC; // type:func -EnSt_LandOnGround = 0x80AE6DE4; // type:func -EnSt_MoveToGround = 0x80AE6EE8; // type:func -EnSt_ReturnToCeiling = 0x80AE6FE0; // type:func -EnSt_BounceAround = 0x80AE70B4; // type:func -EnSt_FinishBouncing = 0x80AE7188; // type:func -EnSt_Die = 0x80AE72FC; // type:func -EnSt_StartOnCeilingOrGround = 0x80AE7374; // type:func -EnSt_Update = 0x80AE73F8; // type:func -EnSt_OverrideLimbDraw = 0x80AE7578; // type:func -EnSt_PostLimbDraw = 0x80AE7658; // type:func -EnSt_Draw = 0x80AE7694; // type:func -EnSth_SetupAction = 0x80AE7CD0; // type:func -EnSth_Init = 0x80AE7CDC; // type:func -EnSth_SetupShapeColliderUpdate2AndDraw = 0x80AE7DD8; // type:func -EnSth_SetupAfterObjectLoaded = 0x80AE7E5C; // type:func -EnSth_Destroy = 0x80AE7F80; // type:func -EnSth_WaitForObject = 0x80AE7FAC; // type:func -EnSth_FacePlayer = 0x80AE8000; // type:func -EnSth_LookAtPlayer = 0x80AE8118; // type:func -EnSth_RewardObtainedTalk = 0x80AE822C; // type:func -EnSth_ParentRewardObtainedWait = 0x80AE82A8; // type:func -EnSth_GivePlayerItem = 0x80AE8334; // type:func -EnSth_GiveReward = 0x80AE83D0; // type:func -EnSth_RewardUnobtainedTalk = 0x80AE8450; // type:func -EnSth_RewardUnobtainedWait = 0x80AE84CC; // type:func -EnSth_ChildRewardObtainedWait = 0x80AE8570; // type:func -EnSth_Update = 0x80AE861C; // type:func -EnSth_Update2 = 0x80AE8640; // type:func -EnSth_OverrideLimbDraw = 0x80AE8744; // type:func -EnSth_PostLimbDraw = 0x80AE88A0; // type:func -EnSth_AllocColorDList = 0x80AE8918; // type:func -EnSth_Draw = 0x80AE8984; // type:func -EnStream_SetupAction = 0x80AEBD90; // type:func -EnStream_Init = 0x80AEBD9C; // type:func -EnStream_Destroy = 0x80AEBE04; // type:func -func_80B0B81C = 0x80AEBE14; // type:func -EnStream_SuckPlayer = 0x80AEBF34; // type:func -EnStream_WaitForPlayer = 0x80AEC0CC; // type:func -EnStream_Update = 0x80AEC120; // type:func -EnStream_Draw = 0x80AEC154; // type:func -EnSw_CrossProduct = 0x80AEC320; // type:func -func_80B0BE20 = 0x80AEC394; // type:func -func_80B0C020 = 0x80AEC594; // type:func -func_80B0C0CC = 0x80AEC644; // type:func -EnSw_Init = 0x80AECA78; // type:func -EnSw_Destroy = 0x80AECF40; // type:func -func_80B0C9F0 = 0x80AECF6C; // type:func -func_80B0CBE8 = 0x80AED168; // type:func -func_80B0CCF4 = 0x80AED274; // type:func -func_80B0CEA8 = 0x80AED428; // type:func -func_80B0CF44 = 0x80AED4C8; // type:func -func_80B0D14C = 0x80AED6D0; // type:func -func_80B0D364 = 0x80AED8E8; // type:func -func_80B0D3AC = 0x80AED930; // type:func -func_80B0D590 = 0x80AEDB18; // type:func -func_80B0D878 = 0x80AEDE00; // type:func -func_80B0DB00 = 0x80AEE088; // type:func -func_80B0DC7C = 0x80AEE208; // type:func -func_80B0DE34 = 0x80AEE3C4; // type:func -func_80B0DEA8 = 0x80AEE440; // type:func -func_80B0DFFC = 0x80AEE594; // type:func -func_80B0E314 = 0x80AEE8AC; // type:func -func_80B0E430 = 0x80AEE9C4; // type:func -func_80B0E5E0 = 0x80AEEB74; // type:func -func_80B0E728 = 0x80AEECC0; // type:func -func_80B0E90C = 0x80AEEEA4; // type:func -func_80B0E9BC = 0x80AEEF54; // type:func -EnSw_Update = 0x80AEF004; // type:func -EnSw_OverrideLimbDraw = 0x80AEF060; // type:func -EnSw_PostLimbDraw = 0x80AEF304; // type:func -func_80B0EDB8 = 0x80AEF31C; // type:func -func_80B0EEA4 = 0x80AEF3D4; // type:func -EnSw_Draw = 0x80AEF400; // type:func -EnSyatekiItm_Init = 0x80AEFB10; // type:func -EnSyatekiItm_Destroy = 0x80AEFC74; // type:func -EnSyatekiItm_Idle = 0x80AEFC84; // type:func -EnSyatekiItm_StartRound = 0x80AEFD94; // type:func -EnSyatekiItm_SpawnTargets = 0x80AEFF10; // type:func -EnSyatekiItm_CheckTargets = 0x80AF0390; // type:func -EnSyatekiItm_CleanupGame = 0x80AF0434; // type:func -EnSyatekiItm_EndGame = 0x80AF04BC; // type:func -EnSyatekiItm_Update = 0x80AF0508; // type:func -EnSyatekiMan_Init = 0x80AF08B0; // type:func -EnSyatekiMan_Destroy = 0x80AF0964; // type:func -EnSyatekiMan_Start = 0x80AF0974; // type:func -EnSyatekiMan_SetupIdle = 0x80AF0A08; // type:func -EnSyatekiMan_Idle = 0x80AF0A60; // type:func -EnSyatekiMan_Talk = 0x80AF0ABC; // type:func -EnSyatekiMan_StopTalk = 0x80AF0C64; // type:func -EnSyatekiMan_StartGame = 0x80AF0D0C; // type:func -EnSyatekiMan_WaitForGame = 0x80AF0DCC; // type:func -EnSyatekiMan_EndGame = 0x80AF0EE8; // type:func -EnSyatekiMan_GivePrize = 0x80AF1138; // type:func -EnSyatekiMan_FinishPrize = 0x80AF11A8; // type:func -EnSyatekiMan_RestartGame = 0x80AF126C; // type:func -EnSyatekiMan_BlinkWait = 0x80AF12D4; // type:func -EnSyatekiMan_Blink = 0x80AF1308; // type:func -EnSyatekiMan_Update = 0x80AF13A8; // type:func -EnSyatekiMan_OverrideLimbDraw = 0x80AF1448; // type:func -EnSyatekiMan_Draw = 0x80AF14D8; // type:func -EnSyatekiNiw_Init = 0x80AF1670; // type:func -EnSyatekiNiw_Destroy = 0x80AF17B8; // type:func -EnSyatekiNiw_UpdateRotations = 0x80AF17E4; // type:func -EnSyatekiNiw_SetupDefault = 0x80AF1B40; // type:func -EnSyatekiNiw_Default = 0x80AF1BCC; // type:func -EnSyatekiNiw_SetupArchery = 0x80AF20FC; // type:func -EnSyatekiNiw_Archery = 0x80AF21B4; // type:func -EnSyatekiNiw_ExitArchery = 0x80AF2630; // type:func -EnSyatekiNiw_SetupRemove = 0x80AF2650; // type:func -EnSyatekiNiw_Remove = 0x80AF2748; // type:func -EnSyatekiNiw_CheckHit = 0x80AF2904; // type:func -EnSyatekiNiw_Update = 0x80AF29D4; // type:func -SyatekiNiw_OverrideLimbDraw = 0x80AF2D44; // type:func -EnSyatekiNiw_Draw = 0x80AF2E74; // type:func -EnSyatekiNiw_SpawnFeather = 0x80AF2F20; // type:func -EnSyatekiNiw_UpdateEffects = 0x80AF3010; // type:func -EnSyatekiNiw_DrawEffects = 0x80AF31CC; // type:func -EnTa_SetupAction = 0x80AF3700; // type:func -EnTa_SetTextForTalkInLonLonHouse = 0x80AF3710; // type:func -EnTa_Init = 0x80AF37F0; // type:func -EnTa_DecreaseShadowSize = 0x80AF3E74; // type:func -EnTa_Destroy = 0x80AF3EA8; // type:func -EnTa_RequestTalk = 0x80AF3F20; // type:func -EnTa_SleepTalkInKakariko = 0x80AF3FC8; // type:func -EnTa_SleepTalkInLonLonHouse = 0x80AF4008; // type:func -EnTa_SetupAwake = 0x80AF4048; // type:func -EnTa_TalkWakingUp2 = 0x80AF40C4; // type:func -EnTa_TalkWakingUp1 = 0x80AF4110; // type:func -EnTa_WakeUp = 0x80AF41AC; // type:func -EnTa_SleepTalkInCastle = 0x80AF4238; // type:func -EnTa_IdleAsleepInCastle = 0x80AF4278; // type:func -EnTa_IdleAsleepInLonLonHouse = 0x80AF4340; // type:func -EnTa_IdleAsleepInKakariko = 0x80AF43A4; // type:func -EnTa_RunWithAccelerationAndSfx = 0x80AF446C; // type:func -EnTa_RunAwayRunOutOfGate = 0x80AF44EC; // type:func -EnTa_RunAwayTurnTowardsGate = 0x80AF4560; // type:func -EnTa_RunAwayRunWest = 0x80AF45C0; // type:func -EnTa_RunAwayTurnWest = 0x80AF4648; // type:func -EnTa_RunAwayRunSouth = 0x80AF46A8; // type:func -EnTa_RunAwayStart = 0x80AF4748; // type:func -EnTa_TalkAwakeInCastle = 0x80AF47C0; // type:func -EnTa_IdleAwakeInCastle = 0x80AF486C; // type:func -EnTa_TalkAwakeInKakariko = 0x80AF48B8; // type:func -EnTa_IdleAwakeInKakariko = 0x80AF4904; // type:func -EnTa_TalkAtRanch = 0x80AF49AC; // type:func -EnTa_IdleAtRanch = 0x80AF49F8; // type:func -EnTa_CheckCanBuyMilk = 0x80AF4A3C; // type:func -EnTa_CreateFloorCamera = 0x80AF4A8C; // type:func -EnTa_RemoveFloorCamera = 0x80AF4B40; // type:func -EnTa_SetupActionWithSleepAnimation = 0x80AF4B84; // type:func -EnTa_SetupActionWithWakeUpAnimation = 0x80AF4C14; // type:func -EnTa_TalkNotEnoughRupees = 0x80AF4CA0; // type:func -EnTa_IsPlayerHoldingSuperCucco = 0x80AF4D18; // type:func -EnTa_TalkFoundSuperCucco = 0x80AF4D6C; // type:func -EnTa_IdleFoundSuperCucco = 0x80AF4ECC; // type:func -EnTa_GetSuperCuccosCount = 0x80AF4F3C; // type:func -EnTa_AnimateHandsUpDown = 0x80AF4F78; // type:func -EnTa_TransitionToPostCuccoGame = 0x80AF5044; // type:func -EnTa_TalkCuccoGameEnd = 0x80AF5094; // type:func -EnTa_RunCuccoGame = 0x80AF5170; // type:func -EnTa_ThrowSuperCuccos = 0x80AF54D0; // type:func -EnTa_StartingCuccoGame3 = 0x80AF5748; // type:func -EnTa_StartingCuccoGame2 = 0x80AF586C; // type:func -EnTa_StartingCuccoGame1 = 0x80AF593C; // type:func -EnTa_StartCuccoGame = 0x80AF5A04; // type:func -EnTa_TalkGeneralInLonLonHouse = 0x80AF5A9C; // type:func -EnTa_GiveItemInLonLonHouse = 0x80AF5AF8; // type:func -EnTa_TalkAfterCuccoGameFirstWon = 0x80AF5BCC; // type:func -EnTa_WaitBuyMilkOrPlayCuccoGameResponse = 0x80AF5C64; // type:func -EnTa_WaitForPlayCuccoGameResponse = 0x80AF5E40; // type:func -EnTa_WaitForMarryMalonResponse = 0x80AF5F68; // type:func -EnTa_ContinueTalkInLonLonHouse = 0x80AF5FE8; // type:func -EnTa_TalkAfterCuccoGameWon = 0x80AF60B4; // type:func -EnTa_IdleSittingInLonLonHouse = 0x80AF618C; // type:func -EnTa_IdleAfterCuccoGameFinished = 0x80AF628C; // type:func -EnTa_BlinkWaitUntilNext = 0x80AF6350; // type:func -EnTa_BlinkAdvanceState = 0x80AF6384; // type:func -EnTa_AnimRepeatCurrent = 0x80AF6444; // type:func -EnTa_AnimSleeping = 0x80AF6484; // type:func -EnTa_AnimSitSleeping = 0x80AF64D8; // type:func -EnTa_AnimRunToEnd = 0x80AF65B8; // type:func -EnTa_Update = 0x80AF6610; // type:func -EnTa_OverrideLimbDraw = 0x80AF67A0; // type:func -EnTa_PostLimbDraw = 0x80AF6924; // type:func -EnTa_Draw = 0x80AF6964; // type:func -EnTakaraMan_Destroy = 0x80AF70C0; // type:func -EnTakaraMan_Init = 0x80AF70D0; // type:func -func_80B176E0 = 0x80AF721C; // type:func -func_80B1778C = 0x80AF72C8; // type:func -func_80B17934 = 0x80AF7470; // type:func -func_80B17A6C = 0x80AF75A8; // type:func -func_80B17AC4 = 0x80AF7604; // type:func -func_80B17B14 = 0x80AF7658; // type:func -EnTakaraMan_Update = 0x80AF76BC; // type:func -EnTakaraMan_OverrideLimbDraw = 0x80AF7794; // type:func -EnTakaraMan_Draw = 0x80AF77FC; // type:func -EnTana_Init = 0x80AF7980; // type:func -EnTana_Destroy = 0x80AF79D0; // type:func -EnTana_Update = 0x80AF79E0; // type:func -EnTana_DrawWoodenShelves = 0x80AF79F0; // type:func -EnTana_DrawStoneShelves = 0x80AF7A88; // type:func -EnTg_GetTextId = 0x80AF7C30; // type:func -EnTg_UpdateTalkState = 0x80AF7CCC; // type:func -EnTg_Init = 0x80AF7D88; // type:func -EnTg_Destroy = 0x80AF7E5C; // type:func -EnTg_SpinIfNotTalking = 0x80AF7E9C; // type:func -EnTg_Update = 0x80AF7EC0; // type:func -EnTg_OverrideLimbDraw = 0x80AF7FE0; // type:func -EnTg_PostLimbDraw = 0x80AF7FFC; // type:func -EnTg_SetColor = 0x80AF8058; // type:func -EnTg_Draw = 0x80AF80C4; // type:func -EnTite_SetupAction = 0x80AF8310; // type:func -EnTite_Init = 0x80AF831C; // type:func -EnTite_Destroy = 0x80AF8474; // type:func -EnTite_SetupIdle = 0x80AF84BC; // type:func -EnTite_Idle = 0x80AF8524; // type:func -EnTite_SetupAttack = 0x80AF8668; // type:func -EnTite_Attack = 0x80AF86DC; // type:func -EnTite_SetupTurnTowardPlayer = 0x80AF8D84; // type:func -EnTite_TurnTowardPlayer = 0x80AF8E20; // type:func -EnTite_SetupMoveTowardPlayer = 0x80AF90BC; // type:func -EnTite_MoveTowardPlayer = 0x80AF9178; // type:func -EnTite_SetupRecoil = 0x80AF9688; // type:func -EnTite_Recoil = 0x80AF96F4; // type:func -EnTite_SetupStunned = 0x80AF9A4C; // type:func -EnTite_Stunned = 0x80AF9B00; // type:func -EnTite_SetupDeathCry = 0x80AF9E9C; // type:func -EnTite_DeathCry = 0x80AF9ED0; // type:func -EnTite_FallApart = 0x80AF9F44; // type:func -EnTite_SetupFlipOnBack = 0x80AF9FD0; // type:func -EnTite_FlipOnBack = 0x80AFA0EC; // type:func -EnTite_SetupFlipUpright = 0x80AFA2A8; // type:func -EnTite_FlipUpright = 0x80AFA2F8; // type:func -EnTite_CheckDamage = 0x80AFA420; // type:func -EnTite_Update = 0x80AFA5F8; // type:func -EnTite_PostLimbDraw = 0x80AFA9E4; // type:func -EnTite_Draw = 0x80AFAAD4; // type:func -EnTkEff_Create = 0x80AFB0B0; // type:func -EnTkEff_Update = 0x80AFB154; // type:func -EnTkEff_Draw = 0x80AFB260; // type:func -EnTkEff_CreateDflt = 0x80AFB558; // type:func -EnTk_RestAnim = 0x80AFB610; // type:func -EnTk_WalkAnim = 0x80AFB68C; // type:func -EnTk_DigAnim = 0x80AFB700; // type:func -EnTk_UpdateEyes = 0x80AFB780; // type:func -EnTk_CheckFacingPlayer = 0x80AFB844; // type:func -EnTk_CheckNextSpot = 0x80AFB8C8; // type:func -EnTk_CheckCurrentSpot = 0x80AFB9B0; // type:func -EnTk_Step = 0x80AFBA28; // type:func -EnTk_Orient = 0x80AFBB50; // type:func -EnTk_GetTextId = 0x80AFBCC0; // type:func -EnTk_UpdateTalkState = 0x80AFBD14; // type:func -EnTk_ChooseReward = 0x80AFBEB0; // type:func -EnTk_DigEff = 0x80AFC06C; // type:func -EnTk_Init = 0x80AFC1DC; // type:func -EnTk_Destroy = 0x80AFC358; // type:func -EnTk_Rest = 0x80AFC384; // type:func -EnTk_Walk = 0x80AFC5AC; // type:func -EnTk_Dig = 0x80AFC67C; // type:func -EnTk_Update = 0x80AFC8E0; // type:func -func_80B1D200 = 0x80AFC98C; // type:func -EnTk_OverrideLimbDraw = 0x80AFC9B8; // type:func -EnTk_PostLimbDraw = 0x80AFCA24; // type:func -EnTk_Draw = 0x80AFCAD8; // type:func -EnTorch_Init = 0x80AFCEE0; // type:func -EnTorch2_Init = 0x80AFCFD0; // type:func -EnTorch2_Destroy = 0x80AFD178; // type:func -EnTorch2_GetAttackItem = 0x80AFD1E8; // type:func -EnTorch2_SwingSword = 0x80AFD230; // type:func -EnTorch2_Backflip = 0x80AFD3C8; // type:func -EnTorch2_Update = 0x80AFD420; // type:func -EnTorch2_OverrideLimbDraw = 0x80AFEE08; // type:func -EnTorch2_PostLimbDraw = 0x80AFEE34; // type:func -EnTorch2_Draw = 0x80AFEE58; // type:func -EnToryo_Init = 0x80AFF770; // type:func -EnToryo_Destroy = 0x80AFF9B4; // type:func -EnToryo_TalkRespond = 0x80AFF9E0; // type:func -EnToryo_DoneTalking = 0x80AFFBD4; // type:func -EnToryo_ReactToExchangeItem = 0x80AFFC40; // type:func -EnToryo_GetTextId = 0x80AFFCAC; // type:func -EnToryo_HandleTalking = 0x80AFFD78; // type:func -EnToryo_Idle = 0x80AFFF28; // type:func -EnToryo_Update = 0x80AFFF8C; // type:func -EnToryo_Draw = 0x80B000C4; // type:func -EnToryo_OverrideLimbDraw = 0x80B00124; // type:func -EnToryo_PostLimbDraw = 0x80B001B4; // type:func -EnTp_SetupAction = 0x80B00400; // type:func -EnTp_Init = 0x80B0040C; // type:func -EnTp_Destroy = 0x80B00684; // type:func -EnTp_Tail_SetupFollowHead = 0x80B006B0; // type:func -EnTp_Tail_FollowHead = 0x80B006DC; // type:func -EnTp_Head_SetupApproachPlayer = 0x80B008B8; // type:func -EnTp_Head_ApproachPlayer = 0x80B008EC; // type:func -EnTp_SetupDie = 0x80B00A88; // type:func -EnTp_Die = 0x80B00B00; // type:func -EnTp_Fragment_SetupFade = 0x80B00E30; // type:func -EnTp_Fragment_Fade = 0x80B00F34; // type:func -EnTp_Head_SetupTakeOff = 0x80B00F80; // type:func -EnTp_Head_TakeOff = 0x80B00FDC; // type:func -EnTp_Head_SetupWait = 0x80B011C4; // type:func -EnTp_Head_Wait = 0x80B01210; // type:func -EnTp_Head_SetupBurrowReturnHome = 0x80B0151C; // type:func -EnTp_Head_BurrowReturnHome = 0x80B0154C; // type:func -EnTp_UpdateDamage = 0x80B0181C; // type:func -EnTp_Update = 0x80B01A74; // type:func -EnTp_Draw = 0x80B01DE0; // type:func -EnTr_SetupAction = 0x80B02270; // type:func -EnTr_Init = 0x80B0227C; // type:func -EnTr_Destroy = 0x80B023CC; // type:func -EnTr_CrySpellcast = 0x80B023DC; // type:func -EnTr_DoNothing = 0x80B0248C; // type:func -EnTr_ChooseAction2 = 0x80B0249C; // type:func -EnTr_FlyKidnapCutscene = 0x80B0264C; // type:func -func_80B23254 = 0x80B027C8; // type:func -EnTr_ShrinkVanish = 0x80B02A48; // type:func -EnTr_Reappear = 0x80B02C04; // type:func -EnTr_WaitToReappear = 0x80B02D9C; // type:func -EnTr_TakeOff = 0x80B02E5C; // type:func -EnTr_TurnLookOverShoulder = 0x80B02F24; // type:func -EnTr_ChooseAction1 = 0x80B03004; // type:func -EnTr_Update = 0x80B03138; // type:func -EnTr_OverrideLimbDraw = 0x80B032F0; // type:func -EnTr_Draw = 0x80B03420; // type:func -func_80B23FDC = 0x80B0352C; // type:func -func_80B24038 = 0x80B0358C; // type:func -EnTr_SetRotFromCue = 0x80B03788; // type:func -EnTr_SetStartPosRotFromCue = 0x80B03810; // type:func -EnTrap_Init = 0x80B03B70; // type:func -EnTrap_Destroy = 0x80B03F2C; // type:func -EnTrap_Update = 0x80B03F58; // type:func -EnTrap_Draw = 0x80B04CEC; // type:func -EnTuboTrap_Init = 0x80B04E10; // type:func -EnTuboTrap_Destroy = 0x80B04E94; // type:func -EnTuboTrap_DropCollectible = 0x80B04EC0; // type:func -EnTuboTrap_SpawnEffectsOnLand = 0x80B04F20; // type:func -EnTuboTrap_SpawnEffectsInWater = 0x80B05194; // type:func -EnTuboTrap_HandleImpact = 0x80B05414; // type:func -EnTuboTrap_WaitForProximity = 0x80B0563C; // type:func -EnTuboTrap_Levitate = 0x80B05748; // type:func -EnTuboTrap_Fly = 0x80B057D4; // type:func -EnTuboTrap_Update = 0x80B058A4; // type:func -EnTuboTrap_Draw = 0x80B05964; // type:func -EnVali_Init = 0x80B05AB0; // type:func -EnVali_Destroy = 0x80B05C2C; // type:func -EnVali_SetupLurk = 0x80B05C7C; // type:func -EnVali_SetupDropAppear = 0x80B05CCC; // type:func -EnVali_SetupFloatIdle = 0x80B05D04; // type:func -EnVali_SetupAttacked = 0x80B05F1C; // type:func -EnVali_SetupRetaliate = 0x80B05F54; // type:func -EnVali_SetupMoveArmsDown = 0x80B05FC4; // type:func -EnVali_SetupBurnt = 0x80B06004; // type:func -EnVali_SetupDivideAndDie = 0x80B0605C; // type:func -EnVali_SetupStunned = 0x80B06160; // type:func -EnVali_SetupFrozen = 0x80B061EC; // type:func -EnVali_SetupReturnToLurk = 0x80B0624C; // type:func -EnVali_DischargeLightning = 0x80B062A8; // type:func -EnVali_Lurk = 0x80B064A4; // type:func -EnVali_DropAppear = 0x80B064E4; // type:func -EnVali_FloatIdle = 0x80B06578; // type:func -EnVali_Attacked = 0x80B06724; // type:func -EnVali_Retaliate = 0x80B067DC; // type:func -EnVali_MoveArmsDown = 0x80B06838; // type:func -EnVali_Burnt = 0x80B06874; // type:func -EnVali_DivideAndDie = 0x80B068B0; // type:func -EnVali_Stunned = 0x80B06A64; // type:func -EnVali_Frozen = 0x80B06B20; // type:func -EnVali_ReturnToLurk = 0x80B06CB0; // type:func -EnVali_UpdateDamage = 0x80B06D20; // type:func -EnVali_Update = 0x80B06ED8; // type:func -EnVali_PulseOutside = 0x80B07034; // type:func -EnVali_PulseInsides = 0x80B07250; // type:func -EnVali_SetArmLength = 0x80B0746C; // type:func -EnVali_OverrideLimbDraw = 0x80B0760C; // type:func -EnVali_PostLimbDraw = 0x80B0769C; // type:func -EnVali_DrawBody = 0x80B07760; // type:func -EnVali_Draw = 0x80B07AC8; // type:func -EnVase_Init = 0x80B08170; // type:func -EnVase_Destroy = 0x80B081D4; // type:func -EnVase_Draw = 0x80B081E4; // type:func -EnVbBall_Init = 0x80B08270; // type:func -EnVbBall_Destroy = 0x80B083F0; // type:func -EnVbBall_SpawnDebris = 0x80B0842C; // type:func -EnVbBall_SpawnDust = 0x80B08504; // type:func -EnVbBall_UpdateBones = 0x80B085A4; // type:func -EnVbBall_Update = 0x80B08888; // type:func -EnVbBall_Draw = 0x80B09054; // type:func -EnViewer_SetupAction = 0x80B09420; // type:func -EnViewer_Init = 0x80B0942C; // type:func -EnViewer_Destroy = 0x80B09500; // type:func -EnViewer_InitAnimGanondorfOrZelda = 0x80B0952C; // type:func -EnViewer_InitAnimImpa = 0x80B09678; // type:func -EnViewer_InitAnimHorse = 0x80B09708; // type:func -EnViewer_InitImpl = 0x80B097A0; // type:func -EnViewer_UpdateImpl = 0x80B0995C; // type:func -EnViewer_Update = 0x80B0A4B4; // type:func -EnViewer_Ganondorf3OverrideLimbDraw = 0x80B0A508; // type:func -EnViewer_Ganondorf9PostLimbDraw = 0x80B0A578; // type:func -EnViewer_GanondorfPostLimbDrawUpdateCapeVec = 0x80B0A640; // type:func -EnViewer_DrawGanondorf = 0x80B0A680; // type:func -EnViewer_DrawHorse = 0x80B0AAAC; // type:func -EnViewer_ZeldaOverrideLimbDraw = 0x80B0AAD8; // type:func -EnViewer_ZeldaPostLimbDraw = 0x80B0AB58; // type:func -EnViewer_DrawZelda = 0x80B0ABA0; // type:func -EnViewer_ImpaOverrideLimbDraw = 0x80B0B244; // type:func -EnViewer_DrawImpa = 0x80B0B26C; // type:func -EnViewer_Draw = 0x80B0B380; // type:func -EnViewer_UpdatePosition = 0x80B0B470; // type:func -EnViewer_InitFireEffect = 0x80B0B840; // type:func -EnViewer_DrawFireEffects = 0x80B0B988; // type:func -EnViewer_UpdateGanondorfCape = 0x80B0BCCC; // type:func -EnVm_SetupAction = 0x80B0C2E0; // type:func -EnVm_Init = 0x80B0C2EC; // type:func -EnVm_Destroy = 0x80B0C45C; // type:func -EnVm_SetupWait = 0x80B0C488; // type:func -EnVm_Wait = 0x80B0C514; // type:func -EnVm_SetupAttack = 0x80B0C868; // type:func -EnVm_Attack = 0x80B0C90C; // type:func -EnVm_SetupStun = 0x80B0CB5C; // type:func -EnVm_Stun = 0x80B0CC04; // type:func -EnVm_SetupDie = 0x80B0CD10; // type:func -EnVm_Die = 0x80B0CE18; // type:func -EnVm_CheckHealth = 0x80B0CECC; // type:func -EnVm_Update = 0x80B0CFC8; // type:func -EnVm_OverrideLimbDraw = 0x80B0D15C; // type:func -EnVm_PostLimbDraw = 0x80B0D1C4; // type:func -EnVm_Draw = 0x80B0D49C; // type:func -EnWallTubo_Init = 0x80B0DBA0; // type:func -EnWallTubo_Destroy = 0x80B0DBD0; // type:func -EnWallTubo_FindGirl = 0x80B0DBE0; // type:func -EnWallTubo_DetectChu = 0x80B0DC24; // type:func -EnWallTubo_SetWallFall = 0x80B0DE40; // type:func -EnWallTubo_Update = 0x80B0DFAC; // type:func -EnWallmas_Init = 0x80B0E090; // type:func -EnWallmas_Destroy = 0x80B0E1D0; // type:func -EnWallmas_TimerInit = 0x80B0E1FC; // type:func -EnWallmas_SetupDrop = 0x80B0E258; // type:func -EnWallmas_SetupLand = 0x80B0E31C; // type:func -EnWallmas_SetupStand = 0x80B0E3E0; // type:func -EnWallmas_SetupWalk = 0x80B0E420; // type:func -EnWallmas_SetupJumpToCeiling = 0x80B0E470; // type:func -EnWallmas_SetupReturnToCeiling = 0x80B0E4B8; // type:func -EnWallmas_SetupTakeDamage = 0x80B0E53C; // type:func -EnWallmas_SetupCooldown = 0x80B0E5F8; // type:func -EnWallmas_SetupDie = 0x80B0E64C; // type:func -EnWallmas_SetupTakePlayer = 0x80B0E714; // type:func -EnWallmas_ProximityOrSwitchInit = 0x80B0E79C; // type:func -EnWallmas_SetupStun = 0x80B0E7E4; // type:func -EnWallmas_WaitToDrop = 0x80B0E8B4; // type:func -EnWallmas_Drop = 0x80B0E9C0; // type:func -EnWallmas_Land = 0x80B0EA8C; // type:func -EnWallmas_Stand = 0x80B0EAC8; // type:func -EnWallmas_Walk = 0x80B0EB28; // type:func -EnWallmas_JumpToCeiling = 0x80B0EBDC; // type:func -EnWallmas_ReturnToCeiling = 0x80B0EC18; // type:func -EnWallmas_TakeDamage = 0x80B0ED34; // type:func -EnWallmas_Cooldown = 0x80B0EDC8; // type:func -EnWallmas_Die = 0x80B0EE04; // type:func -EnWallmas_TakePlayer = 0x80B0EE78; // type:func -EnWallmas_WaitForProximity = 0x80B0F09C; // type:func -EnWallmas_WaitForSwitchFlag = 0x80B0F0F8; // type:func -EnWallmas_Stun = 0x80B0F144; // type:func -EnWallmas_ColUpdate = 0x80B0F1B8; // type:func -EnWallmas_Update = 0x80B0F2D4; // type:func -EnWallmas_DrawXlu = 0x80B0F49C; // type:func -EnWallMas_OverrideLimbDraw = 0x80B0F63C; // type:func -EnWallMas_PostLimbDraw = 0x80B0F6B0; // type:func -EnWallmas_Draw = 0x80B0F7A0; // type:func -EnWeatherTag_SetupAction = 0x80B0FAA0; // type:func -EnWeatherTag_Destroy = 0x80B0FAAC; // type:func -EnWeatherTag_Init = 0x80B0FABC; // type:func -WeatherTag_CheckEnableWeatherEffect = 0x80B0FC90; // type:func -WeatherTag_CheckRestoreWeather = 0x80B0FE68; // type:func -EnWeatherTag_DisabledCloudyHyruleMarket = 0x80B10028; // type:func -EnWeatherTag_EnabledCloudyHyruleMarket = 0x80B10084; // type:func -EnWeatherTag_DisabledCloudyLonLonRanch = 0x80B100D8; // type:func -EnWeatherTag_EnabledCloudyLonLonRanch = 0x80B10134; // type:func -EnWeatherTag_DisabledCloudyDeathMountain = 0x80B10188; // type:func -EnWeatherTag_EnabledCloudyDeathMountain = 0x80B101E4; // type:func -EnWeatherTag_DisabledCloudySnow = 0x80B10238; // type:func -EnWeatherTag_EnabledCloudySnow = 0x80B102B0; // type:func -EnWeatherTag_DisabledRainLakeHylia = 0x80B1031C; // type:func -EnWeatherTag_EnabledRainLakeHylia = 0x80B103A0; // type:func -EnWeatherTag_DisabledCloudyRainThunderKakariko = 0x80B10418; // type:func -EnWeatherTag_EnabledCloudyRainThunderKakariko = 0x80B104B0; // type:func -EnWeatherTag_SetSandstormIntensity = 0x80B1053C; // type:func -EnWeatherTag_DisabledRainThunder = 0x80B10638; // type:func -EnWeatherTag_EnabledRainThunder = 0x80B106DC; // type:func -EnWeatherTag_Update = 0x80B10790; // type:func -EnWeiyer_Init = 0x80B10990; // type:func -EnWeiyer_Destroy = 0x80B10A60; // type:func -func_80B32384 = 0x80B10A8C; // type:func -func_80B32434 = 0x80B10B40; // type:func -func_80B32494 = 0x80B10BA0; // type:func -func_80B32508 = 0x80B10C14; // type:func -func_80B32538 = 0x80B10C48; // type:func -func_80B325A0 = 0x80B10CB4; // type:func -func_80B32660 = 0x80B10D74; // type:func -func_80B32724 = 0x80B10E38; // type:func -func_80B327B0 = 0x80B10EC4; // type:func -func_80B327D8 = 0x80B10EF0; // type:func -func_80B32804 = 0x80B10F20; // type:func -func_80B328E8 = 0x80B11004; // type:func -func_80B32C2C = 0x80B11348; // type:func -func_80B32D30 = 0x80B1144C; // type:func -func_80B32DEC = 0x80B11508; // type:func -func_80B32E34 = 0x80B11554; // type:func -func_80B33018 = 0x80B1173C; // type:func -func_80B331CC = 0x80B118F0; // type:func -func_80B332B4 = 0x80B119D8; // type:func -func_80B33338 = 0x80B11A5C; // type:func -func_80B333B8 = 0x80B11ADC; // type:func -func_80B3349C = 0x80B11BC0; // type:func -func_80B3368C = 0x80B11DB4; // type:func -EnWeiyer_Update = 0x80B11E94; // type:func -EnWeiyer_OverrideLimbDraw = 0x80B12008; // type:func -EnWeiyer_Draw = 0x80B12038; // type:func -EnWf_SetupAction = 0x80B12390; // type:func -EnWf_Init = 0x80B1239C; // type:func -EnWf_Destroy = 0x80B125D0; // type:func -EnWf_ChangeAction = 0x80B1266C; // type:func -EnWf_SetupWaitToAppear = 0x80B12A3C; // type:func -EnWf_WaitToAppear = 0x80B12AE4; // type:func -EnWf_SetupWait = 0x80B12C18; // type:func -EnWf_Wait = 0x80B12CA0; // type:func -EnWf_SetupRunAtPlayer = 0x80B12EBC; // type:func -EnWf_RunAtPlayer = 0x80B12F3C; // type:func -EnWf_SetupSearchForPlayer = 0x80B133BC; // type:func -EnWf_SearchForPlayer = 0x80B13408; // type:func -EnWf_SetupRunAroundPlayer = 0x80B135E8; // type:func -EnWf_RunAroundPlayer = 0x80B136E4; // type:func -EnWf_SetupSlash = 0x80B13C04; // type:func -EnWf_Slash = 0x80B13C80; // type:func -EnWf_SetupRecoilFromBlockedSlash = 0x80B13FD4; // type:func -EnWf_RecoilFromBlockedSlash = 0x80B14070; // type:func -EnWf_SetupBackflipAway = 0x80B14268; // type:func -EnWf_BackflipAway = 0x80B142E4; // type:func -EnWf_SetupStunned = 0x80B143EC; // type:func -EnWf_Stunned = 0x80B14464; // type:func -EnWf_SetupDamaged = 0x80B14520; // type:func -EnWf_Damaged = 0x80B145B8; // type:func -EnWf_SetupSomersaultAndAttack = 0x80B147C0; // type:func -EnWf_SomersaultAndAttack = 0x80B14878; // type:func -EnWf_SetupBlocking = 0x80B14960; // type:func -EnWf_Blocking = 0x80B14A00; // type:func -EnWf_SetupSidestep = 0x80B14C84; // type:func -EnWf_Sidestep = 0x80B14E1C; // type:func -EnWf_SetupDie = 0x80B1536C; // type:func -EnWf_Die = 0x80B1541C; // type:func -func_80B36F40 = 0x80B15624; // type:func -EnWf_UpdateDamage = 0x80B1571C; // type:func -EnWf_Update = 0x80B158EC; // type:func -EnWf_OverrideLimbDraw = 0x80B15B40; // type:func -EnWf_PostLimbDraw = 0x80B15B84; // type:func -EnWf_Draw = 0x80B15D2C; // type:func -EnWf_DodgeRanged = 0x80B15EE8; // type:func -EnWonderItem_Destroy = 0x80B166A0; // type:func -EnWonderItem_DropCollectible = 0x80B166E4; // type:func -EnWonderItem_Init = 0x80B16840; // type:func -EnWonderItem_MultitagFree = 0x80B16B8C; // type:func -EnWonderItem_ProximityDrop = 0x80B16CD4; // type:func -EnWonderItem_InteractSwitch = 0x80B16D3C; // type:func -EnWonderItem_ProximitySwitch = 0x80B16D70; // type:func -EnWonderItem_MultitagOrdered = 0x80B16DFC; // type:func -EnWonderItem_BombSoldier = 0x80B16F58; // type:func -EnWonderItem_RollDrop = 0x80B16FE8; // type:func -EnWonderItem_Update = 0x80B1705C; // type:func -EnWonderTalk_Destroy = 0x80B173D0; // type:func -EnWonderTalk_Init = 0x80B173E0; // type:func -func_80B391CC = 0x80B17488; // type:func -func_80B3943C = 0x80B17618; // type:func -func_80B395F0 = 0x80B1776C; // type:func -EnWonderTalk_Update = 0x80B1795C; // type:func -EnWonderTalk2_Destroy = 0x80B17A60; // type:func -EnWonderTalk2_Init = 0x80B17A70; // type:func -func_80B3A10C = 0x80B17C00; // type:func -func_80B3A15C = 0x80B17C50; // type:func -func_80B3A3D4 = 0x80B17DD0; // type:func -func_80B3A4F8 = 0x80B17EB8; // type:func -EnWonderTalk2_DoNothing = 0x80B18008; // type:func -EnWonderTalk2_Update = 0x80B18018; // type:func -EnWood02_SpawnZoneCheck = 0x80B18100; // type:func -EnWood02_SpawnOffspring = 0x80B18228; // type:func -EnWood02_Init = 0x80B18440; // type:func -EnWood02_Destroy = 0x80B1887C; // type:func -EnWood02_Update = 0x80B188B8; // type:func -EnWood02_Draw = 0x80B18DB0; // type:func -EnXc_InitCollider = 0x80B192E0; // type:func -EnXc_UpdateCollider = 0x80B1932C; // type:func -EnXc_Destroy = 0x80B19370; // type:func -EnXc_CalculateHeadTurn = 0x80B1939C; // type:func -EnXc_SetEyePattern = 0x80B19424; // type:func -EnXc_SpawnNut = 0x80B194AC; // type:func -EnXc_BgCheck = 0x80B19574; // type:func -EnXc_AnimIsFinished = 0x80B195BC; // type:func -EnXc_GetCue = 0x80B195E0; // type:func -EnXc_CheckForCue = 0x80B19604; // type:func -EnXc_CheckForNoCue = 0x80B19650; // type:func -func_80B3C588 = 0x80B1969C; // type:func -func_80B3C620 = 0x80B19734; // type:func -EnXc_ChangeAnimation = 0x80B19814; // type:func -EnXc_CheckAndSetAction = 0x80B198D0; // type:func -func_80B3C7D4 = 0x80B198E8; // type:func -func_80B3C8CC = 0x80B19914; // type:func -func_80B3C924 = 0x80B19970; // type:func -func_80B3C964 = 0x80B199B0; // type:func -func_80B3C9DC = 0x80B19A28; // type:func -func_80B3C9EC = 0x80B19A3C; // type:func -func_80B3CA38 = 0x80B19A88; // type:func -EnXc_MinuetCS = 0x80B19ADC; // type:func -func_80B3CB58 = 0x80B19BB4; // type:func -EnXc_BoleroCS = 0x80B19C08; // type:func -EnXc_SetupSerenadeAction = 0x80B19D68; // type:func -EnXc_SerenadeCS = 0x80B19DC0; // type:func -EnXc_DoNothing = 0x80B19E88; // type:func -EnXc_SetWalkingSFX = 0x80B19E98; // type:func -EnXc_SetNutThrowSFX = 0x80B19F18; // type:func -EnXc_SetLandingSFX = 0x80B19FA4; // type:func -EnXc_SetColossusAppearSFX = 0x80B1A024; // type:func -func_80B3D118 = 0x80B1A130; // type:func -EnXc_SetColossusWindSFX = 0x80B1A174; // type:func -EnXc_SpawnFlame = 0x80B1A27C; // type:func -EnXc_SetupFlamePos = 0x80B1A320; // type:func -EnXc_DestroyFlame = 0x80B1A39C; // type:func -EnXc_InitFlame = 0x80B1A3DC; // type:func -func_80B3D48C = 0x80B1A478; // type:func -EnXc_GetCurrentHarpAnim = 0x80B1A4C8; // type:func -EnXc_CalcXZAccel = 0x80B1A55C; // type:func -func_80B3D644 = 0x80B1A634; // type:func -EnXc_CalcXZSpeed = 0x80B1A654; // type:func -func_80B3D6F0 = 0x80B1A6E0; // type:func -func_80B3D710 = 0x80B1A700; // type:func -func_80B3D730 = 0x80B1A720; // type:func -func_80B3D750 = 0x80B1A740; // type:func -EnXc_SetupFallFromSkyAction = 0x80B1A78C; // type:func -func_80B3D8A4 = 0x80B1A89C; // type:func -EnXc_SetupWalkAction = 0x80B1A98C; // type:func -EnXc_SetupHaltAction = 0x80B1A9FC; // type:func -EnXc_SetupStoppedAction = 0x80B1AAA8; // type:func -func_80B3DAF0 = 0x80B1AAF0; // type:func -EnXc_SetupInitialHarpAction = 0x80B1ABB0; // type:func -EnXc_SetupPlayingHarpAction = 0x80B1AC28; // type:func -func_80B3DCA8 = 0x80B1ACB0; // type:func -EnXc_SetupHarpPutawayAction = 0x80B1AD44; // type:func -func_80B3DE00 = 0x80B1AE14; // type:func -func_80B3DE78 = 0x80B1AE8C; // type:func -EnXc_SetupReverseAccel = 0x80B1AF08; // type:func -EnXc_SetupReverseWalkAction = 0x80B1AFB8; // type:func -EnXc_SetupReverseHaltAction = 0x80B1B028; // type:func -EnXc_SetupNutThrow = 0x80B1B0D4; // type:func -func_80B3E164 = 0x80B1B17C; // type:func -EnXc_SetupDisappear = 0x80B1B1D0; // type:func -EnXc_ActionFunc0 = 0x80B1B240; // type:func -EnXc_ActionFunc1 = 0x80B1B280; // type:func -EnXc_GracefulFall = 0x80B1B2C0; // type:func -EnXc_Accelerate = 0x80B1B33C; // type:func -EnXc_Walk = 0x80B1B39C; // type:func -EnXc_Stopped = 0x80B1B3FC; // type:func -EnXc_ActionFunc6 = 0x80B1B45C; // type:func -EnXc_ActionFunc7 = 0x80B1B4A4; // type:func -EnXc_ActionFunc8 = 0x80B1B4F0; // type:func -EnXc_ActionFunc9 = 0x80B1B540; // type:func -EnXc_ActionFunc10 = 0x80B1B588; // type:func -EnXc_ActionFunc11 = 0x80B1B5D0; // type:func -EnXc_ActionFunc12 = 0x80B1B61C; // type:func -EnXc_ActionFunc13 = 0x80B1B668; // type:func -EnXc_ReverseAccelerate = 0x80B1B6C4; // type:func -EnXc_ActionFunc15 = 0x80B1B730; // type:func -EnXc_HaltAndWaitToThrowNut = 0x80B1B79C; // type:func -EnXc_ThrowNut = 0x80B1B808; // type:func -EnXc_Delete = 0x80B1B870; // type:func -EnXc_Fade = 0x80B1B8CC; // type:func -func_80B3E87C = 0x80B1B8EC; // type:func -EnXc_PullingOutHarpOverrideLimbDraw = 0x80B1B91C; // type:func -EnXc_HarpOverrideLimbDraw = 0x80B1B958; // type:func -EnXc_DrawPullingOutHarp = 0x80B1B980; // type:func -EnXc_DrawHarp = 0x80B1BABC; // type:func -func_80B3EBF0 = 0x80B1BBF8; // type:func -func_80B3EC00 = 0x80B1BC0C; // type:func -func_80B3EC0C = 0x80B1BC1C; // type:func -func_80B3EC90 = 0x80B1BCA0; // type:func -func_80B3ECD8 = 0x80B1BCE8; // type:func -EnXc_ActionFunc20 = 0x80B1BD58; // type:func -EnXc_ActionFunc21 = 0x80B1BD7C; // type:func -EnXc_ActionFunc22 = 0x80B1BD9C; // type:func -EnXc_ActionFunc23 = 0x80B1BDE4; // type:func -EnXc_ActionFunc24 = 0x80B1BE44; // type:func -EnXc_ActionFunc25 = 0x80B1BE54; // type:func -EnXc_ActionFunc26 = 0x80B1BE64; // type:func -EnXc_ActionFunc27 = 0x80B1BE74; // type:func -EnXc_ActionFunc28 = 0x80B1BE84; // type:func -func_80B3EE64 = 0x80B1BE94; // type:func -func_80B3EE74 = 0x80B1BEA8; // type:func -func_80B3EEA4 = 0x80B1BEDC; // type:func -func_80B3EEC8 = 0x80B1BF00; // type:func -func_80B3EEEC = 0x80B1BF24; // type:func -func_80B3EF10 = 0x80B1BF48; // type:func -func_80B3EF34 = 0x80B1BF6C; // type:func -func_80B3EF58 = 0x80B1BF90; // type:func -func_80B3EF80 = 0x80B1BFB8; // type:func -func_80B3EFA4 = 0x80B1BFDC; // type:func -func_80B3EFC8 = 0x80B1C000; // type:func -func_80B3EFEC = 0x80B1C024; // type:func -func_80B3F010 = 0x80B1C048; // type:func -func_80B3F0B8 = 0x80B1C0F4; // type:func -func_80B3F0DC = 0x80B1C118; // type:func -func_80B3F100 = 0x80B1C13C; // type:func -EnXc_Serenade = 0x80B1C160; // type:func -EnXc_ActionFunc30 = 0x80B1C180; // type:func -EnXc_ActionFunc31 = 0x80B1C1AC; // type:func -EnXc_ActionFunc32 = 0x80B1C1F0; // type:func -EnXc_ActionFunc33 = 0x80B1C21C; // type:func -EnXc_ActionFunc34 = 0x80B1C248; // type:func -EnXc_ActionFunc35 = 0x80B1C274; // type:func -EnXc_ActionFunc36 = 0x80B1C2A0; // type:func -EnXc_ActionFunc37 = 0x80B1C2CC; // type:func -EnXc_ActionFunc38 = 0x80B1C2F8; // type:func -EnXc_ActionFunc39 = 0x80B1C324; // type:func -EnXc_ActionFunc40 = 0x80B1C350; // type:func -EnXc_ActionFunc41 = 0x80B1C3B0; // type:func -EnXc_ActionFunc42 = 0x80B1C3DC; // type:func -EnXc_ActionFunc43 = 0x80B1C408; // type:func -EnXc_ActionFunc44 = 0x80B1C434; // type:func -func_80B3F3C8 = 0x80B1C444; // type:func -func_80B3F3D8 = 0x80B1C458; // type:func -EnXc_PlayDiveSFX = 0x80B1C478; // type:func -EnXc_LakeHyliaDive = 0x80B1C4CC; // type:func -func_80B3F534 = 0x80B1C5B8; // type:func -func_80B3F59C = 0x80B1C620; // type:func -func_80B3F620 = 0x80B1C6A4; // type:func -func_80B3F644 = 0x80B1C6C8; // type:func -func_80B3F668 = 0x80B1C6EC; // type:func -func_80B3F6DC = 0x80B1C760; // type:func -EnXc_SetupKneelAction = 0x80B1C784; // type:func -func_80B3F754 = 0x80B1C7DC; // type:func -func_80B3F7BC = 0x80B1C84C; // type:func -EnXc_ActionFunc45 = 0x80B1C888; // type:func -EnXc_ActionFunc46 = 0x80B1C8B4; // type:func -EnXc_ActionFunc47 = 0x80B1C8E0; // type:func -EnXc_ActionFunc48 = 0x80B1C938; // type:func -EnXc_ActionFunc49 = 0x80B1C964; // type:func -EnXc_Kneel = 0x80B1C9C8; // type:func -EnXc_ActionFunc51 = 0x80B1CA2C; // type:func -EnXc_ActionFunc52 = 0x80B1CA90; // type:func -func_80B3FA08 = 0x80B1CAB0; // type:func -func_80B3FA2C = 0x80B1CAD8; // type:func -EnXc_PlayTriforceSFX = 0x80B1CAF8; // type:func -func_80B3FAE0 = 0x80B1CB90; // type:func -EnXc_CalcTriforce = 0x80B1CBD8; // type:func -func_80B3FF0C = 0x80B1CFD0; // type:func -EnXc_SetupShowTriforceAction = 0x80B1D078; // type:func -EnXc_SetupShowTriforceIdleAction = 0x80B1D108; // type:func -func_80B400AC = 0x80B1D174; // type:func -EnXc_ActionFunc53 = 0x80B1D1B0; // type:func -EnXc_ActionFunc54 = 0x80B1D1D0; // type:func -EnXc_ShowTriforce = 0x80B1D218; // type:func -EnXc_ShowTriforceIdle = 0x80B1D280; // type:func -EnXc_TriforceOverrideLimbDraw = 0x80B1D2DC; // type:func -EnXc_TriforcePostLimbDraw = 0x80B1D304; // type:func -EnXc_DrawTriforce = 0x80B1D380; // type:func -func_80B40590 = 0x80B1D614; // type:func -EnXc_SetThrownAroundSFX = 0x80B1D630; // type:func -EnXc_PlayLinkScreamSFX = 0x80B1D6F4; // type:func -EnXc_SetCrySFX = 0x80B1D728; // type:func -func_80B406F8 = 0x80B1D784; // type:func -EnXc_SetupIdleInNocturne = 0x80B1D79C; // type:func -EnXc_SetupDefenseStance = 0x80B1D838; // type:func -EnXc_SetupContortions = 0x80B1D8B0; // type:func -EnXc_SetupFallInNocturne = 0x80B1D94C; // type:func -EnXc_SetupHittingGroundInNocturne = 0x80B1DA28; // type:func -func_80B40A78 = 0x80B1DAC8; // type:func -EnXc_SetupKneelInNocturne = 0x80B1DB68; // type:func -func_80B40BB4 = 0x80B1DC04; // type:func -func_80B40C50 = 0x80B1DCA0; // type:func -func_80B40C74 = 0x80B1DCC4; // type:func -func_80B40C98 = 0x80B1DCE8; // type:func -func_80B40CBC = 0x80B1DD0C; // type:func -func_80B40CE0 = 0x80B1DD30; // type:func -func_80B40D08 = 0x80B1DD58; // type:func -func_80B40D2C = 0x80B1DD7C; // type:func -func_80B40D50 = 0x80B1DDA0; // type:func -func_80B40D74 = 0x80B1DDC4; // type:func -EnXc_SetupReverseHaltInNocturneCS = 0x80B1DDE8; // type:func -func_80B40E40 = 0x80B1DE94; // type:func -func_80B40E64 = 0x80B1DEB8; // type:func -func_80B40E88 = 0x80B1DEDC; // type:func -EnXc_SetupNocturneState = 0x80B1DF00; // type:func -EnXc_InitialNocturneAction = 0x80B1E040; // type:func -EnXc_IdleInNocturne = 0x80B1E060; // type:func -EnXc_DefenseStance = 0x80B1E0B0; // type:func -EnXc_Contort = 0x80B1E0F8; // type:func -EnXc_FallInNocturne = 0x80B1E164; // type:func -EnXc_HitGroundInNocturne = 0x80B1E1CC; // type:func -EnXc_ActionFunc63 = 0x80B1E20C; // type:func -EnXc_KneelInNocturneCS = 0x80B1E268; // type:func -EnXc_ActionFunc65 = 0x80B1E2B0; // type:func -EnXc_ActionFunc66 = 0x80B1E2F4; // type:func -EnXc_ActionFunc67 = 0x80B1E320; // type:func -EnXc_ActionFunc68 = 0x80B1E34C; // type:func -EnXc_ActionFunc69 = 0x80B1E378; // type:func -EnXc_ActionFunc70 = 0x80B1E3A4; // type:func -EnXc_ActionFunc71 = 0x80B1E3D0; // type:func -EnXc_ActionFunc72 = 0x80B1E3FC; // type:func -EnXc_ReverseAccelInNocturneCS = 0x80B1E428; // type:func -EnXc_ReverseWalkInNocturneCS = 0x80B1E454; // type:func -EnXc_ReverseHaltInNocturneCS = 0x80B1E4A8; // type:func -EnXc_ThrowNutInNocturneCS = 0x80B1E4D4; // type:func -EnXc_DeleteInNocturneCS = 0x80B1E500; // type:func -EnXc_KillInNocturneCS = 0x80B1E52C; // type:func -EnXc_DrawSquintingEyes = 0x80B1E550; // type:func -EnXc_InitTempleOfTime = 0x80B1E62C; // type:func -EnXc_SetupDialogueAction = 0x80B1E798; // type:func -func_80B41798 = 0x80B1E820; // type:func -EnXc_BlockingPedestalAction = 0x80B1E86C; // type:func -EnXc_ActionFunc80 = 0x80B1E8D4; // type:func -EnXc_Update = 0x80B1E93C; // type:func -EnXc_Init = 0x80B1E984; // type:func -EnXc_OverrideLimbDraw = 0x80B1EAF0; // type:func -EnXc_PostLimbDraw = 0x80B1EB78; // type:func -EnXc_DrawNothing = 0x80B1EC04; // type:func -EnXc_DrawDefault = 0x80B1EC14; // type:func -EnXc_Draw = 0x80B1ED1C; // type:func -EnYabusameMark_Destroy = 0x80B1FA70; // type:func -EnYabusameMark_Init = 0x80B1FA9C; // type:func -func_80B42F74 = 0x80B1FBDC; // type:func -EnYabusameMark_Update = 0x80B1FE20; // type:func -EnYukabyun_Init = 0x80B20140; // type:func -EnYukabyun_Destroy = 0x80B201F0; // type:func -func_80B43A94 = 0x80B2021C; // type:func -func_80B43AD4 = 0x80B2025C; // type:func -func_80B43B6C = 0x80B202F4; // type:func -EnYukabyun_Break = 0x80B20354; // type:func -EnYukabyun_Update = 0x80B203C8; // type:func -EnYukabyun_Draw = 0x80B20568; // type:func -EnZf_SetupAction = 0x80B20750; // type:func -EnZf_PrimaryFloorCheck = 0x80B2075C; // type:func -EnZf_SecondaryFloorCheck = 0x80B208CC; // type:func -EnZf_Init = 0x80B209FC; // type:func -EnZf_Destroy = 0x80B20D34; // type:func -EnZf_FindPlatform = 0x80B20DB8; // type:func -EnZf_FindNextPlatformAwayFromPlayer = 0x80B20F80; // type:func -EnZf_FindNextPlatformTowardsPlayer = 0x80B21224; // type:func -EnZf_CanAttack = 0x80B21400; // type:func -func_80B44DC4 = 0x80B214D4; // type:func -EnZf_ChooseAction = 0x80B215A0; // type:func -EnZf_SetupDropIn = 0x80B217C0; // type:func -EnZf_DropIn = 0x80B21888; // type:func -func_80B45384 = 0x80B21A98; // type:func -func_80B4543C = 0x80B21B50; // type:func -EnZf_SetupApproachPlayer = 0x80B21DCC; // type:func -EnZf_ApproachPlayer = 0x80B21E60; // type:func -EnZf_SetupJumpForward = 0x80B2254C; // type:func -EnZf_JumpForward = 0x80B2260C; // type:func -func_80B4604C = 0x80B22768; // type:func -func_80B46098 = 0x80B227B4; // type:func -func_80B462E4 = 0x80B22A00; // type:func -func_80B463E4 = 0x80B22B08; // type:func -EnZf_SetupSlash = 0x80B2314C; // type:func -EnZf_Slash = 0x80B23208; // type:func -EnZf_SetupRecoilFromBlockedSlash = 0x80B23494; // type:func -EnZf_RecoilFromBlockedSlash = 0x80B23508; // type:func -EnZf_SetupJumpBack = 0x80B235C0; // type:func -EnZf_JumpBack = 0x80B23660; // type:func -EnZf_SetupStunned = 0x80B23784; // type:func -EnZf_Stunned = 0x80B23854; // type:func -EnZf_SetupSheatheSword = 0x80B23A94; // type:func -EnZf_SheatheSword = 0x80B23B70; // type:func -EnZf_SetupHopAndTaunt = 0x80B23C1C; // type:func -EnZf_HopAndTaunt = 0x80B23C7C; // type:func -EnZf_SetupHopAway = 0x80B23ED4; // type:func -EnZf_HopAway = 0x80B23F54; // type:func -EnZf_SetupDrawSword = 0x80B243A0; // type:func -EnZf_DrawSword = 0x80B24434; // type:func -EnZf_SetupDamaged = 0x80B244E4; // type:func -EnZf_Damaged = 0x80B245F0; // type:func -EnZf_SetupJumpUp = 0x80B24950; // type:func -EnZf_JumpUp = 0x80B249F8; // type:func -func_80B483E4 = 0x80B24B24; // type:func -EnZf_CircleAroundPlayer = 0x80B24CC0; // type:func -EnZf_SetupDie = 0x80B25440; // type:func -EnZf_Die = 0x80B255A4; // type:func -EnZf_UpdateHeadRotation = 0x80B256E4; // type:func -EnZf_UpdateDamage = 0x80B25808; // type:func -EnZf_Update = 0x80B259A0; // type:func -EnZf_OverrideLimbDraw = 0x80B25D58; // type:func -EnZf_PostLimbDraw = 0x80B25DE4; // type:func -EnZf_Draw = 0x80B26038; // type:func -EnZf_SetupCircleAroundPlayer = 0x80B26284; // type:func -EnZf_DodgeRangedEngaging = 0x80B26350; // type:func -EnZf_DodgeRangedWaiting = 0x80B2657C; // type:func -func_80B4AB40 = 0x80B27240; // type:func -func_80B4AB48 = 0x80B27248; // type:func -EnZl1_Init = 0x80B27250; // type:func -EnZl1_Destroy = 0x80B274E0; // type:func -func_80B4AE18 = 0x80B27520; // type:func -func_80B4AF18 = 0x80B27620; // type:func -func_80B4B010 = 0x80B27718; // type:func -func_80B4B240 = 0x80B27950; // type:func -func_80B4B7F4 = 0x80B27F04; // type:func -func_80B4B834 = 0x80B27F48; // type:func -func_80B4B874 = 0x80B27F8C; // type:func -func_80B4B8B4 = 0x80B27FCC; // type:func -func_80B4BBC4 = 0x80B282DC; // type:func -func_80B4BC78 = 0x80B28390; // type:func -func_80B4BF2C = 0x80B28644; // type:func -EnZl1_Update = 0x80B28938; // type:func -EnZl1_OverrideLimbDraw = 0x80B28A5C; // type:func -EnZl1_PostLimbDraw = 0x80B28B1C; // type:func -EnZl1_Draw = 0x80B28B78; // type:func -EnZl2_Destroy = 0x80B2B050; // type:func -EnZl2_UpdateEyes = 0x80B2B074; // type:func -func_80B4EA40 = 0x80B2B104; // type:func -func_80B4EAF4 = 0x80B2B1B8; // type:func -func_80B4EBB8 = 0x80B2B27C; // type:func -func_80B4EC48 = 0x80B2B30C; // type:func -EnZl2_setEyesIndex = 0x80B2B3AC; // type:func -EnZl2_setEyeIndex2 = 0x80B2B3CC; // type:func -EnZl2_setMouthIndex = 0x80B2B3E4; // type:func -func_80B4ED2C = 0x80B2B3FC; // type:func -EnZl2_UpdateSkelAnime = 0x80B2B444; // type:func -EnZl2_GetCue = 0x80B2B468; // type:func -func_80B4EDB8 = 0x80B2B490; // type:func -func_80B4EE38 = 0x80B2B510; // type:func -func_80B4EF64 = 0x80B2B640; // type:func -func_80B4F230 = 0x80B2B910; // type:func -func_80B4F45C = 0x80B2BB40; // type:func -EnZl2_PostLimbDraw = 0x80B2C20C; // type:func -func_80B4FCCC = 0x80B2C358; // type:func -func_80B4FD00 = 0x80B2C390; // type:func -func_80B4FD90 = 0x80B2C420; // type:func -func_80B4FDD4 = 0x80B2C464; // type:func -func_80B4FE10 = 0x80B2C4A4; // type:func -func_80B4FE48 = 0x80B2C4DC; // type:func -func_80B4FE6C = 0x80B2C504; // type:func -func_80B4FE90 = 0x80B2C52C; // type:func -func_80B4FEB4 = 0x80B2C554; // type:func -func_80B4FED8 = 0x80B2C57C; // type:func -EnZl2_GiveLightArrows = 0x80B2C5A4; // type:func -func_80B4FF84 = 0x80B2C634; // type:func -func_80B4FFF0 = 0x80B2C6A0; // type:func -func_80B5008C = 0x80B2C740; // type:func -func_80B500E0 = 0x80B2C794; // type:func -func_80B501C4 = 0x80B2C878; // type:func -func_80B501E8 = 0x80B2C89C; // type:func -func_80B50260 = 0x80B2C914; // type:func -func_80B50278 = 0x80B2C930; // type:func -func_80B50304 = 0x80B2C9BC; // type:func -func_80B503DC = 0x80B2CA94; // type:func -func_80B5042C = 0x80B2CAE4; // type:func -func_80B50488 = 0x80B2CB40; // type:func -func_80B504D4 = 0x80B2CB8C; // type:func -func_80B5053C = 0x80B2CBF0; // type:func -func_80B50580 = 0x80B2CC38; // type:func -func_80B505D4 = 0x80B2CC8C; // type:func -func_80B50618 = 0x80B2CCD4; // type:func -func_80B50644 = 0x80B2CD00; // type:func -func_80B50670 = 0x80B2CD2C; // type:func -func_80B506C4 = 0x80B2CD80; // type:func -func_80B5073C = 0x80B2CDFC; // type:func -func_80B50780 = 0x80B2CE44; // type:func -func_80B507E8 = 0x80B2CEAC; // type:func -func_80B5082C = 0x80B2CEF4; // type:func -func_80B50880 = 0x80B2CF48; // type:func -func_80B508C8 = 0x80B2CF90; // type:func -func_80B50928 = 0x80B2CFEC; // type:func -func_80B50970 = 0x80B2D034; // type:func -func_80B50980 = 0x80B2D048; // type:func -func_80B509A0 = 0x80B2D06C; // type:func -func_80B50A04 = 0x80B2D0D0; // type:func -func_80B50BBC = 0x80B2D274; // type:func -func_80B50BEC = 0x80B2D2AC; // type:func -func_80B50C40 = 0x80B2D308; // type:func -func_80B50CA8 = 0x80B2D378; // type:func -func_80B50CFC = 0x80B2D3D4; // type:func -func_80B50D50 = 0x80B2D430; // type:func -func_80B50D94 = 0x80B2D47C; // type:func -func_80B50DE8 = 0x80B2D4D8; // type:func -func_80B50E3C = 0x80B2D534; // type:func -func_80B50E90 = 0x80B2D590; // type:func -func_80B50EE4 = 0x80B2D5EC; // type:func -func_80B50F38 = 0x80B2D648; // type:func -func_80B50F8C = 0x80B2D6A4; // type:func -func_80B50FE8 = 0x80B2D708; // type:func -func_80B51034 = 0x80B2D75C; // type:func -func_80B51080 = 0x80B2D7B0; // type:func -func_80B510CC = 0x80B2D804; // type:func -func_80B51118 = 0x80B2D858; // type:func -func_80B51164 = 0x80B2D8AC; // type:func -func_80B511B0 = 0x80B2D900; // type:func -func_80B511FC = 0x80B2D954; // type:func -func_80B51250 = 0x80B2D9B0; // type:func -func_80B512B8 = 0x80B2DA20; // type:func -func_80B51310 = 0x80B2DA80; // type:func -func_80B5135C = 0x80B2DAD0; // type:func -func_80B513A8 = 0x80B2DB1C; // type:func -func_80B51418 = 0x80B2DB90; // type:func -func_80B5146C = 0x80B2DBE4; // type:func -func_80B5149C = 0x80B2DC18; // type:func -func_80B514F8 = 0x80B2DC78; // type:func -func_80B5154C = 0x80B2DCCC; // type:func -func_80B515C4 = 0x80B2DD44; // type:func -func_80B515D8 = 0x80B2DD5C; // type:func -func_80B51644 = 0x80B2DDC8; // type:func -func_80B51678 = 0x80B2DDFC; // type:func -func_80B516D0 = 0x80B2DE54; // type:func -func_80B51704 = 0x80B2DE88; // type:func -func_80B5175C = 0x80B2DEE0; // type:func -func_80B51790 = 0x80B2DF14; // type:func -func_80B517E0 = 0x80B2DF64; // type:func -func_80B51824 = 0x80B2DFAC; // type:func -func_80B5187C = 0x80B2E004; // type:func -func_80B518C0 = 0x80B2E04C; // type:func -func_80B51948 = 0x80B2E0D4; // type:func -func_80B51A5C = 0x80B2E1D4; // type:func -func_80B51A8C = 0x80B2E20C; // type:func -func_80B51AE4 = 0x80B2E26C; // type:func -func_80B51B44 = 0x80B2E2D4; // type:func -func_80B51BA8 = 0x80B2E340; // type:func -func_80B51C0C = 0x80B2E3AC; // type:func -func_80B51C64 = 0x80B2E40C; // type:func -func_80B51CA8 = 0x80B2E458; // type:func -func_80B51D0C = 0x80B2E4C4; // type:func -func_80B51D24 = 0x80B2E4E0; // type:func -func_80B51DA4 = 0x80B2E560; // type:func -func_80B51EA8 = 0x80B2E664; // type:func -func_80B51EBC = 0x80B2E67C; // type:func -func_80B51F38 = 0x80B2E6FC; // type:func -func_80B51FA8 = 0x80B2E76C; // type:func -func_80B52068 = 0x80B2E818; // type:func -func_80B52098 = 0x80B2E850; // type:func -func_80B52108 = 0x80B2E8C8; // type:func -func_80B52114 = 0x80B2E8D8; // type:func -func_80B521A0 = 0x80B2E938; // type:func -EnZl2_Update = 0x80B2E9C4; // type:func -EnZl2_Init = 0x80B2EA0C; // type:func -EnZl2_OverrideLimbDraw = 0x80B2EAB8; // type:func -func_80B523BC = 0x80B2EB20; // type:func -func_80B523C8 = 0x80B2EB30; // type:func -func_80B525D4 = 0x80B2ED0C; // type:func -EnZl2_Draw = 0x80B2EEB4; // type:func -func_80B533B0 = 0x80B2F750; // type:func -func_80B533FC = 0x80B2F79C; // type:func -EnZl3_Destroy = 0x80B2F7E0; // type:func -func_80B53468 = 0x80B2F80C; // type:func -func_80B53488 = 0x80B2F82C; // type:func -EnZl3_UpdateEyes = 0x80B2F878; // type:func -EnZl3_setEyeIndex = 0x80B2F900; // type:func -EnZl3_setMouthIndex = 0x80B2F918; // type:func -func_80B5357C = 0x80B2F930; // type:func -func_80B53614 = 0x80B2F9CC; // type:func -func_80B5366C = 0x80B2FA24; // type:func -func_80B536B4 = 0x80B2FA6C; // type:func -func_80B536C4 = 0x80B2FA80; // type:func -func_80B53764 = 0x80B2FB24; // type:func -func_80B537E8 = 0x80B2FBAC; // type:func -func_80B538B0 = 0x80B2FC74; // type:func -EnZl3_UpdateSkelAnime = 0x80B2FD10; // type:func -func_80B5396C = 0x80B2FD34; // type:func -func_80B53974 = 0x80B2FD40; // type:func -func_80B53980 = 0x80B2FD54; // type:func -func_80B53B64 = 0x80B2FF3C; // type:func -func_80B54360 = 0x80B3074C; // type:func -func_80B5458C = 0x80B3097C; // type:func -EnZl3_PostLimbDraw = 0x80B31078; // type:func -func_80B54DB4 = 0x80B31144; // type:func -func_80B54DC4 = 0x80B31158; // type:func -func_80B54DD4 = 0x80B3116C; // type:func -func_80B54DE0 = 0x80B3117C; // type:func -func_80B54E14 = 0x80B311B4; // type:func -func_80B54EA4 = 0x80B31244; // type:func -func_80B54EF4 = 0x80B31298; // type:func -func_80B54F18 = 0x80B312C0; // type:func -func_80B54FB4 = 0x80B31360; // type:func -func_80B55054 = 0x80B313E4; // type:func -func_80B550F0 = 0x80B31484; // type:func -func_80B55144 = 0x80B314D8; // type:func -func_80B551E0 = 0x80B31578; // type:func -func_80B55220 = 0x80B315B8; // type:func -func_80B55268 = 0x80B31600; // type:func -func_80B552A8 = 0x80B31640; // type:func -func_80B552DC = 0x80B31674; // type:func -func_80B55334 = 0x80B316D0; // type:func -func_80B55368 = 0x80B31704; // type:func -func_80B553B4 = 0x80B31750; // type:func -func_80B553E8 = 0x80B31784; // type:func -func_80B55408 = 0x80B317A4; // type:func -func_80B55444 = 0x80B317E0; // type:func -func_80B55550 = 0x80B318E4; // type:func -func_80B555A4 = 0x80B31940; // type:func -func_80B55604 = 0x80B319A8; // type:func -func_80B5566C = 0x80B31A18; // type:func -func_80B556CC = 0x80B31A80; // type:func -func_80B5572C = 0x80B31AE8; // type:func -func_80B55780 = 0x80B31B44; // type:func -func_80B55808 = 0x80B31BA8; // type:func -func_80B5582C = 0x80B31BD0; // type:func -func_80B5585C = 0x80B31C00; // type:func -func_80B558A8 = 0x80B31C4C; // type:func -func_80B559C4 = 0x80B31D6C; // type:func -func_80B55A58 = 0x80B31DFC; // type:func -func_80B55A84 = 0x80B31E28; // type:func -func_80B55AC4 = 0x80B31E68; // type:func -func_80B55B04 = 0x80B31EA8; // type:func -func_80B55B38 = 0x80B31EDC; // type:func -func_80B55B78 = 0x80B31F1C; // type:func -func_80B55BAC = 0x80B31F50; // type:func -func_80B55C0C = 0x80B31FB4; // type:func -func_80B55C4C = 0x80B31FF4; // type:func -func_80B55C70 = 0x80B3201C; // type:func -func_80B55CCC = 0x80B32074; // type:func -func_80B55D00 = 0x80B320A8; // type:func -func_80B55DB0 = 0x80B3215C; // type:func -func_80B55E08 = 0x80B321B4; // type:func -func_80B55E48 = 0x80B321F4; // type:func -func_80B55E7C = 0x80B32228; // type:func -func_80B55EBC = 0x80B32268; // type:func -func_80B55EF0 = 0x80B3229C; // type:func -func_80B55F38 = 0x80B322E4; // type:func -func_80B55F6C = 0x80B32318; // type:func -func_80B5604C = 0x80B323FC; // type:func -func_80B56090 = 0x80B32440; // type:func -func_80B56108 = 0x80B324BC; // type:func -func_80B56160 = 0x80B32514; // type:func -func_80B561A0 = 0x80B32554; // type:func -func_80B561E0 = 0x80B32594; // type:func -func_80B56214 = 0x80B325C8; // type:func -func_80B562F4 = 0x80B326AC; // type:func -func_80B5634C = 0x80B32704; // type:func -func_80B5638C = 0x80B32744; // type:func -func_80B563C0 = 0x80B32778; // type:func -func_80B56400 = 0x80B327B8; // type:func -func_80B56434 = 0x80B327EC; // type:func -func_80B56474 = 0x80B3282C; // type:func -func_80B564A8 = 0x80B32860; // type:func -func_80B56658 = 0x80B32A00; // type:func -func_80B566AC = 0x80B32A5C; // type:func -func_80B5670C = 0x80B32AC4; // type:func -func_80B5676C = 0x80B32B2C; // type:func -func_80B567CC = 0x80B32B94; // type:func -func_80B5682C = 0x80B32BFC; // type:func -func_80B568B4 = 0x80B32C8C; // type:func -func_80B5691C = 0x80B32CFC; // type:func -func_80B5697C = 0x80B32D64; // type:func -func_80B569E4 = 0x80B32DD4; // type:func -func_80B56A68 = 0x80B32E60; // type:func -func_80B56AE0 = 0x80B32EE0; // type:func -func_80B56B54 = 0x80B32F5C; // type:func -func_80B56BA8 = 0x80B32FB8; // type:func -func_80B56C24 = 0x80B3303C; // type:func -func_80B56C84 = 0x80B330A4; // type:func -func_80B56CE4 = 0x80B3310C; // type:func -func_80B56D44 = 0x80B33174; // type:func -func_80B56DA4 = 0x80B331DC; // type:func -func_80B56DC8 = 0x80B33200; // type:func -func_80B56DEC = 0x80B33228; // type:func -func_80B56E38 = 0x80B33274; // type:func -func_80B56EB8 = 0x80B332F4; // type:func -func_80B56EE4 = 0x80B33324; // type:func -func_80B56F10 = 0x80B33354; // type:func -func_80B56F8C = 0x80B333A8; // type:func -func_80B56FAC = 0x80B333C8; // type:func -func_80B57034 = 0x80B33454; // type:func -func_80B57104 = 0x80B33528; // type:func -func_80B571A8 = 0x80B335D0; // type:func -func_80B571FC = 0x80B33624; // type:func -func_80B57240 = 0x80B33668; // type:func -func_80B57298 = 0x80B336C0; // type:func -func_80B572F0 = 0x80B33718; // type:func -func_80B57324 = 0x80B33750; // type:func -func_80B57350 = 0x80B3377C; // type:func -func_80B573C8 = 0x80B337F4; // type:func -func_80B573FC = 0x80B33828; // type:func -func_80B57458 = 0x80B33884; // type:func -func_80B57564 = 0x80B33994; // type:func -func_80B575B0 = 0x80B339E8; // type:func -func_80B575D0 = 0x80B33A08; // type:func -func_80B575F0 = 0x80B33A28; // type:func -func_80B5764C = 0x80B33A84; // type:func -func_80B576C8 = 0x80B33B04; // type:func -func_80B57704 = 0x80B33B48; // type:func -func_80B5772C = 0x80B33B74; // type:func -func_80B57754 = 0x80B33BA0; // type:func -func_80B577BC = 0x80B33C0C; // type:func -func_80B57858 = 0x80B33CAC; // type:func -func_80B57890 = 0x80B33CE8; // type:func -func_80B57A74 = 0x80B33ED0; // type:func -func_80B57AAC = 0x80B33F08; // type:func -func_80B57AE0 = 0x80B33F3C; // type:func -func_80B57C54 = 0x80B340B4; // type:func -func_80B57C7C = 0x80B340DC; // type:func -func_80B57C8C = 0x80B340F0; // type:func -func_80B57CB4 = 0x80B34118; // type:func -func_80B57D60 = 0x80B341C0; // type:func -func_80B57D80 = 0x80B341E4; // type:func -func_80B57EAC = 0x80B3431C; // type:func -func_80B57EEC = 0x80B34364; // type:func -func_80B57F1C = 0x80B34398; // type:func -func_80B57F84 = 0x80B34404; // type:func -func_80B58014 = 0x80B3449C; // type:func -func_80B58214 = 0x80B346A8; // type:func -func_80B58268 = 0x80B34700; // type:func -func_80B582C8 = 0x80B34760; // type:func -func_80B584B4 = 0x80B3494C; // type:func -func_80B58624 = 0x80B34ABC; // type:func -func_80B5884C = 0x80B34CEC; // type:func -func_80B58898 = 0x80B34D38; // type:func -func_80B588E8 = 0x80B34D88; // type:func -func_80B58938 = 0x80B34DD8; // type:func -func_80B5899C = 0x80B34E40; // type:func -func_80B58A1C = 0x80B34EC0; // type:func -func_80B58A50 = 0x80B34EFC; // type:func -func_80B58AAC = 0x80B34F5C; // type:func -func_80B58C08 = 0x80B350B8; // type:func -func_80B58D50 = 0x80B35200; // type:func -func_80B58DB0 = 0x80B35268; // type:func -func_80B58E10 = 0x80B352D0; // type:func -func_80B58E7C = 0x80B35344; // type:func -func_80B58EF4 = 0x80B353C4; // type:func -func_80B58F6C = 0x80B35444; // type:func -func_80B58FDC = 0x80B354BC; // type:func -func_80B5904C = 0x80B35534; // type:func -func_80B590BC = 0x80B355AC; // type:func -func_80B5912C = 0x80B35624; // type:func -func_80B591BC = 0x80B356BC; // type:func -func_80B5922C = 0x80B35734; // type:func -func_80B592A8 = 0x80B357B8; // type:func -func_80B59340 = 0x80B35858; // type:func -func_80B593D0 = 0x80B358F0; // type:func -func_80B5944C = 0x80B35974; // type:func -func_80B59698 = 0x80B35B70; // type:func -func_80B59768 = 0x80B35C40; // type:func -func_80B59828 = 0x80B35D00; // type:func -func_80B59A80 = 0x80B35F60; // type:func -func_80B59AD0 = 0x80B35FB0; // type:func -func_80B59B6C = 0x80B3604C; // type:func -func_80B59DB8 = 0x80B36294; // type:func -EnZl3_Update = 0x80B36304; // type:func -EnZl3_Init = 0x80B3634C; // type:func -EnZl3_OverrideLimbDraw = 0x80B3640C; // type:func -func_80B59FE8 = 0x80B36474; // type:func -func_80B59FF4 = 0x80B36484; // type:func -func_80B5A1D0 = 0x80B36630; // type:func -EnZl3_Draw = 0x80B367D8; // type:func -EnZl4_SetActiveCamDir = 0x80B375A0; // type:func -EnZl4_SetActiveCamMove = 0x80B37678; // type:func -EnZl4_GetTextId = 0x80B376FC; // type:func -EnZl4_UpdateTalkState = 0x80B377A0; // type:func -EnZl4_UpdateFace = 0x80B377DC; // type:func -EnZl4_SetMove = 0x80B3792C; // type:func -func_80B5BB78 = 0x80B3796C; // type:func -EnZl4_GetCueStartPos = 0x80B379B8; // type:func -EnZl4_SetupFromLegendCs = 0x80B379FC; // type:func -EnZl4_InMovingAnim = 0x80B37AD4; // type:func -EnZl4_Init = 0x80B37BA4; // type:func -EnZl4_Destroy = 0x80B37D60; // type:func -EnZl4_SetNextAnim = 0x80B37D8C; // type:func -EnZl4_ReverseAnimation = 0x80B37DE0; // type:func -EnZl4_CsWaitForPlayer = 0x80B37E08; // type:func -EnZl4_CsMeetPlayer = 0x80B37F68; // type:func -EnZl4_CsAskStone = 0x80B38260; // type:func -EnZl4_CsAskName = 0x80B3878C; // type:func -EnZl4_CsTellLegend = 0x80B38D78; // type:func -EnZl4_CsLookWindow = 0x80B391D4; // type:func -EnZl4_CsWarnAboutGanon = 0x80B39418; // type:func -EnZl4_CsMakePlan = 0x80B398E0; // type:func -EnZl4_Cutscene = 0x80B39C24; // type:func -EnZl4_Idle = 0x80B39E9C; // type:func -EnZl4_TheEnd = 0x80B39F14; // type:func -EnZl4_Update = 0x80B3A0C4; // type:func -EnZl4_OverrideLimbDraw = 0x80B3A174; // type:func -EnZl4_PostLimbDraw = 0x80B3A304; // type:func -EnZl4_Draw = 0x80B3A360; // type:func -EnZo_SpawnRipple = 0x80B3BFD0; // type:func -EnZo_SpawnBubble = 0x80B3C064; // type:func -EnZo_SpawnSplash = 0x80B3C194; // type:func -EnZo_UpdateEffectsRipples = 0x80B3C300; // type:func -EnZo_UpdateEffectsBubbles = 0x80B3C3BC; // type:func -EnZo_UpdateEffectsSplashes = 0x80B3C4EC; // type:func -EnZo_DrawEffectsRipples = 0x80B3C624; // type:func -EnZo_DrawEffectsBubbles = 0x80B3C7D4; // type:func -EnZo_DrawEffectsSplashes = 0x80B3C980; // type:func -EnZo_TreadWaterRipples = 0x80B3CB38; // type:func -EnZo_SpawnSplashes = 0x80B3CBB4; // type:func -EnZo_GetTextId = 0x80B3CD28; // type:func -EnZo_UpdateTalkState = 0x80B3CF9C; // type:func -EnZo_Blink = 0x80B3D100; // type:func -EnZo_Dialog = 0x80B3D178; // type:func -EnZo_PlayerInProximity = 0x80B3D258; // type:func -EnZo_SetAnimation = 0x80B3D2F8; // type:func -EnZo_Init = 0x80B3D3F0; // type:func -EnZo_Destroy = 0x80B3D5F8; // type:func -EnZo_Standing = 0x80B3D608; // type:func -EnZo_Submerged = 0x80B3D6EC; // type:func -EnZo_Surface = 0x80B3D72C; // type:func -EnZo_TreadWater = 0x80B3D810; // type:func -EnZo_Dive = 0x80B3D9C0; // type:func -EnZo_Update = 0x80B3DB08; // type:func -EnZo_OverrideLimbDraw = 0x80B3DCE8; // type:func -EnZo_PostLimbDraw = 0x80B3DF08; // type:func -EnZo_Draw = 0x80B3DF64; // type:func -EnfHG_Init = 0x80B3E590; // type:func -EnfHG_Destroy = 0x80B3E690; // type:func -EnfHG_SetupIntro = 0x80B3E6BC; // type:func -EnfHG_Intro = 0x80B3E720; // type:func -EnfHG_SetupApproach = 0x80B3F92C; // type:func -EnfHG_Approach = 0x80B3FB78; // type:func -EnfHG_Attack = 0x80B3FD1C; // type:func -EnfHG_Damage = 0x80B401A0; // type:func -EnfHG_Retreat = 0x80B404D0; // type:func -EnfHG_Done = 0x80B40704; // type:func -EnfHG_Update = 0x80B40714; // type:func -EnfHG_PostDraw = 0x80B408A8; // type:func -EnfHG_Draw = 0x80B408BC; // type:func -EndTitle_Init = 0x80B40EC0; // type:func -EndTitle_Destroy = 0x80B40EF0; // type:func -EndTitle_Update = 0x80B40F00; // type:func -EndTitle_DrawFull = 0x80B40F10; // type:func -EndTitle_DrawNintendoLogo = 0x80B414DC; // type:func -Fishing_SetColliderElement = 0x80B44FE0; // type:func -Fishing_SeedRand = 0x80B45090; // type:func -Fishing_RandZeroOne = 0x80B450B0; // type:func -Fishing_SmoothStepToS = 0x80B451D8; // type:func -Fishing_SpawnRipple = 0x80B45284; // type:func -Fishing_SpawnDustSplash = 0x80B453DC; // type:func -Fishing_SpawnWaterDust = 0x80B45524; // type:func -Fishing_SpawnBubble = 0x80B4565C; // type:func -Fishing_SpawnRainDrop = 0x80B4578C; // type:func -Fishing_InitPondProps = 0x80B45884; // type:func -Fishing_Init = 0x80B45B98; // type:func -Fishing_Destroy = 0x80B46460; // type:func -Fishing_UpdateEffects = 0x80B464D8; // type:func -Fishing_DrawEffects = 0x80B46C1C; // type:func -Fishing_DrawStreamSplash = 0x80B47648; // type:func -Fishing_IsAboveCounter = 0x80B477CC; // type:func -Fishing_UpdateLine = 0x80B478C0; // type:func -Fishing_UpdateLinePos = 0x80B47E4C; // type:func -Fishing_DrawLureHook = 0x80B47FE4; // type:func -Fishing_UpdateSinkingLure = 0x80B484E4; // type:func -Fishing_DrawSinkingLure = 0x80B487E8; // type:func -Fishing_DrawLureAndLine = 0x80B48AD4; // type:func -Fishing_DrawRod = 0x80B49324; // type:func -Fishing_UpdateLure = 0x80B49DAC; // type:func -Fishing_SplashBySize = 0x80B4BD78; // type:func -Fishing_SplashBySize2 = 0x80B4C040; // type:func -func_80B70ED4 = 0x80B4C224; // type:func -Fishing_FishLeapSfx = 0x80B4C5C8; // type:func -Fishing_HandleAquariumDialog = 0x80B4C788; // type:func -Fishing_UpdateFish = 0x80B4C948; // type:func -Fishing_FishOverrideLimbDraw = 0x80B50D90; // type:func -Fishing_FishPostLimbDraw = 0x80B50EB0; // type:func -Fishing_LoachOverrideLimbDraw = 0x80B50EF0; // type:func -Fishing_LoachPostLimbDraw = 0x80B50F70; // type:func -Fishing_DrawFish = 0x80B50FB0; // type:func -Fishing_HandleReedContact = 0x80B511F8; // type:func -Fishing_HandleLilyPadContact = 0x80B512A4; // type:func -Fishing_UpdatePondProps = 0x80B5138C; // type:func -Fishing_DrawPondProps = 0x80B51648; // type:func -Fishing_UpdateGroupFishes = 0x80B51A6C; // type:func -Fishing_DrawGroupFishes = 0x80B5233C; // type:func -Fishing_HandleOwnerDialog = 0x80B52530; // type:func -Fishing_UpdateOwner = 0x80B533B4; // type:func -Fishing_OwnerOverrideLimbDraw = 0x80B550BC; // type:func -Fishing_OwnerPostLimbDraw = 0x80B550F4; // type:func -Fishing_DrawOwner = 0x80B55204; // type:func -ItemBHeart_Init = 0x80B5FB80; // type:func -ItemBHeart_Destroy = 0x80B5FBEC; // type:func -ItemBHeart_Update = 0x80B5FBFC; // type:func -func_80B85264 = 0x80B5FCA4; // type:func -ItemBHeart_Draw = 0x80B5FD90; // type:func -ItemEtcetera_SetupAction = 0x80B5FF90; // type:func -ItemEtcetera_Init = 0x80B5FF9C; // type:func -ItemEtcetera_Destroy = 0x80B6011C; // type:func -ItemEtcetera_WaitForObject = 0x80B6012C; // type:func -func_80B85824 = 0x80B60184; // type:func -func_80B858B4 = 0x80B6021C; // type:func -ItemEtcetera_SpawnSparkles = 0x80B602FC; // type:func -ItemEtcetera_MoveFireArrowDown = 0x80B6040C; // type:func -func_80B85B28 = 0x80B6049C; // type:func -ItemEtcetera_UpdateFireArrow = 0x80B604E4; // type:func -ItemEtcetera_Update = 0x80B60564; // type:func -ItemEtcetera_DrawThroughLens = 0x80B60588; // type:func -ItemEtcetera_Draw = 0x80B605E0; // type:func -ItemInbox_Init = 0x80B60860; // type:func -ItemInbox_Destroy = 0x80B60894; // type:func -ItemInbox_Wait = 0x80B608A4; // type:func -ItemInbox_Update = 0x80B608EC; // type:func -ItemInbox_Draw = 0x80B60910; // type:func -ItemOcarina_SetupAction = 0x80B609C0; // type:func -ItemOcarina_Init = 0x80B609CC; // type:func -ItemOcarina_Destroy = 0x80B60B54; // type:func -ItemOcarina_Fly = 0x80B60B64; // type:func -ItemOcarina_GetThrown = 0x80B60D10; // type:func -func_80B864EC = 0x80B60D68; // type:func -func_80B865E0 = 0x80B60E5C; // type:func -ItemOcarina_DoNothing = 0x80B60EBC; // type:func -ItemOcarina_StartSoTCutscene = 0x80B60ECC; // type:func -ItemOcarina_WaitInWater = 0x80B60F40; // type:func -ItemOcarina_Update = 0x80B61014; // type:func -ItemOcarina_Draw = 0x80B61038; // type:func -ItemShield_SetupAction = 0x80B61190; // type:func -ItemShield_Init = 0x80B6119C; // type:func -ItemShield_Destroy = 0x80B61304; // type:func -func_80B86AC8 = 0x80B61330; // type:func -func_80B86BC8 = 0x80B61434; // type:func -func_80B86CA8 = 0x80B6151C; // type:func -func_80B86F68 = 0x80B617E0; // type:func -ItemShield_Update = 0x80B618EC; // type:func -ItemShield_Draw = 0x80B61910; // type:func -MagicDark_Init = 0x80B61BA0; // type:func -MagicDark_Destroy = 0x80B61C84; // type:func -MagicDark_DiamondUpdate = 0x80B61CBC; // type:func -MagicDark_DimLighting = 0x80B61F04; // type:func -MagicDark_OrbUpdate = 0x80B62050; // type:func -MagicDark_DiamondDraw = 0x80B621F8; // type:func -MagicDark_OrbDraw = 0x80B62460; // type:func -MagicFire_Init = 0x80B633F0; // type:func -MagicFire_Destroy = 0x80B6349C; // type:func -MagicFire_UpdateBeforeCast = 0x80B634C0; // type:func -MagicFire_Update = 0x80B63564; // type:func -MagicFire_Draw = 0x80B638F8; // type:func -MagicWind_SetupAction = 0x80B656F0; // type:func -MagicWind_Init = 0x80B656FC; // type:func -MagicWind_Destroy = 0x80B65808; // type:func -MagicWind_UpdateAlpha = 0x80B6583C; // type:func -MagicWind_WaitForTimer = 0x80B6595C; // type:func -MagicWind_Grow = 0x80B659D8; // type:func -MagicWind_WaitAtFullSize = 0x80B65A28; // type:func -MagicWind_FadeOut = 0x80B65A74; // type:func -MagicWind_Shrink = 0x80B65AD8; // type:func -MagicWind_Update = 0x80B65B18; // type:func -MagicWind_OverrideLimbDraw = 0x80B65B6C; // type:func -MagicWind_Draw = 0x80B65CF0; // type:func -MirRay_SetupCollider = 0x80B673F0; // type:func -MirRay_MakeShieldLight = 0x80B674B8; // type:func -MirRay_Init = 0x80B6765C; // type:func -MirRay_Destroy = 0x80B678F4; // type:func -MirRay_Update = 0x80B6796C; // type:func -MirRay_SetIntensity = 0x80B67A58; // type:func -MirRay_SetupReflectionPolys = 0x80B67C0C; // type:func -MirRay_RemoveSimilarReflections = 0x80B67DE8; // type:func -MirRay_ReflectedBeam = 0x80B67EEC; // type:func -MirRay_Draw = 0x80B6845C; // type:func -MirRay_CheckInFrustum = 0x80B68738; // type:func -ObjBean_InitCollider = 0x80B68CA0; // type:func -ObjBean_InitDynaPoly = 0x80B68CF8; // type:func -ObjBean_FindFloor = 0x80B68D50; // type:func -func_80B8EBC8 = 0x80B68DB8; // type:func -ObjBean_UpdatePosition = 0x80B68DD8; // type:func -func_80B8EDF4 = 0x80B68FE8; // type:func -func_80B8EE24 = 0x80B69018; // type:func -ObjBean_Move = 0x80B690F0; // type:func -ObjBean_SetDrawMode = 0x80B69120; // type:func -ObjBean_SetupPathCount = 0x80B69144; // type:func -ObjBean_SetupPath = 0x80B69184; // type:func -ObjBean_FollowPath = 0x80B69200; // type:func -ObjBean_CheckForHorseTrample = 0x80B694A8; // type:func -ObjBean_Break = 0x80B69538; // type:func -ObjBean_UpdateLeaves = 0x80B697B0; // type:func -ObjBean_SetupLeavesStill = 0x80B6986C; // type:func -ObjBean_LeavesStill = 0x80B698DC; // type:func -ObjBean_SetupShakeLeaves = 0x80B69920; // type:func -ObjBean_ShakeLeaves = 0x80B69998; // type:func -ObjBean_SetupShakeLeavesFast = 0x80B69A1C; // type:func -ObjBean_ShakeLeavesFast = 0x80B69A60; // type:func -ObjBean_SetupGrow = 0x80B69AE8; // type:func -ObjBean_Grow = 0x80B69AFC; // type:func -ObjBean_SetupFlattenLeaves = 0x80B69B60; // type:func -ObjBean_FlattenLeaves = 0x80B69B7C; // type:func -ObjBean_SetupGrown = 0x80B69BF8; // type:func -ObjBean_Grown = 0x80B69C3C; // type:func -ObjBean_Init = 0x80B69C98; // type:func -ObjBean_Destroy = 0x80B69E54; // type:func -ObjBean_SetupWaitForBean = 0x80B69ED0; // type:func -ObjBean_WaitForBean = 0x80B69F08; // type:func -func_80B8FE00 = 0x80B69F84; // type:func -func_80B8FE3C = 0x80B69FBC; // type:func -func_80B8FE6C = 0x80B69FEC; // type:func -func_80B8FEAC = 0x80B6A02C; // type:func -func_80B8FF50 = 0x80B6A0D0; // type:func -func_80B8FF8C = 0x80B6A108; // type:func -func_80B90010 = 0x80B6A18C; // type:func -func_80B90050 = 0x80B6A1C8; // type:func -ObjBean_SetupWaitForWater = 0x80B6A288; // type:func -ObjBean_WaitForWater = 0x80B6A2D0; // type:func -ObjBean_SetupGrowWaterPhase1 = 0x80B6A3C8; // type:func -ObjBean_GrowWaterPhase1 = 0x80B6A408; // type:func -ObjBean_SetupGrowWaterPhase2 = 0x80B6A44C; // type:func -ObjBean_GrowWaterPhase2 = 0x80B6A488; // type:func -ObjBean_SetupGrowWaterPhase3 = 0x80B6A538; // type:func -ObjBean_GrowWaterPhase3 = 0x80B6A570; // type:func -ObjBean_SetupGrowWaterPhase4 = 0x80B6A684; // type:func -ObjBean_GrowWaterPhase4 = 0x80B6A6BC; // type:func -ObjBean_SetupGrowWaterPhase5 = 0x80B6A758; // type:func -ObjBean_GrowWaterPhase5 = 0x80B6A790; // type:func -ObjBean_SetupWaitForPlayer = 0x80B6A7E8; // type:func -ObjBean_WaitForPlayer = 0x80B6A814; // type:func -ObjBean_SetupFly = 0x80B6A888; // type:func -ObjBean_Fly = 0x80B6A8CC; // type:func -ObjBean_SetupWaitForStepOff = 0x80B6A9FC; // type:func -ObjBean_WaitForStepOff = 0x80B6AA28; // type:func -func_80B908EC = 0x80B6AA68; // type:func -func_80B90918 = 0x80B6AA94; // type:func -func_80B90970 = 0x80B6AAF0; // type:func -func_80B909B0 = 0x80B6AB30; // type:func -func_80B909F8 = 0x80B6AB78; // type:func -func_80B90A34 = 0x80B6ABB0; // type:func -ObjBean_Update = 0x80B6AC50; // type:func -ObjBean_DrawSoftSoilSpot = 0x80B6ADE0; // type:func -ObjBean_DrawBeanstalk = 0x80B6AE68; // type:func -ObjBean_Draw = 0x80B6AEF4; // type:func -ObjBlockstop_Init = 0x80B6B430; // type:func -ObjBlockstop_Destroy = 0x80B6B48C; // type:func -ObjBlockstop_Update = 0x80B6B49C; // type:func -ObjBombiwa_InitCollision = 0x80B6B5D0; // type:func -ObjBombiwa_Init = 0x80B6B628; // type:func -ObjBombiwa_Destroy = 0x80B6B6F4; // type:func -ObjBombiwa_Break = 0x80B6B720; // type:func -ObjBombiwa_Update = 0x80B6B920; // type:func -ObjBombiwa_Draw = 0x80B6BA30; // type:func -ObjComb_Break = 0x80B6BB40; // type:func -ObjComb_ChooseItemDrop = 0x80B6BE30; // type:func -ObjComb_Init = 0x80B6BF00; // type:func -ObjComb_Destroy = 0x80B6BF70; // type:func -ObjComb_SetupWait = 0x80B6BF9C; // type:func -ObjComb_Wait = 0x80B6BFB0; // type:func -ObjComb_Update = 0x80B6C09C; // type:func -ObjComb_Draw = 0x80B6C114; // type:func -ObjDekujr_Init = 0x80B6C3A0; // type:func -ObjDekujr_Destroy = 0x80B6C4AC; // type:func -ObjDekujr_GetCueStartPos = 0x80B6C4BC; // type:func -ObjDekujr_GetCueEndPos = 0x80B6C500; // type:func -ObjDekujr_ComeUp = 0x80B6C544; // type:func -ObjDekujr_Update = 0x80B6C6F4; // type:func -ObjDekujr_Draw = 0x80B6C7E4; // type:func -ObjElevator_SetupAction = 0x80B6C9E0; // type:func -func_80B92B08 = 0x80B6C9EC; // type:func -ObjElevator_Init = 0x80B6CA44; // type:func -ObjElevator_Destroy = 0x80B6CAD4; // type:func -func_80B92C5C = 0x80B6CB08; // type:func -func_80B92C80 = 0x80B6CB2C; // type:func -func_80B92D20 = 0x80B6CBCC; // type:func -func_80B92D44 = 0x80B6CBF0; // type:func -ObjElevator_Update = 0x80B6CC74; // type:func -ObjElevator_Draw = 0x80B6CCA8; // type:func -ObjHamishi_InitCollision = 0x80B6CDA0; // type:func -ObjHamishi_Shake = 0x80B6CDF8; // type:func -ObjHamishi_Break = 0x80B6CF74; // type:func -ObjHamishi_Init = 0x80B6D220; // type:func -ObjHamishi_Destroy = 0x80B6D308; // type:func -ObjHamishi_Update = 0x80B6D334; // type:func -ObjHamishi_Draw = 0x80B6D464; // type:func -ObjHana_Init = 0x80B6D5F0; // type:func -ObjHana_Destroy = 0x80B6D6EC; // type:func -ObjHana_Update = 0x80B6D738; // type:func -ObjHana_Draw = 0x80B6D7A8; // type:func -ObjHsblock_SetupAction = 0x80B6D900; // type:func -func_80B93B68 = 0x80B6D90C; // type:func -func_80B93BF0 = 0x80B6D964; // type:func -ObjHsblock_Init = 0x80B6D9E8; // type:func -ObjHsblock_Destroy = 0x80B6DAB8; // type:func -func_80B93D90 = 0x80B6DAEC; // type:func -func_80B93DB0 = 0x80B6DB0C; // type:func -func_80B93DF4 = 0x80B6DB50; // type:func -func_80B93E38 = 0x80B6DB98; // type:func -func_80B93E5C = 0x80B6DBBC; // type:func -ObjHsblock_Update = 0x80B6DC64; // type:func -ObjHsblock_Draw = 0x80B6DCB0; // type:func -ObjIcePoly_Init = 0x80B6DED0; // type:func -ObjIcePoly_Destroy = 0x80B6E090; // type:func -ObjIcePoly_Idle = 0x80B6E0E0; // type:func -ObjIcePoly_Melt = 0x80B6E310; // type:func -ObjIcePoly_Update = 0x80B6E5C8; // type:func -ObjIcePoly_Draw = 0x80B6E5EC; // type:func -ObjKibako_SpawnCollectible = 0x80B6E880; // type:func -ObjKibako_ApplyGravity = 0x80B6E8E0; // type:func -ObjKibako_InitCollider = 0x80B6E914; // type:func -ObjKibako_Init = 0x80B6E96C; // type:func -ObjKibako_Destroy = 0x80B6E9E4; // type:func -ObjKibako_AirBreak = 0x80B6EA10; // type:func -ObjKibako_WaterBreak = 0x80B6EC90; // type:func -ObjKibako_SetupIdle = 0x80B6EF10; // type:func -ObjKibako_Idle = 0x80B6EF2C; // type:func -ObjKibako_SetupHeld = 0x80B6F128; // type:func -ObjKibako_Held = 0x80B6F15C; // type:func -ObjKibako_SetupThrown = 0x80B6F228; // type:func -ObjKibako_Thrown = 0x80B6F288; // type:func -ObjKibako_Update = 0x80B6F3C4; // type:func -ObjKibako_Draw = 0x80B6F3E8; // type:func -ObjKibako2_InitCollider = 0x80B6F580; // type:func -ObjKibako2_Break = 0x80B6F5D8; // type:func -ObjKibako2_SpawnCollectible = 0x80B6F854; // type:func -ObjKibako2_Init = 0x80B6F8A4; // type:func -ObjKibako2_Destroy = 0x80B6F950; // type:func -ObjKibako2_Idle = 0x80B6F998; // type:func -ObjKibako2_Kill = 0x80B6FA70; // type:func -ObjKibako2_Update = 0x80B6FAF4; // type:func -ObjKibako2_Draw = 0x80B6FB18; // type:func -ObjLift_SetupAction = 0x80B6FC40; // type:func -ObjLift_InitDynaPoly = 0x80B6FC4C; // type:func -ObjLift_SpawnFragments = 0x80B6FCA4; // type:func -ObjLift_Init = 0x80B6FF28; // type:func -ObjLift_Destroy = 0x80B70028; // type:func -ObjLift_SetupWait = 0x80B7005C; // type:func -ObjLift_Wait = 0x80B700A0; // type:func -ObjLift_SetupShake = 0x80B70190; // type:func -ObjLift_Shake = 0x80B701BC; // type:func -ObjLift_SetupFall = 0x80B70304; // type:func -ObjLift_Fall = 0x80B70388; // type:func -ObjLift_Update = 0x80B7048C; // type:func -ObjLift_Draw = 0x80B704C0; // type:func -ObjLightswitch_InitCollider = 0x80B70660; // type:func -ObjLightswitch_SetSwitchFlag = 0x80B706FC; // type:func -ObjLightswitch_ClearSwitchFlag = 0x80B707C0; // type:func -ObjLightswitch_SpawnDisappearEffects = 0x80B70840; // type:func -ObjLightswitch_Init = 0x80B70A68; // type:func -ObjLightswitch_Destroy = 0x80B70BFC; // type:func -ObjLightswitch_SetupOff = 0x80B70C28; // type:func -ObjLightswitch_Off = 0x80B70C5C; // type:func -ObjLightswitch_SetupTurnOn = 0x80B70D3C; // type:func -ObjLightswitch_TurnOn = 0x80B70D60; // type:func -ObjLightswitch_SetupOn = 0x80B70E54; // type:func -ObjLightswitch_On = 0x80B70E90; // type:func -ObjLightswitch_SetupTurnOff = 0x80B70FA4; // type:func -ObjLightswitch_TurnOff = 0x80B70FD0; // type:func -ObjLightswitch_SetupDisappearDelay = 0x80B710C0; // type:func -ObjLightswitch_DisappearDelay = 0x80B710DC; // type:func -ObjLightswitch_SetupDisappear = 0x80B71124; // type:func -ObjLightswitch_Disappear = 0x80B71140; // type:func -ObjLightswitch_Update = 0x80B71184; // type:func -ObjLightswitch_DrawOpa = 0x80B71268; // type:func -ObjLightswitch_DrawXlu = 0x80B71590; // type:func -ObjLightswitch_Draw = 0x80B71840; // type:func -ObjMakekinsuta_Init = 0x80B71A90; // type:func -func_80B98320 = 0x80B71AA8; // type:func -ObjMakekinsuta_DoNothing = 0x80B71B5C; // type:func -ObjMakekinsuta_Update = 0x80B71B6C; // type:func -ObjMakeoshihiki_Init = 0x80B71BE0; // type:func -ObjMakeoshihiki_Draw = 0x80B71D54; // type:func -ObjMure_SetCullingImpl = 0x80B72070; // type:func -ObjMure_SetCulling = 0x80B720C8; // type:func -ObjMure_Init = 0x80B720F4; // type:func -ObjMure_Destroy = 0x80B721A4; // type:func -ObjMure_GetMaxChildSpawns = 0x80B721B4; // type:func -ObjMure_GetSpawnPos = 0x80B721E0; // type:func -ObjMure_SpawnActors0 = 0x80B72208; // type:func -ObjMure_SpawnActors1 = 0x80B723D0; // type:func -ObjMure_SpawnActors = 0x80B7251C; // type:func -ObjMure_KillActorsImpl = 0x80B7256C; // type:func -ObjMure_KillActors = 0x80B72664; // type:func -ObjMure_CheckChildren = 0x80B72684; // type:func -ObjMure_InitialAction = 0x80B72748; // type:func -ObjMure_CulledState = 0x80B72760; // type:func -ObjMure_SetFollowTargets = 0x80B727C0; // type:func -ObjMure_SetChildToFollowPlayer = 0x80B72898; // type:func -ObjMure_GroupBehavior0 = 0x80B72A18; // type:func -ObjMure_GroupBehavior1 = 0x80B72C40; // type:func -ObjMure_ActiveState = 0x80B72DC4; // type:func -ObjMure_Update = 0x80B72E6C; // type:func -ObjMure2_SetPosShrubCircle = 0x80B73080; // type:func -ObjMure2_SetPosShrubScattered = 0x80B7319C; // type:func -ObjMure2_SetPosRockCircle = 0x80B7329C; // type:func -ObjMure2_SetActorSpawnParams = 0x80B733A8; // type:func -ObjMure2_SpawnActors = 0x80B733FC; // type:func -ObjMure2_CleanupAndDie = 0x80B73558; // type:func -func_80B9A534 = 0x80B73658; // type:func -ObjMure2_Init = 0x80B736EC; // type:func -ObjMure2_SetupWait = 0x80B7374C; // type:func -ObjMure2_Wait = 0x80B73760; // type:func -func_80B9A658 = 0x80B73784; // type:func -func_80B9A668 = 0x80B73798; // type:func -func_80B9A6E8 = 0x80B73818; // type:func -func_80B9A6F8 = 0x80B7382C; // type:func -ObjMure2_Update = 0x80B738BC; // type:func -func_80B9A9D0 = 0x80B73AA0; // type:func -func_80B9AA90 = 0x80B73B60; // type:func -func_80B9ABA0 = 0x80B73C70; // type:func -func_80B9ACE4 = 0x80B73DB4; // type:func -func_80B9ADCC = 0x80B73EA0; // type:func -ObjMure3_Init = 0x80B73F94; // type:func -ObjMure3_Destroy = 0x80B73FF4; // type:func -func_80B9AF24 = 0x80B74004; // type:func -func_80B9AF34 = 0x80B74018; // type:func -func_80B9AF54 = 0x80B7403C; // type:func -func_80B9AF64 = 0x80B74050; // type:func -func_80B9AFEC = 0x80B740D8; // type:func -func_80B9AFFC = 0x80B740EC; // type:func -ObjMure3_Update = 0x80B74168; // type:func -ObjOshihiki_InitDynapoly = 0x80B74270; // type:func -ObjOshihiki_RotateXZ = 0x80B742C8; // type:func -ObjOshihiki_StrongEnough = 0x80B7431C; // type:func -ObjOshihiki_ResetFloors = 0x80B743A0; // type:func -ObjOshihiki_GetBlockUnder = 0x80B743CC; // type:func -ObjOshihiki_UpdateInitPos = 0x80B7445C; // type:func -ObjOshihiki_NoSwitchPress = 0x80B7458C; // type:func -ObjOshihiki_CheckType = 0x80B74658; // type:func -ObjOshihiki_SetScale = 0x80B746A8; // type:func -ObjOshihiki_SetTexture = 0x80B746E0; // type:func -ObjOshihiki_SetColor = 0x80B74740; // type:func -ObjOshihiki_Init = 0x80B747E8; // type:func -ObjOshihiki_Destroy = 0x80B74910; // type:func -ObjOshihiki_SetFloors = 0x80B74944; // type:func -ObjOshihiki_GetHighestFloor = 0x80B74AA4; // type:func -ObjOshihiki_SetGround = 0x80B74BF0; // type:func -ObjOshihiki_CheckFloor = 0x80B74C48; // type:func -ObjOshihiki_CheckGround = 0x80B74CA0; // type:func -ObjOshihiki_CheckWall = 0x80B74D18; // type:func -ObjOshihiki_MoveWithBlockUnder = 0x80B74F6C; // type:func -ObjOshihiki_SetupOnScene = 0x80B75068; // type:func -ObjOshihiki_OnScene = 0x80B750A0; // type:func -ObjOshihiki_SetupOnActor = 0x80B7518C; // type:func -ObjOshihiki_OnActor = 0x80B751CC; // type:func -ObjOshihiki_SetupPush = 0x80B753C4; // type:func -ObjOshihiki_Push = 0x80B753F0; // type:func -ObjOshihiki_SetupFall = 0x80B7560C; // type:func -ObjOshihiki_Fall = 0x80B75664; // type:func -ObjOshihiki_Update = 0x80B75768; // type:func -ObjOshihiki_Draw = 0x80B757F0; // type:func -ObjRoomtimer_Init = 0x80B75D20; // type:func -ObjRoomtimer_Destroy = 0x80B75D74; // type:func -func_80B9D054 = 0x80B75DA8; // type:func -func_80B9D0B0 = 0x80B75E08; // type:func -ObjRoomtimer_Update = 0x80B75EE4; // type:func -ObjSwitch_RotateY = 0x80B75F70; // type:func -ObjSwitch_InitDynaPoly = 0x80B75FF0; // type:func -ObjSwitch_InitJntSphCollider = 0x80B76048; // type:func -ObjSwitch_InitTrisCollider = 0x80B760E4; // type:func -ObjSwitch_SpawnIce = 0x80B76204; // type:func -ObjSwitch_SetOn = 0x80B76278; // type:func -ObjSwitch_SetOff = 0x80B76324; // type:func -ObjSwitch_UpdateTwoTexScrollXY = 0x80B763AC; // type:func -ObjSwitch_Init = 0x80B763F4; // type:func -ObjSwitch_Destroy = 0x80B7668C; // type:func -ObjSwitch_FloorUpInit = 0x80B76730; // type:func -ObjSwitch_FloorUp = 0x80B76750; // type:func -ObjSwitch_FloorPressInit = 0x80B768C0; // type:func -ObjSwitch_FloorPress = 0x80B768DC; // type:func -ObjSwitch_FloorDownInit = 0x80B7699C; // type:func -ObjSwitch_FloorDown = 0x80B769C4; // type:func -ObjSwitch_FloorReleaseInit = 0x80B76B10; // type:func -ObjSwitch_FloorRelease = 0x80B76B2C; // type:func -ObjSwitch_EyeIsHit = 0x80B76C10; // type:func -ObjSwitch_EyeFrozenInit = 0x80B76C80; // type:func -ObjSwitch_EyeInit = 0x80B76C94; // type:func -ObjSwitch_EyeOpenInit = 0x80B76CEC; // type:func -ObjSwitch_EyeOpen = 0x80B76D04; // type:func -ObjSwitch_EyeClosingInit = 0x80B76D70; // type:func -ObjSwitch_EyeClosing = 0x80B76D8C; // type:func -ObjSwitch_EyeClosedInit = 0x80B76E08; // type:func -ObjSwitch_EyeClosed = 0x80B76E24; // type:func -ObjSwitch_EyeOpeningInit = 0x80B76EE4; // type:func -ObjSwitch_EyeOpening = 0x80B76F00; // type:func -ObjSwitch_CrystalOffInit = 0x80B76F90; // type:func -ObjSwitch_CrystalOff = 0x80B76FBC; // type:func -ObjSwitch_CrystalTurnOnInit = 0x80B770F4; // type:func -ObjSwitch_CrystalTurnOn = 0x80B77110; // type:func -ObjSwitch_CrystalOnInit = 0x80B77198; // type:func -ObjSwitch_CrystalOn = 0x80B771C8; // type:func -ObjSwitch_CrystalTurnOffInit = 0x80B77290; // type:func -ObjSwitch_CrystalTurnOff = 0x80B772AC; // type:func -ObjSwitch_Update = 0x80B77334; // type:func -ObjSwitch_DrawFloor = 0x80B77470; // type:func -ObjSwitch_DrawFloorRusty = 0x80B774B4; // type:func -ObjSwitch_DrawEye = 0x80B774E4; // type:func -ObjSwitch_DrawCrystal = 0x80B775F8; // type:func -ObjSwitch_Draw = 0x80B77854; // type:func -ObjSyokudai_Init = 0x80B77D50; // type:func -ObjSyokudai_Destroy = 0x80B77F14; // type:func -ObjSyokudai_Update = 0x80B77F68; // type:func -ObjSyokudai_Draw = 0x80B78584; // type:func -ObjTimeblock_CalculateIsVisible = 0x80B789A0; // type:func -ObjTimeblock_SpawnDemoEffect = 0x80B78A60; // type:func -ObjTimeblock_ToggleSwitchFlag = 0x80B78AD4; // type:func -ObjTimeblock_Init = 0x80B78B1C; // type:func -ObjTimeblock_Destroy = 0x80B78CD0; // type:func -ObjTimeblock_PlayerIsInRange = 0x80B78D04; // type:func -ObjTimeblock_WaitForOcarina = 0x80B78DE4; // type:func -ObjTimeblock_WaitForSong = 0x80B78E64; // type:func -ObjTimeblock_SetupDoNothing = 0x80B78EDC; // type:func -ObjTimeblock_DoNothing = 0x80B78EF0; // type:func -ObjTimeblock_SetupNormal = 0x80B78F00; // type:func -ObjTimeblock_Normal = 0x80B78F14; // type:func -func_80BA06AC = 0x80B79090; // type:func -ObjTimeblock_SetupAltBehaviorVisible = 0x80B79140; // type:func -ObjTimeblock_AltBehaviorVisible = 0x80B79154; // type:func -ObjTimeblock_SetupAltBehaviourNotVisible = 0x80B79220; // type:func -ObjTimeblock_AltBehaviourNotVisible = 0x80B79234; // type:func -ObjTimeblock_Update = 0x80B79304; // type:func -ObjTimeblock_Draw = 0x80B7938C; // type:func -ObjTsubo_SpawnCollectible = 0x80B795F0; // type:func -ObjTsubo_ApplyGravity = 0x80B79650; // type:func -ObjTsubo_SnapToFloor = 0x80B79684; // type:func -ObjTsubo_InitCollider = 0x80B79720; // type:func -ObjTsubo_Init = 0x80B79778; // type:func -ObjTsubo_Destroy = 0x80B79848; // type:func -ObjTsubo_AirBreak = 0x80B79874; // type:func -ObjTsubo_WaterBreak = 0x80B79AFC; // type:func -ObjTsubo_SetupWaitForObject = 0x80B79D94; // type:func -ObjTsubo_WaitForObject = 0x80B79DA8; // type:func -ObjTsubo_SetupIdle = 0x80B79E1C; // type:func -ObjTsubo_Idle = 0x80B79E30; // type:func -ObjTsubo_SetupLiftedUp = 0x80B7A040; // type:func -ObjTsubo_LiftedUp = 0x80B7A084; // type:func -ObjTsubo_SetupThrown = 0x80B7A10C; // type:func -ObjTsubo_Thrown = 0x80B7A1D4; // type:func -ObjTsubo_Update = 0x80B7A368; // type:func -ObjTsubo_Draw = 0x80B7A38C; // type:func -ObjWarp2block_Spawn = 0x80B7A5E0; // type:func -func_80BA1ECC = 0x80B7A6BC; // type:func -ObjWarp2block_SwapWithChild = 0x80B7A83C; // type:func -func_80BA2218 = 0x80B7AA0C; // type:func -func_80BA228C = 0x80B7AA8C; // type:func -func_80BA2304 = 0x80B7AB04; // type:func -ObjWarp2block_Init = 0x80B7AB48; // type:func -ObjWarp2block_Destroy = 0x80B7AC68; // type:func -ObjWarp2block_SetInactive = 0x80B7ACA8; // type:func -ObjWarp2block_DoNothing = 0x80B7ACC0; // type:func -func_80BA24E8 = 0x80B7ACD0; // type:func -func_80BA24F8 = 0x80B7ACE4; // type:func -func_80BA2600 = 0x80B7ADC8; // type:func -func_80BA2610 = 0x80B7ADDC; // type:func -ObjWarp2block_Update = 0x80B7AE8C; // type:func -ObjWarp2block_Draw = 0x80B7AEC8; // type:func -ObjectKankyo_SetupAction = 0x80B7B110; // type:func -ObjectKankyo_Init = 0x80B7B11C; // type:func -ObjectKankyo_Destroy = 0x80B7B41C; // type:func -ObjectKankyo_Snow = 0x80B7B440; // type:func -ObjectKankyo_Fairies = 0x80B7B450; // type:func -ObjectKankyo_Update = 0x80B7C268; // type:func -ObjectKankyo_Draw = 0x80B7C28C; // type:func -ObjectKankyo_DrawFairies = 0x80B7C310; // type:func -ObjectKankyo_DrawSnow = 0x80B7C798; // type:func -ObjectKankyo_Lightning = 0x80B7CF60; // type:func -ObjectKankyo_DrawLightning = 0x80B7D008; // type:func -ObjectKankyo_SunGraveSparkInit = 0x80B7D204; // type:func -ObjectKankyo_WaitForSunGraveSparkObject = 0x80B7D250; // type:func -ObjectKankyo_SunGraveSpark = 0x80B7D2C0; // type:func -ObjectKankyo_DrawSunGraveSpark = 0x80B7D36C; // type:func -ObjectKankyo_InitBeams = 0x80B7D8B4; // type:func -ObjectKankyo_WaitForBeamObject = 0x80B7D900; // type:func -ObjectKankyo_Beams = 0x80B7D960; // type:func -ObjectKankyo_DrawBeams = 0x80B7DA40; // type:func -OceffSpot_SetupAction = 0x80B7E390; // type:func -OceffSpot_Init = 0x80B7E39C; // type:func -OceffSpot_Destroy = 0x80B7E4F8; // type:func -OceffSpot_End = 0x80B7E588; // type:func -OceffSpot_Wait = 0x80B7E650; // type:func -OceffSpot_GrowCylinder = 0x80B7E68C; // type:func -OceffSpot_Update = 0x80B7E6F0; // type:func -OceffSpot_Draw = 0x80B7E9C8; // type:func -OceffStorm_SetupAction = 0x80B7F2C0; // type:func -OceffStorm_Init = 0x80B7F2CC; // type:func -OceffStorm_Destroy = 0x80B7F39C; // type:func -OceffStorm_DefaultAction = 0x80B7F3E8; // type:func -OceffStorm_UnkAction = 0x80B7F5AC; // type:func -OceffStorm_Update = 0x80B7F5CC; // type:func -OceffStorm_Draw2 = 0x80B7F638; // type:func -OceffStorm_Draw = 0x80B7F7E8; // type:func -OceffWipe_Init = 0x80B80E70; // type:func -OceffWipe_Destroy = 0x80B80ECC; // type:func -OceffWipe_Update = 0x80B80F18; // type:func -OceffWipe_Draw = 0x80B80F78; // type:func -OceffWipe2_Init = 0x80B81BF0; // type:func -OceffWipe2_Destroy = 0x80B81C4C; // type:func -OceffWipe2_Update = 0x80B81C98; // type:func -OceffWipe2_Draw = 0x80B81CF8; // type:func -OceffWipe3_Init = 0x80B83360; // type:func -OceffWipe3_Destroy = 0x80B833BC; // type:func -OceffWipe3_Update = 0x80B83408; // type:func -OceffWipe3_Draw = 0x80B83468; // type:func -OceffWipe4_Init = 0x80B84AB0; // type:func -OceffWipe4_Destroy = 0x80B84B0C; // type:func -OceffWipe4_Update = 0x80B84B30; // type:func -OceffWipe4_Draw = 0x80B84B90; // type:func -ShotSun_Init = 0x80B85A90; // type:func -ShotSun_Destroy = 0x80B85B4C; // type:func -ShotSun_SpawnFairy = 0x80B85B90; // type:func -ShotSun_TriggerFairy = 0x80B85C38; // type:func -ShotSun_UpdateFairySpawner = 0x80B85CD4; // type:func -ShotSun_UpdateHyliaSun = 0x80B85E24; // type:func -ShotSun_Update = 0x80B8605C; // type:func diff --git a/tools/disasm/gc-us/variables.txt b/tools/disasm/gc-us/variables.txt deleted file mode 100644 index 7be1569abc..0000000000 --- a/tools/disasm/gc-us/variables.txt +++ /dev/null @@ -1 +0,0 @@ -gSaveContext = 0x8011B148; // size:0x1428 type:SaveContext diff --git a/tools/disasm/ntsc-1.2/file_addresses.csv b/tools/disasm/ntsc-1.2/file_addresses.csv new file mode 100644 index 0000000000..a774468775 --- /dev/null +++ b/tools/disasm/ntsc-1.2/file_addresses.csv @@ -0,0 +1,472 @@ +name,vrom_start,vrom_end,rom_start,rom_end,vram_start,overlay_dir +boot,1060,7960,1060,0,80000460, +code,A87000,B8ADA0,A62D40,AFDE00,800116E0, +ovl_title,B9DA70,B9E430,B07AF0,B082B0,80800000,gamestates +ovl_select,B9E430,BA1190,B082B0,B09E10,808009C0,gamestates +ovl_opening,BA1190,BA12F0,B09E10,B09F40,80803720,gamestates +ovl_file_choose,BA12F0,BB1210,B09F40,B12D60,80803880,gamestates +ovl_kaleido_scope,BB1210,BCDBA0,B12D60,B21DA0,808137C0,misc +ovl_player_actor,BCDBA0,BF4210,B21DA0,B3B090,808301C0,actors +ovl_map_mark_data,BF4210,BFAD70,B3B090,B3B440,80856900,misc +ovl_En_Test,BFAD70,C00620,B3B440,B3E910,8085D460,actors +ovl_En_GirlA,C00620,C02F40,B3E910,B3FD80,80862D10,actors +ovl_En_Part,C02F40,C04550,B3FD80,B40DA0,80865630,actors +ovl_En_Light,C04550,C05340,B40DA0,B41760,80866C40,actors +ovl_En_Door,C05340,C06180,B41760,B42330,80867A30,actors +ovl_En_Box,C06180,C07CB0,B42330,B43610,80868870,actors +ovl_En_Poh,C07CB0,C0BE40,B43610,B46090,8086A3B0,actors +ovl_En_Okuta,C0BE40,C0E420,B46090,B47AE0,8086E540,actors +ovl_En_Bom,C0E420,C0F2F0,B47AE0,B48690,80870B20,actors +ovl_En_Wallmas,C0F2F0,C10D00,B48690,B49830,808719F0,actors +ovl_En_Dodongo,C10D00,C13AA0,B49830,B4B770,80873400,actors +ovl_En_Firefly,C13AA0,C15C10,B4B770,B4CDE0,808761A0,actors +ovl_En_Horse,C15C10,C21E70,B4CDE0,B545E0,80878310,actors +ovl_En_Arrow,C21E70,C23560,B545E0,B55660,80884570,actors +ovl_En_Elf,C23560,C27F20,B55660,B58610,80885C60,actors +ovl_En_Niw,C27F20,C2B250,B58610,B5AAF0,8088A620,actors +ovl_En_Tite,C2B250,C2DFF0,B5AAF0,B5C5B0,8088D950,actors +ovl_En_Reeba,C2DFF0,C2FA60,B5C5B0,B5D8B0,808906F0,actors +ovl_En_Peehat,C2FA60,C33160,B5D8B0,B5FB80,80892160,actors +ovl_En_Holl,C33160,C34130,B5FB80,B60720,80895860,actors +ovl_En_Scene_Change,C34130,C34260,B60720,B60810,80896830,actors +ovl_En_Zf,C34260,C3AD50,B60810,B64C80,80896960,actors +ovl_En_Hata,C3AD50,C3B2E0,B64C80,B65180,8089D460,actors +ovl_Boss_Dodongo,C3B2E0,C44DC0,B65180,B6B430,8089D9F0,actors +ovl_Boss_Goma,C44DC0,C4AD40,B6B430,B6EDE0,808A74D0,actors +ovl_En_Zl1,C4AD40,C4EB40,B6EDE0,B70D10,808AD450,actors +ovl_En_Viewer,C4EB40,C519F0,B70D10,B72C40,808B1250,actors +ovl_En_Goma,C519F0,C54680,B72C40,B749E0,808B4120,actors +ovl_Bg_Pushbox,C54680,C54980,B749E0,B74C70,808B6DB0,actors +ovl_En_Bubble,C54980,C55DA0,B74C70,B75BD0,808B70B0,actors +ovl_Door_Shutter,C55DA0,C58020,B75BD0,B77490,808B84D0,actors +ovl_En_Dodojr,C58020,C59EC0,B77490,B789E0,808BA750,actors +ovl_En_Bdfire,C59EC0,C5AA50,B789E0,B792D0,808BC5F0,actors +ovl_En_Boom,C5AA50,C5B310,B792D0,B79A10,808BD180,actors +ovl_En_Torch2,C5B310,C5DA70,B79A10,B7B6B0,808BDA40,actors +ovl_En_Bili,C5DA70,C5FD40,B7B6B0,B7CEE0,808C01E0,actors +ovl_En_Tp,C5FD40,C61B90,B7CEE0,B7E500,808C24B0,actors +ovl_En_St,C61B90,C64800,B7E500,B803E0,808C4300,actors +ovl_En_Bw,C64800,C67B70,B803E0,B82680,808C6F70,actors +ovl_En_Eiyer,C67B70,C697D0,B82680,B83AA0,808CA2E0,actors +ovl_En_River_Sound,C697D0,C6A160,B83AA0,B84270,808CBF40,actors +ovl_En_Horse_Normal,C6A160,C6C780,B84270,B85AD0,808CC8D0,actors +ovl_En_Ossan,C6C780,C72D60,B85AD0,B892B0,808CEEF0,actors +ovl_Bg_Treemouth,C72D60,C743C0,B892B0,B89EB0,808D54D0,actors +ovl_Bg_Dodoago,C743C0,C75100,B89EB0,B8A910,808D6B30,actors +ovl_Bg_Hidan_Dalm,C75100,C75950,B8A910,B8AF80,808D78E0,actors +ovl_Bg_Hidan_Hrock,C75950,C76180,B8AF80,B8B5F0,808D8130,actors +ovl_En_Horse_Ganon,C76180,C76F00,B8B5F0,B8C060,808D8960,actors +ovl_Bg_Hidan_Rock,C76F00,C77FF0,B8C060,B8CD20,808D96E0,actors +ovl_Bg_Hidan_Rsekizou,C77FF0,C78BD0,B8CD20,B8D610,808DA7D0,actors +ovl_Bg_Hidan_Sekizou,C78BD0,C7A020,B8D610,B8E590,808DB3B0,actors +ovl_Bg_Hidan_Sima,C7A020,C7AF40,B8E590,B8F180,808DC800,actors +ovl_Bg_Hidan_Syoku,C7AF40,C7B3A0,B8F180,B8F490,808DD720,actors +ovl_En_Xc,C7B3A0,C81B00,B8F490,B92920,808DDB80,actors +ovl_Bg_Hidan_Curtain,C81B00,C825A0,B92920,B93160,808E4310,actors +ovl_Bg_Spot00_Hanebasi,C825A0,C836B0,B93160,B93F30,808E4DB0,actors +ovl_En_Mb,C836B0,C878E0,B93F30,B96A20,808E5EC0,actors +ovl_En_Bombf,C878E0,C88D50,B96A20,B97A10,808EA0F0,actors +ovl_Bg_Hidan_Firewall,C88D50,C894B0,B97A10,B98030,808EB560,actors +ovl_Bg_Dy_Yoseizo,C894B0,C8C2B0,B98030,B99F70,808EBCC0,actors +ovl_En_Zl2,C8C2B0,C909E0,B99F70,B9C340,808EEAC0,actors +ovl_Bg_Hidan_Fslift,C909E0,C90EB0,B9C340,B9C6F0,808F31F0,actors +ovl_En_OE2,C90EB0,C90F90,B9C6F0,B9C790,808F36C0,actors +ovl_Bg_Ydan_Hasi,C90F90,C91740,B9C790,B9CDB0,808F37A0,actors +ovl_Bg_Ydan_Maruta,C91740,C91E20,B9CDB0,B9D330,808F3F50,actors +ovl_Boss_Ganondrof,C91E20,C96B90,B9D330,BA0690,808F4630,actors +ovl_En_Am,C96B90,C98F90,BA0690,BA1EC0,808F93A0,actors +ovl_En_Dekubaba,C98F90,C9CA30,BA1EC0,BA44B0,808FB7A0,actors +ovl_En_M_Fire1,C9CA30,C9CBD0,BA44B0,BA4600,808FF240,actors +ovl_En_M_Thunder,C9CBD0,C9E1C0,BA4600,BA55F0,808FF3E0,actors +ovl_Bg_Ddan_Jd,C9E1C0,C9E810,BA55F0,BA5AF0,809009D0,actors +ovl_Bg_Breakwall,C9E810,C9F680,BA5AF0,BA6650,80901020,actors +ovl_En_Jj,C9F680,CA0C50,BA6650,BA72A0,80901E90,actors +ovl_En_Horse_Zelda,CA0C50,CA1740,BA72A0,BA7B70,80903460,actors +ovl_Bg_Ddan_Kd,CA1740,CA2030,BA7B70,BA8250,80903F50,actors +ovl_Door_Warp1,CA2030,CA62D0,BA8250,BAA9A0,80904840,actors +ovl_Obj_Syokudai,CA62D0,CA6F00,BAA9A0,BAB3D0,80908AF0,actors +ovl_Item_B_Heart,CA6F00,CA72F0,BAB3D0,BAB730,80909730,actors +ovl_En_Dekunuts,CA72F0,CA8AF0,BAB730,BAC6E0,80909B20,actors +ovl_Bg_Menkuri_Kaiten,CA8AF0,CA8C80,BAC6E0,BAC840,8090B320,actors +ovl_Bg_Menkuri_Eye,CA8C80,CA9110,BAC840,BACC30,8090B4B0,actors +ovl_En_Vali,CA9110,CAB7B0,BACC30,BAE6D0,8090B950,actors +ovl_Bg_Mizu_Movebg,CAB7B0,CAC940,BAE6D0,BAF3B0,8090DFF0,actors +ovl_Bg_Mizu_Water,CAC940,CAD610,BAF3B0,BAFCB0,8090F190,actors +ovl_Arms_Hook,CAD610,CAE370,BAFCB0,BB0740,8090FE60,actors +ovl_En_fHG,CAE370,CB0CA0,BB0740,BB2280,80910BC0,actors +ovl_Bg_Mori_Hineri,CB0CA0,CB19A0,BB2280,BB2C10,809134F0,actors +ovl_En_Bb,CB19A0,CB5670,BB2C10,BB57B0,809141F0,actors +ovl_Bg_Toki_Hikari,CB5670,CB6410,BB57B0,BB5FF0,80917EC0,actors +ovl_En_Yukabyun,CB6410,CB6A20,BB5FF0,BB6540,80918C60,actors +ovl_Bg_Toki_Swd,CB6A20,CB8070,BB6540,BB6F80,80919270,actors +ovl_En_Fhg_Fire,CB8070,CBA690,BB6F80,BB8B00,8091A8C0,actors +ovl_Bg_Mjin,CBA690,CBAA70,BB8B00,BB8E60,8091CEE0,actors +ovl_Bg_Hidan_Kousi,CBAA70,CBAFF0,BB8E60,BB9290,8091D2C0,actors +ovl_Door_Toki,CBAFF0,CBB150,BB9290,BB93B0,8091D840,actors +ovl_Bg_Hidan_Hamstep,CBB150,CBC000,BB93B0,BB9EE0,8091D9A0,actors +ovl_En_Bird,CBC000,CBC4C0,BB9EE0,BBA2C0,8091E850,actors +ovl_En_Wood02,CBC4C0,CBD690,BBA2C0,BBB100,8091ED10,actors +ovl_En_Lightbox,CBD690,CBDB10,BBB100,BBB4D0,8091FEF0,actors +ovl_En_Pu_box,CBDB10,CBDE50,BBB4D0,BBB7B0,80920370,actors +ovl_En_Trap,CBDE50,CBF0F0,BBB7B0,BBC3F0,809206B0,actors +ovl_En_Arow_Trap,CBF0F0,CBF240,BBC3F0,BBC530,80921950,actors +ovl_En_Vase,CBF240,CBF340,BBC530,BBC610,80921AA0,actors +ovl_En_Ta,CBF340,CC2D00,BBC610,BBE950,80921BA0,actors +ovl_En_Tk,CC2D00,CC4B30,BBE950,BBFF80,80925560,actors +ovl_Bg_Mori_Bigst,CC4B30,CC5460,BBFF80,BC05F0,80927390,actors +ovl_Bg_Mori_Elevator,CC5460,CC5F50,BC05F0,BC0D40,80927CC0,actors +ovl_Bg_Mori_Kaitenkabe,CC5F50,CC65B0,BC0D40,BC1290,809287B0,actors +ovl_Bg_Mori_Rakkatenjo,CC65B0,CC6F20,BC1290,BC1950,80928E10,actors +ovl_En_Vm,CC6F20,CC87D0,BC1950,BC2AE0,80929780,actors +ovl_Demo_Effect,CC87D0,CCE2C0,BC2AE0,BC6670,8092B030,actors +ovl_Demo_Kankyo,CCE2C0,CD1F70,BC6670,BC8B20,80930B20,actors +ovl_Bg_Hidan_Fwbig,CD1F70,CD2C50,BC8B20,BC9570,80934820,actors +ovl_En_Floormas,CD2C50,CD6030,BC9570,BCB570,80935500,actors +ovl_En_Heishi1,CD6030,CD7540,BCB570,BCC3C0,809388E0,actors +ovl_En_Rd,CD7540,CD9DF0,BCC3C0,BCDDE0,80939DF0,actors +ovl_En_Po_Sisters,CD9DF0,CDEAE0,BCDDE0,BD1000,8093C6A0,actors +ovl_Bg_Heavy_Block,CDEAE0,CE03D0,BD1000,BD2230,80941390,actors +ovl_Bg_Po_Event,CE03D0,CE2200,BD2230,BD3880,80942C80,actors +ovl_Obj_Mure,CE2200,CE3210,BD3880,BD43B0,80944AC0,actors +ovl_En_Sw,CE3210,CE6980,BD43B0,BD6C00,80945AD0,actors +ovl_Boss_Fd,CE6980,CEDCB0,BD6C00,BDB900,809492C0,actors +ovl_Object_Kankyo,CEDCB0,CF0ED0,BDB900,BDDCC0,809505F0,actors +ovl_En_Du,CF0ED0,CF2970,BDDCC0,BDEEC0,80953810,actors +ovl_En_Fd,CF2970,CF5630,BDEEC0,BE0FB0,809552B0,actors +ovl_En_Horse_Link_Child,CF5630,CF7430,BE0FB0,BE21B0,80957F70,actors +ovl_Door_Ana,CF7430,CF7AA0,BE21B0,BE2700,80959D70,actors +ovl_Bg_Spot02_Objects,CF7AA0,CF8DF0,BE2700,BE34A0,8095A3E0,actors +ovl_Bg_Haka,CF8DF0,CF94B0,BE34A0,BE3A50,8095B730,actors +ovl_Magic_Wind,CF94B0,CFB1B0,BE3A50,BE53E0,8095BDF0,actors +ovl_Magic_Fire,CFB1B0,CFD480,BE53E0,BE7300,8095DAF0,actors +ovl_En_Ru1,CFD480,D04B20,BE7300,BEB0B0,8095FDC0,actors +ovl_Boss_Fd2,D04B20,D08850,BEB0B0,BEDC20,80967460,actors +ovl_En_Fd_Fire,D08850,D09560,BEDC20,BEE6F0,8096B190,actors +ovl_En_Dh,D09560,D0B030,BEE6F0,BEFA70,8096BEA0,actors +ovl_En_Dha,D0B030,D0C030,BEFA70,BF0640,8096D970,actors +ovl_En_Rl,D0C030,D0CF10,BF0640,BF0F70,8096E970,actors +ovl_En_Encount1,D0CF10,D0DA70,BF0F70,BF18D0,8096F850,actors +ovl_Demo_Du,D0DA70,D11250,BF18D0,BF3410,809703B0,actors +ovl_Demo_Im,D11250,D151C0,BF3410,BF53B0,80973B90,actors +ovl_Demo_Tre_Lgt,D151C0,D158D0,BF53B0,BF59A0,80977B00,actors +ovl_En_Fw,D158D0,D17080,BF59A0,BF6CD0,80978210,actors +ovl_Bg_Vb_Sima,D17080,D17790,BF6CD0,BF7310,809799C0,actors +ovl_En_Vb_Ball,D17790,D18930,BF7310,BF8070,8097A0D0,actors +ovl_Bg_Haka_Megane,D18930,D18D30,BF8070,BF83C0,8097B270,actors +ovl_Bg_Haka_MeganeBG,D18D30,D193F0,BF83C0,BF8910,8097B670,actors +ovl_Bg_Haka_Ship,D193F0,D19E30,BF8910,BF9120,8097BD30,actors +ovl_Bg_Haka_Sgami,D19E30,D1AA50,BF9120,BF9AA0,8097C770,actors +ovl_En_Heishi2,D1AA50,D1CC50,BF9AA0,BFAF50,8097D390,actors +ovl_En_Encount2,D1CC50,D1DE80,BFAF50,BFBD50,8097F590,actors +ovl_En_Fire_Rock,D1DE80,D1EF90,BFBD50,BFC9C0,809807C0,actors +ovl_En_Brob,D1EF90,D20080,BFC9C0,BFD600,809818D0,actors +ovl_Mir_Ray,D20080,D21940,BFD600,BFEA00,809829C0,actors +ovl_Bg_Spot09_Obj,D21940,D21E50,BFEA00,BFEDD0,80984280,actors +ovl_Bg_Spot18_Obj,D21E50,D22720,BFEDD0,BFF420,80984790,actors +ovl_Boss_Va,D22720,D30F10,BFF420,C08A70,80985060,actors +ovl_Bg_Haka_Tubo,D30F10,D31930,C08A70,C092B0,8099C250,actors +ovl_Bg_Haka_Trap,D31930,D32F00,C092B0,C0A2C0,8099CC70,actors +ovl_Bg_Haka_Huta,D32F00,D339A0,C0A2C0,C0AB30,8099E240,actors +ovl_Bg_Haka_Zou,D339A0,D34B90,C0AB30,C0B8B0,8099ECE0,actors +ovl_Bg_Spot17_Funen,D34B90,D34DE0,C0B8B0,C0BAD0,8099FED0,actors +ovl_En_Syateki_Itm,D34DE0,D35B80,C0BAD0,C0C530,809A0120,actors +ovl_En_Syateki_Man,D35B80,D36940,C0C530,C0CF60,809A0EC0,actors +ovl_En_Tana,D36940,D36BE0,C0CF60,C0D1A0,809A1C80,actors +ovl_En_Nb,D36BE0,D3B1B0,C0D1A0,C0F610,809A1F20,actors +ovl_Boss_Mo,D3B1B0,D46750,C0F610,C17390,809A64F0,actors +ovl_En_Sb,D46750,D47B90,C17390,C18110,809B65A0,actors +ovl_En_Bigokuta,D47B90,D4A6A0,C18110,C19E60,809B79E0,actors +ovl_En_Karebaba,D4A6A0,D4BF90,C19E60,C1AFD0,809BA4F0,actors +ovl_Bg_Bdan_Objects,D4BF90,D4D260,C1AFD0,C1BCF0,809BBDE0,actors +ovl_Demo_Sa,D4D260,D4FD80,C1BCF0,C1D250,809BD0B0,actors +ovl_Demo_Go,D4FD80,D50AE0,C1D250,C1DB90,809BFBD0,actors +ovl_En_In,D50AE0,D53880,C1DB90,C1FC60,809C0930,actors +ovl_En_Tr,D53880,D55180,C1FC60,C20E70,809C36D0,actors +ovl_Bg_Spot16_Bombstone,D55180,D566C0,C20E70,C21F40,809C4FD0,actors +ovl_Bg_Hidan_Kowarerukabe,D566C0,D57590,C21F40,C22920,809C6510,actors +ovl_Bg_Bombwall,D57590,D57E50,C22920,C23000,809C73E0,actors +ovl_En_Ru2,D57E50,D5ABD0,C23000,C24660,809C7CA0,actors +ovl_Obj_Dekujr,D5ABD0,D5B210,C24660,C24BB0,809CAA20,actors +ovl_Bg_Mizu_Uzu,D5B210,D5B3E0,C24BB0,C24D40,809CB060,actors +ovl_Bg_Spot06_Objects,D5B3E0,D5C7F0,C24D40,C25C40,809CB230,actors +ovl_Bg_Ice_Objects,D5C7F0,D5D730,C25C40,C26680,809CC640,actors +ovl_Bg_Haka_Water,D5D730,D5DF10,C26680,C26C60,809CD580,actors +ovl_En_Ma2,D5DF10,D5EF70,C26C60,C278F0,809CDD60,actors +ovl_En_Bom_Chu,D5EF70,D60610,C278F0,C28AE0,809CEDC0,actors +ovl_En_Horse_Game_Check,D60610,D616E0,C28AE0,C29700,809D0460,actors +ovl_Boss_Tw,D616E0,D74760,C29700,C35CE0,809D1530,actors +ovl_En_Rr,D74760,D76C90,C35CE0,C377F0,809E7030,actors +ovl_En_Ba,D76C90,D78B60,C377F0,C38C50,809E9560,actors +ovl_En_Bx,D78B60,D79650,C38C50,C39600,809EB430,actors +ovl_En_Anubice,D79650,D7A900,C39600,C3A3D0,809EBF20,actors +ovl_En_Anubice_Fire,D7A900,D7B6C0,C3A3D0,C3AF30,809ED1D0,actors +ovl_Bg_Mori_Hashigo,D7B6C0,D7BF80,C3AF30,C3B5B0,809EDF90,actors +ovl_Bg_Mori_Hashira4,D7BF80,D7C500,C3B5B0,C3BA00,809EE850,actors +ovl_Bg_Mori_Idomizu,D7C500,D7CB40,C3BA00,C3BEE0,809EEDE0,actors +ovl_Bg_Spot16_Doughnut,D7CB40,D7D0F0,C3BEE0,C3C3B0,809EF420,actors +ovl_Bg_Bdan_Switch,D7D0F0,D7E520,C3C3B0,C3CF60,809EF9D0,actors +ovl_En_Ma1,D7E520,D7F800,C3CF60,C3DD60,809F0E00,actors +ovl_Boss_Ganon,D7F800,DA1A60,C3DD60,C53470,809F20E0,actors +ovl_Boss_Sst,DA1A60,DADFE0,C53470,C5AFB0,80A17EC0,actors +ovl_En_Ny,DADFE0,DAF910,C5AFB0,C5C200,80A24480,actors +ovl_En_Fr,DAF910,DB23A0,C5C200,C5E060,80A25DB0,actors +ovl_Item_Shield,DB23A0,DB2DB0,C5E060,C5E860,80A28840,actors +ovl_Bg_Ice_Shelter,DB2DB0,DB3FE0,C5E860,C5F630,80A29250,actors +ovl_En_Ice_Hono,DB3FE0,DB51D0,C5F630,C60300,80A2A480,actors +ovl_Item_Ocarina,DB51D0,DB59A0,C60300,C608C0,80A2B670,actors +ovl_Magic_Dark,DB59A0,DB71F0,C608C0,C61C00,80A2BE40,actors +ovl_Demo_6K,DB71F0,DB9F00,C61C00,C63D40,80A2D690,actors +ovl_En_Anubice_Tag,DB9F00,DBA1D0,C63D40,C63FB0,80A303A0,actors +ovl_Bg_Haka_Gate,DBA1D0,DBB250,C63FB0,C64C80,80A30670,actors +ovl_Bg_Spot15_Saku,DBB250,DBB590,C64C80,C64F50,80A31700,actors +ovl_Bg_Jya_Goroiwa,DBB590,DBBD10,C64F50,C655B0,80A31A40,actors +ovl_Bg_Jya_Zurerukabe,DBBD10,DBC3C0,C655B0,C65B00,80A321C0,actors +ovl_Bg_Jya_Cobra,DBC3C0,DBE0E0,C65B00,C67070,80A32870,actors +ovl_Bg_Jya_Kanaami,DBE0E0,DBE490,C67070,C67360,80A34590,actors +ovl_Fishing,DBE490,DD1E60,C67360,C74890,80A34940,actors +ovl_Obj_Oshihiki,DD1E60,DD3910,C74890,C75B30,80A4F3F0,actors +ovl_Bg_Gate_Shutter,DD3910,DD3D90,C75B30,C75EB0,80A50EA0,actors +ovl_Eff_Dust,DD3D90,DD5170,C75EB0,C76A80,80A51320,actors +ovl_Bg_Spot01_Fusya,DD5170,DD5410,C76A80,C76CC0,80A52700,actors +ovl_Bg_Spot01_Idohashira,DD5410,DD6010,C76CC0,C775F0,80A529A0,actors +ovl_Bg_Spot01_Idomizu,DD6010,DD6320,C775F0,C778C0,80A535A0,actors +ovl_Bg_Po_Syokudai,DD6320,DD6C70,C778C0,C78060,80A538B0,actors +ovl_Bg_Ganon_Otyuka,DD6C70,DD92B0,C78060,C79D90,80A54200,actors +ovl_Bg_Spot15_Rrbox,DD92B0,DDA090,C79D90,C7A7A0,80A56840,actors +ovl_Bg_Umajump,DDA090,DDA220,C7A7A0,C7A910,80A57620,actors +ovl_En_Insect,DDA220,DDC740,C7A910,C7C1B0,80A577B0,actors +ovl_En_Butte,DDC740,DDDD10,C7C1B0,C7D180,80A59CD0,actors +ovl_En_Fish,DDDD10,DDFE20,C7D180,C7E640,80A5B2A0,actors +ovl_Bg_Spot08_Iceblock,DDFE20,DE0E60,C7E640,C7F1E0,80A5D3B0,actors +ovl_Item_Etcetera,DE0E60,DE1730,C7F1E0,C7F870,80A5E3F0,actors +ovl_Arrow_Fire,DE1730,DE35F0,C7F870,C81320,80A5ECC0,actors +ovl_Arrow_Ice,DE35F0,DE54D0,C81320,C82B80,80A60B80,actors +ovl_Arrow_Light,DE54D0,DE73C0,C82B80,C84470,80A62A60,actors +ovl_Obj_Kibako,DE73C0,DE80C0,C84470,C84D50,80A64950,actors +ovl_Obj_Tsubo,DE80C0,DE90B0,C84D50,C858B0,80A65650,actors +ovl_En_Wonder_Item,DE90B0,DE9D00,C858B0,C86170,80A66640,actors +ovl_En_Ik,DE9D00,DEE330,C86170,C88A90,80A67370,actors +ovl_Demo_Ik,DEE330,DEF840,C88A90,C897A0,80A6B9B0,actors +ovl_En_Skj,DEF840,DF3170,C897A0,C8BB60,80A6CEC0,actors +ovl_En_Skjneedle,DF3170,DF3480,C8BB60,C8BE10,80A70800,actors +ovl_En_G_Switch,DF3480,DF4CB0,C8BE10,C8D0D0,80A70B10,actors +ovl_Demo_Ext,DF4CB0,DF55F0,C8D0D0,C8D7F0,80A72340,actors +ovl_Demo_Shd,DF55F0,DF7A00,C8D7F0,C8F030,80A72C80,actors +ovl_En_Dns,DF7A00,DF8D90,C8F030,C8FD00,80A75090,actors +ovl_Elf_Msg,DF8D90,DF9380,C8FD00,C90160,80A76420,actors +ovl_En_Honotrap,DF9380,DFA8D0,C90160,C91130,80A76A10,actors +ovl_En_Tubo_Trap,DFA8D0,DFB570,C91130,C91A40,80A77F60,actors +ovl_Obj_Ice_Poly,DFB570,DFBF20,C91A40,C92230,80A78C00,actors +ovl_Bg_Spot03_Taki,DFBF20,DFC810,C92230,C92900,80A795B0,actors +ovl_Bg_Spot07_Taki,DFC810,DFCDD0,C92900,C92D70,80A79EA0,actors +ovl_En_Fz,DFCDD0,DFEDE0,C92D70,C94460,80A7A460,actors +ovl_En_Po_Relay,DFEDE0,E004F0,C94460,C955D0,80A7C470,actors +ovl_Bg_Relay_Objects,E004F0,E00CA0,C955D0,C95BF0,80A7DB80,actors +ovl_En_Diving_Game,E00CA0,E02650,C95BF0,C96DE0,80A7E330,actors +ovl_En_Kusa,E02650,E03B30,C96DE0,C97D30,80A7FCE0,actors +ovl_Obj_Bean,E03B30,E062C0,C97D30,C99600,80A811C0,actors +ovl_Obj_Bombiwa,E062C0,E06830,C99600,C99AB0,80A83950,actors +ovl_Obj_Switch,E06830,E085F0,C99AB0,C9AD90,80A83EC0,actors +ovl_Obj_Elevator,E085F0,E089B0,C9AD90,C9B080,80A85C80,actors +ovl_Obj_Lift,E089B0,E093D0,C9B080,C9B8C0,80A86040,actors +ovl_Obj_Hsblock,E093D0,E099A0,C9B8C0,C9BD70,80A86A60,actors +ovl_En_Okarina_Tag,E099A0,E0AEA0,C9BD70,C9C970,80A87030,actors +ovl_En_Yabusame_Mark,E0AEA0,E0B570,C9C970,C9CED0,80A88530,actors +ovl_En_Goroiwa,E0B570,E0D930,C9CED0,C9E7F0,80A88C00,actors +ovl_En_Ex_Ruppy,E0D930,E0E9F0,C9E7F0,C9F4B0,80A8AFC0,actors +ovl_En_Toryo,E0E9F0,E0F680,C9F4B0,C9FDF0,80A8C080,actors +ovl_En_Daiku,E0F680,E10DC0,C9FDF0,CA0FE0,80A8CD10,actors +ovl_En_Nwc,E10DC0,E11800,CA0FE0,CA1890,80A8E450,actors +ovl_En_Blkobj,E11800,E11D60,CA1890,CA1D10,80A8EE90,actors +ovl_Item_Inbox,E11D60,E11EC0,CA1D10,CA1E20,80A8F3F0,actors +ovl_En_Ge1,E11EC0,E13EF0,CA1E20,CA3250,80A8F550,actors +ovl_Obj_Blockstop,E13EF0,E14090,CA3250,CA33D0,80A91580,actors +ovl_En_Sda,E14090,E156D0,CA33D0,CA4260,80A91720,actors +ovl_En_Clear_Tag,E156D0,E1E240,CA4260,CA86A0,80A92E20,actors +ovl_En_Niw_Lady,E1E240,E1FB40,CA86A0,CA9890,80A9E3C0,actors +ovl_En_Gm,E1FB40,E20870,CA9890,CAA2A0,80A9FCC0,actors +ovl_En_Ms,E20870,E20F60,CAA2A0,CAA850,80AA09F0,actors +ovl_En_Hs,E20F60,E21B00,CAA850,CAB090,80AA10E0,actors +ovl_Bg_Ingate,E21B00,E21E90,CAB090,CAB3A0,80AA1C80,actors +ovl_En_Kanban,E21E90,E24FE0,CAB3A0,CAD1B0,80AA2010,actors +ovl_En_Heishi3,E24FE0,E259B0,CAD1B0,CAD8E0,80AA5160,actors +ovl_En_Syateki_Niw,E259B0,E27A40,CAD8E0,CAF0B0,80AA5B30,actors +ovl_En_Attack_Niw,E27A40,E28CA0,CAF0B0,CAFE10,80AA7BC0,actors +ovl_Bg_Spot01_Idosoko,E28CA0,E28EB0,CAFE10,CAFFD0,80AA8E20,actors +ovl_En_Sa,E28EB0,E2B120,CAFFD0,CB15E0,80AA9030,actors +ovl_En_Wonder_Talk,E2B120,E2B7B0,CB15E0,CB1B30,80AAB2A0,actors +ovl_Bg_Gjyo_Bridge,E2B7B0,E2BCB0,CB1B30,CB1F70,80AAB930,actors +ovl_En_Ds,E2BCB0,E2C8D0,CB1F70,CB27D0,80AABE30,actors +ovl_En_Mk,E2C8D0,E2D760,CB27D0,CB31C0,80AACA50,actors +ovl_En_Bom_Bowl_Man,E2D760,E2ECA0,CB31C0,CB4160,80AAD8E0,actors +ovl_En_Bom_Bowl_Pit,E2ECA0,E2F610,CB4160,CB48C0,80AAEE20,actors +ovl_En_Owl,E2F610,E331B0,CB48C0,CB6B40,80AAF790,actors +ovl_En_Ishi,E331B0,E3C300,CB6B40,CB7E90,80AB3330,actors +ovl_Obj_Hana,E3C300,E3C610,CB7E90,CB8100,80ABC480,actors +ovl_Obj_Lightswitch,E3C610,E3DA40,CB8100,CB8F00,80ABC790,actors +ovl_Obj_Mure2,E3DA40,E3E460,CB8F00,CB9680,80ABDBC0,actors +ovl_En_Go,E3E460,E42AA0,CB9680,CBC3E0,80ABE5E0,actors +ovl_En_Fu,E42AA0,E437E0,CBC3E0,CBCE50,80AC2C20,actors +ovl_En_Changer,E437E0,E441C0,CBCE50,CBD5A0,80AC3970,actors +ovl_Bg_Jya_Megami,E441C0,E453A0,CBD5A0,CBE480,80AC4350,actors +ovl_Bg_Jya_Lift,E453A0,E458F0,CBE480,CBE8D0,80AC5530,actors +ovl_Bg_Jya_Bigmirror,E458F0,E46130,CBE8D0,CBEFE0,80AC5A80,actors +ovl_Bg_Jya_Bombchuiwa,E46130,E46C60,CBEFE0,CBF8B0,80AC62C0,actors +ovl_Bg_Jya_Amishutter,E46C60,E46FF0,CBF8B0,CBFB00,80AC6DF0,actors +ovl_Bg_Jya_Bombiwa,E46FF0,E475B0,CBFB00,CBFFE0,80AC7180,actors +ovl_Bg_Spot18_Basket,E475B0,E485A0,CBFFE0,CC0BF0,80AC7740,actors +ovl_En_Ganon_Organ,E485A0,E4F5A0,CC0BF0,CC4250,80AC8730,actors +ovl_En_Siofuki,E4F5A0,E50350,CC4250,CC4C90,80ACF730,actors +ovl_En_Stream,E50350,E508E0,CC4C90,CC5160,80AD04E0,actors +ovl_En_Mm,E508E0,E51F00,CC5160,CC6270,80AD0A70,actors +ovl_En_Ko,E51F00,E56040,CC6270,CC87F0,80AD2090,actors +ovl_En_Kz,E56040,E575E0,CC87F0,CC97F0,80AD61D0,actors +ovl_En_Weather_Tag,E575E0,E584D0,CC97F0,CC9F40,80AD7770,actors +ovl_Bg_Sst_Floor,E584D0,E58A30,CC9F40,CCA430,80AD8660,actors +ovl_En_Ani,E58A30,E597A0,CCA430,CCADC0,80AD8BC0,actors +ovl_En_Ex_Item,E597A0,E5A910,CCADC0,CCBA80,80AD9930,actors +ovl_Bg_Jya_Ironobj,E5A910,E5B6C0,CCBA80,CCC3F0,80ADAAA0,actors +ovl_En_Js,E5B6C0,E5C090,CCC3F0,CCCB10,80ADB850,actors +ovl_En_Jsjutan,E5C090,E60E50,CCCB10,CCE880,80ADC220,actors +ovl_En_Cs,E60E50,E62080,CCE880,CCF660,80AE1B40,actors +ovl_En_Md,E62080,E646F0,CCF660,CD0D60,80AE2D70,actors +ovl_En_Hy,E646F0,E68030,CD0D60,CD3170,80AE53E0,actors +ovl_En_Ganon_Mant,E68030,E6C250,CD3170,CD4EA0,80AE8D20,actors +ovl_En_Okarina_Effect,E6C250,E6C610,CD4EA0,CD5190,80AECF40,actors +ovl_En_Mag,E6C610,E6F520,CD5190,CD7250,80AED300,actors +ovl_Door_Gerudo,E6F520,E6FB10,CD7250,CD7740,80AF2210,actors +ovl_Elf_Msg2,E6FB10,E6FF80,CD7740,CD7A30,80AF2800,actors +ovl_Demo_Gt,E6FF80,E75580,CD7A30,CDA570,80AF2C70,actors +ovl_En_Po_Field,E75580,E78F60,CDA570,CDCE60,80AF8270,actors +ovl_Efc_Erupc,E78F60,E79A40,CDCE60,CDD780,80AFBCE0,actors +ovl_Bg_Zg,E79A40,E79EB0,CDD780,CDDB10,80AFC7C0,actors +ovl_En_Heishi4,E79EB0,E7ADB0,CDDB10,CDE5A0,80AFCC30,actors +ovl_En_Zl3,E7ADB0,E82C00,CDE5A0,CE2610,80AFDB30,actors +ovl_Boss_Ganon2,E82C00,E93F00,CE2610,CECC30,80B05980,actors +ovl_En_Kakasi,E93F00,E94C40,CECC30,CED650,80B187A0,actors +ovl_En_Takara_Man,E94C40,E95500,CED650,CEDDD0,80B194E0,actors +ovl_Obj_Makeoshihiki,E95500,E95990,CEDDD0,CEE1B0,80B19DA0,actors +ovl_Oceff_Spot,E95990,E968C0,CEE1B0,CEEEA0,80B1A230,actors +ovl_End_Title,E968C0,E9A9F0,CEEEA0,CF0910,80B1B160,actors +ovl_En_Torch,E9A9F0,E9AAE0,CF0910,CF09F0,80B1F290,actors +ovl_Demo_Ec,E9AAE0,E9E340,CF09F0,CF2100,80B1F380,actors +ovl_Shot_Sun,E9E340,E9EA00,CF2100,CF26A0,80B22BE0,actors +ovl_En_Dy_Extra,E9EA00,E9EF80,CF26A0,CF2B80,80B232A0,actors +ovl_En_Wonder_Talk2,E9EF80,E9F620,CF2B80,CF3120,80B23820,actors +ovl_En_Ge2,E9F620,EA0FC0,CF3120,CF42B0,80B23EC0,actors +ovl_Obj_Roomtimer,EA0FC0,EA1210,CF42B0,CF44B0,80B25860,actors +ovl_En_Ssh,EA1210,EA3800,CF44B0,CF5F00,80B25AB0,actors +ovl_En_Sth,EA3800,EA78B0,CF5F00,CF8AC0,80B280A0,actors +ovl_Oceff_Wipe,EA78B0,EA8600,CF8AC0,CF9690,80B2C150,actors +ovl_Effect_Ss_Dust,EA8600,EA8E30,CF9690,CF9D40,80B2CEA0,effects +ovl_Effect_Ss_KiraKira,EA8E30,EA94A0,CF9D40,CFA2E0,80B2D6D0,effects +ovl_Effect_Ss_Bomb,EA94A0,EA98C0,CFA2E0,CFA6B0,80B2DD40,effects +ovl_Effect_Ss_Bomb2,EA98C0,EAA1F0,CFA6B0,CFAE20,80B2E160,effects +ovl_Effect_Ss_Blast,EAA1F0,EAA580,CFAE20,CFB190,80B2EA90,effects +ovl_Effect_Ss_G_Spk,EAA580,EAAB30,CFB190,CFB6B0,80B2EE20,effects +ovl_Effect_Ss_D_Fire,EAAB30,EAB020,CFB6B0,CFBB50,80B2F3D0,effects +ovl_Effect_Ss_Bubble,EAB020,EAB4A0,CFBB50,CFBF50,80B2F8C0,effects +ovl_Effect_Ss_G_Ripple,EAB4A0,EABA00,CFBF50,CFC440,80B2FD40,effects +ovl_Effect_Ss_G_Splash,EABA00,EABEB0,CFC440,CFC810,80B302A0,effects +ovl_Effect_Ss_G_Magma,EABEB0,EAC110,CFC810,CFCA50,80B30750,effects +ovl_Effect_Ss_G_Fire,EAC110,EAC3A0,CFCA50,CFCCB0,80B309B0,effects +ovl_Effect_Ss_Lightning,EAC3A0,EACA70,CFCCB0,CFD300,80B30C40,effects +ovl_Effect_Ss_Dt_Bubble,EACA70,EAD000,CFD300,CFD7E0,80B31310,effects +ovl_Effect_Ss_Hahen,EAD000,EAD640,CFD7E0,CFDCC0,80B318A0,effects +ovl_Effect_Ss_Stick,EAD640,EAD9E0,CFDCC0,CFE010,80B31EE0,effects +ovl_Effect_Ss_Sibuki,EAD9E0,EAE0B0,CFE010,CFE620,80B32280,effects +ovl_Effect_Ss_Sibuki2,EAE0B0,EAE3E0,CFE620,CFE930,80B32950,effects +ovl_Effect_Ss_G_Magma2,EAE3E0,EAE8F0,CFE930,CFEDF0,80B32C80,effects +ovl_Effect_Ss_Stone1,EAE8F0,EAEC80,CFEDF0,CFF140,80B33190,effects +ovl_Effect_Ss_HitMark,EAEC80,EAF1D0,CFF140,CFF600,80B33520,effects +ovl_Effect_Ss_Fhg_Flash,EAF1D0,EB0150,CFF600,D00020,80B33A70,effects +ovl_Effect_Ss_K_Fire,EB0150,EB0580,D00020,D00410,80B349F0,effects +ovl_Effect_Ss_Solder_Srch_Ball,EB0580,EB0730,D00410,D005B0,80B34E20,effects +ovl_Effect_Ss_Kakera,EB0730,EB17C0,D005B0,D011F0,80B34FD0,effects +ovl_Effect_Ss_Ice_Piece,EB17C0,EB1C00,D011F0,D01600,80B36060,effects +ovl_Effect_Ss_En_Ice,EB1C00,EB24C0,D01600,D01DC0,80B364A0,effects +ovl_Effect_Ss_Fire_Tail,EB24C0,EB2BC0,D01DC0,D02420,80B36D60,effects +ovl_Effect_Ss_En_Fire,EB2BC0,EB3300,D02420,D02A90,80B37460,effects +ovl_Effect_Ss_Extra,EB3300,EB36C0,D02A90,D02E40,80B37BA0,effects +ovl_Effect_Ss_Fcircle,EB36C0,EB3B70,D02E40,D032B0,80B37F60,effects +ovl_Effect_Ss_Dead_Db,EB3B70,EB4050,D032B0,D03770,80B38410,effects +ovl_Effect_Ss_Dead_Dd,EB4050,EB45E0,D03770,D03C90,80B388F0,effects +ovl_Effect_Ss_Dead_Ds,EB45E0,EB4A60,D03C90,D040C0,80B38E80,effects +ovl_Effect_Ss_Dead_Sound,EB4A60,EB4BA0,D040C0,D04200,80B39300,effects +ovl_Oceff_Storm,EB4BA0,EB6740,D04200,D05C60,80B39440,actors +ovl_En_Weiyer,EB6740,EB8140,D05C60,D06D90,80B3AFE0,actors +ovl_Bg_Spot05_Soko,EB8140,EB8460,D06D90,D07020,80B3C9E0,actors +ovl_Bg_Jya_1flift,EB8460,EB8AF0,D07020,D07520,80B3CD00,actors +ovl_Bg_Jya_Haheniron,EB8AF0,EB92E0,D07520,D07BA0,80B3D390,actors +ovl_Bg_Spot12_Gate,EB92E0,EB96F0,D07BA0,D07EB0,80B3DB80,actors +ovl_Bg_Spot12_Saku,EB96F0,EB9BB0,D07EB0,D08270,80B3DF90,actors +ovl_En_Hintnuts,EB9BB0,EBB5E0,D08270,D09410,80B3E450,actors +ovl_En_Nutsball,EBB5E0,EBBC00,D09410,D09990,80B3FE80,actors +ovl_Bg_Spot00_Break,EBBC00,EBBDA0,D09990,D09B00,80B404A0,actors +ovl_En_Shopnuts,EBBDA0,EBCCB0,D09B00,D0A560,80B40640,actors +ovl_En_It,EBCCB0,EBCE40,D0A560,D0A690,80B41550,actors +ovl_En_GeldB,EBCE40,EC21F0,D0A690,D0DA70,80B416E0,actors +ovl_Oceff_Wipe2,EC21F0,EC3960,D0DA70,D0E8C0,80B46A90,actors +ovl_Oceff_Wipe3,EC3960,EC50B0,D0E8C0,D0FB50,80B48200,actors +ovl_En_Niw_Girl,EC50B0,EC5B80,D0FB50,D104A0,80B49950,actors +ovl_En_Dog,EC5B80,EC6D30,D104A0,D11120,80B4A420,actors +ovl_En_Si,EC6D30,EC7230,D11120,D11540,80B4B5D0,actors +ovl_Bg_Spot01_Objects2,EC7230,EC76F0,D11540,D11950,80B4BAD0,actors +ovl_Obj_Comb,EC76F0,EC7F50,D11950,D12090,80B4BF90,actors +ovl_Bg_Spot11_Bakudankabe,EC7F50,EC8590,D12090,D125F0,80B4C7F0,actors +ovl_Obj_Kibako2,EC8590,EC8C50,D125F0,D12BB0,80B4CE30,actors +ovl_En_Dnt_Demo,EC8C50,EC9970,D12BB0,D13600,80B4D4F0,actors +ovl_En_Dnt_Jiji,EC9970,ECAE80,D13600,D142B0,80B4E210,actors +ovl_En_Dnt_Nomal,ECAE80,ECDC90,D142B0,D15E70,80B4F720,actors +ovl_En_Guest,ECDC90,ECE630,D15E70,D16680,80B52530,actors +ovl_Bg_Bom_Guard,ECE630,ECE850,D16680,D16870,80B52ED0,actors +ovl_En_Hs2,ECE850,ECEE30,D16870,D16D50,80B530F0,actors +ovl_Demo_Kekkai,ECEE30,ED0110,D16D50,D17BF0,80B536D0,actors +ovl_Bg_Spot08_Bakudankabe,ED0110,ED07B0,D17BF0,D181A0,80B549B0,actors +ovl_Bg_Spot17_Bakudankabe,ED07B0,ED0E90,D181A0,D18780,80B55050,actors +ovl_Obj_Mure3,ED0E90,ED1660,D18780,D18DB0,80B55730,actors +ovl_En_Tg,ED1660,ED1D30,D18DB0,D19380,80B55F00,actors +ovl_En_Mu,ED1D30,ED2650,D19380,D19B40,80B565D0,actors +ovl_En_Go2,ED2650,ED8670,D19B40,D1D940,80B56EF0,actors +ovl_En_Wf,ED8670,EDC980,D1D940,D204A0,80B5CF10,actors +ovl_En_Skb,EDC980,EDE270,D204A0,D216C0,80B61220,actors +ovl_Demo_Gj,EDE270,EE1F20,D216C0,D23330,80B62B10,actors +ovl_Demo_Geff,EE1F20,EE2740,D23330,D23920,80B667C0,actors +ovl_Bg_Gnd_Firemeiro,EE2740,EE2C80,D23920,D23D80,80B66FE0,actors +ovl_Bg_Gnd_Darkmeiro,EE2C80,EE3440,D23D80,D24340,80B67520,actors +ovl_Bg_Gnd_Soulmeiro,EE3440,EE3CA0,D24340,D24A30,80B67CE0,actors +ovl_Bg_Gnd_Nisekabe,EE3CA0,EE3E10,D24A30,D24B80,80B68540,actors +ovl_Bg_Gnd_Iceblock,EE3E10,EE4F00,D24B80,D256C0,80B686B0,actors +ovl_Bg_Ydan_Sp,EE4F00,EE6670,D256C0,D267E0,80B697B0,actors +ovl_En_Gb,EE6670,EE7DA0,D267E0,D27910,80B6AF20,actors +ovl_En_Gs,EE7DA0,EE9C40,D27910,D28F90,80B6C650,actors +ovl_Bg_Mizu_Bwall,EE9C40,EEB110,D28F90,D29D70,80B6E4F0,actors +ovl_Bg_Mizu_Shutter,EEB110,EEB910,D29D70,D2A3A0,80B6F9C0,actors +ovl_En_Daiku_Kakariko,EEB910,EECCD0,D2A3A0,D2B290,80B701C0,actors +ovl_Bg_Bowl_Wall,EECCD0,EED650,D2B290,D2BAB0,80B71580,actors +ovl_En_Wall_Tubo,EED650,EEDB40,D2BAB0,D2BED0,80B71F00,actors +ovl_En_Po_Desert,EEDB40,EEE900,D2BED0,D2CA30,80B723F0,actors +ovl_En_Crow,EEE900,EEFFA0,D2CA30,D2DB00,80B731B0,actors +ovl_Door_Killer,EEFFA0,EF1510,D2DB00,D2EB80,80B74850,actors +ovl_Bg_Spot11_Oasis,EF1510,EF1C40,D2EB80,D2F1B0,80B75DC0,actors +ovl_Bg_Spot18_Futa,EF1C40,EF1DE0,D2F1B0,D2F310,80B764F0,actors +ovl_Bg_Spot18_Shutter,EF1DE0,EF2330,D2F310,D2F730,80B76690,actors +ovl_En_Ma3,EF2330,EF32E0,D2F730,D30360,80B76BE0,actors +ovl_En_Cow,EF32E0,EF4740,D30360,D31080,80B77B90,actors +ovl_Bg_Ice_Turara,EF4740,EF4F70,D31080,D31740,80B78FF0,actors +ovl_Bg_Ice_Shutter,EF4F70,EF53E0,D31740,D31AA0,80B79820,actors +ovl_En_Kakasi2,EF53E0,EF5B00,D31AA0,D32040,80B79C90,actors +ovl_En_Kakasi3,EF5B00,EF6BE0,D32040,D32C80,80B7A3B0,actors +ovl_Oceff_Wipe4,EF6BE0,EF7BC0,D32C80,D33850,80B7B490,actors +ovl_En_Eg,EF7BC0,EF7D70,D33850,D339B0,80B7C470,actors +ovl_Bg_Menkuri_Nisekabe,EF7D70,EF7EC0,D339B0,D33AD0,80B7C620,actors +ovl_En_Zo,EF7EC0,EFA470,D33AD0,D35540,80B7C770,actors +ovl_Effect_Ss_Ice_Smoke,EFA470,EFA930,D35540,D35980,80B7ED20,effects +ovl_Obj_Makekinsuta,EFA930,EFAA80,D35980,D35AC0,80B7F1E0,actors +ovl_En_Ge3,EFAA80,EFB5D0,D35AC0,D36340,80B7F330,actors +ovl_Obj_Timeblock,EFB5D0,EFC210,D36340,D36C30,80B7FE80,actors +ovl_Obj_Hamishi,EFC210,EFCA60,D36C30,D37330,80B80AC0,actors +ovl_En_Zl4,EFCA60,F01490,D37330,D39930,80B81310,actors +ovl_En_Mm2,F01490,F02250,D39930,D3A3A0,80B85D40,actors +ovl_Bg_Jya_Block,F02250,F024C0,D3A3A0,D3A600,80B86B00,actors +ovl_Obj_Warp2block,F024C0,F02FF0,D3A600,D3AED0,80B86D70,actors diff --git a/tools/disasm/ntsc-1.2/files_boot.csv b/tools/disasm/ntsc-1.2/files_boot.csv new file mode 100644 index 0000000000..248233ea98 --- /dev/null +++ b/tools/disasm/ntsc-1.2/files_boot.csv @@ -0,0 +1,138 @@ +offset,vram,.text +0,80000460,src/boot/boot_main +140,800005A0,src/boot/idle +3D0,80000830,src/boot/viconfig +520,80000980,src/boot/z_std_dma +C90,800010F0,src/boot/yaz0 +FD0,80001430,src/boot/z_locale +1070,800014D0,src/boot/cic6105 +12F0,80001750,src/boot/is_debug +1350,800017B0,src/libultra/io/driverominit +1530,80001990,src/boot/mio0 +15E0,80001A40,src/boot/stackcheck +17F0,80001C50,src/boot/logutils +1910,80001D70,src/code/sleep +1AB0,80001F10,src/libultra/io/piacs +1B70,80001FD0,src/libultra/os/sendmesg +1CC0,80002120,src/libultra/os/stopthread +1D80,800021E0,src/libultra/io/viextendvstart +1D90,800021F0,src/libultra/os/recvmesg +1ED0,80002330,src/libultra/libc/ll +2190,800025F0,src/libultra/os/exceptasm +2A90,80002EF0,src/libultra/os/thread +2AD0,80002F30,src/libultra/os/destroythread +2BE0,80003040,src/libultra/libc/bzero +2C80,800030E0,src/libultra/os/createthread +2DD0,80003230,src/libultra/os/initialize +3120,80003580,src/libultra/os/parameters +3180,800035E0,src/libultra/os/setsr +3190,800035F0,src/libultra/os/getsr +31A0,80003600,src/libultra/os/writebackdcache +3220,80003680,src/libultra/io/vigetnextframebuf +3260,800036C0,src/libultra/io/pimgr +33E0,80003840,src/libultra/io/devmgr +37F0,80003C50,src/libultra/io/pirawdma +38C0,80003D20,src/libultra/os/virtualtophysical +3940,80003DA0,src/libultra/io/viblack +39B0,80003E10,src/libultra/io/sirawread +3A00,80003E60,src/libultra/os/getthreadid +3A20,80003E80,src/libultra/os/setintmask +3AC0,80003F20,src/libultra/io/visetmode +3B30,80003F90,src/libultra/os/probetlb +3BF0,80004050,src/libultra/os/getmemsize +3D10,80004170,src/libultra/os/seteventmesg +3DD0,80004230,src/libultra/os/unmaptlball +3E20,80004280,src/libultra/io/epidma +3F00,80004360,src/libultra/os/invalicache +3F80,800043E0,src/libultra/os/createmesgqueue +3FB0,80004410,src/libultra/os/invaldcache +4060,800044C0,src/libultra/io/si +4090,800044F0,src/libultra/os/jammesg +41E0,80004640,src/libultra/os/setthreadpri +42C0,80004720,src/libultra/os/getthreadpri +42E0,80004740,src/libultra/io/epirawread +4440,800048A0,src/libultra/io/viswapbuf +4490,800048F0,src/libultra/io/epirawdma +4670,80004AD0,src/libultra/os/gettime +4700,80004B60,src/libultra/os/timerintr +4B00,80004F60,src/libultra/os/getcount +4B10,80004F70,src/libultra/os/setglobalintmask +4B60,80004FC0,src/libultra/os/setcompare +4B70,80004FD0,src/libultra/libc/bcopy +4E80,800052E0,src/libultra/os/resetglobalintmask +4EE0,80005340,src/libultra/os/interrupt +4F70,800053D0,src/libultra/io/vi +50B0,80005510,src/libultra/io/viswapcontext +53B0,80005810,src/libultra/io/pigetcmdq +53E0,80005840,src/libultra/io/epiread +5430,80005890,src/libultra/io/visetspecial +5590,800059F0,src/libultra/io/cartrominit +56F0,80005B50,src/libultra/os/setfpccsr +5700,80005B60,src/libultra/os/getfpccsr +5710,80005B70,src/libultra/io/epiwrite +5760,80005BC0,src/libultra/os/maptlbrdb +57C0,80005C20,src/libultra/os/yieldthread +5810,80005C70,src/libultra/os/getcause +5820,80005C80,src/libultra/io/epirawwrite +5980,80005DE0,src/libultra/os/settimer +5A60,80005EC0,src/libultra/io/sirawwrite +5AC0,80005F20,src/libultra/io/vimgr +5DD0,80006230,src/libultra/io/vigetcurrcontext +5DE0,80006240,src/libultra/os/startthread +5F30,80006390,src/libultra/io/visetyscale +5F90,800063F0,src/libultra/io/visetxscale +60C0,80006520,src/libultra/os/sethwintrroutine +6130,80006590,src/libultra/os/gethwintrroutine +6160,800065C0,data/rsp_boot.text + +offset,vram,.data +62E0,80006740,data/unk_80009410.data +6310,80006770,src/boot/idle +6330,80006790,src/boot/viconfig +6340,800067A0,src/boot/z_std_dma +6350,800067B0,src/boot/z_locale +6360,800067C0,src/boot/cic6105 +63A0,80006800,src/libultra/io/driverominit +63B0,80006810,src/boot/stackcheck +63C0,80006820,src/libultra/io/piacs +63D0,80006830,src/libultra/io/vimodepallan1 +6420,80006880,src/libultra/os/exceptasm +6450,800068B0,src/libultra/os/thread +6470,800068D0,src/libultra/os/initialize +6490,800068F0,src/libultra/io/pimgr +64C0,80006920,src/libultra/os/seteventmesg +64D0,80006930,src/libultra/os/timerintr +64E0,80006940,src/libultra/io/vimodentsclan1 +6530,80006990,src/libultra/io/vimodempallan1 +6580,800069E0,src/libultra/io/vi +65F0,80006A50,src/libultra/io/cartrominit +6600,80006A60,src/libultra/io/vimgr + +offset,vram,.rodata +6620,80006A80,src/boot/boot_main +6630,80006A90,src/boot/idle +6640,80006AA0,src/boot/z_std_dma +66C0,80006B20,src/boot/z_locale +66D0,80006B30,src/boot/cic6105 +6730,80006B90,src/boot/stackcheck +6770,80006BD0,src/boot/logutils +67E0,80006C40,src/libultra/os/exceptasm +6830,80006C90,src/libultra/io/devmgr +6850,80006CB0,src/libultra/os/setintmask +68D0,80006D30,src/boot/build + +offset,vram,.bss +6900,80006D60,src/boot/boot_main +72F0,80007750,src/boot/idle +7F00,80008360,src/boot/z_std_dma +8670,80008AD0,src/boot/yaz0 +8A80,80008EE0,src/boot/z_locale +8AA0,80008F00,src/libultra/io/driverominit +8B20,80008F80,src/libultra/io/piacs +8B40,80008FA0,src/libultra/os/initialize +8B50,80008FB0,src/libultra/io/pimgr +9FC0,8000A420,src/libultra/os/seteventmesg +A040,8000A4A0,src/libultra/os/timerintr +A080,8000A4E0,src/libultra/io/cartrominit +A100,8000A560,src/libultra/io/vimgr +B320,8000B780,.end diff --git a/tools/disasm/ntsc-1.2/files_code.csv b/tools/disasm/ntsc-1.2/files_code.csv new file mode 100644 index 0000000000..47a07ef54c --- /dev/null +++ b/tools/disasm/ntsc-1.2/files_code.csv @@ -0,0 +1,460 @@ +offset,vram,.text +0,800116E0,src/code/z_en_a_keep +AA0,80012180,src/code/z_en_item00 +2E90,80014570,src/code/z_eff_blure +6310,800179F0,src/code/z_eff_shield_particle +7980,80019060,src/code/z_eff_spark +9040,8001A720,src/code/z_eff_ss_dead +97E0,8001AEC0,src/code/z_effect +9F60,8001B640,src/code/z_effect_soft_sprite +AA00,8001C0E0,src/code/z_effect_soft_sprite_old_init +D520,8001EC00,src/code/flg_set +D930,8001F010,src/code/z_DLF +DB80,8001F260,src/code/z_actor +1A0C0,8002B7A0,src/code/z_actor_dlftbls +1A2C0,8002B9A0,src/code/z_bgcheck +23EA0,80035580,src/code/code_800430A0 +241C0,800358A0,src/code/code_80043480 +24550,80035C30,src/code/z_camera +38D70,8004A450,src/code/z_collision_btltbls +38DD0,8004A4B0,src/code/z_collision_check +40A50,80052130,src/code/z_common_data +40B00,800521E0,src/code/z_debug +40E10,800524F0,src/code/z_debug_display +412C0,800529A0,src/code/z_demo +45FE0,800576C0,src/code/code_80069420 +46070,80057750,src/code/z_draw +47ED0,800595B0,src/code/z_sfx_source +48090,80059770,src/code/z_elf_message +48770,80059E50,src/code/z_face_reaction +487C0,80059EA0,src/code/code_8006C3A0 +48940,8005A020,src/code/z_fcurve_data +48B80,8005A260,src/code/z_fcurve_data_skelanime +49370,8005AA50,src/code/z_horse +4A050,8005B730,src/code/z_jpeg +4A810,8005BEF0,src/code/z_kaleido_setup +4AC40,8005C320,src/code/z_kanfont +4AE50,8005C530,src/code/z_kankyo +52610,80063CF0,src/code/z_lib +537B0,80064E90,src/code/z_lifemeter +54B50,80066230,src/code/z_lights +55BF0,800672D0,src/code/z_malloc +55DD0,800674B0,src/code/z_map_mark +56420,80067B00,src/code/z_prenmi_buff +564E0,80067BC0,src/code/z_nulltask +56560,80067C40,src/code/z_olib +56C50,80068330,src/code/z_onepointdemo +5ABF0,8006C2D0,src/code/z_map_exp +5C860,8006DF40,src/code/z_parameter +67F30,80079610,src/code/z_path +68100,800797E0,src/code/z_frame_advance +681B0,80079890,src/code/z_player_lib +6BBE0,8007D2C0,src/code/z_prenmi +6BD80,8007D460,src/code/z_quake +6CBF0,8007E2D0,src/code/z_rcp +6E4F0,8007FBD0,src/code/z_room +6FC80,80081360,src/code/z_sample +70080,80081760,src/code/code_80097A00 +70240,80081920,src/code/z_scene +716F0,80082DD0,src/code/z_scene_table +77D60,80089440,src/code/z_skelanime +7C6E0,8008DDC0,src/code/z_skin +7D280,8008E960,src/code/z_skin_awb +7DB90,8008F270,src/code/z_skin_matrix +7EF30,80090610,src/code/z_sram +80270,80091950,src/code/z_ss_sram +80440,80091B20,src/code/z_rumble +806E0,80091DC0,src/code/z_view +81E10,800934F0,src/code/z_vimode +82980,80094060,src/code/z_viscvg +82B20,80094200,src/code/z_vismono +83380,80094A60,src/code/z_viszbuf +83670,80094D50,src/code/z_vr_box +85F60,80097640,src/code/z_vr_box_draw +86660,80097D40,src/code/z_player_call +867D0,80097EB0,src/code/z_fbdemo +871F0,800988D0,src/code/z_fbdemo_triforce +877A0,80098E80,src/code/z_fbdemo_wipe1 +87C10,800992F0,src/code/z_fbdemo_circle +882D0,800999B0,src/code/z_fbdemo_fade +88630,80099D10,src/code/shrink_window +887A0,80099E80,src/code/code_800BB0A0 +88C70,8009A350,src/code/z_kaleido_manager +88EA0,8009A580,src/code/z_kaleido_scope_call +89180,8009A860,src/code/z_play +8CCB0,8009E390,src/code/PreRender +8EED0,800A05B0,src/code/TwoHeadGfxArena +8F0E0,800A07C0,src/code/TwoHeadArena +8F2A0,800A0980,src/code/audio_stop_all_sfx +8F2F0,800A09D0,src/code/audio_thread_manager +8F710,800A0DF0,src/code/title_setup +8F780,800A0E60,src/code/game +8FFC0,800A16A0,src/code/gamealloc +90100,800A17E0,src/code/graph +90AA0,800A2180,src/code/gfxalloc +90B00,800A21E0,src/code/listalloc +90C50,800A2330,src/code/main +91000,800A26E0,src/code/padmgr +91B20,800A3200,src/code/sched +927A0,800A3E80,src/code/speed_meter +931E0,800A48C0,src/code/sys_cfb +93300,800A49E0,src/code/sys_math +935A0,800A4C80,src/code/sys_math3d +99370,800AAA50,src/code/sys_math_atan +995A0,800AAC80,src/code/sys_matrix +9B9A0,800AD080,src/code/sys_ucode +9B9F0,800AD0D0,src/code/sys_rumble +9BD50,800AD430,src/code/code_800D31A0 +9BD80,800AD460,src/code/irqmgr +9C3A0,800ADA80,src/code/code_n64dd_800AD410 +9C450,800ADB30,src/code/code_n64dd_800AD4C0 +9C540,800ADC20,src/code/fault +9E710,800AFDF0,src/code/kanread +9F1F0,800B08D0,src/audio/lib/synthesis +A2380,800B3A60,src/audio/lib/heap +A5750,800B6E30,src/audio/lib/load +A9540,800BAC20,src/audio/lib/thread +AADA0,800BC480,src/audio/lib/dcache +AAE20,800BC500,src/audio/lib/aisetnextbuf +AAEA0,800BC580,src/audio/lib/playback +ACE20,800BE500,src/audio/lib/effects +AD8A0,800BEF80,src/audio/lib/seqplayer +B0EF0,800C25D0,src/audio/general +B70B0,800C8790,src/audio/sfx +B8F00,800CA5E0,src/audio/sequence +BAB20,800CC200,src/code/gfxprint +BB720,800CCE00,src/code/rcp_utils +BBA50,800CD130,src/code/load +BBF00,800CD5E0,src/code/padutils +BC110,800CD7F0,src/code/code_800FC620 +BC530,800CDC10,src/code/padsetup +BC670,800CDD50,src/code/fp_math +BCA20,800CE100,src/code/fp +BCB80,800CE260,src/code/system_malloc +BCDF0,800CE4D0,src/code/rand +BCEF0,800CE5D0,src/code/__osMalloc +BD8A0,800CEF80,src/libultra/libc/sprintf +BD970,800CF050,src/code/printutils +BD9D0,800CF0B0,src/code/jpegutils +BDEE0,800CF5C0,src/code/jpegdecoder +BE4D0,800CFBB0,src/libultra/os/getintmask +BE530,800CFC10,src/libultra/mgu/scale +BE5D0,800CFCB0,src/libultra/gu/sinf +BE790,800CFE70,src/libultra/gu/sins +BE800,800CFEE0,src/libultra/io/sptask +BEAF0,800D01D0,src/libultra/io/motor +BEEC0,800D05A0,src/libultra/io/siacs +BEF80,800D0660,src/libultra/io/controller +BF2C0,800D09A0,src/libultra/io/contreaddata +BF4A0,800D0B80,src/libultra/gu/perspective +BF730,800D0E10,src/libultra/io/sprawdma +BF7C0,800D0EA0,src/libultra/io/sirawdma +BF870,800D0F50,src/libultra/io/sptaskyield +BF890,800D0F70,src/libultra/gu/mtxutil +BFB00,800D11E0,src/libultra/gu/lookat +BFE30,800D1510,src/libultra/os/stoptimer +BFF20,800D1600,src/libultra/gu/sqrtf +BFF30,800D1610,src/libultra/os/afterprenmi +BFF50,800D1630,src/libultra/io/contquery +C0000,800D16E0,src/libultra/gu/lookathil +C07F0,800D1ED0,src/libultra/libc/xprintf +C14B0,800D2B90,src/libultra/libc/string +C1550,800D2C30,src/libultra/io/sp +C1580,800D2C60,src/libultra/gu/position +C17A0,800D2E80,src/libultra/io/sptaskyielded +C1820,800D2F00,src/libultra/gu/rotate +C1A10,800D30F0,src/libultra/io/aisetfreq +C1B60,800D3240,src/libultra/os/getactivequeue +C1B70,800D3250,src/libultra/mgu/normalize +C1C00,800D32E0,src/libultra/io/dpgetstat +C1C10,800D32F0,src/libultra/io/dpsetstat +C1C20,800D3300,src/libultra/gu/ortho +C1DE0,800D34C0,src/libultra/gu/cosf +C1F50,800D3630,src/libultra/gu/coss +C1F80,800D3660,src/libultra/os/settime +C1FB0,800D3690,src/libultra/io/visetevent +C2020,800D3700,src/libultra/gu/us2dex +C21A0,800D3880,src/libultra/io/pfsselectbank +C2220,800D3900,src/libultra/io/contsetch +C2290,800D3970,src/libultra/io/aigetlen +C22A0,800D3980,src/libultra/mgu/translate +C2340,800D3A20,src/libultra/io/contramwrite +C2590,800D3C70,src/libultra/io/pfsgetstatus +C27C0,800D3EA0,src/libultra/io/contpfs +C3340,800D4A20,src/libultra/libc/bcmp +C3460,800D4B40,src/libultra/io/contramread +C3690,800D4D70,src/libultra/io/crc +C3800,800D4EE0,src/libultra/io/pfsisplug +C3B40,800D5220,src/libultra/libc/xlitob +C3DE0,800D54C0,src/libultra/libc/ldiv +C3F70,800D5650,src/libultra/libc/xldtob +C4A30,800D6110,src/libultra/io/spgetstat +C4A40,800D6120,src/libultra/io/spsetstat +C4A50,800D6130,src/libultra/os/writebackdcacheall +C4A80,800D6160,src/libultra/os/getcurrfaultedthread +C4A90,800D6170,src/libultra/libc/llcvt +C4CA0,800D6380,src/libultra/io/vigetcurrframebuf +C4CE0,800D63C0,src/libultra/io/spsetpc +C4D20,800D6400,src/libultra/libc/sqrt +C4D30,800D6410,src/code/fmodf +C4D80,800D6460,src/code/__osMemset +C4DB0,800D6490,src/code/__osMemmove +C4E40,800D6520,src/code/z_message +D0620,800E1D00,src/code/z_game_over +D0B60,800E2240,src/code/z_construct +D1F20,800E3600,data/rsp.text + +offset,vram,.data +D6610,800E7CF0,src/code/z_en_a_keep +D66B0,800E7D90,src/code/z_en_item00 +D6950,800E8030,src/code/z_eff_blure +D6A00,800E80E0,src/code/z_eff_shield_particle +D6A50,800E8130,src/code/z_effect +D6AA0,800E8180,src/code/z_effect_soft_sprite +D6AB0,800E8190,src/code/z_effect_soft_sprite_old_init +D6BA0,800E8280,src/code/z_effect_soft_sprite_dlftbls +D6FB0,800E8690,src/code/flg_set +D7170,800E8850,src/code/z_actor +D7490,800E8B70,src/code/z_actor_dlftbls +DAF80,800EC660,src/code/z_bgcheck +DB0D0,800EC7B0,src/code/z_camera +DE620,800EFD00,src/code/z_collision_btltbls +DE900,800EFFE0,src/code/z_collision_check +DEBB0,800F0290,src/code/z_debug +DEBE0,800F02C0,src/code/z_debug_display +DEC30,800F0310,src/code/z_demo +DED90,800F0470,src/code/z_draw +DFE10,800F14F0,src/code/z_elf_message +DFE60,800F1540,src/code/z_face_reaction +E02A0,800F1980,src/code/z_game_dlftbls +E03C0,800F1AA0,src/code/z_horse +E04D0,800F1BB0,src/code/z_jpeg +E0510,800F1BF0,src/code/z_kaleido_setup +E0560,800F1C40,src/code/z_kankyo +E0950,800F2030,src/code/z_lib +E0980,800F2060,src/code/z_lifemeter +E0AA0,800F2180,src/code/z_lights +E0AB0,800F2190,src/code/z_map_mark +E0B70,800F2250,src/code/z_onepointdemo +E4490,800F5B70,src/code/z_map_exp +E44B0,800F5B90,src/code/z_map_data +E62B0,800F7990,src/code/z_parameter +E65B0,800F7C90,src/code/z_player_lib +E6C90,800F8370,src/code/z_quake +E6CC0,800F83A0,src/code/z_rcp +E7AE0,800F91C0,src/code/z_room +E7B60,800F9240,src/code/code_80097A00 +E7EE0,800F95C0,src/code/z_scene +E7F60,800F9640,src/code/object_table +E8C00,800FA2E0,src/code/z_scene_table +EAE10,800FC4F0,src/code/z_skelanime +EAE30,800FC510,src/code/z_skin_matrix +EAE70,800FC550,src/code/z_sram +EB020,800FC700,src/code/z_ss_sram +EB0D0,800FC7B0,data/unk_8012ABC0.data +EB100,800FC7E0,src/code/z_view +EB110,800FC7F0,src/code/z_viscvg +EB1A0,800FC880,src/code/z_vr_box +EB4A0,800FCB80,src/code/z_player_call +EB4C0,800FCBA0,src/code/z_fbdemo +EB540,800FCC20,src/code/z_fbdemo_triforce +EB610,800FCCF0,src/code/z_fbdemo_wipe1 +EC0B0,800FD790,src/code/z_fbdemo_circle +ED3B0,800FEA90,src/code/z_fbdemo_fade +ED3E0,800FEAC0,src/code/shrink_window +ED3F0,800FEAD0,src/code/z_kaleido_manager +ED440,800FEB20,src/code/z_play +ED450,800FEB30,src/code/audio_stop_all_sfx +ED460,800FEB40,src/code/graph +ED470,800FEB50,src/code/main +ED480,800FEB60,src/code/padmgr +ED490,800FEB70,src/code/speed_meter +ED4C0,800FEBA0,src/code/sys_math +ED500,800FEBE0,src/code/sys_math_atan +EDD10,800FF3F0,src/code/sys_matrix +EDD90,800FF470,src/code/sys_ucode +EDDA0,800FF480,src/code/sys_rumble +EDDB0,800FF490,src/code/irqmgr +EDDD0,800FF4B0,src/code/code_n64dd_800AD4C0 +EE280,800FF960,src/code/fault +EE300,800FF9E0,src/audio/lib/data +F0710,80101DF0,src/audio/lib/synthesis +F0740,80101E20,src/audio/lib/load +F0750,80101E30,src/audio/lib/thread +F0770,80101E50,src/audio/lib/aisetnextbuf +F0780,80101E60,src/audio/lib/effects +F0790,80101E70,src/audio/lib/seqplayer +F07E0,80101EC0,src/audio/general +F1EF0,801035D0,src/audio/sfx_params +F32C0,801049A0,src/audio/data +F3330,80104A10,src/audio/session_config +F3AD0,801051B0,src/code/gfxprint +F4380,80105A60,src/code/logseverity +F4390,80105A70,src/code/code_800FC620 +F43A0,80105A80,src/code/rand +F43B0,80105A90,src/code/__osMalloc +F4400,80105AE0,src/libultra/gu/sins +F4C00,801062E0,src/libultra/io/siacs +F4C10,801062F0,src/libultra/io/controller +F4C20,80106300,src/libultra/libc/xprintf +F4C70,80106350,src/libultra/io/vimodefpallan1 +F4CC0,801063A0,src/libultra/io/contpfs +F4CD0,801063B0,src/libultra/io/contramread +F4CE0,801063C0,src/libultra/libc/xlitob + +offset,vram,.rodata +F4D10,801063F0,src/code/z_en_a_keep +F4D60,80106440,src/code/z_en_item00 +F4FD0,801066B0,src/code/z_eff_blure +F5000,801066E0,src/code/z_eff_shield_particle +F5010,801066F0,src/code/z_eff_spark +F5020,80106700,src/code/z_eff_ss_dead +F5030,80106710,src/code/z_effect_soft_sprite_old_init +F5050,80106730,src/code/flg_set +F53E0,80106AC0,src/code/z_actor +F5990,80107070,src/code/z_actor_dlftbls +F5A00,801070E0,src/code/z_bgcheck +F5AA0,80107180,src/code/code_80043480 +F5AB0,80107190,src/code/z_camera +F6230,80107910,src/code/z_collision_check +F6280,80107960,src/code/z_debug +F6290,80107970,src/code/z_demo +F6770,80107E50,src/code/z_draw +F6780,80107E60,src/code/z_elf_message +F68A0,80107F80,src/code/z_fcurve_data +F68B0,80107F90,src/code/z_fcurve_data_skelanime +F68C0,80107FA0,src/code/z_horse +F68D0,80107FB0,src/code/z_jpeg +F6960,80108040,src/code/z_kankyo +F6A10,801080F0,src/code/z_lib +F6A20,80108100,src/code/z_lifemeter +F6A40,80108120,src/code/z_lights +F6A50,80108130,src/code/z_map_mark +F6AB0,80108190,src/code/z_olib +F6AD0,801081B0,src/code/z_onepointdemo +F7390,80108A70,src/code/z_map_exp +F76B0,80108D90,src/code/z_parameter +F78C0,80108FA0,src/code/z_path +F78D0,80108FB0,src/code/z_player_lib +F7930,80109010,src/code/z_quake +F79C0,801090A0,src/code/z_room +F7A00,801090E0,src/code/z_sample +F7A10,801090F0,src/code/z_scene_table +F7A50,80109130,src/code/z_skelanime +F7A70,80109150,src/code/z_skin +F7A80,80109160,src/code/z_skin_matrix +F7A90,80109170,src/code/z_sram +F7B00,801091E0,src/code/z_rumble +F7B10,801091F0,src/code/z_view +F7B20,80109200,src/code/z_vr_box +F7C10,801092F0,src/code/z_fbdemo_triforce +F7C20,80109300,src/code/z_fbdemo_wipe1 +F7C30,80109310,src/code/z_fbdemo_circle +F7C40,80109320,src/code/code_800BB0A0 +F7C50,80109330,src/code/z_kaleido_manager +F7C70,80109350,src/code/z_play +F7D30,80109410,src/code/game +F7D50,80109430,src/code/graph +F7DA0,80109480,src/code/main +F7DD0,801094B0,src/code/padmgr +F7DE0,801094C0,src/code/sys_cfb +F7DF0,801094D0,src/code/sys_math +F7E00,801094E0,src/code/sys_math3d +F7E90,80109570,src/code/sys_math_atan +F7EA0,80109580,src/code/sys_matrix +F7ED0,801095B0,src/code/irqmgr +F7EF0,801095D0,src/code/fault +F8780,80109E60,src/audio/lib/synthesis +F87A0,80109E80,src/audio/lib/heap +F87D0,80109EB0,src/audio/lib/load +F8840,80109F20,src/audio/lib/thread +F8970,8010A050,src/audio/lib/playback +F89A0,8010A080,src/audio/lib/effects +F89D0,8010A0B0,src/audio/lib/seqplayer +F9010,8010A6F0,src/audio/general +F90E0,8010A7C0,src/audio/sfx +F9100,8010A7E0,src/audio/sequence +F9180,8010A860,src/audio/session_config +F9190,8010A870,src/code/gfxprint +F91D0,8010A8B0,src/code/rcp_utils +F9320,8010AA00,src/code/load +F94C0,8010ABA0,src/code/fp_math +F9690,8010AD70,src/libultra/gu/sinf +F96E0,8010ADC0,src/libultra/gu/perspective +F96F0,8010ADD0,src/libultra/gu/lookathil +F9700,8010ADE0,src/libultra/libc/xprintf +F9800,8010AEE0,src/libultra/gu/position +F9810,8010AEF0,src/libultra/gu/rotate +F9820,8010AF00,src/libultra/gu/cosf +F9870,8010AF50,src/libultra/gu/libm_vals +F9880,8010AF60,src/libultra/libc/xldtob +F98E0,8010AFC0,src/libultra/libc/llcvt + +offset,vram,.data +F98F0,8010AFD0,src/code/z_message +102280,80113960,src/code/z_game_over + +offset,vram,.rodata +102290,80113970,src/code/z_message +1026B0,80113D90,src/code/z_game_over +102710,80113DF0,data/audio_tables.rodata +1032B0,80114990,data/rsp.rodata + +offset,vram,.bss +103DA0,80115480,src/code/z_en_item00 +103DB0,80115490,src/code/z_effect +107BA0,80119280,src/code/flg_set +107BB0,80119290,src/code/z_actor +107C30,80119310,src/code/z_actor_dlftbls +107C40,80119320,src/code/z_bgcheck +107D60,80119440,src/code/z_camera +107E40,80119520,src/code/z_collision_check +1095A0,8011AC80,src/code/z_common_data +10A9D0,8011C0B0,src/code/z_debug +10ABF0,8011C2D0,src/code/z_debug_display +10AC00,8011C2E0,src/code/z_demo +10AC30,8011C310,src/code/z_kankyo +10AD00,8011C3E0,src/code/z_lifemeter +10AD30,8011C410,src/code/z_lights +10AEC0,8011C5A0,src/code/z_malloc +10AED0,8011C5B0,src/code/z_map_mark +10AEE0,8011C5C0,src/code/z_map_exp +10AEF0,8011C5D0,src/code/z_parameter +10AF10,8011C5F0,src/code/z_player_lib +10AF30,8011C610,src/code/z_quake +10AFC0,8011C6A0,src/code/z_skelanime +10AFD0,8011C6B0,src/code/z_skin +10BEE0,8011D5C0,src/code/z_rumble +10BFF0,8011D6D0,src/code/z_vr_box_draw +10C000,8011D6E0,src/code/z_player_call +10C010,8011D6F0,src/code/z_kaleido_scope_call +10C030,8011D710,src/code/z_play +10C140,8011D820,src/code/game +10C220,8011D900,src/code/graph +10C290,8011D970,src/code/main +110120,80121800,src/code/padmgr +110130,80121810,src/code/sched +110150,80121830,src/code/speed_meter +1101C0,801218A0,src/code/sys_cfb +1101D0,801218B0,src/code/sys_math3d +1103F0,80121AD0,src/code/sys_matrix +110400,80121AE0,src/code/code_n64dd_800AD410 +110410,80121AF0,src/code/code_n64dd_800AD4C0 +110420,80121B00,src/code/fault +110EF0,801225D0,src/audio/lib/load +110FB0,80122690,src/audio/general +1111B0,80122890,src/audio/sfx +1139C0,801250A0,src/audio/sequence +114780,80125E60,src/audio/session_config +11AC90,8012C370,src/code/system_malloc +11ACA0,8012C380,src/code/jpegdecoder +11ACB0,8012C390,src/libultra/io/sptask +11ACF0,8012C3D0,src/libultra/io/motor +11ADF0,8012C4D0,src/libultra/io/siacs +11AE10,8012C4F0,src/libultra/io/controller +11AEA0,8012C580,src/libultra/gu/position +11AEB0,8012C590,src/libultra/gu/rotate +11AEC0,8012C5A0,src/libultra/io/contpfs +11AFC0,8012C6A0,src/libultra/io/pfsisplug +11B000,8012C6E0,src/code/z_message +11B020,8012C700,.end diff --git a/tools/disasm/ntsc-1.2/files_makerom.csv b/tools/disasm/ntsc-1.2/files_makerom.csv new file mode 100644 index 0000000000..087a04f528 --- /dev/null +++ b/tools/disasm/ntsc-1.2/files_makerom.csv @@ -0,0 +1,2 @@ +offset,vram,.text +1000,80000400,entry diff --git a/tools/disasm/ntsc-1.2/files_ovl_file_choose.csv b/tools/disasm/ntsc-1.2/files_ovl_file_choose.csv new file mode 100644 index 0000000000..1e4aeabcc3 --- /dev/null +++ b/tools/disasm/ntsc-1.2/files_ovl_file_choose.csv @@ -0,0 +1,22 @@ +offset,vram,.text +0,80803880,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase +3040,808068C0,src/overlays/gamestates/ovl_file_choose/z_file_nameset +8440,8080BCC0,z_file_choose + +offset,vram,.data +EC50,808124D0,src/overlays/gamestates/ovl_file_choose/z_file_nameset_data +F330,80812BB0,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase +F370,80812BF0,src/overlays/gamestates/ovl_file_choose/z_file_nameset +F510,80812D90,src/overlays/gamestates/ovl_file_choose/z_file_choose + +offset,vram,.rodata +F800,80813080,src/overlays/gamestates/ovl_file_choose/z_file_nameset +F810,80813090,src/overlays/gamestates/ovl_file_choose/z_file_choose + +offset,vram,.ovl +F830,808130B0,src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc + +offset,vram,.bss +FF20,808137A0,src/overlays/gamestates/ovl_file_choose/z_file_copy_erase +FF30,808137B0,src/overlays/gamestates/ovl_file_choose/z_file_nameset +FF40,808137C0,.end diff --git a/tools/disasm/ntsc-1.2/files_ovl_kaleido_scope.csv b/tools/disasm/ntsc-1.2/files_ovl_kaleido_scope.csv new file mode 100644 index 0000000000..aac6f5c29b --- /dev/null +++ b/tools/disasm/ntsc-1.2/files_ovl_kaleido_scope.csv @@ -0,0 +1,34 @@ +offset,vram,.text +0,808137C0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect +2450,80815C10,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug +43E0,80817BA0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment +5EB0,80819670,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item +7EA0,8081B660,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map +B1B0,8081E970,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt +B3B0,8081EB70,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope +15440,80828C00,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark + +offset,vram,.data +15B90,80829350,src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect +15D40,80829500,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug +15F10,808296D0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment +15F40,80829700,src/overlays/misc/ovl_kaleido_scope/z_kaleido_item +15FB0,80829770,src/overlays/misc/ovl_kaleido_scope/z_kaleido_map +16200,808299C0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_prompt +16210,808299D0,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope +16BD0,8082A390,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark +16C20,8082A3E0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data + +offset,vram,.rodata +1AD80,8082E540,src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug +1AE60,8082E620,src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment +1AE70,8082E630,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope +1B150,8082E910,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark +1B200,8082E9C0,src/overlays/misc/ovl_kaleido_scope/z_lmap_mark_data + +offset,vram,.ovl +1B280,8082EA40,src/overlays/misc/ovl_kaleido_scope/ovl_kaleido_scope_reloc + +offset,vram,.bss +1C990,80830150,src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope +1CA00,8082FDA0,.end diff --git a/tools/disasm/ntsc-1.2/functions.txt b/tools/disasm/ntsc-1.2/functions.txt new file mode 100644 index 0000000000..ed0019d32e --- /dev/null +++ b/tools/disasm/ntsc-1.2/functions.txt @@ -0,0 +1,13143 @@ +entrypoint = 0x80000400; // type:func +cleararena = 0x80000460; // type:func +bootproc = 0x80000498; // type:func +Main_ThreadEntry = 0x800005A0; // type:func +Idle_ThreadEntry = 0x8000063C; // type:func +ViConfig_UpdateVi = 0x80000830; // type:func +ViConfig_UpdateBlack = 0x80000930; // type:func +DmaMgr_StrCmp = 0x80000980; // type:func +DmaMgr_DmaRomToRam = 0x800009EC; // type:func +DmaMgr_AudioDmaHandler = 0x80000B70; // type:func +DmaMgr_DmaFromDriveRom = 0x80000BE4; // type:func +DmaMgr_GetFileName = 0x80000C88; // type:func +DmaMgr_ProcessRequest = 0x80000C9C; // type:func +DmaMgr_ThreadEntry = 0x80000E38; // type:func +DmaMgr_RequestAsync = 0x80000EB8; // type:func +DmaMgr_RequestSync = 0x80000F80; // type:func +DmaMgr_Init = 0x80000FFC; // type:func +Yaz0_FirstDMA = 0x800010F0; // type:func +Yaz0_NextDMA = 0x80001190; // type:func +Yaz0_DecompressImpl = 0x8000127C; // type:func +Yaz0_Decompress = 0x800013E4; // type:func +Locale_Init = 0x80001430; // type:func +Locale_ResetRegion = 0x800014BC; // type:func +func_800014E8_unknown = 0x800014E8; // type:func +func_800014FC_unknown = 0x800014FC; // type:func +func_800015E8_unknown = 0x800015E8; // type:func +func_8000161C_unknown = 0x8000161C; // type:func +func_80001640_unknown = 0x80001640; // type:func +func_80001714_unknown = 0x80001714; // type:func +func_80001720_unknown = 0x80001720; // type:func +osSyncPrintfUnused = 0x80001750; // type:func +osSyncPrintf = 0x8000176C; // type:func +rmonPrintf = 0x80001788; // type:func +osDriveRomInit = 0x800017B0; // type:func +Mio0_Decompress = 0x80001990; // type:func +StackCheck_Init = 0x80001A40; // type:func +StackCheck_Cleanup = 0x80001AF8; // type:func +StackCheck_Check = 0x80001B3C; // type:func +LogUtils_CheckFloatRange = 0x80001C50; // type:func +LogUtils_HungupThread = 0x80001CE8; // type:func +LogUtils_ResetHungup = 0x80001D34; // type:func +Sleep_Cycles = 0x80001D70; // type:func +Sleep_Nsec = 0x80001DDC; // type:func +Sleep_Usec = 0x80001E2C; // type:func +Sleep_Msec = 0x80001E7C; // type:func +Sleep_Sec = 0x80001ED0; // type:func +__osPiCreateAccessQueue = 0x80001F10; // type:func +__osPiGetAccess = 0x80001F60; // type:func +__osPiRelAccess = 0x80001FA4; // type:func +osSendMesg = 0x80001FD0; // type:func +osStopThread = 0x80002120; // type:func +osViExtendVStart = 0x800021E0; // type:func +osRecvMesg = 0x800021F0; // type:func +__ull_rshift = 0x80002330; // type:func +__ull_rem = 0x8000235C; // type:func +__ull_div = 0x80002398; // type:func +__ll_lshift = 0x800023D4; // type:func +__ll_rem = 0x80002400; // type:func +__ll_div = 0x8000243C; // type:func +__ll_mul = 0x80002498; // type:func +__ull_divremi = 0x800024C8; // type:func +__ll_mod = 0x80002528; // type:func +__ll_rshift = 0x800025C4; // type:func +__osExceptionPreamble = 0x800025F0; // type:func +__osException = 0x80002600; // type:func +__osEnqueueAndYield = 0x80002C0C; // type:func +__osEnqueueThread = 0x80002D0C; // type:func +__osPopThread = 0x80002D54; // type:func +__osDispatchThread = 0x80002D64; // type:func +__osCleanupThread = 0x80002EE0; // type:func +__osDequeueThread = 0x80002EF0; // type:func +osDestroyThread = 0x80002F30; // type:func +bzero = 0x80003040; // type:func +osCreateThread = 0x800030E0; // type:func +osInitialize = 0x80003230; // type:func +createSpeedParam = 0x800034D8; // type:func +__osSetSR = 0x800035E0; // type:func +__osGetSR = 0x800035F0; // type:func +osWritebackDCache = 0x80003600; // type:func +osViGetNextFramebuffer = 0x80003680; // type:func +osCreatePiManager = 0x800036C0; // type:func +__osDevMgrMain = 0x80003840; // type:func +__osPiRawStartDma = 0x80003C50; // type:func +osVirtualToPhysical = 0x80003D20; // type:func +osViBlack = 0x80003DA0; // type:func +__osSiRawReadIo = 0x80003E10; // type:func +osGetThreadId = 0x80003E60; // type:func +osSetIntMask = 0x80003E80; // type:func +osViSetMode = 0x80003F20; // type:func +__osProbeTLB = 0x80003F90; // type:func +osGetMemSize = 0x80004050; // type:func +osSetEventMesg = 0x80004170; // type:func +osUnmapTLBAll = 0x80004230; // type:func +osEPiStartDma = 0x80004280; // type:func +osInvalICache = 0x80004360; // type:func +osCreateMesgQueue = 0x800043E0; // type:func +osInvalDCache = 0x80004410; // type:func +__osSiDeviceBusy = 0x800044C0; // type:func +osJamMesg = 0x800044F0; // type:func +osSetThreadPri = 0x80004640; // type:func +osGetThreadPri = 0x80004720; // type:func +__osEPiRawReadIo = 0x80004740; // type:func +osViSwapBuffer = 0x800048A0; // type:func +__osEPiRawStartDma = 0x800048F0; // type:func +osGetTime = 0x80004AD0; // type:func +__osTimerServicesInit = 0x80004B60; // type:func +__osTimerInterrupt = 0x80004BEC; // type:func +__osSetTimerIntr = 0x80004D64; // type:func +__osInsertTimer = 0x80004DD8; // type:func +osGetCount = 0x80004F60; // type:func +__osSetGlobalIntMask = 0x80004F70; // type:func +__osSetCompare = 0x80004FC0; // type:func +bcopy = 0x80004FD0; // type:func +__osResetGlobalIntMask = 0x800052E0; // type:func +__osDisableInt = 0x80005340; // type:func +__osRestoreInt = 0x800053B0; // type:func +__osViInit = 0x800053D0; // type:func +__osViSwapContext = 0x80005510; // type:func +osPiGetCmdQueue = 0x80005810; // type:func +osEPiReadIo = 0x80005840; // type:func +osViSetSpecialFeatures = 0x80005890; // type:func +osCartRomInit = 0x800059F0; // type:func +__osSetFpcCsr = 0x80005B50; // type:func +__osGetFpcCsr = 0x80005B60; // type:func +osEPiWriteIo = 0x80005B70; // type:func +osMapTLBRdb = 0x80005BC0; // type:func +osYieldThread = 0x80005C20; // type:func +__osGetCause = 0x80005C70; // type:func +__osEPiRawWriteIo = 0x80005C80; // type:func +osSetTimer = 0x80005DE0; // type:func +__osSiRawWriteIo = 0x80005EC0; // type:func +osCreateViManager = 0x80005F20; // type:func +viMgrMain = 0x800060A0; // type:func +__osViGetCurrentContext = 0x80006230; // type:func +osStartThread = 0x80006240; // type:func +osViSetYScale = 0x80006390; // type:func +osViSetXScale = 0x800063F0; // type:func +__osSetHWIntrRoutine = 0x80006520; // type:func +__osGetHWIntrRoutine = 0x80006590; // type:func +EnAObj_SetupAction = 0x800116E0; // type:func +EnAObj_Init = 0x800116EC; // type:func +EnAObj_Destroy = 0x80011A2C; // type:func +EnAObj_WaitFinishedTalking = 0x80011A88; // type:func +EnAObj_SetupWaitTalk = 0x80011AB8; // type:func +EnAObj_WaitTalk = 0x80011AE0; // type:func +EnAObj_SetupBlockRot = 0x80011B94; // type:func +EnAObj_BlockRot = 0x80011BE4; // type:func +EnAObj_SetupBoulderFragment = 0x80011D04; // type:func +EnAObj_BoulderFragment = 0x80011D2C; // type:func +EnAObj_SetupBlock = 0x80011E4C; // type:func +EnAObj_Block = 0x80011E8C; // type:func +EnAObj_Update = 0x80011F74; // type:func +EnAObj_Draw = 0x80012090; // type:func +EnItem00_SetupAction = 0x80012180; // type:func +EnItem00_Init = 0x8001218C; // type:func +EnItem00_Destroy = 0x800127F4; // type:func +func_8001DFC8 = 0x80012820; // type:func +func_8001E1C8 = 0x80012A20; // type:func +func_8001E304 = 0x80012B5C; // type:func +EnItem00_Collected = 0x80012E20; // type:func +EnItem00_Update = 0x80012F78; // type:func +EnItem00_Draw = 0x800135F8; // type:func +EnItem00_DrawRupee = 0x80013790; // type:func +EnItem00_DrawCollectible = 0x800138A8; // type:func +EnItem00_DrawHeartContainer = 0x800139E0; // type:func +EnItem00_DrawHeartPiece = 0x80013AD8; // type:func +func_8001F404 = 0x80013B70; // type:func +Item_DropCollectible = 0x80013CB8; // type:func +Item_DropCollectible2 = 0x80013EF0; // type:func +Item_DropCollectibleRandom = 0x800140C4; // type:func +EffectBlure_AddVertex = 0x80014570; // type:func +EffectBlure_AddSpace = 0x80014894; // type:func +EffectBlure_InitElements = 0x800148D8; // type:func +EffectBlure_Init1 = 0x80014990; // type:func +EffectBlure_Init2 = 0x80014AA0; // type:func +EffectBlure_Destroy = 0x80014BD4; // type:func +EffectBlure_Update = 0x80014BE0; // type:func +EffectBlure_UpdateFlags = 0x80015044; // type:func +EffectBlure_GetComputedValues = 0x800151B4; // type:func +EffectBlure_SetupSmooth = 0x800156C8; // type:func +EffectBlure_DrawElemNoInterpolation = 0x800156FC; // type:func +EffectBlure_DrawElemHermiteInterpolation = 0x80015BD0; // type:func +EffectBlure_DrawSmooth = 0x800165A4; // type:func +EffectBlure_SetupSimple = 0x80016874; // type:func +EffectBlure_SetupSimpleAlt = 0x800168AC; // type:func +EffectBlure_DrawSimpleVertices = 0x80016B08; // type:func +EffectBlure_DrawSimple = 0x80016FF4; // type:func +EffectBlure_Draw = 0x80017500; // type:func +EffectShieldParticle_Init = 0x800179F0; // type:func +EffectShieldParticle_Destroy = 0x80017C28; // type:func +EffectShieldParticle_Update = 0x80017CB4; // type:func +EffectShieldParticle_GetColors = 0x80017E18; // type:func +EffectShieldParticle_Draw = 0x80018B38; // type:func +EffectSpark_Init = 0x80019060; // type:func +EffectSpark_Destroy = 0x8001943C; // type:func +EffectSpark_Update = 0x80019448; // type:func +EffectSpark_Draw = 0x8001950C; // type:func +func_80026230 = 0x8001A720; // type:func +func_80026400 = 0x8001A8C8; // type:func +func_80026608 = 0x8001AAA8; // type:func +func_80026690 = 0x8001AAEC; // type:func +func_80026860 = 0x8001AC94; // type:func +func_80026A6C = 0x8001AE7C; // type:func +Effect_GetPlayState = 0x8001AEC0; // type:func +Effect_GetByIndex = 0x8001AED0; // type:func +Effect_InitStatus = 0x8001AFE0; // type:func +Effect_InitContext = 0x8001AFF4; // type:func +Effect_Add = 0x8001B09C; // type:func +Effect_DrawAll = 0x8001B21C; // type:func +Effect_UpdateAll = 0x8001B318; // type:func +Effect_Delete = 0x8001B444; // type:func +Effect_DeleteAll = 0x8001B550; // type:func +EffectSs_InitInfo = 0x8001B640; // type:func +EffectSs_ClearAll = 0x8001B724; // type:func +EffectSs_Delete = 0x8001B7E4; // type:func +EffectSs_Reset = 0x8001B844; // type:func +EffectSs_FindSlot = 0x8001B8D8; // type:func +EffectSs_Insert = 0x8001BA10; // type:func +EffectSs_Spawn = 0x8001BAA8; // type:func +EffectSs_Update = 0x8001BC50; // type:func +EffectSs_UpdateAll = 0x8001BCF0; // type:func +EffectSs_Draw = 0x8001BDAC; // type:func +EffectSs_DrawAll = 0x8001BDF0; // type:func +EffectSs_LerpInv = 0x8001BF3C; // type:func +EffectSs_LerpS16 = 0x8001BFA0; // type:func +EffectSs_LerpU8 = 0x8001BFF4; // type:func +EffectSs_DrawGEffect = 0x8001C0E0; // type:func +EffectSsDust_Spawn = 0x8001C320; // type:func +func_8002829C = 0x8001C3D4; // type:func +func_80028304 = 0x8001C43C; // type:func +func_8002836C = 0x8001C4A4; // type:func +func_800283D4 = 0x8001C50C; // type:func +func_8002843C = 0x8001C574; // type:func +func_800284A4 = 0x8001C5DC; // type:func +func_80028510 = 0x8001C648; // type:func +func_8002857C = 0x8001C6B4; // type:func +func_800285EC = 0x8001C724; // type:func +func_8002865C = 0x8001C794; // type:func +func_800286CC = 0x8001C804; // type:func +func_8002873C = 0x8001C874; // type:func +func_800287AC = 0x8001C8E4; // type:func +func_8002881C = 0x8001C954; // type:func +func_80028858 = 0x8001C990; // type:func +func_80028894 = 0x8001C9CC; // type:func +func_80028990 = 0x8001CAC8; // type:func +func_80028A54 = 0x8001CB8C; // type:func +EffectSsKiraKira_SpawnSmallYellow = 0x8001CC50; // type:func +EffectSsKiraKira_SpawnSmall = 0x8001CCAC; // type:func +EffectSsKiraKira_SpawnDispersed = 0x8001CCE8; // type:func +EffectSsKiraKira_SpawnFocused = 0x8001CE24; // type:func +EffectSsBomb_Spawn = 0x8001CEFC; // type:func +EffectSsBomb2_SpawnFade = 0x8001CF54; // type:func +EffectSsBomb2_SpawnLayered = 0x8001CFBC; // type:func +EffectSsBlast_Spawn = 0x8001D02C; // type:func +EffectSsBlast_SpawnWhiteShockwaveSetScale = 0x8001D0BC; // type:func +EffectSsBlast_SpawnShockwaveSetColor = 0x8001D110; // type:func +EffectSsBlast_SpawnWhiteShockwave = 0x8001D15C; // type:func +EffectSsGSpk_SpawnAccel = 0x8001D198; // type:func +EffectSsGSpk_SpawnNoAccel = 0x8001D228; // type:func +EffectSsGSpk_SpawnFuse = 0x8001D2BC; // type:func +EffectSsGSpk_SpawnRandColor = 0x8001D310; // type:func +EffectSsGSpk_SpawnSmall = 0x8001D414; // type:func +EffectSsDFire_Spawn = 0x8001D458; // type:func +EffectSsDFire_SpawnFixedScale = 0x8001D4D8; // type:func +EffectSsBubble_Spawn = 0x8001D51C; // type:func +EffectSsGRipple_Spawn = 0x8001D57C; // type:func +EffectSsGSplash_Spawn = 0x8001D5D4; // type:func +EffectSsGMagma_Spawn = 0x8001D668; // type:func +EffectSsGFire_Spawn = 0x8001D6A0; // type:func +EffectSsLightning_Spawn = 0x8001D6D8; // type:func +EffectSsDtBubble_SpawnColorProfile = 0x8001D750; // type:func +EffectSsDtBubble_SpawnCustomColor = 0x8001D7CC; // type:func +EffectSsHahen_Spawn = 0x8001D85C; // type:func +EffectSsHahen_SpawnBurst = 0x8001D8DC; // type:func +EffectSsStick_Spawn = 0x8001DA24; // type:func +EffectSsSibuki_Spawn = 0x8001DA78; // type:func +EffectSsSibuki_SpawnBurst = 0x8001DAE8; // type:func +EffectSsSibuki2_Spawn = 0x8001DC6C; // type:func +EffectSsGMagma2_Spawn = 0x8001DCCC; // type:func +EffectSsStone1_Spawn = 0x8001DD3C; // type:func +EffectSsHitMark_Spawn = 0x8001DD90; // type:func +EffectSsHitMark_SpawnFixedScale = 0x8001DDE8; // type:func +EffectSsHitMark_SpawnCustomScale = 0x8001DE0C; // type:func +EffectSsFhgFlash_SpawnLightBall = 0x8001DE38; // type:func +EffectSsFhgFlash_SpawnShock = 0x8001DEA4; // type:func +EffectSsKFire_Spawn = 0x8001DF08; // type:func +EffectSsSolderSrchBall_Spawn = 0x8001DF70; // type:func +EffectSsKakera_Spawn = 0x8001DFD8; // type:func +EffectSsIcePiece_Spawn = 0x8001E090; // type:func +EffectSsIcePiece_SpawnBurst = 0x8001E0F8; // type:func +EffectSsEnIce_SpawnFlyingVec3f = 0x8001E28C; // type:func +EffectSsEnIce_SpawnFlyingVec3s = 0x8001E32C; // type:func +EffectSsEnIce_Spawn = 0x8001E3F8; // type:func +EffectSsFireTail_Spawn = 0x8001E480; // type:func +EffectSsFireTail_SpawnFlame = 0x8001E518; // type:func +EffectSsFireTail_SpawnFlameOnPlayer = 0x8001E5DC; // type:func +EffectSsEnFire_SpawnVec3f = 0x8001E62C; // type:func +EffectSsEnFire_SpawnVec3s = 0x8001E6A4; // type:func +EffectSsExtra_Spawn = 0x8001E750; // type:func +EffectSsFCircle_Spawn = 0x8001E7B8; // type:func +EffectSsDeadDb_Spawn = 0x8001E814; // type:func +EffectSsDeadDd_Spawn = 0x8001E8CC; // type:func +EffectSsDeadDd_SpawnRandYellow = 0x8001E980; // type:func +EffectSsDeadDs_Spawn = 0x8001E9F0; // type:func +EffectSsDeadDs_SpawnStationary = 0x8001EA68; // type:func +EffectSsDeadSound_Spawn = 0x8001EAB8; // type:func +EffectSsDeadSound_SpawnStationary = 0x8001EB50; // type:func +EffectSsIceSmoke_Spawn = 0x8001EBA0; // type:func +FlagSet_Update = 0x8001EC00; // type:func +Overlay_LoadGameState = 0x8001F010; // type:func +Overlay_FreeGameState = 0x8001F138; // type:func +ActorShape_Init = 0x8001F260; // type:func +ActorShadow_Draw = 0x8001F284; // type:func +ActorShadow_DrawCircle = 0x8001F634; // type:func +ActorShadow_DrawWhiteCircle = 0x8001F65C; // type:func +ActorShadow_DrawHorse = 0x8001F68C; // type:func +ActorShadow_DrawFoot = 0x8001F6B4; // type:func +ActorShadow_DrawFeet = 0x8001F8C0; // type:func +Actor_SetFeetPos = 0x8001FD8C; // type:func +Actor_ProjectPos = 0x8001FDE0; // type:func +func_8002BE64 = 0x8001FE44; // type:func +func_8002BE98 = 0x8001FE7C; // type:func +Actor_SetNaviToActor = 0x8001FF44; // type:func +func_8002C0C0 = 0x800200A8; // type:func +func_8002C124 = 0x8002010C; // type:func +func_8002C7BC = 0x80020748; // type:func +Flags_GetSwitch = 0x80020ADC; // type:func +Flags_SetSwitch = 0x80020B10; // type:func +Flags_UnsetSwitch = 0x80020B50; // type:func +Flags_GetUnknown = 0x80020B94; // type:func +Flags_SetUnknown = 0x80020BC8; // type:func +Flags_UnsetUnknown = 0x80020C08; // type:func +Flags_GetTreasure = 0x80020C4C; // type:func +Flags_SetTreasure = 0x80020C64; // type:func +Flags_GetClear = 0x80020C80; // type:func +Flags_SetClear = 0x80020C98; // type:func +Flags_UnsetClear = 0x80020CB4; // type:func +Flags_GetTempClear = 0x80020CD4; // type:func +Flags_SetTempClear = 0x80020CEC; // type:func +Flags_UnsetTempClear = 0x80020D08; // type:func +Flags_GetCollectible = 0x80020D28; // type:func +Flags_SetCollectible = 0x80020D5C; // type:func +TitleCard_Init = 0x80020DA0; // type:func +TitleCard_InitBossName = 0x80020DC0; // type:func +TitleCard_InitPlaceName = 0x80020E04; // type:func +TitleCard_Update = 0x80020EA0; // type:func +TitleCard_Draw = 0x80020F5C; // type:func +TitleCard_Clear = 0x800214C0; // type:func +Actor_Kill = 0x800214F4; // type:func +Actor_SetWorldToHome = 0x80021514; // type:func +Actor_SetFocus = 0x80021544; // type:func +Actor_SetWorldRotToShape = 0x80021588; // type:func +Actor_SetShapeRotToWorld = 0x800215A8; // type:func +Actor_SetScale = 0x800215C8; // type:func +Actor_SetObjectDependency = 0x800215E4; // type:func +Actor_Init = 0x8002161C; // type:func +Actor_Destroy = 0x80021730; // type:func +Actor_UpdatePos = 0x80021764; // type:func +Actor_UpdateVelocityXZGravity = 0x800217E4; // type:func +Actor_MoveXZGravity = 0x8002185C; // type:func +Actor_UpdateVelocityXYZ = 0x80021888; // type:func +Actor_MoveXYZ = 0x800218F8; // type:func +Actor_SetProjectileSpeed = 0x80021924; // type:func +Actor_UpdatePosByAnimation = 0x80021978; // type:func +Actor_WorldYawTowardActor = 0x800219F4; // type:func +Actor_FocusYawTowardActor = 0x80021A20; // type:func +Actor_WorldYawTowardPoint = 0x80021A4C; // type:func +Actor_WorldPitchTowardActor = 0x80021A70; // type:func +Actor_FocusPitchTowardActor = 0x80021A9C; // type:func +Actor_WorldPitchTowardPoint = 0x80021AC8; // type:func +Actor_WorldDistXYZToActor = 0x80021AEC; // type:func +Actor_WorldDistXYZToPoint = 0x80021B18; // type:func +Actor_WorldDistXZToActor = 0x80021B3C; // type:func +Actor_WorldDistXZToPoint = 0x80021B68; // type:func +func_8002DBD0 = 0x80021B8C; // type:func +Actor_HeightDiff = 0x80021C2C; // type:func +Player_GetHeight = 0x80021C40; // type:func +func_8002DCE4 = 0x80021CA0; // type:func +func_8002DD6C = 0x80021D28; // type:func +func_8002DD78 = 0x80021D38; // type:func +func_8002DDA8 = 0x80021D6C; // type:func +func_8002DDE4 = 0x80021DA8; // type:func +func_8002DDF4 = 0x80021DBC; // type:func +func_8002DE04 = 0x80021DD0; // type:func +func_8002DE74 = 0x80021E40; // type:func +Actor_MountHorse = 0x80021E98; // type:func +func_8002DEEC = 0x80021EBC; // type:func +func_8002DF18 = 0x80021EE8; // type:func +Player_SetCsAction = 0x80021F08; // type:func +Player_SetCsActionWithHaltedActors = 0x80021F2C; // type:func +func_8002DF90 = 0x80021F68; // type:func +func_8002DFA4 = 0x80021F80; // type:func +Player_IsFacingActor = 0x80021FA8; // type:func +Actor_ActorBIsFacingActorA = 0x80022000; // type:func +Actor_IsFacingPlayer = 0x80022068; // type:func +Actor_ActorAIsFacingActorB = 0x800220B4; // type:func +Actor_IsFacingAndNearPlayer = 0x80022114; // type:func +Actor_ActorAIsFacingAndNearActorB = 0x80022194; // type:func +func_8002E234 = 0x80022228; // type:func +func_8002E2AC = 0x800222A0; // type:func +Actor_UpdateBgCheckInfo = 0x800224AC; // type:func +func_8002E830 = 0x8002282C; // type:func +func_8002EABC = 0x80022A08; // type:func +func_8002EB44 = 0x80022A40; // type:func +func_8002EBCC = 0x80022A78; // type:func +func_8002ED80 = 0x80022B94; // type:func +Actor_GetFocus = 0x80022CB0; // type:func +Actor_GetWorld = 0x80022CE4; // type:func +Actor_GetWorldPosShapeRot = 0x80022D18; // type:func +func_8002EFC0 = 0x80022D94; // type:func +func_8002F090 = 0x80022E64; // type:func +func_8002F0C8 = 0x80022EA0; // type:func +Actor_TalkOfferAccepted = 0x80022F70; // type:func +Actor_OfferTalkExchange = 0x80022FA0; // type:func +Actor_OfferTalkExchangeEquiCylinder = 0x80023074; // type:func +Actor_OfferTalk = 0x800230A8; // type:func +Actor_OfferTalkNearColChkInfoCylinder = 0x800230D0; // type:func +Actor_TextboxIsClosing = 0x80023110; // type:func +func_8002F368 = 0x80023144; // type:func +Actor_GetScreenPos = 0x80023154; // type:func +Actor_HasParent = 0x800231F0; // type:func +Actor_OfferGetItem = 0x80023214; // type:func +Actor_OfferGetItemNearby = 0x80023334; // type:func +Actor_OfferCarry = 0x80023360; // type:func +Actor_HasNoParent = 0x80023380; // type:func +func_8002F5C4 = 0x800233A4; // type:func +Actor_SetClosestSecretDistance = 0x800233D4; // type:func +Actor_IsMounted = 0x800233FC; // type:func +Actor_SetRideActor = 0x80023420; // type:func +Actor_NotMounted = 0x80023458; // type:func +func_8002F698 = 0x8002347C; // type:func +func_8002F6D4 = 0x800234BC; // type:func +func_8002F71C = 0x80023504; // type:func +func_8002F758 = 0x80023540; // type:func +func_8002F7A0 = 0x80023588; // type:func +Player_PlaySfx = 0x800235C4; // type:func +Actor_PlaySfx = 0x80023610; // type:func +func_8002F850 = 0x8002363C; // type:func +func_8002F8F0 = 0x800236E0; // type:func +func_8002F91C = 0x80023714; // type:func +func_8002F948 = 0x80023748; // type:func +func_8002F974 = 0x8002377C; // type:func +func_8002F994 = 0x800237A4; // type:func +func_8002F9EC = 0x800237FC; // type:func +func_8002FA60 = 0x80023874; // type:func +Actor_DrawFaroresWindPointer = 0x800239C4; // type:func +func_80030488 = 0x80024208; // type:func +Actor_DisableLens = 0x80024230; // type:func +Actor_InitContext = 0x8002425C; // type:func +Actor_UpdateAll = 0x800243B0; // type:func +Actor_FaultPrint = 0x8002484C; // type:func +Actor_Draw = 0x800248C0; // type:func +func_80030ED8 = 0x80024B80; // type:func +Actor_DrawLensOverlay = 0x80024C50; // type:func +Actor_DrawLensActors = 0x80024DC4; // type:func +func_800314B0 = 0x80024FF8; // type:func +func_800314D4 = 0x8002501C; // type:func +func_800315AC = 0x800250F4; // type:func +Actor_KillAllWithMissingObject = 0x8002530C; // type:func +Actor_FreezeAllEnemies = 0x800253A8; // type:func +func_80031B14 = 0x800253F8; // type:func +func_80031C3C = 0x80025520; // type:func +Actor_AddToCategory = 0x800255D8; // type:func +Actor_RemoveFromCategory = 0x80025620; // type:func +Actor_FreeOverlay = 0x800256EC; // type:func +Actor_Spawn = 0x80025750; // type:func +Actor_SpawnAsChild = 0x80025A30; // type:func +Actor_SpawnTransitionActors = 0x80025AC8; // type:func +Actor_SpawnEntry = 0x80025C04; // type:func +Actor_Delete = 0x80025C88; // type:func +func_80032880 = 0x80025D8C; // type:func +func_800328D4 = 0x80025DE0; // type:func +func_80032AF0 = 0x80025FFC; // type:func +Actor_Find = 0x8002614C; // type:func +Enemy_StartFinishingBlow = 0x8002618C; // type:func +FaceChange_UpdateBlinking = 0x800261C4; // type:func +FaceChange_UpdateRandomSet = 0x80026278; // type:func +BodyBreak_Alloc = 0x80026344; // type:func +BodyBreak_SetInfo = 0x8002643C; // type:func +BodyBreak_SpawnParts = 0x80026544; // type:func +Actor_SpawnFloorDustRing = 0x80026728; // type:func +func_80033480 = 0x80026948; // type:func +Actor_GetCollidedExplosive = 0x80026B08; // type:func +func_80033684 = 0x80026B4C; // type:func +Actor_ChangeCategory = 0x80026C14; // type:func +Actor_GetProjectileActor = 0x80026C54; // type:func +Actor_SetTextWithPrefix = 0x80026E14; // type:func +Actor_TestFloorInDirection = 0x80026E90; // type:func +Actor_IsTargeted = 0x80026F5C; // type:func +Actor_OtherIsTargeted = 0x80026F90; // type:func +func_80033AEC = 0x80026FC4; // type:func +func_80033C30 = 0x80027110; // type:func +Actor_RequestQuake = 0x8002725C; // type:func +Actor_RequestQuakeWithSpeed = 0x800272C4; // type:func +Actor_RequestQuakeAndRumble = 0x80027334; // type:func +Rand_ZeroFloat = 0x800273A4; // type:func +Rand_CenteredFloat = 0x800273D0; // type:func +Actor_DrawDoorLock = 0x80027408; // type:func +func_8003424C = 0x800276B0; // type:func +Actor_SetColorFilter = 0x800276D0; // type:func +func_800342EC = 0x80027754; // type:func +func_8003435C = 0x800277C8; // type:func +Npc_UpdateTalking = 0x8002783C; // type:func +Npc_TrackPointWithLimits = 0x8002792C; // type:func +Npc_GetTrackingPresetMaxPlayerYaw = 0x80027C60; // type:func +Npc_UpdateAutoTurn = 0x80027C8C; // type:func +Npc_TrackPoint = 0x80027E94; // type:func +func_80034B28 = 0x80027FAC; // type:func +func_80034B54 = 0x80027FD0; // type:func +func_80034BA0 = 0x8002800C; // type:func +func_80034CC4 = 0x80028104; // type:func +func_80034DD4 = 0x800281E8; // type:func +Animation_ChangeByInfo = 0x800282D8; // type:func +func_80034F54 = 0x80028370; // type:func +Actor_Noop = 0x80028534; // type:func +func_80035124 = 0x80028544; // type:func +Gfx_DrawDListOpa = 0x80028688; // type:func +Gfx_DrawDListXlu = 0x80028708; // type:func +func_800353E8 = 0x80028788; // type:func +Actor_FindNearby = 0x80028798; // type:func +func_800354B4 = 0x8002885C; // type:func +func_8003555C = 0x80028904; // type:func +func_800355B8 = 0x80028960; // type:func +func_800355E4 = 0x8002898C; // type:func +Actor_ApplyDamage = 0x800289D0; // type:func +Actor_SetDropFlag = 0x800289FC; // type:func +Actor_SetDropFlagJntSph = 0x80028AE8; // type:func +func_80035844 = 0x80028BF0; // type:func +func_800358DC = 0x80028C84; // type:func +func_800359B8 = 0x80028D60; // type:func +func_80035B18 = 0x80028EC4; // type:func +Flags_GetEventChkInf = 0x80028EF4; // type:func +Flags_SetEventChkInf = 0x80028F20; // type:func +Flags_GetInfTable = 0x80028F54; // type:func +Flags_SetInfTable = 0x80028F80; // type:func +func_80035BFC = 0x80028FB4; // type:func +func_80036E50 = 0x8002A208; // type:func +func_800374E0 = 0x8002A898; // type:func +func_80037C30 = 0x8002AFEC; // type:func +func_80037C5C = 0x8002B01C; // type:func +func_80037C94 = 0x8002B058; // type:func +func_80037CB8 = 0x8002B07C; // type:func +func_80037D98 = 0x8002B160; // type:func +Actor_TrackNone = 0x8002B2F8; // type:func +Actor_TrackPoint = 0x8002B394; // type:func +Actor_TrackPlayerSetFocusHeight = 0x8002B528; // type:func +Actor_TrackPlayer = 0x8002B664; // type:func +ActorOverlayTable_LogPrint = 0x8002B7A0; // type:func +ActorOverlayTable_FaultPrint = 0x8002B7A8; // type:func +ActorOverlayTable_Init = 0x8002B92C; // type:func +ActorOverlayTable_Cleanup = 0x8002B96C; // type:func +SSNode_SetValue = 0x8002B9A0; // type:func +SSList_SetNull = 0x8002B9BC; // type:func +SSNodeList_SetSSListHead = 0x8002B9CC; // type:func +DynaSSNodeList_SetSSListHead = 0x8002BA24; // type:func +DynaSSNodeList_Initialize = 0x8002BA7C; // type:func +DynaSSNodeList_Alloc = 0x8002BA90; // type:func +DynaSSNodeList_ResetCount = 0x8002BAE0; // type:func +DynaSSNodeList_GetNextNodeIdx = 0x8002BAEC; // type:func +BgCheck_Vec3sToVec3f = 0x8002BB1C; // type:func +BgCheck_Vec3fToVec3s = 0x8002BB60; // type:func +CollisionPoly_GetMinY = 0x8002BBA4; // type:func +CollisionPoly_GetNormalF = 0x8002BC50; // type:func +func_80038A28 = 0x8002BCA8; // type:func +CollisionPoly_GetPointDistanceFromPlane = 0x8002BDFC; // type:func +CollisionPoly_GetVertices = 0x8002BE64; // type:func +CollisionPoly_GetVerticesByBgId = 0x8002BF04; // type:func +CollisionPoly_CheckYIntersectApprox1 = 0x8002BF84; // type:func +CollisionPoly_CheckYIntersect = 0x8002C0B8; // type:func +CollisionPoly_CheckYIntersectApprox2 = 0x8002C164; // type:func +CollisionPoly_CheckXIntersectApprox = 0x8002C1A4; // type:func +CollisionPoly_CheckZIntersectApprox = 0x8002C248; // type:func +CollisionPoly_LineVsPoly = 0x8002C2EC; // type:func +CollisionPoly_SphVsPoly = 0x8002C5CC; // type:func +StaticLookup_AddPolyToSSList = 0x8002C69C; // type:func +StaticLookup_AddPoly = 0x8002C8BC; // type:func +BgCheck_RaycastDownStaticList = 0x8002C950; // type:func +BgCheck_RaycastDownStatic = 0x8002CB8C; // type:func +BgCheck_ComputeWallDisplacement = 0x8002CCA4; // type:func +BgCheck_SphVsStaticWall = 0x8002CD54; // type:func +BgCheck_CheckStaticCeiling = 0x8002D5E8; // type:func +BgCheck_CheckLineAgainstSSList = 0x8002D7C0; // type:func +BgCheck_CheckLineInSubdivision = 0x8002D9E4; // type:func +BgCheck_SphVsFirstStaticPolyList = 0x8002DB70; // type:func +BgCheck_SphVsFirstStaticPoly = 0x8002DD40; // type:func +BgCheck_GetNearestStaticLookup = 0x8002DE78; // type:func +BgCheck_GetStaticLookup = 0x8002DF2C; // type:func +BgCheck_GetStaticLookupIndicesFromPos = 0x8002DFF8; // type:func +BgCheck_GetSubdivisionMinBounds = 0x8002E0D8; // type:func +BgCheck_GetSubdivisionMaxBounds = 0x8002E27C; // type:func +BgCheck_GetPolySubdivisionBounds = 0x8002E448; // type:func +BgCheck_PolyIntersectsSubdivision = 0x8002E5F8; // type:func +BgCheck_InitializeStaticLookup = 0x8002ED4C; // type:func +BgCheck_IsSpotScene = 0x8002F14C; // type:func +BgCheck_TryGetCustomMemsize = 0x8002F190; // type:func +BgCheck_SetSubdivisionDimension = 0x8002F228; // type:func +BgCheck_Allocate = 0x8002F2B0; // type:func +BgCheck_GetCollisionHeader = 0x8002F694; // type:func +BgCheck_PosInStaticBoundingBox = 0x8002F6FC; // type:func +BgCheck_RaycastDownImpl = 0x8002F7B8; // type:func +BgCheck_CameraRaycastDown1 = 0x8002F988; // type:func +BgCheck_EntityRaycastDown1 = 0x8002F9E4; // type:func +BgCheck_EntityRaycastDown2 = 0x8002FA40; // type:func +BgCheck_EntityRaycastDown3 = 0x8002FA94; // type:func +BgCheck_EntityRaycastDown4 = 0x8002FAF8; // type:func +BgCheck_EntityRaycastDown5 = 0x8002FB60; // type:func +BgCheck_EntityRaycastDown6 = 0x8002FBB8; // type:func +BgCheck_EntityRaycastDown7 = 0x8002FC1C; // type:func +BgCheck_AnyRaycastDown1 = 0x8002FC84; // type:func +BgCheck_AnyRaycastDown2 = 0x8002FD38; // type:func +BgCheck_CameraRaycastDown2 = 0x8002FDF0; // type:func +BgCheck_EntityRaycastDownWalls = 0x8002FE54; // type:func +BgCheck_EntityRaycastDown9 = 0x8002FEBC; // type:func +BgCheck_CheckWallImpl = 0x8002FF20; // type:func +BgCheck_EntitySphVsWall1 = 0x8003055C; // type:func +BgCheck_EntitySphVsWall2 = 0x800305C0; // type:func +BgCheck_EntitySphVsWall3 = 0x80030624; // type:func +BgCheck_EntitySphVsWall4 = 0x8003068C; // type:func +BgCheck_CheckCeilingImpl = 0x800306F8; // type:func +BgCheck_AnyCheckCeiling = 0x80030818; // type:func +BgCheck_EntityCheckCeiling = 0x80030864; // type:func +BgCheck_CheckLineImpl = 0x800308B4; // type:func +BgCheck_GetBccFlags = 0x80030D94; // type:func +BgCheck_CameraLineTest1 = 0x80030DDC; // type:func +BgCheck_CameraLineTest2 = 0x80030E68; // type:func +BgCheck_EntityLineTest1 = 0x80030EF4; // type:func +BgCheck_EntityLineTest2 = 0x80030F80; // type:func +BgCheck_EntityLineTest3 = 0x80031010; // type:func +BgCheck_ProjectileLineTest = 0x8003109C; // type:func +BgCheck_AnyLineTest1 = 0x80031128; // type:func +BgCheck_AnyLineTest2 = 0x8003116C; // type:func +BgCheck_AnyLineTest3 = 0x800311F8; // type:func +BgCheck_SphVsFirstPolyImpl = 0x80031284; // type:func +BgCheck_SphVsFirstPoly = 0x80031348; // type:func +BgCheck_SphVsFirstWall = 0x8003138C; // type:func +SSNodeList_Initialize = 0x800313D4; // type:func +SSNodeList_Alloc = 0x800313EC; // type:func +SSNodeList_GetNextNode = 0x8003145C; // type:func +SSNodeList_GetNextNodeIdx = 0x80031498; // type:func +ScaleRotPos_Initialize = 0x800314AC; // type:func +ScaleRotPos_SetValue = 0x800314EC; // type:func +ScaleRotPos_Equals = 0x8003153C; // type:func +DynaLookup_ResetLists = 0x80031610; // type:func +DynaLookup_Reset = 0x80031650; // type:func +DynaLookup_ResetVtxStartIndex = 0x80031670; // type:func +BgActor_Initialize = 0x8003167C; // type:func +BgActor_SetActor = 0x800316DC; // type:func +BgActor_IsTransformUnchanged = 0x80031794; // type:func +DynaPoly_NullPolyList = 0x800317BC; // type:func +DynaPoly_AllocPolyList = 0x800317C8; // type:func +DynaPoly_NullVtxList = 0x80031804; // type:func +DynaPoly_AllocVtxList = 0x80031810; // type:func +DynaPoly_SetBgActorPrevTransform = 0x80031858; // type:func +DynaPoly_IsBgIdBgActor = 0x800318A4; // type:func +DynaPoly_Init = 0x800318C4; // type:func +DynaPoly_Alloc = 0x80031910; // type:func +DynaPoly_SetBgActor = 0x800319E4; // type:func +DynaPoly_GetActor = 0x80031AA4; // type:func +DynaPoly_DisableCollision = 0x80031B18; // type:func +DynaPoly_EnableCollision = 0x80031B70; // type:func +DynaPoly_DisableCeilingCollision = 0x80031BC8; // type:func +DynaPoly_EnableCeilingCollision = 0x80031C20; // type:func +DynaPoly_DeleteBgActor = 0x80031C78; // type:func +DynaPoly_InvalidateLookup = 0x80031D00; // type:func +DynaPoly_AddBgActorToLookup = 0x80031D18; // type:func +DynaPoly_UnsetAllInteractFlags = 0x80032664; // type:func +DynaPoly_UpdateContext = 0x800326FC; // type:func +DynaPoly_UpdateBgActorTransforms = 0x80032868; // type:func +BgCheck_RaycastDownDynaList = 0x800328F8; // type:func +BgCheck_RaycastDownDyna = 0x80032AE0; // type:func +BgCheck_SphVsDynaWallInBgActor = 0x80032F88; // type:func +BgCheck_SphVsDynaWall = 0x8003364C; // type:func +BgCheck_CheckDynaCeilingList = 0x80033888; // type:func +BgCheck_CheckDynaCeiling = 0x80033AE4; // type:func +BgCheck_CheckLineAgainstBgActorSSList = 0x80033C48; // type:func +BgCheck_CheckLineAgainstBgActor = 0x80033DCC; // type:func +BgCheck_CheckLineAgainstDyna = 0x80033EE8; // type:func +BgCheck_SphVsFirstDynaPolyList = 0x800340A0; // type:func +BgCheck_SphVsFirstDynaPolyInBgActor = 0x800341B8; // type:func +BgCheck_SphVsFirstDynaPoly = 0x800342F8; // type:func +CollisionHeader_SegmentedToVirtual = 0x80034450; // type:func +CollisionHeader_GetVirtual = 0x80034534; // type:func +func_800418D0 = 0x80034588; // type:func +BgCheck_ResetPolyCheckTbl = 0x80034630; // type:func +SurfaceType_GetData = 0x80034668; // type:func +SurfaceType_GetBgCamIndex = 0x800346E0; // type:func +BgCheck_GetBgCamSettingImpl = 0x80034704; // type:func +BgCheck_GetBgCamSetting = 0x8003474C; // type:func +BgCheck_GetBgCamCountImpl = 0x800347E0; // type:func +BgCheck_GetBgCamCount = 0x8003483C; // type:func +BgCheck_GetBgCamFuncDataImpl = 0x800348D0; // type:func +BgCheck_GetBgCamFuncData = 0x80034958; // type:func +SurfaceType_GetExitIndex = 0x800349EC; // type:func +SurfaceType_GetFloorType = 0x80034A14; // type:func +func_80041D70 = 0x80034A3C; // type:func +SurfaceType_GetWallType = 0x80034A64; // type:func +SurfaceType_GetWallFlags = 0x80034A8C; // type:func +SurfaceType_CheckWallFlag0 = 0x80034ABC; // type:func +SurfaceType_CheckWallFlag1 = 0x80034AF0; // type:func +SurfaceType_CheckWallFlag2 = 0x80034B24; // type:func +SurfaceType_GetFloorProperty2 = 0x80034B58; // type:func +SurfaceType_GetFloorProperty = 0x80034B80; // type:func +SurfaceType_IsSoft = 0x80034BA8; // type:func +SurfaceType_IsHorseBlocked = 0x80034BD0; // type:func +SurfaceType_GetMaterial = 0x80034BF8; // type:func +SurfaceType_GetSfxOffset = 0x80034C1C; // type:func +SurfaceType_GetFloorEffect = 0x80034C64; // type:func +SurfaceType_GetLightSetting = 0x80034C8C; // type:func +SurfaceType_GetEcho = 0x80034CB4; // type:func +SurfaceType_CanHookshot = 0x80034CDC; // type:func +SurfaceType_IsIgnoredByEntities = 0x80034D04; // type:func +SurfaceType_IsIgnoredByProjectiles = 0x80034D40; // type:func +SurfaceType_IsFloorConveyor = 0x80034D7C; // type:func +SurfaceType_GetConveyorSpeed = 0x80034DB8; // type:func +SurfaceType_GetConveyorDirection = 0x80034DE0; // type:func +func_80042108 = 0x80034E08; // type:func +WaterBox_GetSurface1 = 0x80034E3C; // type:func +WaterBox_GetSurfaceImpl = 0x80034F48; // type:func +WaterBox_GetSurface2 = 0x800350A0; // type:func +WaterBox_GetBgCamIndex = 0x8003523C; // type:func +WaterBox_GetBgCamSetting = 0x80035250; // type:func +WaterBox_GetLightIndex = 0x800352A8; // type:func +func_800425B0 = 0x800352C0; // type:func +func_80042708 = 0x80035418; // type:func +func_800427B4 = 0x800354C8; // type:func +DynaPolyActor_UpdateCarriedActorPos = 0x80035580; // type:func +DynaPolyActor_UpdateCarriedActorRotY = 0x800356BC; // type:func +func_80043334 = 0x80035750; // type:func +DynaPolyActor_TransformCarriedActor = 0x800357C0; // type:func +DynaPolyActor_Init = 0x800358A0; // type:func +DynaPolyActor_UnsetAllInteractFlags = 0x800358C4; // type:func +DynaPolyActor_SetActorOnTop = 0x800358D0; // type:func +DynaPolyActor_SetPlayerOnTop = 0x800358E4; // type:func +DynaPoly_SetPlayerOnTop = 0x800358F8; // type:func +DynaPolyActor_SetPlayerAbove = 0x80035928; // type:func +DynaPoly_SetPlayerAbove = 0x8003593C; // type:func +func_80043538 = 0x8003596C; // type:func +DynaPolyActor_IsActorOnTop = 0x80035980; // type:func +DynaPolyActor_IsPlayerOnTop = 0x800359A4; // type:func +DynaPolyActor_IsPlayerAbove = 0x800359C8; // type:func +func_800435B4 = 0x800359EC; // type:func +func_800435D8 = 0x80035A10; // type:func +Camera_InterpolateCurve = 0x80035C30; // type:func +Camera_LERPCeilF = 0x80035CDC; // type:func +Camera_LERPFloorF = 0x80035D20; // type:func +Camera_LERPCeilS = 0x80035D64; // type:func +Camera_LERPFloorS = 0x80035DF8; // type:func +Camera_LERPCeilVec3f = 0x80035E8C; // type:func +func_80043ABC = 0x80035F10; // type:func +func_80043B60 = 0x80035F50; // type:func +Camera_Vec3sToVec3f = 0x80035F80; // type:func +Camera_AddVecGeoToVec3f = 0x80035FE8; // type:func +Camera_Vec3fTranslateByUnitVector = 0x80036068; // type:func +Camera_BGCheckInfo = 0x800360D4; // type:func +Camera_BGCheck = 0x800362FC; // type:func +func_80043F94 = 0x80036358; // type:func +func_80044340 = 0x80036710; // type:func +Camera_CheckOOB = 0x8003676C; // type:func +Camera_GetFloorYNorm = 0x80036808; // type:func +Camera_GetFloorY = 0x800368EC; // type:func +Camera_GetFloorYLayer = 0x80036948; // type:func +Camera_GetBgCamSetting = 0x80036B0C; // type:func +Camera_GetBgCamFuncData = 0x80036B40; // type:func +Camera_GetBgCamIndex = 0x80036B70; // type:func +Camera_GetBgCamFuncDataUnderPlayer = 0x80036BF0; // type:func +Camera_GetWaterBoxBgCamIndex = 0x80036CA0; // type:func +Camera_GetWaterSurface = 0x80036D80; // type:func +Camera_XZAngle = 0x80036E48; // type:func +Camera_GetPitchAdjFromFloorHeightDiffs = 0x80036EB0; // type:func +Camera_CalcUpFromPitchYawRoll = 0x800371DC; // type:func +Camera_ClampLERPScale = 0x80037418; // type:func +Camera_CopyDataToRegs = 0x80037470; // type:func +Camera_UpdateInterface = 0x80037480; // type:func +Camera_BGCheckCorner = 0x8003758C; // type:func +func_80045508 = 0x800375F4; // type:func +Camera_CalcSlopeYAdj = 0x80037804; // type:func +Camera_CalcAtDefault = 0x80037898; // type:func +func_800458D4 = 0x800379B0; // type:func +func_80045B08 = 0x80037B68; // type:func +Camera_CalcAtForParallel = 0x80037CC8; // type:func +Camera_CalcAtForLockOn = 0x8003802C; // type:func +Camera_CalcAtForHorse = 0x800384E4; // type:func +Camera_LERPClampDist = 0x800386A0; // type:func +Camera_ClampDist = 0x80038758; // type:func +Camera_CalcDefaultPitch = 0x8003886C; // type:func +Camera_CalcDefaultYaw = 0x800389CC; // type:func +func_80046E20 = 0x80038B20; // type:func +Camera_Noop = 0x80039044; // type:func +Camera_Normal1 = 0x80039054; // type:func +Camera_Normal2 = 0x80039AAC; // type:func +Camera_Normal3 = 0x8003A23C; // type:func +Camera_Normal4 = 0x8003A8E4; // type:func +Camera_Normal0 = 0x8003A904; // type:func +Camera_Parallel1 = 0x8003A924; // type:func +Camera_Parallel2 = 0x8003B1B0; // type:func +Camera_Parallel3 = 0x8003B1D0; // type:func +Camera_Parallel4 = 0x8003B234; // type:func +Camera_Parallel0 = 0x8003B254; // type:func +Camera_Jump1 = 0x8003B274; // type:func +Camera_Jump2 = 0x8003B8B4; // type:func +Camera_Jump3 = 0x8003C1A0; // type:func +Camera_Jump4 = 0x8003C90C; // type:func +Camera_Jump0 = 0x8003C92C; // type:func +Camera_Battle1 = 0x8003C94C; // type:func +Camera_Battle2 = 0x8003D688; // type:func +Camera_Battle3 = 0x8003D6A8; // type:func +Camera_Battle4 = 0x8003D6C8; // type:func +Camera_Battle0 = 0x8003DA20; // type:func +Camera_KeepOn1 = 0x8003DA40; // type:func +Camera_KeepOn2 = 0x8003E790; // type:func +Camera_KeepOn3 = 0x8003E7B0; // type:func +Camera_KeepOn4 = 0x8003F204; // type:func +Camera_KeepOn0 = 0x8004001C; // type:func +Camera_Fixed1 = 0x800402BC; // type:func +Camera_Fixed2 = 0x800405A8; // type:func +Camera_Fixed3 = 0x8004095C; // type:func +Camera_Fixed4 = 0x80040B5C; // type:func +Camera_Fixed0 = 0x80040EE8; // type:func +Camera_Subj1 = 0x80040F08; // type:func +Camera_Subj2 = 0x80040F28; // type:func +Camera_Subj3 = 0x80040F48; // type:func +Camera_Subj4 = 0x8004154C; // type:func +Camera_Subj0 = 0x80041B80; // type:func +Camera_Data0 = 0x80041BA0; // type:func +Camera_Data1 = 0x80041BC0; // type:func +Camera_Data2 = 0x80041BE0; // type:func +Camera_Data3 = 0x80041C00; // type:func +Camera_Data4 = 0x80041C20; // type:func +Camera_Unique1 = 0x80041F0C; // type:func +Camera_Unique2 = 0x80042390; // type:func +Camera_Unique3 = 0x80042748; // type:func +Camera_Unique0 = 0x80042C4C; // type:func +Camera_Unique4 = 0x80043200; // type:func +Camera_Unique5 = 0x80043220; // type:func +Camera_Unique6 = 0x80043240; // type:func +Camera_Unique7 = 0x80043370; // type:func +Camera_Unique8 = 0x80043574; // type:func +Camera_Unique9 = 0x80043594; // type:func +Camera_Vec3fCopy = 0x800449F0; // type:func +Camera_RotateAroundPoint = 0x80044A10; // type:func +Camera_Demo1 = 0x80044A6C; // type:func +Camera_Demo2 = 0x80044C44; // type:func +Camera_Demo3 = 0x80044C64; // type:func +Camera_Demo4 = 0x80045750; // type:func +Camera_Demo5 = 0x80045770; // type:func +Camera_Demo6 = 0x80046148; // type:func +Camera_Demo7 = 0x800463EC; // type:func +Camera_Demo8 = 0x80046420; // type:func +Camera_Demo9 = 0x80046440; // type:func +Camera_Demo0 = 0x80046860; // type:func +Camera_Special0 = 0x80046880; // type:func +Camera_Special1 = 0x800469C8; // type:func +Camera_Special2 = 0x800469E8; // type:func +Camera_Special3 = 0x80046A08; // type:func +Camera_Special4 = 0x80046A28; // type:func +Camera_Special5 = 0x80046BCC; // type:func +Camera_Special7 = 0x80046F70; // type:func +Camera_Special6 = 0x800472BC; // type:func +Camera_Special8 = 0x8004772C; // type:func +Camera_Special9 = 0x8004774C; // type:func +Camera_Create = 0x80047E80; // type:func +Camera_Destroy = 0x80047ED0; // type:func +Camera_Init = 0x80047EF8; // type:func +func_80057FC4 = 0x80048118; // type:func +Camera_Stub80058140 = 0x8004826C; // type:func +Camera_InitDataUsingPlayer = 0x80048278; // type:func +Camera_ChangeStatus = 0x80048474; // type:func +Camera_UpdateWater = 0x80048490; // type:func +Camera_UpdateHotRoom = 0x800488AC; // type:func +Camera_UpdateDistortion = 0x800488EC; // type:func +Camera_Update = 0x80048C4C; // type:func +Camera_Finish = 0x8004947C; // type:func +Camera_SetNewModeStateFlags = 0x800495E8; // type:func +Camera_RequestModeImpl = 0x8004960C; // type:func +Camera_RequestMode = 0x80049970; // type:func +Camera_CheckValidMode = 0x8004999C; // type:func +Camera_RequestSettingImpl = 0x80049A08; // type:func +Camera_RequestSetting = 0x80049BFC; // type:func +Camera_RequestBgCam = 0x80049C28; // type:func +Camera_GetInputDir = 0x80049CFC; // type:func +Camera_GetInputDirPitch = 0x80049D20; // type:func +Camera_GetInputDirYaw = 0x80049D48; // type:func +Camera_GetCamDir = 0x80049D70; // type:func +Camera_GetCamDirPitch = 0x80049D94; // type:func +Camera_GetCamDirYaw = 0x80049DBC; // type:func +Camera_RequestQuake = 0x80049DE4; // type:func +Camera_SetViewParam = 0x80049E58; // type:func +Camera_UnsetViewFlag = 0x80049FEC; // type:func +Camera_OverwriteStateFlags = 0x8004A014; // type:func +Camera_ResetAnim = 0x8004A030; // type:func +Camera_SetCSParams = 0x8004A040; // type:func +Camera_SetStateFlag = 0x8004A0D4; // type:func +Camera_UnsetStateFlag = 0x8004A0F8; // type:func +Camera_ChangeDoorCam = 0x8004A120; // type:func +Camera_Copy = 0x8004A220; // type:func +Camera_IsDebugCamEnabled = 0x8004A368; // type:func +Camera_GetQuakeOffset = 0x8004A374; // type:func +Camera_SetCameraData = 0x8004A398; // type:func +func_8005B198 = 0x8004A3E4; // type:func +Camera_SetFinishedFlag = 0x8004A3F4; // type:func +DamageTable_Get = 0x8004A450; // type:func +DamageTable_Clear = 0x8004A47C; // type:func +Collider_InitBase = 0x8004A4B0; // type:func +Collider_DestroyBase = 0x8004A4F8; // type:func +Collider_SetBaseToActor = 0x8004A50C; // type:func +Collider_SetBaseType1 = 0x8004A54C; // type:func +Collider_SetBase = 0x8004A590; // type:func +Collider_ResetATBase = 0x8004A5D4; // type:func +Collider_ResetACBase = 0x8004A5F0; // type:func +Collider_ResetOCBase = 0x8004A60C; // type:func +Collider_InitElementDamageInfoAT = 0x8004A634; // type:func +Collider_DestroyElementDamageInfoAT = 0x8004A65C; // type:func +Collider_SetElementDamageInfoAT = 0x8004A670; // type:func +Collider_ResetATElement_Unk = 0x8004A698; // type:func +Collider_InitElementDamageInfoAC = 0x8004A6A8; // type:func +Collider_DestroyElementDamageInfoAC = 0x8004A6D8; // type:func +Collider_SetElementDamageInfoAC = 0x8004A6EC; // type:func +Collider_InitElement = 0x8004A714; // type:func +Collider_DestroyElement = 0x8004A794; // type:func +Collider_SetElement = 0x8004A7D4; // type:func +Collider_ResetATElement = 0x8004A84C; // type:func +Collider_ResetACElement = 0x8004A884; // type:func +Collider_ResetOCElement = 0x8004A8BC; // type:func +Collider_InitJntSphElementDim = 0x8004A8D4; // type:func +Collider_DestroyJntSphElementDim = 0x8004A91C; // type:func +Collider_SetJntSphElementDim = 0x8004A930; // type:func +Collider_InitJntSphElement = 0x8004A988; // type:func +Collider_DestroyJntSphElement = 0x8004A9C8; // type:func +Collider_SetJntSphElement = 0x8004AA08; // type:func +Collider_ResetJntSphElementAT = 0x8004AA58; // type:func +Collider_ResetJntSphElementAC = 0x8004AA7C; // type:func +Collider_ResetJntSphElementOC = 0x8004AAA0; // type:func +Collider_InitJntSph = 0x8004AAC4; // type:func +Collider_FreeJntSph = 0x8004AAF0; // type:func +Collider_DestroyJntSph = 0x8004AB90; // type:func +Collider_SetJntSphToActor = 0x8004AC20; // type:func +Collider_SetJntSphAllocType1 = 0x8004ACFC; // type:func +Collider_SetJntSphAlloc = 0x8004ADD8; // type:func +Collider_SetJntSph = 0x8004AEB4; // type:func +Collider_ResetJntSphAT = 0x8004AF68; // type:func +Collider_ResetJntSphAC = 0x8004AFF4; // type:func +Collider_ResetJntSphOC = 0x8004B080; // type:func +Collider_InitCylinderDim = 0x8004B10C; // type:func +Collider_DestroyCylinderDim = 0x8004B168; // type:func +Collider_SetCylinderDim = 0x8004B17C; // type:func +Collider_InitCylinder = 0x8004B1BC; // type:func +Collider_DestroyCylinder = 0x8004B20C; // type:func +Collider_SetCylinderToActor = 0x8004B25C; // type:func +Collider_SetCylinderType1 = 0x8004B2C4; // type:func +Collider_SetCylinder = 0x8004B32C; // type:func +Collider_ResetCylinderAT = 0x8004B394; // type:func +Collider_ResetCylinderAC = 0x8004B3D4; // type:func +Collider_ResetCylinderOC = 0x8004B414; // type:func +Collider_InitTrisElementDim = 0x8004B454; // type:func +Collider_DestroyTrisElementDim = 0x8004B4A0; // type:func +Collider_SetTrisElementDim = 0x8004B4B4; // type:func +Collider_InitTrisElement = 0x8004B568; // type:func +Collider_DestroyTrisElement = 0x8004B5A8; // type:func +Collider_SetTrisElement = 0x8004B5E8; // type:func +Collider_ResetTrisElementAT = 0x8004B638; // type:func +Collider_ResetTrisElementAC = 0x8004B65C; // type:func +Collider_ResetTrisElementOC = 0x8004B680; // type:func +Collider_InitTris = 0x8004B6A4; // type:func +Collider_FreeTris = 0x8004B6D0; // type:func +Collider_DestroyTris = 0x8004B788; // type:func +Collider_SetTrisAllocType1 = 0x8004B82C; // type:func +Collider_SetTrisAlloc = 0x8004B92C; // type:func +Collider_SetTris = 0x8004BA2C; // type:func +Collider_ResetTrisAT = 0x8004BAF8; // type:func +Collider_ResetTrisAC = 0x8004BB98; // type:func +Collider_ResetTrisOC = 0x8004BC38; // type:func +Collider_InitQuadDim = 0x8004BCD8; // type:func +Collider_DestroyQuadDim = 0x8004BD24; // type:func +Collider_ResetQuadACDist = 0x8004BD38; // type:func +Collider_SetQuadMidpoints = 0x8004BD54; // type:func +Collider_SetQuadDim = 0x8004BE10; // type:func +Collider_InitQuad = 0x8004BE98; // type:func +Collider_DestroyQuad = 0x8004BEE8; // type:func +Collider_SetQuadType1 = 0x8004BF38; // type:func +Collider_SetQuad = 0x8004BFA0; // type:func +Collider_ResetQuadAT = 0x8004C008; // type:func +Collider_ResetQuadAC = 0x8004C058; // type:func +Collider_ResetQuadOC = 0x8004C098; // type:func +Collider_QuadSetNearestAC = 0x8004C0D8; // type:func +Collider_InitLine = 0x8004C188; // type:func +Collider_DestroyLine = 0x8004C1E8; // type:func +Collider_SetLinePoints = 0x8004C1FC; // type:func +Collider_SetLine = 0x8004C240; // type:func +Collider_ResetLineOC = 0x8004C26C; // type:func +CollisionCheck_InitContext = 0x8004C288; // type:func +CollisionCheck_DestroyContext = 0x8004C2A8; // type:func +CollisionCheck_ClearContext = 0x8004C2B8; // type:func +CollisionCheck_EnableSAC = 0x8004C360; // type:func +CollisionCheck_DisableSAC = 0x8004C378; // type:func +CollisionCheck_SetAT = 0x8004C390; // type:func +CollisionCheck_SetAT_SAC = 0x8004C470; // type:func +CollisionCheck_SetAC = 0x8004C580; // type:func +CollisionCheck_SetAC_SAC = 0x8004C660; // type:func +CollisionCheck_SetOC = 0x8004C770; // type:func +CollisionCheck_SetOC_SAC = 0x8004C850; // type:func +CollisionCheck_SetOCLine = 0x8004C960; // type:func +CollisionCheck_IsElementNotAT = 0x8004C9EC; // type:func +CollisionCheck_IsElementNotAC = 0x8004CA10; // type:func +CollisionCheck_NoSharedFlags = 0x8004CA34; // type:func +CollisionCheck_NoBlood = 0x8004CA5C; // type:func +CollisionCheck_BlueBlood = 0x8004CA70; // type:func +CollisionCheck_GreenBlood = 0x8004CBDC; // type:func +CollisionCheck_WaterBurst = 0x8004CD48; // type:func +CollisionCheck_RedBlood = 0x8004CD84; // type:func +CollisionCheck_RedBloodUnused = 0x8004CDA8; // type:func +CollisionCheck_HitSolid = 0x8004CDCC; // type:func +CollisionCheck_SwordHitAudio = 0x8004CFDC; // type:func +CollisionCheck_HitEffects = 0x8004D0E8; // type:func +CollisionCheck_SetBounce = 0x8004D2E8; // type:func +CollisionCheck_SetATvsAC = 0x8004D308; // type:func +CollisionCheck_ATJntSphVsACJntSph = 0x8004D4B0; // type:func +CollisionCheck_ATJntSphVsACCyl = 0x8004D75C; // type:func +CollisionCheck_ATCylVsACJntSph = 0x8004D9D0; // type:func +CollisionCheck_ATJntSphVsACTris = 0x8004DC70; // type:func +CollisionCheck_ATTrisVsACJntSph = 0x8004DE90; // type:func +CollisionCheck_ATJntSphVsACQuad = 0x8004E0A4; // type:func +CollisionCheck_ATQuadVsACJntSph = 0x8004E2C4; // type:func +CollisionCheck_ATCylVsACCyl = 0x8004E528; // type:func +CollisionCheck_ATCylVsACTris = 0x8004E6FC; // type:func +CollisionCheck_ATTrisVsACCyl = 0x8004E8C0; // type:func +CollisionCheck_ATCylVsACQuad = 0x8004EA80; // type:func +CollisionCheck_ATQuadVsACCyl = 0x8004ECF4; // type:func +CollisionCheck_ATTrisVsACTris = 0x8004EFA0; // type:func +CollisionCheck_ATTrisVsACQuad = 0x8004F1F4; // type:func +CollisionCheck_ATQuadVsACTris = 0x8004F484; // type:func +CollisionCheck_ATQuadVsACQuad = 0x8004F71C; // type:func +CollisionCheck_SetJntSphHitFX = 0x8004F9AC; // type:func +CollisionCheck_SetCylHitFX = 0x8004FA8C; // type:func +CollisionCheck_SetTrisHitFX = 0x8004FB24; // type:func +CollisionCheck_SetQuadHitFX = 0x8004FC0C; // type:func +CollisionCheck_SetHitEffects = 0x8004FCA4; // type:func +CollisionCheck_AC = 0x8004FD78; // type:func +CollisionCheck_AT = 0x8004FEA0; // type:func +CollisionCheck_GetMassType = 0x8004FF70; // type:func +CollisionCheck_SetOCvsOC = 0x8004FFAC; // type:func +CollisionCheck_OC_JntSphVsJntSph = 0x800502DC; // type:func +CollisionCheck_OC_JntSphVsCyl = 0x800504AC; // type:func +CollisionCheck_OC_CylVsJntSph = 0x8005060C; // type:func +CollisionCheck_OC_CylVsCyl = 0x80050638; // type:func +CollisionCheck_SkipOC = 0x80050708; // type:func +CollisionCheck_Incompatible = 0x8005072C; // type:func +CollisionCheck_OC = 0x800507AC; // type:func +CollisionCheck_InitInfo = 0x8005093C; // type:func +CollisionCheck_ResetDamage = 0x80050984; // type:func +CollisionCheck_SetInfoNoDamageTable = 0x800509B0; // type:func +CollisionCheck_SetInfo = 0x800509D8; // type:func +CollisionCheck_SetInfo2 = 0x80050A04; // type:func +CollisionCheck_SetInfoGetDamageTable = 0x80050A38; // type:func +CollisionCheck_ApplyDamage = 0x80050A70; // type:func +CollisionCheck_ApplyDamageJntSph = 0x80050C30; // type:func +CollisionCheck_ApplyDamageCyl = 0x80050CD8; // type:func +CollisionCheck_ApplyDamageTris = 0x80050CF8; // type:func +CollisionCheck_ApplyDamageQuad = 0x80050D8C; // type:func +CollisionCheck_Damage = 0x80050DAC; // type:func +CollisionCheck_LineOC_JntSph = 0x80050E6C; // type:func +CollisionCheck_LineOC_Cyl = 0x80050F84; // type:func +CollisionCheck_LineOC = 0x80050FFC; // type:func +CollisionCheck_LineOCCheckAll = 0x80051144; // type:func +CollisionCheck_LineOCCheck = 0x80051168; // type:func +Collider_UpdateCylinder = 0x80051194; // type:func +Collider_SetCylinderPosition = 0x800511D8; // type:func +Collider_SetQuadVertices = 0x800511F8; // type:func +Collider_SetTrisVertices = 0x80051268; // type:func +Collider_SetTrisDim = 0x80051328; // type:func +Collider_UpdateSpheres = 0x80051378; // type:func +CollisionCheck_SpawnRedBlood = 0x800514FC; // type:func +CollisionCheck_SpawnWaterDroplets = 0x8005165C; // type:func +CollisionCheck_SpawnShieldParticles = 0x800517B8; // type:func +CollisionCheck_SpawnShieldParticlesMetal = 0x8005184C; // type:func +CollisionCheck_SpawnShieldParticlesMetalSfx = 0x80051898; // type:func +CollisionCheck_SpawnShieldParticlesMetal2 = 0x800518E4; // type:func +CollisionCheck_SpawnShieldParticlesWood = 0x80051904; // type:func +CollisionCheck_CylSideVsLineSeg = 0x800519C4; // type:func +CollisionCheck_GetSwordDamage = 0x800520C8; // type:func +SaveContext_Init = 0x80052130; // type:func +Regs_Init = 0x800521E0; // type:func +DebugCamera_ScreenText = 0x80052270; // type:func +DebugCamera_ScreenTextColored = 0x80052284; // type:func +DebugCamera_DrawScreenText = 0x80052340; // type:func +Debug_DrawText = 0x80052424; // type:func +DebugDisplay_Init = 0x800524F0; // type:func +DebugDisplay_AddObject = 0x80052500; // type:func +DebugDisplay_DrawObjects = 0x800525DC; // type:func +DebugDisplay_DrawSpriteI8 = 0x8005266C; // type:func +DebugDisplay_DrawPolygon = 0x8005284C; // type:func +Cutscene_InitContext = 0x800529A0; // type:func +Cutscene_StartManual = 0x800529B8; // type:func +Cutscene_StopManual = 0x800529D0; // type:func +Cutscene_UpdateManual = 0x800529F4; // type:func +Cutscene_UpdateScripted = 0x80052A40; // type:func +CutsceneHandler_DoNothing = 0x80052AF4; // type:func +Cutscene_StepTimer = 0x80052B04; // type:func +CutsceneHandler_StartManual = 0x80052B3C; // type:func +CutsceneHandler_StartScript = 0x80052B9C; // type:func +CutsceneCmd_Misc = 0x80052C08; // type:func +CutsceneCmd_SetLightSetting = 0x800533A4; // type:func +CutsceneCmd_StartSequence = 0x800533E4; // type:func +CutsceneCmd_StopSequence = 0x80053420; // type:func +CutsceneCmd_FadeOutSequence = 0x8005345C; // type:func +CutsceneCmd_RumbleController = 0x800534DC; // type:func +CutsceneCmd_SetTime = 0x80053520; // type:func +CutsceneCmd_Destination = 0x800535C4; // type:func +CutsceneCmd_Transition = 0x800552E0; // type:func +CutsceneCmd_UpdateCamEyeSpline = 0x80055CC0; // type:func +CutsceneCmd_UpdateCamAtSpline = 0x80055E14; // type:func +CutsceneCmd_SetCamEye = 0x80055F70; // type:func +CutsceneCmd_SetCamAt = 0x8005614C; // type:func +CutsceneCmd_Text = 0x800562F4; // type:func +Cutscene_ProcessScript = 0x800565C8; // type:func +CutsceneHandler_RunScript = 0x80056F98; // type:func +CutsceneHandler_StopManual = 0x80056FDC; // type:func +CutsceneHandler_StopScript = 0x8005701C; // type:func +Cutscene_SetupScripted = 0x80057124; // type:func +func_80069048 = 0x800572A4; // type:func +func_8006907C = 0x800572DC; // type:func +Cutscene_HandleEntranceTriggers = 0x80057300; // type:func +Cutscene_HandleConditionalTriggers = 0x80057420; // type:func +Cutscene_SetScript = 0x80057628; // type:func +MemCpy = 0x800576C0; // type:func +MemSet = 0x800576F0; // type:func +GetItem_Draw = 0x80057750; // type:func +GetItem_DrawMaskOrBombchu = 0x80057794; // type:func +GetItem_DrawSoldOut = 0x8005782C; // type:func +GetItem_DrawBlueFire = 0x800578C8; // type:func +GetItem_DrawPoes = 0x80057A6C; // type:func +GetItem_DrawFairy = 0x80057C60; // type:func +GetItem_DrawMirrorShield = 0x80057E38; // type:func +GetItem_DrawSkullToken = 0x80057FA8; // type:func +GetItem_DrawEggOrMedallion = 0x80058110; // type:func +GetItem_DrawCompass = 0x800581C4; // type:func +GetItem_DrawPotion = 0x800582BC; // type:func +GetItem_DrawGoronSword = 0x8005847C; // type:func +GetItem_DrawDekuNuts = 0x80058584; // type:func +GetItem_DrawRecoveryHeart = 0x80058698; // type:func +GetItem_DrawFish = 0x800587B0; // type:func +GetItem_DrawOpa0 = 0x800588B8; // type:func +GetItem_DrawOpa0Xlu1 = 0x80058950; // type:func +GetItem_DrawXlu01 = 0x80058A4C; // type:func +GetItem_DrawOpa10Xlu2 = 0x80058B00; // type:func +GetItem_DrawMagicArrow = 0x80058C14; // type:func +GetItem_DrawMagicSpell = 0x80058D28; // type:func +GetItem_DrawOpa1023 = 0x80058E78; // type:func +GetItem_DrawOpa10Xlu32 = 0x80058F5C; // type:func +GetItem_DrawSmallRupee = 0x80059088; // type:func +GetItem_DrawScale = 0x800591C4; // type:func +GetItem_DrawBulletBag = 0x80059324; // type:func +GetItem_DrawWallet = 0x80059468; // type:func +SfxSource_InitAll = 0x800595B0; // type:func +SfxSource_UpdateAll = 0x800595E0; // type:func +SfxSource_PlaySfxAtFixedWorldPos = 0x80059688; // type:func +QuestHint_CheckCondition = 0x80059770; // type:func +QuestHint_CheckConditionChain = 0x800599EC; // type:func +QuestHint_CheckRandomCondition = 0x80059A80; // type:func +QuestHint_GetTextIdFromScript = 0x80059C60; // type:func +QuestHint_GetSariaTextId = 0x80059DA4; // type:func +QuestHint_GetNaviTextId = 0x80059E0C; // type:func +MaskReaction_GetTextId = 0x80059E50; // type:func +CutsceneFlags_UnsetAll = 0x80059EA0; // type:func +CutsceneFlags_Set = 0x80059ED0; // type:func +CutsceneFlags_Unset = 0x80059F3C; // type:func +CutsceneFlags_Get = 0x80059FAC; // type:func +Curve_CubicHermiteSpline = 0x8005A020; // type:func +Curve_Interpolate = 0x8005A0B8; // type:func +SkelCurve_Clear = 0x8005A260; // type:func +SkelCurve_Init = 0x8005A290; // type:func +SkelCurve_Destroy = 0x8005A340; // type:func +SkelCurve_SetAnim = 0x8005A370; // type:func +SkelCurve_Update = 0x8005A3A8; // type:func +SkelCurve_DrawLimb = 0x8005A698; // type:func +SkelCurve_Draw = 0x8005A9FC; // type:func +func_8006CFC0 = 0x8005AA50; // type:func +func_8006D074 = 0x8005AB04; // type:func +func_8006D0AC = 0x8005AB40; // type:func +func_8006D0EC = 0x8005AB80; // type:func +func_8006D684 = 0x8005B018; // type:func +func_8006DC68 = 0x8005B58C; // type:func +func_8006DD9C = 0x8005B69C; // type:func +Jpeg_ScheduleDecoderTask = 0x8005B730; // type:func +Jpeg_CopyToZbuffer = 0x8005B86C; // type:func +Jpeg_GetUnalignedU16 = 0x8005B9A4; // type:func +Jpeg_ParseMarkers = 0x8005B9F0; // type:func +Jpeg_Decode = 0x8005BBBC; // type:func +KaleidoSetup_Update = 0x8005BEF0; // type:func +KaleidoSetup_Init = 0x8005C15C; // type:func +KaleidoSetup_Destroy = 0x8005C2D4; // type:func +Font_LoadKanji = 0x8005C320; // type:func +Font_LoadChar = 0x8005C374; // type:func +Font_LoadMessageBoxIcon = 0x8005C3C4; // type:func +Font_LoadOrderedFont = 0x8005C408; // type:func +Environment_ZBufValToFixedPoint = 0x8005C530; // type:func +Environment_GetPixelDepth = 0x8005C568; // type:func +Environment_GraphCallback = 0x8005C594; // type:func +Environment_Init = 0x8005C5D8; // type:func +Environment_SmoothStepToU8 = 0x8005CAA8; // type:func +Environment_SmoothStepToS8 = 0x8005CBE0; // type:func +Environment_LerpWeight = 0x8005CD20; // type:func +Environment_LerpWeightAccelDecel = 0x8005CDA4; // type:func +Environment_UpdateStorm = 0x8005CF64; // type:func +Environment_UpdateSkybox = 0x8005D058; // type:func +Environment_EnableUnderwaterLights = 0x8005D944; // type:func +Environment_DisableUnderwaterLights = 0x8005D9BC; // type:func +Environment_Update = 0x8005DA34; // type:func +Environment_DrawSunAndMoon = 0x8005F890; // type:func +Environment_DrawSunLensFlare = 0x800600D4; // type:func +Environment_DrawLensFlare = 0x800601A8; // type:func +Environment_RandCentered = 0x80060DEC; // type:func +Environment_DrawRain = 0x80060E14; // type:func +Environment_ChangeLightSetting = 0x800613B0; // type:func +Environment_DrawSkyboxFilters = 0x80061434; // type:func +Environment_DrawLightningFlash = 0x80061654; // type:func +Environment_UpdateLightningStrike = 0x800616EC; // type:func +Environment_AddLightningBolts = 0x800619F4; // type:func +Environment_DrawLightning = 0x80061A5C; // type:func +Environment_PlaySceneSequence = 0x80061EA4; // type:func +Environment_PlayTimeBasedSequence = 0x80062094; // type:func +Environment_DrawCustomLensFlare = 0x800623AC; // type:func +Environment_InitGameOverLights = 0x80062458; // type:func +Environment_FadeInGameOverLights = 0x80062640; // type:func +Environment_FadeOutGameOverLights = 0x800628F4; // type:func +Environment_UpdateRain = 0x80062C10; // type:func +Environment_FillScreen = 0x80062C78; // type:func +Environment_DrawSandstorm = 0x80062E48; // type:func +Environment_AdjustLights = 0x800638A0; // type:func +Environment_GetBgsDayCount = 0x80063ACC; // type:func +Environment_ClearBgsDayCount = 0x80063ADC; // type:func +Environment_GetTotalDays = 0x80063AEC; // type:func +Environment_ForcePlaySequence = 0x80063AFC; // type:func +Environment_IsForcedSequenceDisabled = 0x80063B14; // type:func +Environment_PlayStormNatureAmbience = 0x80063B3C; // type:func +Environment_StopStormNatureAmbience = 0x80063B9C; // type:func +Environment_WarpSongLeave = 0x80063BFC; // type:func +Lib_MemSet = 0x80063CF0; // type:func +Math_CosS = 0x80063D44; // type:func +Math_SinS = 0x80063D84; // type:func +Math_ScaledStepToS = 0x80063DC4; // type:func +Math_StepToS = 0x80063E94; // type:func +Math_StepToF = 0x80063F1C; // type:func +Math_StepUntilAngleS = 0x80063FB0; // type:func +Math_StepUntilS = 0x80064018; // type:func +Math_StepToAngleS = 0x80064078; // type:func +Math_StepUntilF = 0x8006413C; // type:func +Math_AsymStepToF = 0x8006418C; // type:func +Lib_GetControlStickData = 0x80064234; // type:func +Rand_S16Offset = 0x800642B0; // type:func +Rand_S16OffsetStride = 0x80064304; // type:func +Math_Vec3f_Copy = 0x8006436C; // type:func +Math_Vec3s_ToVec3f = 0x8006438C; // type:func +Math_Vec3f_Sum = 0x800643D0; // type:func +Math_Vec3f_Diff = 0x80064408; // type:func +Math_Vec3s_DiffToVec3f = 0x80064440; // type:func +Math_Vec3f_Scale = 0x8006449C; // type:func +Math_Vec3f_DistXYZ = 0x800644D8; // type:func +Math_Vec3f_DistXYZAndStoreDiff = 0x8006451C; // type:func +Math_Vec3f_DistXZ = 0x80064578; // type:func +Math_Vec3f_DiffY = 0x800645AC; // type:func +Math_Vec3f_Yaw = 0x800645C0; // type:func +Math_Vec3f_Pitch = 0x800645F4; // type:func +Actor_ProcessInitChain = 0x8006463C; // type:func +IChain_Apply_u8 = 0x800646B4; // type:func +IChain_Apply_s8 = 0x800646D0; // type:func +IChain_Apply_u16 = 0x800646EC; // type:func +IChain_Apply_s16 = 0x80064708; // type:func +IChain_Apply_u32 = 0x80064724; // type:func +IChain_Apply_s32 = 0x80064740; // type:func +IChain_Apply_f32 = 0x8006475C; // type:func +IChain_Apply_f32div1000 = 0x80064780; // type:func +IChain_Apply_Vec3f = 0x800647B0; // type:func +IChain_Apply_Vec3fdiv1000 = 0x800647DC; // type:func +IChain_Apply_Vec3s = 0x80064814; // type:func +Math_SmoothStepToF = 0x80064838; // type:func +Math_ApproachF = 0x80064940; // type:func +Math_ApproachZeroF = 0x800649B0; // type:func +Math_SmoothStepToDegF = 0x80064A04; // type:func +Math_SmoothStepToS = 0x80064BC8; // type:func +Math_ApproachS = 0x80064CE4; // type:func +Color_RGBA8_Copy = 0x80064D88; // type:func +Sfx_PlaySfxCentered = 0x80064DB0; // type:func +Sfx_PlaySfxCentered2 = 0x80064DF8; // type:func +Sfx_PlaySfxAtPos = 0x80064E40; // type:func +Health_InitMeter = 0x80064E90; // type:func +Health_UpdateMeter = 0x80064F6C; // type:func +func_80078E18 = 0x80065350; // type:func +func_80078E34 = 0x80065370; // type:func +func_80078E84 = 0x800653C0; // type:func +Health_DrawMeter = 0x80065458; // type:func +Health_UpdateBeatingHeart = 0x800660D4; // type:func +Health_IsCritical = 0x800661C0; // type:func +Lights_PointSetInfo = 0x80066230; // type:func +Lights_PointNoGlowSetInfo = 0x8006628C; // type:func +Lights_PointGlowSetInfo = 0x800662F0; // type:func +Lights_PointSetColorAndRadius = 0x80066358; // type:func +Lights_DirectionalSetInfo = 0x8006638C; // type:func +Lights_Reset = 0x800663E4; // type:func +Lights_Draw = 0x80066420; // type:func +Lights_FindSlot = 0x80066564; // type:func +Lights_BindPoint = 0x80066594; // type:func +Lights_BindDirectional = 0x800668F0; // type:func +Lights_BindAll = 0x80066958; // type:func +Lights_FindBufSlot = 0x800669F4; // type:func +Lights_FreeNode = 0x80066A80; // type:func +LightContext_Init = 0x80066AF8; // type:func +LightContext_SetAmbientColor = 0x80066B64; // type:func +LightContext_SetFog = 0x80066B90; // type:func +LightContext_NewLights = 0x80066BCC; // type:func +LightContext_InitList = 0x80066C04; // type:func +LightContext_DestroyList = 0x80066C14; // type:func +LightContext_InsertLight = 0x80066C70; // type:func +LightContext_RemoveLight = 0x80066CD0; // type:func +Lights_NewAndDraw = 0x80066D34; // type:func +Lights_New = 0x80066E7C; // type:func +Lights_GlowCheck = 0x80066EC4; // type:func +Lights_DrawGlow = 0x800670C8; // type:func +ZeldaArena_Malloc = 0x800672D0; // type:func +ZeldaArena_MallocR = 0x800672F8; // type:func +ZeldaArena_Realloc = 0x80067320; // type:func +ZeldaArena_Free = 0x80067350; // type:func +ZeldaArena_Calloc = 0x80067378; // type:func +ZeldaArena_GetSizes = 0x800673D0; // type:func +ZeldaArena_Check = 0x80067408; // type:func +ZeldaArena_Init = 0x8006742C; // type:func +ZeldaArena_Cleanup = 0x8006745C; // type:func +ZeldaArena_IsInitialized = 0x80067480; // type:func +MapMark_Init = 0x800674B0; // type:func +MapMark_ClearPointers = 0x80067580; // type:func +MapMark_DrawForDungeon = 0x800675D4; // type:func +MapMark_Draw = 0x80067AB0; // type:func +PreNmiBuff_Init = 0x80067B00; // type:func +PreNmiBuff_SetReset = 0x80067B78; // type:func +PreNmiBuff_IsResetting = 0x80067BAC; // type:func +Sched_FlushTaskQueue = 0x80067BC0; // type:func +OLib_Vec3fDist = 0x80067C40; // type:func +OLib_Vec3fDistOutDiff = 0x80067C84; // type:func +OLib_Vec3fDistXZ = 0x80067CE0; // type:func +OLib_ClampMinDist = 0x80067D14; // type:func +OLib_ClampMaxDist = 0x80067D64; // type:func +OLib_Vec3fDistNormalize = 0x80067DB4; // type:func +OLib_VecSphToVec3f = 0x80067E64; // type:func +OLib_VecGeoToVec3f = 0x80067F10; // type:func +OLib_Vec3fToVecSph = 0x80067F54; // type:func +OLib_Vec3fToVecGeo = 0x800680A8; // type:func +OLib_Vec3fDiffToVecSph = 0x800680F0; // type:func +OLib_Vec3fDiffToVecGeo = 0x80068144; // type:func +OLib_Vec3fDiffRad = 0x80068198; // type:func +OLib_Vec3fDiffDegF = 0x80068228; // type:func +OLib_Vec3fDiffBinAng = 0x80068290; // type:func +OnePointCutscene_AddVecGeoToVec3f = 0x80068330; // type:func +OnePointCutscene_Vec3fYaw = 0x800683B0; // type:func +OnePointCutscene_Vec3sToVec3f = 0x80068418; // type:func +OnePointCutscene_BgCheckLineTest = 0x8006845C; // type:func +OnePointCutscene_RaycastDown = 0x800684AC; // type:func +OnePointCutscene_SetCsCamPoints = 0x800684D4; // type:func +OnePointCutscene_SetInfo = 0x80068508; // type:func +OnePointCutscene_SetAsChild = 0x8006BC44; // type:func +OnePointCutscene_RemoveCamera = 0x8006BC8C; // type:func +OnePointCutscene_Init = 0x8006BD60; // type:func +OnePointCutscene_EndCutscene = 0x8006C018; // type:func +OnePointCutscene_Attention = 0x8006C074; // type:func +OnePointCutscene_AttentionSetSfx = 0x8006C1E0; // type:func +OnePointCutscene_EnableAttention = 0x8006C234; // type:func +OnePointCutscene_DisableAttention = 0x8006C244; // type:func +OnePointCutscene_CheckForCategory = 0x8006C258; // type:func +OnePointCutscene_Noop = 0x8006C2B8; // type:func +Map_SavePlayerInitialInfo = 0x8006C2D0; // type:func +Map_SetPaletteData = 0x8006C330; // type:func +Map_SetFloorPalettesData = 0x8006C3AC; // type:func +Map_InitData = 0x8006C564; // type:func +Map_InitRoomData = 0x8006C850; // type:func +Map_Destroy = 0x8006C92C; // type:func +Map_Init = 0x8006C9A0; // type:func +Minimap_DrawCompassIcons = 0x8006CC80; // type:func +Minimap_Draw = 0x8006D0C4; // type:func +Map_GetFloorTextIndexOffset = 0x8006DBEC; // type:func +Map_Update = 0x8006DC14; // type:func +Interface_ChangeHudVisibilityMode = 0x8006DF40; // type:func +Interface_RaiseButtonAlphas = 0x8006DF74; // type:func +Interface_DimButtonAlphas = 0x8006E0AC; // type:func +Interface_UpdateHudAlphas = 0x8006E180; // type:func +func_80083108 = 0x8006E9A0; // type:func +Interface_SetSceneRestrictions = 0x8006F8BC; // type:func +Gfx_TextureIA8 = 0x8006FA04; // type:func +Gfx_TextureI8 = 0x8006FC34; // type:func +Inventory_SwapAgeEquipment = 0x8006FE64; // type:func +Interface_InitHorsebackArchery = 0x800700E8; // type:func +func_800849EC = 0x80070130; // type:func +Interface_LoadItemIcon1 = 0x800701B0; // type:func +Interface_LoadItemIcon2 = 0x80070260; // type:func +func_80084BF4 = 0x80070310; // type:func +Item_Give = 0x8007042C; // type:func +Item_CheckObtainability = 0x80071AA8; // type:func +Inventory_DeleteItem = 0x80071FE8; // type:func +Inventory_ReplaceItem = 0x80072068; // type:func +Inventory_HasEmptyBottle = 0x8007211C; // type:func +Inventory_HasSpecificBottle = 0x8007218C; // type:func +Inventory_UpdateBottleItem = 0x80072204; // type:func +Inventory_ConsumeFairy = 0x8007229C; // type:func +func_80086D5C = 0x80072374; // type:func +Interface_LoadActionLabel = 0x800723AC; // type:func +Interface_SetDoAction = 0x80072510; // type:func +Interface_SetNaviCall = 0x80072598; // type:func +Interface_LoadActionLabelB = 0x8007269C; // type:func +Health_ChangeBy = 0x80072774; // type:func +Health_GiveHearts = 0x80072858; // type:func +Rupees_ChangeBy = 0x80072884; // type:func +Inventory_ChangeAmmo = 0x800728AC; // type:func +Magic_Fill = 0x80072BB8; // type:func +Magic_Reset = 0x80072C00; // type:func +Magic_RequestChange = 0x80072C40; // type:func +Magic_Update = 0x80072EF8; // type:func +Magic_DrawMeter = 0x800737A4; // type:func +Interface_SetSubTimer = 0x80073FA0; // type:func +Interface_SetSubTimerToFinalSecond = 0x80073FF0; // type:func +Interface_SetTimer = 0x80074034; // type:func +Interface_DrawActionLabel = 0x80074084; // type:func +Interface_DrawItemButtons = 0x8007416C; // type:func +Interface_DrawItemIconTexture = 0x80074F4C; // type:func +Interface_DrawAmmoCount = 0x800750F4; // type:func +Interface_DrawActionButton = 0x80075594; // type:func +Interface_InitVertices = 0x80075778; // type:func +func_8008A8B8 = 0x80075C38; // type:func +func_8008A994 = 0x80075D18; // type:func +Interface_Draw = 0x80075D60; // type:func +Interface_Update = 0x80078904; // type:func +Path_GetByIndex = 0x80079610; // type:func +Path_OrientAndGetDistSq = 0x80079654; // type:func +Path_CopyLastPoint = 0x80079740; // type:func +FrameAdvance_Init = 0x800797E0; // type:func +FrameAdvance_Update = 0x800797F0; // type:func +Player_SetBootData = 0x80079890; // type:func +Player_InBlockingCsMode = 0x80079A1C; // type:func +Player_InCsMode = 0x80079ACC; // type:func +func_8008E9C4 = 0x80079B08; // type:func +Player_IsChildWithHylianShield = 0x80079B18; // type:func +Player_ActionToModelGroup = 0x80079B40; // type:func +Player_SetModelsForHoldingShield = 0x80079B8C; // type:func +Player_SetModels = 0x80079C78; // type:func +Player_SetModelGroup = 0x80079D50; // type:func +func_8008EC70 = 0x80079DBC; // type:func +Player_SetEquipmentData = 0x80079DF4; // type:func +Player_UpdateBottleHeld = 0x80079EE4; // type:func +func_8008EDF0 = 0x80079F38; // type:func +func_8008EE08 = 0x80079F54; // type:func +func_8008EEAC = 0x80079FF8; // type:func +func_8008EF30 = 0x8007A07C; // type:func +func_8008EF44 = 0x8007A094; // type:func +Player_IsBurningStickInRange = 0x8007A0B0; // type:func +Player_GetStrength = 0x8007A188; // type:func +Player_GetMask = 0x8007A1D4; // type:func +Player_UnsetMask = 0x8007A1E4; // type:func +Player_HasMirrorShieldEquipped = 0x8007A1F4; // type:func +Player_HasMirrorShieldSetToDraw = 0x8007A20C; // type:func +Player_ActionToMagicSpell = 0x8007A238; // type:func +Player_HoldsHookshot = 0x8007A264; // type:func +func_8008F128 = 0x8007A288; // type:func +Player_ActionToMeleeWeapon = 0x8007A2BC; // type:func +Player_GetMeleeWeaponHeld = 0x8007A2E4; // type:func +Player_HoldsTwoHandedWeapon = 0x8007A308; // type:func +Player_HoldsBrokenKnife = 0x8007A334; // type:func +Player_ActionToBottle = 0x8007A38C; // type:func +Player_GetBottleHeld = 0x8007A3B8; // type:func +Player_ActionToExplosive = 0x8007A3D8; // type:func +Player_GetExplosiveHeld = 0x8007A404; // type:func +func_8008F2BC = 0x8007A424; // type:func +Player_GetEnvironmentalHazard = 0x8007A460; // type:func +Player_DrawImpl = 0x8007A5D8; // type:func +func_8008F87C = 0x8007A984; // type:func +Player_OverrideLimbDrawGameplayCommon = 0x8007ADD0; // type:func +Player_OverrideLimbDrawGameplayDefault = 0x8007B124; // type:func +Player_OverrideLimbDrawGameplayFirstPerson = 0x8007B410; // type:func +Player_OverrideLimbDrawGameplayCrawling = 0x8007B560; // type:func +func_80090480 = 0x8007B5A4; // type:func +Player_UpdateShieldCollider = 0x8007B72C; // type:func +func_800906D4 = 0x8007B800; // type:func +Player_DrawGetItemImpl = 0x8007B910; // type:func +Player_DrawGetItem = 0x8007BAA4; // type:func +func_80090A28 = 0x8007BB1C; // type:func +Player_DrawHookshotReticle = 0x8007BBF0; // type:func +Player_PostLimbDrawGameplay = 0x8007BDC4; // type:func +Player_InitPauseDrawData = 0x8007C72C; // type:func +Player_OverrideLimbDrawPause = 0x8007C858; // type:func +Player_DrawPauseImpl = 0x8007C9FC; // type:func +Player_DrawPause = 0x8007D0E4; // type:func +func_80092320 = 0x8007D2C0; // type:func +PreNMI_Update = 0x8007D2D4; // type:func +PreNMI_Draw = 0x8007D31C; // type:func +PreNMI_Main = 0x8007D3D4; // type:func +PreNMI_Destroy = 0x8007D408; // type:func +PreNMI_Init = 0x8007D414; // type:func +Quake_AddVecGeoToVec3f = 0x8007D460; // type:func +Quake_UpdateShakeInfo = 0x8007D4E0; // type:func +Quake_CallbackType1 = 0x8007D708; // type:func +Quake_CallbackType5 = 0x8007D790; // type:func +Quake_CallbackType6 = 0x8007D804; // type:func +Quake_CallbackType3 = 0x8007D888; // type:func +Quake_CallbackType2 = 0x8007D920; // type:func +Quake_CallbackType4 = 0x8007D990; // type:func +Quake_GetFreeIndex = 0x8007DA28; // type:func +Quake_RequestImpl = 0x8007DA8C; // type:func +Quake_Remove = 0x8007DB44; // type:func +Quake_GetRequest = 0x8007DB6C; // type:func +Quake_SetValue = 0x8007DBC8; // type:func +Quake_SetSpeed = 0x8007DCF8; // type:func +Quake_SetDuration = 0x8007DD40; // type:func +Quake_GetTimeLeft = 0x8007DD90; // type:func +Quake_SetPerturbations = 0x8007DDC8; // type:func +Quake_SetOrientation = 0x8007DE30; // type:func +Quake_Init = 0x8007DE98; // type:func +Quake_Request = 0x8007DEEC; // type:func +Quake_RemoveRequest = 0x8007DF10; // type:func +Quake_Update = 0x8007DF58; // type:func +Gfx_SetFog = 0x8007E2D0; // type:func +Gfx_SetFogWithSync = 0x8007E44C; // type:func +Gfx_SetFog2 = 0x8007E5DC; // type:func +Gfx_SetupDLImpl = 0x8007E610; // type:func +Gfx_SetupDL = 0x8007E64C; // type:func +Gfx_SetupDLAtPtr = 0x8007E66C; // type:func +Gfx_SetupDL_57 = 0x8007E698; // type:func +Gfx_SetupDL_57b = 0x8007E6C0; // type:func +Gfx_SetupDL_52NoCD = 0x8007E6E8; // type:func +Gfx_SetupDL_58Opa = 0x8007E72C; // type:func +Gfx_SetupDL_57Opa = 0x8007E754; // type:func +Gfx_SetupDL_50Opa = 0x8007E77C; // type:func +Gfx_SetupDL_51Opa = 0x8007E7A4; // type:func +Gfx_SetupDL_52Xlu = 0x8007E7CC; // type:func +Gfx_SetupDL_53Opa = 0x8007E7F4; // type:func +Gfx_SetupDL_54Opa = 0x8007E81C; // type:func +Gfx_SetupDL_55Xlu = 0x8007E844; // type:func +Gfx_SetupDL_26Opa = 0x8007E86C; // type:func +Gfx_SetupDL_25Xlu2 = 0x8007E894; // type:func +func_80093C80 = 0x8007E8BC; // type:func +Gfx_SetupDL_25Opa = 0x8007E928; // type:func +Gfx_SetupDL_25Xlu = 0x8007E950; // type:func +Gfx_SetupDL_31Opa = 0x8007E978; // type:func +Gfx_SetupDL_32Opa = 0x8007E9A0; // type:func +Gfx_SetupDL_33Opa = 0x8007E9C8; // type:func +Gfx_SetupDL_64 = 0x8007E9F0; // type:func +Gfx_SetupDL_34 = 0x8007EA18; // type:func +Gfx_SetupDL_34Opa = 0x8007EA40; // type:func +Gfx_SetupDL_35Opa = 0x8007EA6C; // type:func +Gfx_SetupDL_44Xlu = 0x8007EA94; // type:func +Gfx_SetupDL_36Opa = 0x8007EABC; // type:func +Gfx_SetupDL_28 = 0x8007EAE4; // type:func +Gfx_SetupDL_28Opa = 0x8007EB0C; // type:func +Gfx_SetupDL_43Opa = 0x8007EB34; // type:func +Gfx_SetupDL_45Opa = 0x8007EB5C; // type:func +Gfx_SetupDL_46Overlay = 0x8007EB84; // type:func +Gfx_SetupDL_38Xlu = 0x8007EBAC; // type:func +Gfx_SetupDL_4Xlu = 0x8007EBD4; // type:func +Gfx_SetupDL_37Opa = 0x8007EBFC; // type:func +Gfx_SetupDL_2Opa = 0x8007EC24; // type:func +Gfx_SetupDL_39 = 0x8007EC4C; // type:func +Gfx_SetupDL_39Opa = 0x8007EC74; // type:func +Gfx_SetupDL_39Overlay = 0x8007ECA0; // type:func +Gfx_SetupDL_39Ptr = 0x8007ECCC; // type:func +Gfx_SetupDL_40Opa = 0x8007ECF8; // type:func +Gfx_SetupDL_41Opa = 0x8007ED20; // type:func +Gfx_SetupDL_47Xlu = 0x8007ED48; // type:func +Gfx_SetupDL_66 = 0x8007ED70; // type:func +Gfx_SetupDL_67 = 0x8007ED98; // type:func +Gfx_SetupDL_68NoCD = 0x8007EDC0; // type:func +Gfx_SetupDL_69NoCD = 0x8007EE04; // type:func +func_800947AC = 0x8007EE48; // type:func +Gfx_SetupDL_70 = 0x8007EE8C; // type:func +Gfx_SetupDL_20NoCD = 0x8007EEB4; // type:func +Gfx_SetupDL_42Opa = 0x8007EEF8; // type:func +Gfx_SetupDL_42Overlay = 0x8007EF20; // type:func +Gfx_SetupDL_48Opa = 0x8007EF48; // type:func +Gfx_SetupDL_49Xlu = 0x8007EF70; // type:func +Gfx_SetupDL_27Xlu = 0x8007EF98; // type:func +Gfx_SetupDL_60NoCDXlu = 0x8007EFC0; // type:func +Gfx_SetupDL_61Xlu = 0x8007F008; // type:func +Gfx_SetupDL_56Opa = 0x8007F030; // type:func +Gfx_SetupDL_56Ptr = 0x8007F058; // type:func +Gfx_SetupDL_59Opa = 0x8007F084; // type:func +Gfx_BranchTexScroll = 0x8007F0AC; // type:func +func_80094E54 = 0x8007F148; // type:func +func_80094E78 = 0x8007F16C; // type:func +Gfx_TexScroll = 0x8007F190; // type:func +Gfx_TwoTexScroll = 0x8007F214; // type:func +Gfx_TwoTexScrollEnvColor = 0x8007F334; // type:func +Gfx_EnvColor = 0x8007F494; // type:func +Gfx_SetupFrame = 0x8007F4EC; // type:func +func_80095974 = 0x8007FAEC; // type:func +func_80095AA0 = 0x8007FBD0; // type:func +Room_DrawNormal = 0x8007FBE8; // type:func +Room_DrawCullable = 0x8007FDD4; // type:func +Room_DecodeJpeg = 0x8008025C; // type:func +Room_DrawBackground2D = 0x800802E4; // type:func +Room_DrawImageSingle = 0x800805E0; // type:func +Room_GetImageMultiBgEntry = 0x80080990; // type:func +Room_DrawImageMulti = 0x80080A7C; // type:func +Room_DrawImage = 0x80080E48; // type:func +func_80096FD4 = 0x80080EB0; // type:func +func_80096FE8 = 0x80080EC8; // type:func +func_8009728C = 0x80081064; // type:func +func_800973FC = 0x800811CC; // type:func +Room_Draw = 0x80081270; // type:func +func_80097534 = 0x800812C0; // type:func +Sample_HandleStateChange = 0x80081360; // type:func +Sample_Draw = 0x80081394; // type:func +Sample_Main = 0x80081580; // type:func +Sample_Destroy = 0x800815AC; // type:func +Sample_SetupView = 0x800815B8; // type:func +Sample_LoadTitleStatic = 0x80081670; // type:func +Sample_Init = 0x800816D0; // type:func +Inventory_ChangeEquipment = 0x80081760; // type:func +Inventory_DeleteEquipment = 0x800817B8; // type:func +Inventory_ChangeUpgrade = 0x800818C4; // type:func +Object_SpawnPersistent = 0x80081920; // type:func +Object_InitContext = 0x80081A04; // type:func +Object_UpdateEntries = 0x80081B60; // type:func +Object_GetSlot = 0x80081C58; // type:func +Object_IsLoaded = 0x80081CB8; // type:func +func_800981B8 = 0x80081CE8; // type:func +func_800982FC = 0x80081D70; // type:func +Scene_ExecuteCommands = 0x80081DD0; // type:func +Scene_CommandPlayerEntryList = 0x80081E54; // type:func +Scene_CommandActorEntryList = 0x80081F30; // type:func +Scene_CommandUnused2 = 0x80081F88; // type:func +Scene_CommandCollisionHeader = 0x80081FD0; // type:func +Scene_CommandRoomList = 0x80082100; // type:func +Scene_CommandSpawnList = 0x80082158; // type:func +Scene_CommandSpecialFiles = 0x800821A0; // type:func +Scene_CommandRoomBehavior = 0x80082268; // type:func +Scene_CommandRoomShape = 0x800822C0; // type:func +Scene_CommandObjectList = 0x80082308; // type:func +Scene_CommandLightList = 0x800824BC; // type:func +Scene_CommandPathList = 0x8008256C; // type:func +Scene_CommandTransitionActorEntryList = 0x800825B4; // type:func +TransitionActor_InitContext = 0x8008260C; // type:func +Scene_CommandLightSettingsList = 0x8008261C; // type:func +Scene_CommandSkyboxSettings = 0x80082674; // type:func +Scene_CommandSkyboxDisables = 0x800826B8; // type:func +Scene_CommandTimeSettings = 0x800826E0; // type:func +Scene_CommandWindSettings = 0x800829F4; // type:func +Scene_CommandExitList = 0x80082A58; // type:func +Scene_CommandUndefined9 = 0x80082AA0; // type:func +Scene_CommandSoundSettings = 0x80082AB0; // type:func +Scene_CommandEchoSettings = 0x80082AFC; // type:func +Scene_CommandAlternateHeaderList = 0x80082B14; // type:func +Scene_CommandCutsceneData = 0x80082C10; // type:func +Scene_CommandMiscSettings = 0x80082C50; // type:func +Scene_SetTransitionForNextEntrance = 0x80082D14; // type:func +Scene_Draw = 0x80082DD0; // type:func +Scene_DrawConfigDefault = 0x80082E34; // type:func +Scene_DrawConfigDekuTree = 0x80082E74; // type:func +Scene_DrawConfigDekuTreeBoss = 0x80082FBC; // type:func +Scene_DrawConfigDodongosCavern = 0x800830A0; // type:func +Scene_DrawConfigTempleOfTime = 0x800833C8; // type:func +Scene_DrawConfigGrottos = 0x80083C2C; // type:func +Scene_DrawConfigChamberOfTheSages = 0x80083F2C; // type:func +Scene_DrawConfigGreatFairyFountain = 0x80084134; // type:func +Scene_DrawConfigGraveExitLightShining = 0x800842C4; // type:func +Scene_DrawConfigFairysFountain = 0x8008439C; // type:func +Scene_DrawConfigShadowTempleAndWell = 0x800844F8; // type:func +Scene_DrawConfigThievesHideout = 0x80084684; // type:func +Scene_DrawConfigWaterTemple = 0x8008476C; // type:func +Scene_DrawConfigWaterTempleBoss = 0x80084ED4; // type:func +Scene_DrawConfigShootingGallery = 0x80084FF0; // type:func +Scene_DrawConfigCastleCourtyardGuards = 0x800850A4; // type:func +Scene_DrawConfigOutsideGanonsCastle = 0x8008521C; // type:func +func_8009BEEC = 0x80085488; // type:func +Scene_DrawConfigGanonsTowerCollapseExterior = 0x80085648; // type:func +Scene_DrawConfigIceCavern = 0x80085918; // type:func +Scene_DrawConfigRoyalFamilysTomb = 0x80085AFC; // type:func +Scene_DrawConfigLakesideLaboratory = 0x80085D68; // type:func +Scene_DrawConfigCalmWater = 0x80085F40; // type:func +Scene_DrawConfigGerudoTrainingGround = 0x80086044; // type:func +Gfx_TwoTexScrollPrimColor = 0x80086228; // type:func +Scene_DrawConfigFishingPond = 0x80086388; // type:func +Scene_DrawConfigBombchuBowlingAlley = 0x800864B0; // type:func +Scene_DrawConfigLonLonBuildings = 0x800866A8; // type:func +Scene_DrawConfigMarketGuardHouse = 0x80086778; // type:func +Scene_DrawConfigPotionShopGranny = 0x800868AC; // type:func +Scene_DrawConfigForestTemple = 0x80086A28; // type:func +Scene_DrawConfigSpiritTemple = 0x80086C0C; // type:func +Scene_DrawConfigHyruleField = 0x80086C7C; // type:func +Scene_DrawConfigKakarikoVillage = 0x80086F2C; // type:func +Scene_DrawConfigZorasRiver = 0x80086FFC; // type:func +Scene_DrawConfigKokiriForest = 0x8008720C; // type:func +Scene_DrawConfigLakeHylia = 0x80087648; // type:func +Scene_DrawConfigZorasDomain = 0x80087804; // type:func +Scene_DrawConfigZorasFountain = 0x80087960; // type:func +Scene_DrawConfigGerudoValley = 0x80087B48; // type:func +Scene_DrawConfigLostWoods = 0x80087E8C; // type:func +Scene_DrawConfigDesertColossus = 0x80088070; // type:func +Scene_DrawConfigGerudosFortress = 0x8008817C; // type:func +Scene_DrawConfigHauntedWasteland = 0x800881EC; // type:func +Scene_DrawConfigHyruleCastle = 0x80088358; // type:func +Scene_DrawConfigDeathMountainTrail = 0x800884F0; // type:func +Scene_DrawConfigDeathMountainCrater = 0x800886AC; // type:func +Scene_DrawConfigGoronCity = 0x80088860; // type:func +Scene_DrawConfigLonLonRanch = 0x800889C8; // type:func +Scene_DrawConfigFireTemple = 0x80088A98; // type:func +Scene_DrawConfigJabuJabu = 0x80088C2C; // type:func +Scene_DrawConfigInsideGanonsCastle = 0x800890C8; // type:func +Scene_DrawConfigInsideGanonsCastleCollapse = 0x800892C0; // type:func +Scene_DrawConfigGanonsTowerCollapseInterior = 0x800892E0; // type:func +Scene_DrawConfigBesitu = 0x80089300; // type:func +SkelAnime_DrawLimbLod = 0x80089440; // type:func +SkelAnime_DrawLod = 0x8008967C; // type:func +SkelAnime_DrawFlexLimbLod = 0x8008986C; // type:func +SkelAnime_DrawFlexLod = 0x80089AF4; // type:func +SkelAnime_DrawLimbOpa = 0x80089D6C; // type:func +SkelAnime_DrawOpa = 0x80089F8C; // type:func +SkelAnime_DrawFlexLimbOpa = 0x8008A16C; // type:func +SkelAnime_DrawFlexOpa = 0x8008A3DC; // type:func +SkelAnime_GetFrameData = 0x8008A640; // type:func +Animation_GetLength = 0x8008A7A8; // type:func +Animation_GetLastFrame = 0x8008A7E4; // type:func +SkelAnime_DrawLimb = 0x8008A82C; // type:func +SkelAnime_Draw = 0x8008AA64; // type:func +SkelAnime_DrawFlexLimb = 0x8008AC58; // type:func +SkelAnime_DrawFlex = 0x8008AEDC; // type:func +SkelAnime_GetFrameDataLegacy = 0x8008B144; // type:func +Animation_GetLimbCountLegacy = 0x8008B548; // type:func +Animation_GetLengthLegacy = 0x8008B584; // type:func +Animation_GetLastFrameLegacy = 0x8008B5C0; // type:func +SkelAnime_InterpFrameTable = 0x8008B608; // type:func +AnimTaskQueue_Reset = 0x8008BA88; // type:func +AnimTaskQueue_SetNextGroup = 0x8008BA94; // type:func +AnimTaskQueue_DisableTransformTasksForGroup = 0x8008BAB4; // type:func +AnimTaskQueue_NewTask = 0x8008BADC; // type:func +AnimTaskQueue_AddLoadPlayerFrame = 0x8008BB14; // type:func +AnimTaskQueue_AddCopy = 0x8008BC10; // type:func +AnimTaskQueue_AddInterp = 0x8008BC78; // type:func +AnimTaskQueue_AddCopyUsingMap = 0x8008BCE8; // type:func +AnimTaskQueue_AddCopyUsingMapInverted = 0x8008BD58; // type:func +AnimTaskQueue_AddActorMove = 0x8008BDC8; // type:func +AnimTask_LoadPlayerFrame = 0x8008BE24; // type:func +AnimTask_Copy = 0x8008BE54; // type:func +AnimTask_Interp = 0x8008BEC4; // type:func +AnimTask_CopyUsingMap = 0x8008BF20; // type:func +AnimTask_CopyUsingMapInverted = 0x8008BFA0; // type:func +AnimTask_ActorMove = 0x8008C024; // type:func +AnimTaskQueue_Update = 0x8008C0B8; // type:func +SkelAnime_InitLink = 0x8008C158; // type:func +LinkAnimation_SetUpdateFunction = 0x8008C2BC; // type:func +LinkAnimation_Update = 0x8008C2F4; // type:func +LinkAnimation_Morph = 0x8008C318; // type:func +LinkAnimation_AnimateFrame = 0x8008C3D4; // type:func +LinkAnimation_Loop = 0x8008C4B0; // type:func +LinkAnimation_Once = 0x8008C550; // type:func +Animation_SetMorph = 0x8008C62C; // type:func +LinkAnimation_Change = 0x8008C650; // type:func +LinkAnimation_PlayOnce = 0x8008C7C8; // type:func +LinkAnimation_PlayOnceSetSpeed = 0x8008C828; // type:func +LinkAnimation_PlayLoop = 0x8008C88C; // type:func +LinkAnimation_PlayLoopSetSpeed = 0x8008C8E8; // type:func +LinkAnimation_CopyJointToMorph = 0x8008C948; // type:func +LinkAnimation_CopyMorphToJoint = 0x8008C978; // type:func +LinkAnimation_LoadToMorph = 0x8008C9A8; // type:func +LinkAnimation_LoadToJoint = 0x8008C9EC; // type:func +LinkAnimation_InterpJointMorph = 0x8008CA30; // type:func +LinkAnimation_BlendToJoint = 0x8008CA68; // type:func +LinkAnimation_BlendToMorph = 0x8008CB08; // type:func +LinkAnimation_EndLoop = 0x8008CBA8; // type:func +Animation_OnFrameImpl = 0x8008CBCC; // type:func +LinkAnimation_OnFrame = 0x8008CC84; // type:func +SkelAnime_Init = 0x8008CCD4; // type:func +SkelAnime_InitFlex = 0x8008CDD8; // type:func +SkelAnime_InitSkin = 0x8008CEE4; // type:func +SkelAnime_SetUpdate = 0x8008CFC4; // type:func +SkelAnime_Update = 0x8008D010; // type:func +SkelAnime_Morph = 0x8008D034; // type:func +SkelAnime_MorphTaper = 0x8008D0F4; // type:func +SkelAnime_AnimateFrame = 0x8008D27C; // type:func +SkelAnime_LoopFull = 0x8008D3C4; // type:func +SkelAnime_LoopPartial = 0x8008D464; // type:func +SkelAnime_Once = 0x8008D50C; // type:func +Animation_ChangeImpl = 0x8008D610; // type:func +Animation_Change = 0x8008D7CC; // type:func +Animation_PlayOnce = 0x8008D814; // type:func +Animation_MorphToPlayOnce = 0x8008D86C; // type:func +Animation_PlayOnceSetSpeed = 0x8008D8C8; // type:func +Animation_PlayLoop = 0x8008D924; // type:func +Animation_MorphToLoop = 0x8008D978; // type:func +Animation_PlayLoopSetSpeed = 0x8008D9B0; // type:func +Animation_EndLoop = 0x8008DA08; // type:func +Animation_Reverse = 0x8008DA34; // type:func +SkelAnime_CopyFrameTableTrue = 0x8008DA58; // type:func +SkelAnime_CopyFrameTableFalse = 0x8008DAC0; // type:func +SkelAnime_UpdateTranslation = 0x8008DB2C; // type:func +Animation_OnFrame = 0x8008DCF8; // type:func +SkelAnime_Free = 0x8008DD20; // type:func +SkelAnime_CopyFrameTable = 0x8008DD6C; // type:func +Skin_UpdateVertices = 0x8008DDC0; // type:func +Skin_ApplyLimbModifications = 0x8008DF8C; // type:func +Skin_DrawAnimatedLimb = 0x8008E3FC; // type:func +Skin_DrawLimb = 0x8008E4D8; // type:func +Skin_DrawImpl = 0x8008E5F8; // type:func +func_800A6330 = 0x8008E824; // type:func +func_800A6360 = 0x8008E854; // type:func +func_800A6394 = 0x8008E888; // type:func +func_800A63CC = 0x8008E8C0; // type:func +Skin_GetLimbPos = 0x8008E8FC; // type:func +Skin_InitAnimatedLimb = 0x8008E960; // type:func +Skin_Init = 0x8008EB3C; // type:func +Skin_Free = 0x8008ED0C; // type:func +func_800A698C = 0x8008EDE0; // type:func +Skin_ApplyAnimTransformations = 0x8008EF1C; // type:func +SkinMatrix_Vec3fMtxFMultXYZW = 0x8008F270; // type:func +SkinMatrix_Vec3fMtxFMultXYZ = 0x8008F358; // type:func +SkinMatrix_MtxFMtxFMult = 0x8008F408; // type:func +SkinMatrix_GetClear = 0x8008F764; // type:func +SkinMatrix_Clear = 0x8008F778; // type:func +SkinMatrix_MtxFCopy = 0x8008F7D0; // type:func +SkinMatrix_Invert = 0x8008F858; // type:func +SkinMatrix_SetScale = 0x8008FAF8; // type:func +SkinMatrix_SetRotateZYX = 0x8008FB5C; // type:func +SkinMatrix_SetRotateYXZ = 0x8008FCEC; // type:func +SkinMatrix_SetTranslate = 0x8008FE7C; // type:func +SkinMatrix_SetTranslateRotateZYXScale = 0x8008FEE0; // type:func +SkinMatrix_SetTranslateRotateYXZScale = 0x8008FF64; // type:func +SkinMatrix_SetTranslateRotateZYX = 0x8008FFE8; // type:func +SkinMatrix_Vec3fToVec3s = 0x80090048; // type:func +SkinMatrix_Vec3sToVec3f = 0x8009008C; // type:func +SkinMatrix_MtxFToMtx = 0x800900D0; // type:func +SkinMatrix_MtxFToNewMtx = 0x800902E8; // type:func +SkinMatrix_SetRotateAxis = 0x80090330; // type:func +func_800A8030 = 0x800904A0; // type:func +Sram_InitNewSave = 0x80090610; // type:func +Sram_InitDebugSave = 0x8009073C; // type:func +Sram_OpenSave = 0x800908FC; // type:func +Sram_WriteSave = 0x80090C40; // type:func +Sram_VerifyAndLoadAllSaves = 0x80090D8C; // type:func +Sram_InitSave = 0x80091258; // type:func +Sram_EraseSave = 0x800914F8; // type:func +Sram_CopySave = 0x80091610; // type:func +Sram_WriteSramHeader = 0x80091800; // type:func +Sram_InitSram = 0x80091834; // type:func +Sram_Alloc = 0x80091904; // type:func +Sram_Init = 0x80091934; // type:func +SsSram_Init = 0x80091950; // type:func +SsSram_Dma = 0x80091A28; // type:func +SsSram_ReadWrite = 0x80091AB4; // type:func +Rumble_Update = 0x80091B20; // type:func +Rumble_Override = 0x80091B5C; // type:func +Rumble_Request = 0x80091C0C; // type:func +Rumble_Init = 0x80091CDC; // type:func +Rumble_Destroy = 0x80091D18; // type:func +Rumble_Controller1HasRumblePak = 0x80091D70; // type:func +Rumble_Reset = 0x80091D88; // type:func +Rumble_ClearRequests = 0x80091D9C; // type:func +Rumble_SetUpdateEnabled = 0x80091DAC; // type:func +View_ViewportToVp = 0x80091DC0; // type:func +View_New = 0x80091E2C; // type:func +View_Free = 0x80091E78; // type:func +View_Init = 0x80091E98; // type:func +View_LookAt = 0x80091F58; // type:func +View_LookAtUnsafe = 0x80091FF4; // type:func +View_SetScale = 0x80092044; // type:func +View_GetScale = 0x80092064; // type:func +View_SetPerspective = 0x80092074; // type:func +View_GetPerspective = 0x800920A4; // type:func +View_SetOrtho = 0x800920C4; // type:func +View_GetOrtho = 0x80092100; // type:func +View_SetViewport = 0x80092120; // type:func +View_GetViewport = 0x80092154; // type:func +View_ApplyLetterbox = 0x8009217C; // type:func +View_SetDistortionOrientation = 0x800922D4; // type:func +View_SetDistortionScale = 0x800922F8; // type:func +View_SetDistortionSpeed = 0x8009231C; // type:func +View_InitDistortion = 0x80092330; // type:func +View_ClearDistortion = 0x80092394; // type:func +View_SetDistortion = 0x800923C8; // type:func +View_StepDistortion = 0x8009241C; // type:func +View_Apply = 0x800925D4; // type:func +View_ApplyPerspective = 0x80092620; // type:func +View_ApplyOrtho = 0x80092914; // type:func +View_ApplyOrthoToOverlay = 0x80092AD0; // type:func +View_ApplyPerspectiveToOverlay = 0x80092D10; // type:func +View_UpdateViewingMatrix = 0x8009305C; // type:func +View_ApplyTo = 0x800930C8; // type:func +ViMode_LogPrint = 0x800934F0; // type:func +ViMode_Configure = 0x800934FC; // type:func +ViMode_Save = 0x80093AA4; // type:func +ViMode_Load = 0x80093B84; // type:func +ViMode_Init = 0x80093C0C; // type:func +ViMode_Destroy = 0x80093C74; // type:func +ViMode_ConfigureFeatures = 0x80093C80; // type:func +ViMode_Update = 0x80093CE4; // type:func +VisCvg_Init = 0x80094060; // type:func +VisCvg_Destroy = 0x80094084; // type:func +VisCvg_Draw = 0x80094090; // type:func +VisMono_Init = 0x80094200; // type:func +VisMono_Destroy = 0x80094250; // type:func +VisMono_DesaturateTLUT = 0x80094274; // type:func +VisMono_DesaturateDList = 0x80094588; // type:func +VisMono_Draw = 0x80094804; // type:func +VisMono_DrawOld = 0x800949F0; // type:func +VisZBuf_Init = 0x80094A60; // type:func +VisZBuf_Destroy = 0x80094A94; // type:func +VisZBuf_Draw = 0x80094AA0; // type:func +Skybox_CalculateFace256 = 0x80094D50; // type:func +Skybox_CalculateFace128 = 0x80095464; // type:func +Skybox_Calculate256 = 0x8009618C; // type:func +Skybox_Calculate128 = 0x8009633C; // type:func +Skybox_Setup = 0x800963DC; // type:func +Skybox_Init = 0x80097530; // type:func +Skybox_UpdateMatrix = 0x80097640; // type:func +Skybox_Draw = 0x800976C8; // type:func +Skybox_Update = 0x80097D2C; // type:func +PlayerCall_InitFuncPtrs = 0x80097D40; // type:func +PlayerCall_Init = 0x80097DA8; // type:func +PlayerCall_Destroy = 0x80097DF0; // type:func +PlayerCall_Update = 0x80097E30; // type:func +PlayerCall_Draw = 0x80097E70; // type:func +TransitionTile_InitGraphics = 0x80097EB0; // type:func +TransitionTile_InitVtxData = 0x80098278; // type:func +TransitionTile_Destroy = 0x80098338; // type:func +TransitionTile_Init = 0x800983C4; // type:func +TransitionTile_SetVtx = 0x8009853C; // type:func +TransitionTile_Draw = 0x80098650; // type:func +TransitionTile_Suck = 0x8009877C; // type:func +TransitionTile_Update = 0x800988B0; // type:func +func_800B23F0 = 0x800988BC; // type:func +TransitionTriforce_Start = 0x800988D0; // type:func +TransitionTriforce_Init = 0x80098908; // type:func +TransitionTriforce_Destroy = 0x800989A8; // type:func +TransitionTriforce_Update = 0x800989B4; // type:func +TransitionTriforce_SetColor = 0x80098AC8; // type:func +TransitionTriforce_SetType = 0x80098AD4; // type:func +TransitionTriforce_SetState = 0x80098AE0; // type:func +TransitionTriforce_Draw = 0x80098AEC; // type:func +TransitionTriforce_IsDone = 0x80098DF0; // type:func +TransitionWipe_Start = 0x80098E80; // type:func +TransitionWipe_Init = 0x80098F38; // type:func +TransitionWipe_Destroy = 0x80098F64; // type:func +TransitionWipe_Update = 0x80098F70; // type:func +TransitionWipe_Draw = 0x80099050; // type:func +TransitionWipe_IsDone = 0x8009928C; // type:func +TransitionWipe_SetType = 0x80099298; // type:func +TransitionWipe_SetColor = 0x800992D8; // type:func +TransitionWipe_SetUnkColor = 0x800992E4; // type:func +TransitionCircle_Start = 0x800992F0; // type:func +TransitionCircle_Init = 0x800994DC; // type:func +TransitionCircle_Destroy = 0x80099508; // type:func +TransitionCircle_Update = 0x80099514; // type:func +TransitionCircle_Draw = 0x80099698; // type:func +TransitionCircle_IsDone = 0x80099934; // type:func +TransitionCircle_SetType = 0x80099940; // type:func +TransitionCircle_SetColor = 0x80099998; // type:func +TransitionCircle_SetUnkColor = 0x800999A4; // type:func +TransitionFade_Start = 0x800999B0; // type:func +TransitionFade_Init = 0x80099A0C; // type:func +TransitionFade_Destroy = 0x80099A38; // type:func +TransitionFade_Update = 0x80099A44; // type:func +TransitionFade_Draw = 0x80099BD4; // type:func +TransitionFade_IsDone = 0x80099CA0; // type:func +TransitionFade_SetColor = 0x80099CAC; // type:func +TransitionFade_SetType = 0x80099CB8; // type:func +Letterbox_SetSizeTarget = 0x80099D10; // type:func +Letterbox_GetSizeTarget = 0x80099D20; // type:func +Letterbox_SetSize = 0x80099D30; // type:func +Letterbox_GetSize = 0x80099D40; // type:func +Letterbox_Init = 0x80099D50; // type:func +Letterbox_Destroy = 0x80099D70; // type:func +Letterbox_Update = 0x80099D80; // type:func +func_800BB0A0 = 0x80099E80; // type:func +func_800BB2B4 = 0x8009A094; // type:func +KaleidoManager_LoadOvl = 0x8009A350; // type:func +KaleidoManager_ClearOvl = 0x8009A3AC; // type:func +KaleidoManager_Init = 0x8009A3FC; // type:func +KaleidoManager_Destroy = 0x8009A46C; // type:func +KaleidoManager_GetRamAddr = 0x8009A4AC; // type:func +KaleidoScopeCall_LoadPlayer = 0x8009A580; // type:func +KaleidoScopeCall_Init = 0x8009A5CC; // type:func +KaleidoScopeCall_Destroy = 0x8009A618; // type:func +KaleidoScopeCall_Update = 0x8009A638; // type:func +KaleidoScopeCall_Draw = 0x8009A7D8; // type:func +Play_RequestViewpointBgCam = 0x8009A860; // type:func +Play_SetViewpoint = 0x8009A8A0; // type:func +Play_CheckViewpoint = 0x8009A94C; // type:func +Play_SetShopBrowsingViewpoint = 0x8009A974; // type:func +Play_SetupTransition = 0x8009A9A0; // type:func +func_800BC88C = 0x8009AC4C; // type:func +Play_SetFog = 0x8009AC64; // type:func +Play_Destroy = 0x8009ACB0; // type:func +Play_Init = 0x8009AE40; // type:func +Play_Update = 0x8009B60C; // type:func +Play_DrawOverlayElements = 0x8009C700; // type:func +Play_Draw = 0x8009C798; // type:func +Play_Main = 0x8009D1B8; // type:func +Play_InCsMode = 0x8009D1F8; // type:func +func_800BFCB8 = 0x8009D22C; // type:func +Play_LoadFile = 0x8009D3D8; // type:func +func_8009D434_unknown = 0x8009D434; // type:func +Play_InitEnvironment = 0x8009D490; // type:func +Play_InitScene = 0x8009D4D8; // type:func +Play_SpawnScene = 0x8009D5DC; // type:func +Play_GetScreenPos = 0x8009D71C; // type:func +Play_CreateSubCamera = 0x8009D7E0; // type:func +Play_GetActiveCamId = 0x8009D890; // type:func +Play_ChangeCameraStatus = 0x8009D89C; // type:func +Play_ClearCamera = 0x8009D90C; // type:func +Play_ClearAllSubCameras = 0x8009D974; // type:func +Play_GetCamera = 0x8009D9E0; // type:func +Play_SetCameraAtEye = 0x8009DA18; // type:func +Play_SetCameraAtEyeUp = 0x8009DB28; // type:func +Play_SetCameraFov = 0x8009DC4C; // type:func +Play_SetCameraRoll = 0x8009DC94; // type:func +Play_CopyCamera = 0x8009DCE0; // type:func +Play_InitCameraDataUsingPlayer = 0x8009DD5C; // type:func +Play_RequestCameraSetting = 0x8009DDCC; // type:func +Play_ReturnToMainCam = 0x8009DE08; // type:func +Play_GetCameraUID = 0x8009DEE4; // type:func +func_800C09D8 = 0x8009DF18; // type:func +Play_SaveSceneFlags = 0x8009DF84; // type:func +Play_SetRespawnData = 0x8009DFCC; // type:func +Play_SetupRespawnPoint = 0x8009E03C; // type:func +Play_TriggerVoidOut = 0x8009E0A8; // type:func +Play_LoadToLastEntrance = 0x8009E100; // type:func +Play_TriggerRespawn = 0x8009E1A0; // type:func +Play_CamIsNotFixed = 0x8009E1D4; // type:func +FrameAdvance_IsEnabled = 0x8009E244; // type:func +func_800C0D34 = 0x8009E254; // type:func +func_800C0DB4 = 0x8009E2D4; // type:func +PreRender_SetValuesSave = 0x8009E390; // type:func +PreRender_Init = 0x8009E3CC; // type:func +PreRender_SetValues = 0x8009E400; // type:func +PreRender_Destroy = 0x8009E434; // type:func +PreRender_CopyImage = 0x8009E458; // type:func +PreRender_CopyImageRegionImpl = 0x8009E764; // type:func +func_800C170C = 0x8009EBFC; // type:func +func_800C1AE8 = 0x8009EFB8; // type:func +PreRender_CoverageRgba16ToI8 = 0x8009EFF4; // type:func +PreRender_SaveZBuffer = 0x8009F344; // type:func +PreRender_SaveFramebuffer = 0x8009F37C; // type:func +PreRender_FetchFbufCoverage = 0x8009F3B4; // type:func +PreRender_DrawCoverage = 0x8009F4C8; // type:func +PreRender_RestoreZBuffer = 0x8009F50C; // type:func +func_800C213C = 0x8009F530; // type:func +PreRender_RestoreFramebuffer = 0x8009F884; // type:func +PreRender_CopyImageRegion = 0x8009F8A8; // type:func +PreRender_AntiAliasFilter = 0x8009F8C8; // type:func +PreRender_DivotFilter = 0x800A0388; // type:func +PreRender_ApplyFilters = 0x800A04DC; // type:func +THGA_Init = 0x800A05B0; // type:func +THGA_Destroy = 0x800A05D0; // type:func +THGA_IsCrash = 0x800A05F0; // type:func +THGA_Reset = 0x800A0610; // type:func +THGA_GetRemaining = 0x800A0630; // type:func +THGA_GetHead = 0x800A0650; // type:func +THGA_SetHead = 0x800A0670; // type:func +THGA_GetTail = 0x800A0690; // type:func +THGA_AllocDisplayList = 0x800A06B0; // type:func +THGA_AllocGfx = 0x800A06D4; // type:func +THGA_AllocGfx2 = 0x800A06F4; // type:func +THGA_AllocTail = 0x800A0714; // type:func +THGA_AllocMtxArray = 0x800A0734; // type:func +THGA_AllocMtx = 0x800A0758; // type:func +THGA_AllocVtxArray = 0x800A0778; // type:func +THGA_AllocVtx = 0x800A079C; // type:func +THA_GetHead = 0x800A07C0; // type:func +THA_SetHead = 0x800A07CC; // type:func +THA_GetTail = 0x800A07D8; // type:func +THA_AllocHead = 0x800A07E4; // type:func +THA_AllocHeadByte = 0x800A07F8; // type:func +THA_AllocTail = 0x800A0818; // type:func +THA_AllocTailAlign16 = 0x800A08A8; // type:func +THA_AllocTailAlign = 0x800A08C8; // type:func +THA_GetRemaining = 0x800A08E4; // type:func +THA_IsCrash = 0x800A08F8; // type:func +THA_Reset = 0x800A091C; // type:func +THA_Init = 0x800A0938; // type:func +THA_Destroy = 0x800A095C; // type:func +AudioMgr_StopAllSfx = 0x800A0980; // type:func +AudioMgr_NotifyTaskDone = 0x800A09D0; // type:func +AudioMgr_HandleRetrace = 0x800A0A08; // type:func +AudioMgr_HandlePreNMI = 0x800A0B90; // type:func +AudioMgr_ThreadEntry = 0x800A0BB4; // type:func +AudioMgr_WaitForInit = 0x800A0CE4; // type:func +AudioMgr_Init = 0x800A0D10; // type:func +Setup_InitImpl = 0x800A0DF0; // type:func +Setup_Destroy = 0x800A0E2C; // type:func +Setup_Init = 0x800A0E38; // type:func +GameState_SetFBFilter = 0x800A0E60; // type:func +func_800C4344 = 0x800A0FB4; // type:func +GameState_Draw = 0x800A0FE8; // type:func +GameState_SetFrameBuffer = 0x800A10E0; // type:func +func_800C49F4 = 0x800A11FC; // type:func +GameState_ReqPadData = 0x800A1290; // type:func +GameState_Update = 0x800A12C0; // type:func +GameState_InitArena = 0x800A1378; // type:func +GameState_Realloc = 0x800A13E8; // type:func +GameState_Init = 0x800A14A8; // type:func +GameState_Destroy = 0x800A15A0; // type:func +GameState_GetInit = 0x800A1650; // type:func +GameState_GetSize = 0x800A165C; // type:func +GameState_IsRunning = 0x800A1668; // type:func +GameState_GetArenaSize = 0x800A1674; // type:func +GameAlloc_Log = 0x800A16A0; // type:func +GameAlloc_Malloc = 0x800A16C0; // type:func +GameAlloc_Free = 0x800A172C; // type:func +GameAlloc_Cleanup = 0x800A1778; // type:func +GameAlloc_Init = 0x800A17C8; // type:func +Graph_InitTHGA = 0x800A17E0; // type:func +Graph_GetNextGameState = 0x800A18F8; // type:func +Graph_Init = 0x800A19A8; // type:func +Graph_Destroy = 0x800A1A18; // type:func +Graph_TaskSet00 = 0x800A1A24; // type:func +Graph_Update = 0x800A1D68; // type:func +Graph_ThreadEntry = 0x800A2014; // type:func +Graph_Alloc = 0x800A210C; // type:func +Graph_Alloc2 = 0x800A2140; // type:func +Gfx_Open = 0x800A2180; // type:func +Gfx_Close = 0x800A218C; // type:func +Gfx_Alloc = 0x800A21A4; // type:func +ListAlloc_Init = 0x800A21E0; // type:func +ListAlloc_Alloc = 0x800A21F4; // type:func +ListAlloc_Free = 0x800A2260; // type:func +ListAlloc_FreeAll = 0x800A22E0; // type:func +Main = 0x800A2330; // type:func +PadMgr_AcquireSerialEventQueue = 0x800A26E0; // type:func +PadMgr_ReleaseSerialEventQueue = 0x800A2710; // type:func +PadMgr_LockPadData = 0x800A2738; // type:func +PadMgr_UnlockPadData = 0x800A2764; // type:func +PadMgr_UpdateRumble = 0x800A2790; // type:func +PadMgr_RumbleStop = 0x800A29E0; // type:func +PadMgr_RumbleReset = 0x800A2A84; // type:func +PadMgr_RumbleSetSingle = 0x800A2A94; // type:func +PadMgr_RumbleSet = 0x800A2AAC; // type:func +PadMgr_UpdateInputs = 0x800A2ADC; // type:func +PadMgr_HandleRetrace = 0x800A2CBC; // type:func +PadMgr_HandlePreNMI = 0x800A2E58; // type:func +PadMgr_RequestPadData = 0x800A2E7C; // type:func +PadMgr_ThreadEntry = 0x800A2FF8; // type:func +PadMgr_Init = 0x800A30F4; // type:func +Sched_SwapFrameBufferImpl = 0x800A3200; // type:func +Sched_SwapFrameBuffer = 0x800A3270; // type:func +Sched_HandlePreNMI = 0x800A32C0; // type:func +Sched_HandleNMI = 0x800A32CC; // type:func +Sched_QueueTask = 0x800A32F0; // type:func +Sched_Yield = 0x800A335C; // type:func +Sched_GfxTaskFramebufferValid = 0x800A3390; // type:func +Sched_Schedule = 0x800A3454; // type:func +Sched_SetNextFramebufferFromTask = 0x800A3588; // type:func +Sched_TaskComplete = 0x800A35D4; // type:func +Sched_RunTask = 0x800A364C; // type:func +Sched_HandleNotification = 0x800A37B0; // type:func +Sched_HandleRetrace = 0x800A38A0; // type:func +Sched_HandleRSPDone = 0x800A3978; // type:func +Sched_HandleRDPDone = 0x800A3B8C; // type:func +Sched_Notify = 0x800A3C54; // type:func +Sched_ThreadEntry = 0x800A3C78; // type:func +Sched_Init = 0x800A3DAC; // type:func +SpeedMeter_InitImpl = 0x800A3E80; // type:func +SpeedMeter_Init = 0x800A3E90; // type:func +SpeedMeter_Destroy = 0x800A3EB4; // type:func +SpeedMeter_DrawTimeEntries = 0x800A3EC0; // type:func +SpeedMeter_InitAllocEntry = 0x800A4384; // type:func +SpeedMeter_DrawAllocEntry = 0x800A43C8; // type:func +SpeedMeter_DrawAllocEntries = 0x800A461C; // type:func +SysCfb_Init = 0x800A48C0; // type:func +SysCfb_Reset = 0x800A4988; // type:func +SysCfb_GetFbPtr = 0x800A49A8; // type:func +SysCfb_GetFbEnd = 0x800A49D0; // type:func +Math_FactorialF = 0x800A49E0; // type:func +Math_Factorial = 0x800A4AE0; // type:func +Math_PowF = 0x800A4BA4; // type:func +Math_SinF = 0x800A4BCC; // type:func +Math_CosF = 0x800A4C20; // type:func +Math3D_PlaneVsLineSegClosestPoint = 0x800A4C80; // type:func +Math3D_LineVsLineClosestTwoPoints = 0x800A4DA0; // type:func +Math3D_LineClosestToPoint = 0x800A504C; // type:func +Math3D_FindPointOnPlaneIntersect = 0x800A5138; // type:func +Math3D_PlaneVsPlaneNewLine = 0x800A5198; // type:func +Math3D_PlaneVsPlaneVsLineClosestPoint = 0x800A5378; // type:func +Math3D_PointOnInfiniteLine = 0x800A53F4; // type:func +Math3D_LineSplitRatio = 0x800A5440; // type:func +Math3D_Cos = 0x800A548C; // type:func +Math3D_CosOut = 0x800A54B0; // type:func +Math3D_Vec3fReflect = 0x800A5568; // type:func +Math3D_PointInSquare2D = 0x800A563C; // type:func +Math3D_CirSquareVsTriSquare = 0x800A56A0; // type:func +Math3D_SphCubeVsTriCube = 0x800A57E0; // type:func +Math3D_Dist1DSq = 0x800A5A04; // type:func +Math3D_Dist1D = 0x800A5A1C; // type:func +Math3D_Dist2DSq = 0x800A5A40; // type:func +Math3D_Dist2D = 0x800A5A84; // type:func +Math3D_Vec3fMagnitudeSq = 0x800A5AB4; // type:func +Math3D_Vec3fMagnitude = 0x800A5AE0; // type:func +Math3D_Vec3fDistSq = 0x800A5B08; // type:func +Math3D_Vec3f_DistXYZ = 0x800A5B30; // type:func +Math3D_DistXYZ16toF = 0x800A5B50; // type:func +Math3D_Vec3fDiff_CrossZ = 0x800A5BC8; // type:func +Math3D_Vec3fDiff_CrossX = 0x800A5C08; // type:func +Math3D_Vec3fDiff_CrossY = 0x800A5C48; // type:func +Math3D_Vec3f_Cross = 0x800A5C88; // type:func +Math3D_SurfaceNorm = 0x800A5CFC; // type:func +Math3D_PointRelativeToCubeFaces = 0x800A5D64; // type:func +Math3D_PointRelativeToCubeEdges = 0x800A5E10; // type:func +Math3D_PointRelativeToCubeVertices = 0x800A5FC0; // type:func +Math3D_LineVsCube = 0x800A613C; // type:func +Math3D_LineVsCubeShort = 0x800A6BB4; // type:func +Math3D_RotateXZPlane = 0x800A6D20; // type:func +Math3D_DefPlane = 0x800A6DAC; // type:func +Math3D_Planef = 0x800A6EC0; // type:func +Math3D_Plane = 0x800A6F00; // type:func +Math3D_UDistPlaneToPos = 0x800A6F3C; // type:func +Math3D_DistPlaneToPos = 0x800A6F74; // type:func +Math3D_TriChkPointParaYImpl = 0x800A6FF8; // type:func +Math3D_TriChkPointParaYDeterminate = 0x800A7314; // type:func +Math3D_TriChkPointParaYSlopedY = 0x800A735C; // type:func +Math3D_TriChkPointParaYIntersectDist = 0x800A73AC; // type:func +Math3D_TriChkPointParaYIntersectInsideTri = 0x800A745C; // type:func +Math3D_TriChkPointParaY = 0x800A7508; // type:func +Math3D_TriChkLineSegParaYIntersect = 0x800A7584; // type:func +Math3D_TriChkPointParaYDist = 0x800A76F8; // type:func +Math3D_TriChkPointParaXImpl = 0x800A776C; // type:func +Math3D_TriChkPointParaXDeterminate = 0x800A7A88; // type:func +Math3D_TriChkPointParaXIntersect = 0x800A7AD0; // type:func +Math3D_TriChkPointParaX = 0x800A7B84; // type:func +Math3D_TriChkLineSegParaXIntersect = 0x800A7C00; // type:func +Math3D_TriChkPointParaXDist = 0x800A7D88; // type:func +Math3D_TriChkPointParaZImpl = 0x800A7DFC; // type:func +Math3D_TriChkPointParaZDeterminate = 0x800A8144; // type:func +Math3D_TriChkPointParaZIntersect = 0x800A818C; // type:func +Math3D_TriChkPointParaZ = 0x800A8240; // type:func +Math3D_TriChkLineSegParaZIntersect = 0x800A82BC; // type:func +Math3D_TriChkLineSegParaZDist = 0x800A8448; // type:func +Math3D_LineSegFindPlaneIntersect = 0x800A84BC; // type:func +Math3D_LineSegVsPlane = 0x800A8598; // type:func +Math3D_TriLineIntersect = 0x800A86A0; // type:func +Math3D_TriNorm = 0x800A8804; // type:func +Math3D_PointInSph = 0x800A88B4; // type:func +Math3D_PointDistSqToLine2D = 0x800A8904; // type:func +Math3D_LineVsSph = 0x800A8A4C; // type:func +Math3D_GetSphVsTriIntersectPoint = 0x800A8C54; // type:func +Math3D_TriVsSphIntersect = 0x800A8D94; // type:func +Math3D_PointInCyl = 0x800A91B4; // type:func +Math3D_CylVsLineSeg = 0x800A9270; // type:func +Math3D_CylTriVsIntersect = 0x800A9C38; // type:func +Math3D_CylVsTri = 0x800AA0B8; // type:func +Math3D_SphVsSph = 0x800AA0D8; // type:func +Math3D_SphVsSphOverlap = 0x800AA0F8; // type:func +Math3D_SphVsSphOverlapCenterDist = 0x800AA118; // type:func +Math3D_SphVsCylOverlap = 0x800AA1F0; // type:func +Math3D_SphVsCylOverlapCenterDist = 0x800AA210; // type:func +Math3D_CylVsCylOverlap = 0x800AA380; // type:func +Math3D_CylVsCylOverlapCenterDist = 0x800AA3A0; // type:func +Math3D_TriVsTriIntersect = 0x800AA570; // type:func +Math3D_XZInSphere = 0x800AA8F0; // type:func +Math3D_XYInSphere = 0x800AA964; // type:func +Math3D_YZInSphere = 0x800AA9D8; // type:func +Math_GetAtan2Tbl = 0x800AAA50; // type:func +Math_Atan2S = 0x800AAAC8; // type:func +Math_Atan2F = 0x800AAC40; // type:func +Matrix_Init = 0x800AAC80; // type:func +Matrix_Push = 0x800AACBC; // type:func +Matrix_Pop = 0x800AACF4; // type:func +Matrix_Get = 0x800AAD10; // type:func +Matrix_Put = 0x800AAD34; // type:func +Matrix_GetCurrent = 0x800AAD5C; // type:func +Matrix_Mult = 0x800AAD6C; // type:func +Matrix_Translate = 0x800AADC4; // type:func +Matrix_Scale = 0x800AAECC; // type:func +Matrix_RotateX = 0x800AAFB0; // type:func +Matrix_RotateY = 0x800AB164; // type:func +Matrix_RotateZ = 0x800AB31C; // type:func +Matrix_RotateZYX = 0x800AB4D0; // type:func +Matrix_TranslateRotateZYX = 0x800AB78C; // type:func +Matrix_SetTranslateRotateYXZ = 0x800ABAE0; // type:func +Matrix_MtxFToMtx = 0x800ABC8C; // type:func +Matrix_ToMtx = 0x800ABEA8; // type:func +Matrix_NewMtx = 0x800ABED0; // type:func +Matrix_MtxFToNewMtx = 0x800ABEFC; // type:func +Matrix_MultVec3f = 0x800ABF28; // type:func +Matrix_MtxFCopy = 0x800ABFE0; // type:func +Matrix_MtxToMtxF = 0x800AC0E8; // type:func +Matrix_MultVec3fExt = 0x800AC33C; // type:func +Matrix_Transpose = 0x800AC3EC; // type:func +Matrix_ReplaceRotation = 0x800AC424; // type:func +Matrix_MtxFToYXZRotS = 0x800AC520; // type:func +Matrix_MtxFToZYXRotS = 0x800AC6B8; // type:func +Matrix_RotateAxis = 0x800AC850; // type:func +Matrix_SetTranslateUniformScaleMtxF = 0x800ACCB8; // type:func +Matrix_SetTranslateUniformScaleMtx = 0x800ACD20; // type:func +Matrix_SetTranslateUniformScaleMtx2 = 0x800ACD70; // type:func +Matrix_SetTranslateScaleMtx1 = 0x800ACE60; // type:func +Matrix_SetTranslateScaleMtx2 = 0x800ACF80; // type:func +SysUcode_GetUCodeBoot = 0x800AD080; // type:func +SysUcode_GetUCodeBootSize = 0x800AD090; // type:func +SysUcode_GetUCode = 0x800AD0AC; // type:func +SysUcode_GetUCodeData = 0x800AD0BC; // type:func +RumbleMgr_Update = 0x800AD0D0; // type:func +RumbleMgr_Init = 0x800AD3E0; // type:func +RumbleMgr_Destroy = 0x800AD418; // type:func +func_800D31A0 = 0x800AD430; // type:func +IrqMgr_AddClient = 0x800AD460; // type:func +IrqMgr_RemoveClient = 0x800AD4EC; // type:func +IrqMgr_SendMesgToClients = 0x800AD578; // type:func +IrqMgr_JamMesgToClients = 0x800AD5DC; // type:func +IrqMgr_HandlePreNMI = 0x800AD640; // type:func +IrqMgr_CheckStacks = 0x800AD6D8; // type:func +IrqMgr_HandlePreNMI450 = 0x800AD6F8; // type:func +IrqMgr_HandlePreNMI480 = 0x800AD774; // type:func +IrqMgr_HandlePreNMI500 = 0x800AD808; // type:func +IrqMgr_HandleRetrace = 0x800AD82C; // type:func +IrqMgr_ThreadEntry = 0x800AD8E4; // type:func +IrqMgr_Init = 0x800AD9B8; // type:func +func_800ADA80_unknown = 0x800ADA80; // type:func +func_800ADAF8_unknown = 0x800ADAF8; // type:func +func_800ADB30_unknown = 0x800ADB30; // type:func +func_800ADB8C_unknown = 0x800ADB8C; // type:func +func_800ADBD0_unknown = 0x800ADBD0; // type:func +func_800ADC00_unknown = 0x800ADC00; // type:func +func_800ADC08_unknown = 0x800ADC08; // type:func +Fault_SleepImpl = 0x800ADC20; // type:func +func_800ADC5C_unknown = 0x800ADC5C; // type:func +func_800ADCD8_unknown = 0x800ADCD8; // type:func +func_800ADD14_unknown = 0x800ADD14; // type:func +func_800ADDF0_unknown = 0x800ADDF0; // type:func +func_800ADE30_unknown = 0x800ADE30; // type:func +func_800ADF4C_unknown = 0x800ADF4C; // type:func +func_800ADF90_unknown = 0x800ADF90; // type:func +func_800ADFE4_unknown = 0x800ADFE4; // type:func +func_800AE020_unknown = 0x800AE020; // type:func +func_800AE05C_unknown = 0x800AE05C; // type:func +func_800AE064_unknown = 0x800AE064; // type:func +func_800AE170_unknown = 0x800AE170; // type:func +func_800AE1E0_unknown = 0x800AE1E0; // type:func +func_800AE1F8_unknown = 0x800AE1F8; // type:func +func_800AE258_unknown = 0x800AE258; // type:func +func_800AE2B8_unknown = 0x800AE2B8; // type:func +func_800AE35C_unknown = 0x800AE35C; // type:func +func_800AE408_unknown = 0x800AE408; // type:func +func_800AE4C0_unknown = 0x800AE4C0; // type:func +func_800AE558_unknown = 0x800AE558; // type:func +func_800AE998_unknown = 0x800AE998; // type:func +func_800AEC94_unknown = 0x800AEC94; // type:func +func_800AED1C_unknown = 0x800AED1C; // type:func +func_800AF0E0_unknown = 0x800AF0E0; // type:func +func_800AF1C4_unknown = 0x800AF1C4; // type:func +func_800AF304_unknown = 0x800AF304; // type:func +func_800AF370_unknown = 0x800AF370; // type:func +func_800AF3DC_unknown = 0x800AF3DC; // type:func +func_800AF4DC_unknown = 0x800AF4DC; // type:func +func_800AF558_unknown = 0x800AF558; // type:func +Fault_AddClient = 0x800AF5EC; // type:func +Fault_RemoveClient = 0x800AF674; // type:func +func_800AF720_unknown = 0x800AF720; // type:func +func_800AF7F0_unknown = 0x800AF7F0; // type:func +Fault_SetFrameBuffer = 0x800AFA90; // type:func +Fault_Init = 0x800AFABC; // type:func +Fault_AddHungupAndCrashImpl = 0x800AFBC4; // type:func +Fault_AddHungupAndCrash = 0x800AFD94; // type:func +Kanji_OffsetFromShiftJIS = 0x800AFDF0; // type:func +AudioSynth_InitNextRingBuf = 0x800B08D0; // type:func +func_800DB03C = 0x800B0C4C; // type:func +AudioSynth_Update = 0x800B0CD4; // type:func +func_800DB2C0 = 0x800B0ED0; // type:func +AudioSynth_LoadRingBuffer1AtTemp = 0x800B0F40; // type:func +AudioSynth_SaveRingBuffer1AtTemp = 0x800B0FE8; // type:func +AudioSynth_LeakReverb = 0x800B1090; // type:func +func_800DB4E4 = 0x800B10F4; // type:func +func_800DB680 = 0x800B1290; // type:func +func_800DB828 = 0x800B1438; // type:func +AudioSynth_FilterReverb = 0x800B1650; // type:func +AudioSynth_MaybeMixRingBuffer1 = 0x800B16F8; // type:func +func_800DBB94 = 0x800B17A4; // type:func +AudioSynth_ClearBuffer = 0x800B17AC; // type:func +func_800DBBBC = 0x800B17CC; // type:func +func_800DBBC4 = 0x800B17D4; // type:func +func_800DBBCC = 0x800B17DC; // type:func +AudioSynth_Mix = 0x800B17E4; // type:func +func_800DBC08 = 0x800B1818; // type:func +func_800DBC10 = 0x800B1820; // type:func +func_800DBC18 = 0x800B1828; // type:func +AudioSynth_SetBuffer = 0x800B1830; // type:func +func_800DBC54 = 0x800B1864; // type:func +func_800DBC5C = 0x800B186C; // type:func +AudioSynth_DMemMove = 0x800B1874; // type:func +func_800DBC90 = 0x800B18A0; // type:func +func_800DBC98 = 0x800B18A8; // type:func +func_800DBCA0 = 0x800B18B0; // type:func +func_800DBCA8 = 0x800B18B8; // type:func +AudioSynth_InterL = 0x800B18C0; // type:func +AudioSynth_EnvSetup1 = 0x800B18E4; // type:func +func_800DBD08 = 0x800B1918; // type:func +AudioSynth_LoadBuffer = 0x800B1920; // type:func +AudioSynth_SaveBuffer = 0x800B1948; // type:func +AudioSynth_EnvSetup2 = 0x800B1970; // type:func +func_800DBD7C = 0x800B198C; // type:func +func_800DBD84 = 0x800B1994; // type:func +func_800DBD8C = 0x800B199C; // type:func +AudioSynth_S8Dec = 0x800B19A4; // type:func +AudioSynth_HiLoGain = 0x800B19C0; // type:func +AudioSynth_UnkCmd19 = 0x800B19F4; // type:func +func_800DBE18 = 0x800B1A28; // type:func +func_800DBE20 = 0x800B1A30; // type:func +func_800DBE28 = 0x800B1A38; // type:func +func_800DBE30 = 0x800B1A40; // type:func +AudioSynth_UnkCmd3 = 0x800B1A48; // type:func +func_800DBE5C = 0x800B1A6C; // type:func +func_800DBE64 = 0x800B1A74; // type:func +func_800DBE6C = 0x800B1A7C; // type:func +AudioSynth_LoadFilterBuffer = 0x800B1A84; // type:func +AudioSynth_LoadFilterSize = 0x800B1AA8; // type:func +AudioSynth_LoadRingBuffer1 = 0x800B1AC0; // type:func +AudioSynth_LoadRingBuffer2 = 0x800B1B6C; // type:func +AudioSynth_LoadRingBufferPart = 0x800B1C18; // type:func +AudioSynth_SaveRingBufferPart = 0x800B1C84; // type:func +AudioSynth_SaveBufferOffset = 0x800B1CF0; // type:func +AudioSynth_MaybeLoadRingBuffer2 = 0x800B1D34; // type:func +AudioSynth_LoadReverbSamples = 0x800B1D74; // type:func +AudioSynth_SaveReverbSamples = 0x800B1DE8; // type:func +AudioSynth_SaveRingBuffer2 = 0x800B1EEC; // type:func +AudioSynth_DoOneAudioUpdate = 0x800B1F94; // type:func +AudioSynth_ProcessNote = 0x800B2530; // type:func +AudioSynth_FinalResample = 0x800B3270; // type:func +AudioSynth_ProcessEnvelope = 0x800B3310; // type:func +AudioSynth_LoadWaveSamples = 0x800B3638; // type:func +AudioSynth_ApplyHaasEffect = 0x800B37A8; // type:func +AudioHeap_CalculateAdsrDecay = 0x800B3A60; // type:func +AudioHeap_InitAdsrDecayTable = 0x800B3A7C; // type:func +AudioHeap_ResetLoadStatus = 0x800B3BC0; // type:func +AudioHeap_DiscardFont = 0x800B3C88; // type:func +AudioHeap_ReleaseNotesForFont = 0x800B3D6C; // type:func +AudioHeap_DiscardSequence = 0x800B3DF4; // type:func +AudioHeap_WritebackDCache = 0x800B3E78; // type:func +AudioHeap_AllocZeroedAttemptExternal = 0x800B3E98; // type:func +AudioHeap_AllocAttemptExternal = 0x800B3EF0; // type:func +AudioHeap_AllocDmaMemory = 0x800B3F48; // type:func +AudioHeap_AllocDmaMemoryZeroed = 0x800B3F84; // type:func +AudioHeap_AllocZeroed = 0x800B3FC0; // type:func +AudioHeap_Alloc = 0x800B401C; // type:func +AudioHeap_InitPool = 0x800B4074; // type:func +AudioHeap_InitPersistentCache = 0x800B409C; // type:func +AudioHeap_InitTemporaryCache = 0x800B40B0; // type:func +AudioHeap_ResetPool = 0x800B40E0; // type:func +AudioHeap_PopPersistentCache = 0x800B40F0; // type:func +AudioHeap_InitMainPools = 0x800B4230; // type:func +AudioHeap_InitSessionPools = 0x800B4290; // type:func +AudioHeap_InitCachePools = 0x800B4314; // type:func +AudioHeap_InitPersistentPoolsAndCaches = 0x800B4398; // type:func +AudioHeap_InitTemporaryPoolsAndCaches = 0x800B445C; // type:func +AudioHeap_AllocCached = 0x800B4520; // type:func +AudioHeap_SearchCaches = 0x800B4CB4; // type:func +AudioHeap_SearchRegularCaches = 0x800B4D0C; // type:func +func_800DF1D8 = 0x800B4E18; // type:func +AudioHeap_ClearFilter = 0x800B51EC; // type:func +AudioHeap_LoadLowPassFilter = 0x800B521C; // type:func +AudioHeap_LoadHighPassFilter = 0x800B5270; // type:func +AudioHeap_LoadFilter = 0x800B52C8; // type:func +AudioHeap_UpdateReverb = 0x800B53FC; // type:func +AudioHeap_UpdateReverbs = 0x800B5404; // type:func +AudioHeap_ClearCurrentAiBuffer = 0x800B54C8; // type:func +AudioHeap_ResetStep = 0x800B5534; // type:func +AudioHeap_Init = 0x800B5838; // type:func +AudioHeap_SearchPermanentCache = 0x800B6128; // type:func +AudioHeap_AllocPermanent = 0x800B6180; // type:func +AudioHeap_AllocSampleCache = 0x800B6204; // type:func +AudioHeap_InitSampleCaches = 0x800B6274; // type:func +AudioHeap_AllocTemporarySampleCacheEntry = 0x800B630C; // type:func +AudioHeap_UnapplySampleCacheForFont = 0x800B65A4; // type:func +AudioHeap_DiscardSampleCacheEntry = 0x800B6718; // type:func +AudioHeap_UnapplySampleCache = 0x800B67F4; // type:func +AudioHeap_AllocPersistentSampleCacheEntry = 0x800B6838; // type:func +AudioHeap_DiscardSampleCacheForFont = 0x800B68C0; // type:func +AudioHeap_DiscardSampleCaches = 0x800B68FC; // type:func +AudioHeap_ChangeStorage = 0x800B6A4C; // type:func +AudioHeap_DiscardSampleBank = 0x800B6AAC; // type:func +AudioHeap_ApplySampleBankCache = 0x800B6AD0; // type:func +AudioHeap_ApplySampleBankCacheInternal = 0x800B6AF4; // type:func +AudioHeap_DiscardSampleBanks = 0x800B6D88; // type:func +AudioLoad_DecreaseSampleDmaTtls = 0x800B6E30; // type:func +AudioLoad_DmaSampleData = 0x800B6F1C; // type:func +AudioLoad_InitSampleDmaBuffers = 0x800B7258; // type:func +AudioLoad_IsFontLoadComplete = 0x800B74F0; // type:func +AudioLoad_IsSeqLoadComplete = 0x800B7568; // type:func +AudioLoad_IsSampleLoadComplete = 0x800B75E0; // type:func +AudioLoad_SetFontLoadStatus = 0x800B7658; // type:func +AudioLoad_SetSeqLoadStatus = 0x800B7688; // type:func +AudioLoad_SetSampleFontLoadStatusAndApplyCaches = 0x800B76B8; // type:func +AudioLoad_SetSampleFontLoadStatus = 0x800B7718; // type:func +AudioLoad_InitTable = 0x800B7748; // type:func +AudioLoad_SyncLoadSeqFonts = 0x800B77A8; // type:func +AudioLoad_SyncLoadSeqParts = 0x800B7858; // type:func +AudioLoad_SyncLoadSample = 0x800B78B8; // type:func +AudioLoad_SyncLoadInstrument = 0x800B79A4; // type:func +AudioLoad_AsyncLoad = 0x800B7A74; // type:func +AudioLoad_AsyncLoadSeq = 0x800B7AAC; // type:func +AudioLoad_AsyncLoadSampleBank = 0x800B7AF0; // type:func +AudioLoad_AsyncLoadFont = 0x800B7B34; // type:func +AudioLoad_GetFontsForSequence = 0x800B7B78; // type:func +AudioLoad_DiscardSeqFonts = 0x800B7BBC; // type:func +AudioLoad_DiscardFont = 0x800B7C6C; // type:func +AudioLoad_SyncInitSeqPlayer = 0x800B7D14; // type:func +AudioLoad_SyncInitSeqPlayerSkipTicks = 0x800B7D64; // type:func +AudioLoad_SyncInitSeqPlayerInternal = 0x800B7DBC; // type:func +AudioLoad_SyncLoadSeq = 0x800B7F04; // type:func +AudioLoad_GetSampleBank = 0x800B7F58; // type:func +AudioLoad_TrySyncLoadSampleBank = 0x800B7F78; // type:func +AudioLoad_SyncLoadFont = 0x800B8094; // type:func +AudioLoad_SyncLoad = 0x800B8198; // type:func +AudioLoad_GetRealTableIndex = 0x800B83A8; // type:func +AudioLoad_SearchCaches = 0x800B83E4; // type:func +AudioLoad_GetLoadTable = 0x800B8438; // type:func +AudioLoad_RelocateFont = 0x800B847C; // type:func +AudioLoad_SyncDma = 0x800B86E8; // type:func +AudioLoad_SyncDmaUnkMedium = 0x800B880C; // type:func +AudioLoad_Dma = 0x800B8820; // type:func +AudioLoad_Unused1 = 0x800B88F8; // type:func +AudioLoad_SyncLoadSimple = 0x800B8900; // type:func +AudioLoad_AsyncLoadInner = 0x800B8920; // type:func +AudioLoad_ProcessLoads = 0x800B8C2C; // type:func +AudioLoad_SetDmaHandler = 0x800B8C5C; // type:func +AudioLoad_SetUnusedHandler = 0x800B8C68; // type:func +AudioLoad_InitSoundFont = 0x800B8C74; // type:func +AudioLoad_Init = 0x800B8CD4; // type:func +AudioLoad_InitSlowLoads = 0x800B9040; // type:func +AudioLoad_SlowLoadSample = 0x800B9054; // type:func +AudioLoad_GetFontSample = 0x800B9220; // type:func +AudioLoad_Unused2 = 0x800B92B0; // type:func +AudioLoad_FinishSlowLoad = 0x800B92B8; // type:func +AudioLoad_ProcessSlowLoads = 0x800B932C; // type:func +AudioLoad_DmaSlowCopy = 0x800B94B4; // type:func +AudioLoad_DmaSlowCopyUnkMedium = 0x800B9538; // type:func +AudioLoad_SlowLoadSeq = 0x800B954C; // type:func +AudioLoad_InitAsyncLoads = 0x800B9654; // type:func +AudioLoad_StartAsyncLoadUnkMedium = 0x800B9684; // type:func +AudioLoad_StartAsyncLoad = 0x800B9708; // type:func +AudioLoad_ProcessAsyncLoads = 0x800B982C; // type:func +AudioLoad_ProcessAsyncLoadUnkMedium = 0x800B9950; // type:func +AudioLoad_FinishAsyncLoad = 0x800B995C; // type:func +AudioLoad_ProcessAsyncLoad = 0x800B9A98; // type:func +AudioLoad_AsyncDma = 0x800B9BF4; // type:func +AudioLoad_AsyncDmaUnkMedium = 0x800B9C84; // type:func +AudioLoad_RelocateSample = 0x800B9C98; // type:func +AudioLoad_RelocateFontAndPreloadSamples = 0x800B9DD8; // type:func +AudioLoad_ProcessSamplePreloads = 0x800BA1D0; // type:func +AudioLoad_AddToSampleSet = 0x800BA384; // type:func +AudioLoad_GetSamplesForFont = 0x800BA3CC; // type:func +AudioLoad_AddUsedSample = 0x800BA500; // type:func +AudioLoad_PreloadSamplesForFont = 0x800BA558; // type:func +AudioLoad_LoadPermanentSamples = 0x800BA9D4; // type:func +AudioLoad_Unused3 = 0x800BAB14; // type:func +AudioLoad_Unused4 = 0x800BAB1C; // type:func +AudioLoad_Unused5 = 0x800BAB24; // type:func +AudioLoad_ScriptLoad = 0x800BAB2C; // type:func +AudioLoad_ProcessScriptLoads = 0x800BAB98; // type:func +AudioLoad_InitScriptLoads = 0x800BABF0; // type:func +AudioThread_Update = 0x800BAC20; // type:func +AudioThread_UpdateImpl = 0x800BAC40; // type:func +AudioThread_ProcessGlobalCmd = 0x800BB1C8; // type:func +AudioThread_SetFadeOutTimer = 0x800BB59C; // type:func +AudioThread_SetFadeInTimer = 0x800BB5F0; // type:func +AudioThread_InitMesgQueuesImpl = 0x800BB638; // type:func +AudioThread_QueueCmd = 0x800BB6D0; // type:func +AudioThread_QueueCmdF32 = 0x800BB71C; // type:func +AudioThread_QueueCmdS32 = 0x800BB740; // type:func +AudioThread_QueueCmdS8 = 0x800BB764; // type:func +AudioThread_QueueCmdU16 = 0x800BB794; // type:func +AudioThread_ScheduleProcessCmds = 0x800BB7C4; // type:func +AudioThread_ResetCmdQueue = 0x800BB854; // type:func +AudioThread_ProcessCmd = 0x800BB86C; // type:func +AudioThread_ProcessCmds = 0x800BB9B0; // type:func +func_800E5E20 = 0x800BBA64; // type:func +AudioThread_GetFontsForSequence = 0x800BBAC8; // type:func +Audio_GetSampleBankIdsOfFont = 0x800BBAE8; // type:func +func_800E5EDC = 0x800BBB20; // type:func +func_800E5F34 = 0x800BBB78; // type:func +AudioThread_ResetAudioHeap = 0x800BBBCC; // type:func +AudioThread_PreNMIInternal = 0x800BBC68; // type:func +AudioThread_GetChannelIO = 0x800BBCB4; // type:func +AudioThread_GetSeqPlayerIO = 0x800BBD08; // type:func +AudioThread_InitExternalPool = 0x800BBD30; // type:func +AudioThread_ResetExternalPool = 0x800BBD60; // type:func +AudioThread_ProcessSeqPlayerCmd = 0x800BBD6C; // type:func +AudioThread_ProcessChannelCmd = 0x800BBF44; // type:func +AudioThread_Noop1Cmd = 0x800BC0F4; // type:func +AudioThread_Noop1CmdZeroed = 0x800BC13C; // type:func +AudioThread_Noop2Cmd = 0x800BC160; // type:func +AudioThread_WaitForAudioTask = 0x800BC194; // type:func +func_800E6590 = 0x800BC1D4; // type:func +func_800E6680 = 0x800BC2C4; // type:func +func_800E66A0 = 0x800BC2E4; // type:func +func_800E66C0 = 0x800BC304; // type:func +AudioThread_NextRandom = 0x800BC404; // type:func +AudioThread_InitMesgQueues = 0x800BC45C; // type:func +Audio_InvalDCache = 0x800BC480; // type:func +Audio_WritebackDCache = 0x800BC4C0; // type:func +osAiSetNextBuffer = 0x800BC500; // type:func +Audio_InitNoteSub = 0x800BC580; // type:func +Audio_NoteSetResamplingRate = 0x800BC9F8; // type:func +Audio_NoteInit = 0x800BCAA8; // type:func +Audio_NoteDisable = 0x800BCB68; // type:func +Audio_ProcessNotes = 0x800BCBCC; // type:func +Audio_GetInstrumentTunedSample = 0x800BD09C; // type:func +Audio_GetInstrumentInner = 0x800BD0D8; // type:func +Audio_GetDrum = 0x800BD1AC; // type:func +Audio_GetSoundEffect = 0x800BD290; // type:func +Audio_SetFontInstrument = 0x800BD384; // type:func +Audio_SeqLayerDecayRelease = 0x800BD4C8; // type:func +Audio_SeqLayerNoteDecay = 0x800BD7A0; // type:func +Audio_SeqLayerNoteRelease = 0x800BD7C0; // type:func +Audio_BuildSyntheticWave = 0x800BD7E0; // type:func +Audio_InitSyntheticWave = 0x800BD8E4; // type:func +Audio_InitNoteList = 0x800BD93C; // type:func +Audio_InitNoteLists = 0x800BD94C; // type:func +Audio_InitNoteFreeList = 0x800BD99C; // type:func +Audio_NotePoolClear = 0x800BDA40; // type:func +Audio_NotePoolFill = 0x800BDBA0; // type:func +Audio_AudioListPushFront = 0x800BDCDC; // type:func +Audio_AudioListRemove = 0x800BDD1C; // type:func +Audio_FindNodeWithPrioLessThan = 0x800BDD48; // type:func +Audio_NoteInitForLayer = 0x800BDDC8; // type:func +func_800E82C0 = 0x800BDF00; // type:func +Audio_NoteReleaseAndTakeOwnership = 0x800BDF34; // type:func +Audio_AllocNoteFromDisabled = 0x800BDF60; // type:func +Audio_AllocNoteFromDecaying = 0x800BDFAC; // type:func +Audio_AllocNoteFromActive = 0x800BDFFC; // type:func +Audio_AllocNote = 0x800BE0F4; // type:func +Audio_NoteInitAll = 0x800BE3C8; // type:func +Audio_SequenceChannelProcessSound = 0x800BE500; // type:func +Audio_SequencePlayerProcessSound = 0x800BE6C8; // type:func +Audio_GetPortamentoFreqScale = 0x800BE814; // type:func +Audio_GetVibratoPitchChange = 0x800BE870; // type:func +Audio_GetVibratoFreqScale = 0x800BE8A8; // type:func +Audio_NoteVibratoUpdate = 0x800BEAE4; // type:func +Audio_NoteVibratoInit = 0x800BEB40; // type:func +Audio_NotePortamentoInit = 0x800BEBF8; // type:func +Audio_AdsrInit = 0x800BEC24; // type:func +Audio_AdsrUpdate = 0x800BEC44; // type:func +AudioSeq_GetScriptControlFlowArgument = 0x800BEF80; // type:func +AudioSeq_HandleScriptFlowControl = 0x800BEFE8; // type:func +AudioSeq_InitSequenceChannel = 0x800BF1C4; // type:func +AudioSeq_SeqChannelSetLayer = 0x800BF318; // type:func +AudioSeq_SeqLayerDisable = 0x800BF43C; // type:func +AudioSeq_SeqLayerFree = 0x800BF4B8; // type:func +AudioSeq_SequenceChannelDisable = 0x800BF508; // type:func +AudioSeq_SequencePlayerSetupChannels = 0x800BF574; // type:func +AudioSeq_SequencePlayerDisableChannels = 0x800BF66C; // type:func +AudioSeq_SequenceChannelEnable = 0x800BF6EC; // type:func +AudioSeq_SequencePlayerDisableAsFinished = 0x800BF784; // type:func +AudioSeq_SequencePlayerDisable = 0x800BF7AC; // type:func +AudioSeq_AudioListPushBack = 0x800BF8A4; // type:func +AudioSeq_AudioListPopBack = 0x800BF8E4; // type:func +AudioSeq_InitLayerFreelist = 0x800BF924; // type:func +AudioSeq_ScriptReadU8 = 0x800BF9C4; // type:func +AudioSeq_ScriptReadS16 = 0x800BF9D8; // type:func +AudioSeq_ScriptReadCompressedU16 = 0x800BFA10; // type:func +AudioSeq_SeqLayerProcessScript = 0x800BFA50; // type:func +AudioSeq_SeqLayerProcessScriptStep1 = 0x800BFB54; // type:func +AudioSeq_SeqLayerProcessScriptStep5 = 0x800BFBE0; // type:func +AudioSeq_SeqLayerProcessScriptStep2 = 0x800BFD3C; // type:func +AudioSeq_SeqLayerProcessScriptStep4 = 0x800C00BC; // type:func +AudioSeq_SeqLayerProcessScriptStep3 = 0x800C075C; // type:func +AudioSeq_SetChannelPriorities = 0x800C0B70; // type:func +AudioSeq_GetInstrument = 0x800C0BA0; // type:func +AudioSeq_SetInstrument = 0x800C0C14; // type:func +AudioSeq_SequenceChannelSetVolume = 0x800C0CC0; // type:func +AudioSeq_SequenceChannelProcessScript = 0x800C0CE4; // type:func +AudioSeq_SequencePlayerProcessSequence = 0x800C19D4; // type:func +AudioSeq_ProcessSequences = 0x800C21E0; // type:func +AudioSeq_SkipForwardSequence = 0x800C2294; // type:func +AudioSeq_ResetSequencePlayer = 0x800C22E4; // type:func +AudioSeq_InitSequencePlayerChannels = 0x800C23B0; // type:func +AudioSeq_InitSequencePlayer = 0x800C2488; // type:func +AudioSeq_InitSequencePlayers = 0x800C2558; // type:func +AudioOcarina_ReadControllerInput = 0x800C25D0; // type:func +AudioOcarina_BendPitchTwoSemitones = 0x800C2630; // type:func +AudioOcarina_GetPlayingState = 0x800C26C0; // type:func +AudioOcarina_MapNoteToButton = 0x800C2704; // type:func +AudioOcarina_MapNotesToScarecrowButtons = 0x800C274C; // type:func +AudioOcarina_Start = 0x800C27D4; // type:func +AudioOcarina_CheckIfStartedSong = 0x800C298C; // type:func +AudioOcarina_CheckSongsWithMusicStaff = 0x800C29C8; // type:func +AudioOcarina_CheckSongsWithoutMusicStaff = 0x800C2DD0; // type:func +AudioOcarina_PlayControllerInput = 0x800C301C; // type:func +AudioOcarina_EnableInput = 0x800C333C; // type:func +AudioOcarina_SetInstrument = 0x800C334C; // type:func +AudioOcarina_SetPlaybackSong = 0x800C3430; // type:func +AudioOcarina_PlaybackSong = 0x800C3530; // type:func +AudioOcarina_SetRecordingSong = 0x800C3854; // type:func +AudioOcarina_SetRecordingState = 0x800C3C5C; // type:func +AudioOcarina_UpdateRecordingStaff = 0x800C3D88; // type:func +AudioOcarina_UpdatePlayingStaff = 0x800C3DC0; // type:func +AudioOcarina_UpdatePlaybackStaff = 0x800C3E04; // type:func +AudioOcarina_GetRecordingStaff = 0x800C3EB4; // type:func +AudioOcarina_GetPlayingStaff = 0x800C3EC0; // type:func +AudioOcarina_GetPlaybackStaff = 0x800C3EE4; // type:func +AudioOcarina_RecordSong = 0x800C3EF0; // type:func +AudioOcarina_MemoryGameInit = 0x800C407C; // type:func +AudioOcarina_MemoryGameNextNote = 0x800C40EC; // type:func +AudioOcarina_Update = 0x800C41F4; // type:func +AudioOcarina_PlayLongScarecrowSong = 0x800C4324; // type:func +AudioOcarina_ResetStaffs = 0x800C4430; // type:func +AudioDebug_ScrPrt = 0x800C447C; // type:func +AudioDebug_ProcessInput = 0x800C4484; // type:func +Audio_Update = 0x800C4490; // type:func +func_800F3138 = 0x800C4534; // type:func +func_800F3140 = 0x800C453C; // type:func +func_800F314C = 0x800C4548; // type:func +Audio_ComputeSfxVolume = 0x800C4584; // type:func +Audio_ComputeSfxReverb = 0x800C46EC; // type:func +Audio_ComputeSfxPanSigned = 0x800C4864; // type:func +Audio_ComputeSfxFreqScale = 0x800C49E8; // type:func +func_800F37B8 = 0x800C4C00; // type:func +func_800F3990 = 0x800C4DD8; // type:func +Audio_SetSfxProperties = 0x800C4E50; // type:func +Audio_ResetSfxChannelState = 0x800C5344; // type:func +Audio_PlayCutsceneEffectsSequence = 0x800C53AC; // type:func +func_800F3F84 = 0x800C53F4; // type:func +func_800F4010 = 0x800C5480; // type:func +func_800F4138 = 0x800C55A0; // type:func +func_800F4190 = 0x800C55F8; // type:func +Audio_PlaySfxRandom = 0x800C5648; // type:func +func_800F4254 = 0x800C56BC; // type:func +func_800F436C = 0x800C57D4; // type:func +func_800F4414 = 0x800C587C; // type:func +func_800F44EC = 0x800C5954; // type:func +func_800F4524 = 0x800C598C; // type:func +func_800F4578 = 0x800C59E0; // type:func +func_800F45D0 = 0x800C5A38; // type:func +Audio_PlaySfxRiver = 0x800C5A9C; // type:func +Audio_PlaySfxWaterfall = 0x800C5B48; // type:func +Audio_StepFreqLerp = 0x800C5BEC; // type:func +Audio_SetBgmVolumeOffDuringFanfare = 0x800C5C24; // type:func +Audio_SetBgmVolumeOnDuringFanfare = 0x800C5C64; // type:func +Audio_SetMainBgmVolume = 0x800C5CA4; // type:func +Audio_SetGanonsTowerBgmVolumeLevel = 0x800C5CD8; // type:func +Audio_SetGanonsTowerBgmVolume = 0x800C5D84; // type:func +Audio_LowerMainBgmVolume = 0x800C5EBC; // type:func +Audio_UpdateRiverSoundVolumes = 0x800C5ED8; // type:func +Audio_PlaySfxIncreasinglyTransposed = 0x800C5FC0; // type:func +Audio_ResetIncreasingTranspose = 0x800C6050; // type:func +Audio_PlaySfxTransposed = 0x800C605C; // type:func +func_800F4C58 = 0x800C60C0; // type:func +func_800F4E30 = 0x800C6298; // type:func +Audio_ClearSariaBgm = 0x800C6534; // type:func +Audio_ClearSariaBgmAtPos = 0x800C6554; // type:func +Audio_SplitBgmChannels = 0x800C6574; // type:func +Audio_PlaySariaBgm = 0x800C6708; // type:func +Audio_ClearSariaBgm2 = 0x800C6980; // type:func +Audio_PlayMorningSceneSequence = 0x800C698C; // type:func +Audio_PlaySceneSequence = 0x800C69CC; // type:func +Audio_UpdateSceneSequenceResumePoint = 0x800C6B4C; // type:func +Audio_PlayWindmillBgm = 0x800C6BBC; // type:func +Audio_SetMainBgmTempoFreqAfterFanfare = 0x800C6BF0; // type:func +Audio_SetFastTempoForTimedMinigame = 0x800C6DBC; // type:func +Audio_PlaySequenceInCutscene = 0x800C6E00; // type:func +Audio_StopSequenceInCutscene = 0x800C6E8C; // type:func +Audio_IsSequencePlaying = 0x800C6EFC; // type:func +func_800F5ACC = 0x800C6F70; // type:func +func_800F5B58 = 0x800C6FE4; // type:func +func_800F5BF0 = 0x800C7094; // type:func +func_800F5C2C = 0x800C70D0; // type:func +Audio_PlayFanfare = 0x800C7108; // type:func +Audio_UpdateFanfare = 0x800C719C; // type:func +Audio_PlaySequenceWithSeqPlayerIO = 0x800C72BC; // type:func +Audio_SetSequenceMode = 0x800C7334; // type:func +Audio_SetBgmEnemyVolume = 0x800C7618; // type:func +Audio_UpdateMalonSinging = 0x800C776C; // type:func +func_800F64E0 = 0x800C79D0; // type:func +Audio_ToggleMalonSinging = 0x800C7A74; // type:func +Audio_SetEnvReverb = 0x800C7BB0; // type:func +Audio_SetCodeReverb = 0x800C7BCC; // type:func +func_800F6700 = 0x800C7BF0; // type:func +Audio_SetBaseFilter = 0x800C7C90; // type:func +Audio_SetExtraFilter = 0x800C7D18; // type:func +Audio_SetCutsceneFlag = 0x800C7DAC; // type:func +Audio_PlaySfxGeneralIfNotInCutscene = 0x800C7DC4; // type:func +Audio_PlaySfxIfNotInCutscene = 0x800C7E0C; // type:func +func_800F6964 = 0x800C7E54; // type:func +Audio_StopBgmAndFanfare = 0x800C7FA0; // type:func +func_800F6B3C = 0x800C802C; // type:func +Audio_DisableAllSeq = 0x800C8058; // type:func +func_800F6BB8 = 0x800C80A8; // type:func +func_800F6BDC = 0x800C80CC; // type:func +Audio_PreNMI = 0x800C8104; // type:func +func_800F6C34 = 0x800C8124; // type:func +Audio_SetNatureAmbienceChannelIO = 0x800C8254; // type:func +Audio_StartNatureAmbienceSequence = 0x800C8368; // type:func +Audio_PlayNatureAmbienceSequence = 0x800C84CC; // type:func +Audio_Init = 0x800C8624; // type:func +Audio_InitSound = 0x800C8648; // type:func +func_800F7170 = 0x800C869C; // type:func +func_800F71BC = 0x800C86E8; // type:func +func_800F7208 = 0x800C8734; // type:func +Audio_SetSfxBanksMute = 0x800C8790; // type:func +Audio_QueueSeqCmdMute = 0x800C87E8; // type:func +Audio_ClearBGMMute = 0x800C884C; // type:func +Audio_PlaySfxGeneral = 0x800C88BC; // type:func +Audio_RemoveMatchingSfxRequests = 0x800C893C; // type:func +Audio_ProcessSfxRequest = 0x800C8ADC; // type:func +Audio_RemoveSfxBankEntry = 0x800C8F78; // type:func +Audio_ChooseActiveSfx = 0x800C9110; // type:func +Audio_PlayActiveSfx = 0x800C9844; // type:func +Audio_StopSfxByBank = 0x800C9B64; // type:func +func_800F8884 = 0x800C9C48; // type:func +Audio_StopSfxByPosAndBank = 0x800C9D64; // type:func +Audio_StopSfxByPos = 0x800C9DAC; // type:func +Audio_StopSfxByPosAndId = 0x800C9E08; // type:func +Audio_StopSfxByTokenAndId = 0x800C9F64; // type:func +Audio_StopSfxById = 0x800CA0C8; // type:func +Audio_ProcessSfxRequests = 0x800CA200; // type:func +Audio_SetUnusedBankLerp = 0x800CA264; // type:func +Audio_StepUnusedBankLerp = 0x800CA2F8; // type:func +func_800F8F88 = 0x800CA34C; // type:func +Audio_IsSfxPlaying = 0x800CA3B8; // type:func +Audio_ResetSfx = 0x800CA420; // type:func +Audio_StartSequence = 0x800CA5E0; // type:func +Audio_StopSequence = 0x800CA764; // type:func +Audio_ProcessSeqCmd = 0x800CA7EC; // type:func +Audio_QueueSeqCmd = 0x800CB2B0; // type:func +Audio_ProcessSeqCmds = 0x800CB2D8; // type:func +Audio_GetActiveSeqId = 0x800CB358; // type:func +Audio_IsSeqCmdNotQueued = 0x800CB3C0; // type:func +Audio_ResetSequenceRequests = 0x800CB418; // type:func +Audio_ReplaceSeqCmdSetupOpVolRestore = 0x800CB430; // type:func +Audio_SetVolumeScale = 0x800CB4E4; // type:func +Audio_UpdateActiveSequences = 0x800CB680; // type:func +func_800FAD34 = 0x800CBFD8; // type:func +Audio_ResetActiveSequences = 0x800CC09C; // type:func +Audio_ResetActiveSequencesAndVolume = 0x800CC158; // type:func +GfxPrint_Setup = 0x800CC200; // type:func +GfxPrint_SetColor = 0x800CC698; // type:func +GfxPrint_SetPosPx = 0x800CC6E4; // type:func +GfxPrint_SetPos = 0x800CC708; // type:func +GfxPrint_SetBasePosPx = 0x800CC730; // type:func +GfxPrint_PrintCharImpl = 0x800CC744; // type:func +GfxPrint_PrintChar = 0x800CCA50; // type:func +GfxPrint_PrintStringWithSize = 0x800CCC0C; // type:func +GfxPrint_PrintString = 0x800CCC68; // type:func +GfxPrint_Callback = 0x800CCCC0; // type:func +GfxPrint_Init = 0x800CCCEC; // type:func +GfxPrint_Destroy = 0x800CCD40; // type:func +GfxPrint_Open = 0x800CCD48; // type:func +GfxPrint_Close = 0x800CCD90; // type:func +GfxPrint_VPrintf = 0x800CCDA8; // type:func +GfxPrint_Printf = 0x800CCDC8; // type:func +RcpUtils_PrintRegisterStatus = 0x800CCE00; // type:func +RcpUtils_Reset = 0x800CD0F8; // type:func +Overlay_Relocate = 0x800CD130; // type:func +Overlay_Load = 0x800CD3F8; // type:func +Overlay_AllocateAndLoad = 0x800CD578; // type:func +PadUtils_Init = 0x800CD5E0; // type:func +func_800FCB70 = 0x800CD600; // type:func +PadUtils_ResetPressRel = 0x800CD608; // type:func +PadUtils_CheckCurExact = 0x800CD61C; // type:func +PadUtils_CheckCur = 0x800CD634; // type:func +PadUtils_CheckPressed = 0x800CD650; // type:func +PadUtils_CheckReleased = 0x800CD66C; // type:func +PadUtils_GetCurButton = 0x800CD688; // type:func +PadUtils_GetPressButton = 0x800CD690; // type:func +PadUtils_GetCurX = 0x800CD698; // type:func +PadUtils_GetCurY = 0x800CD6A0; // type:func +PadUtils_SetRelXY = 0x800CD6A8; // type:func +PadUtils_GetRelXImpl = 0x800CD6B4; // type:func +PadUtils_GetRelYImpl = 0x800CD6BC; // type:func +PadUtils_GetRelX = 0x800CD6C4; // type:func +PadUtils_GetRelY = 0x800CD6E4; // type:func +PadUtils_GetPressX = 0x800CD704; // type:func +PadUtils_GetPressY = 0x800CD70C; // type:func +PadUtils_UpdateRelXY = 0x800CD714; // type:func +func_800FC800 = 0x800CD7F0; // type:func +func_800FC83C = 0x800CD848; // type:func +func_800FC868 = 0x800CD894; // type:func +func_800FC8D8 = 0x800CD928; // type:func +func_800FC948 = 0x800CD9C0; // type:func +func_800FCA18 = 0x800CDAA4; // type:func +func_800FCB34 = 0x800CDB60; // type:func +SystemHeap_Init = 0x800CDBD0; // type:func +PadSetup_Init = 0x800CDC10; // type:func +Math_FTanF = 0x800CDD50; // type:func +Math_FFloorF = 0x800CDD84; // type:func +Math_FCeilF = 0x800CDDA4; // type:func +func_800CDDC4_unknown = 0x800CDDC4; // type:func +func_800CDDF8_unknown = 0x800CDDF8; // type:func +Math_FRoundF = 0x800CDE28; // type:func +Math_FTruncF = 0x800CDE48; // type:func +Math_FNearbyIntF = 0x800CDE68; // type:func +Math_FAtanContFracF = 0x800CDE88; // type:func +Math_FAtan2F = 0x800CDFAC; // type:func +Math_FAsinF = 0x800CE0A0; // type:func +Math_FAcosF = 0x800CE0D0; // type:func +floorf = 0x800CE100; // type:func +floor = 0x800CE10C; // type:func +lfloorf = 0x800CE118; // type:func +lfloor = 0x800CE128; // type:func +ceilf = 0x800CE138; // type:func +ceil = 0x800CE144; // type:func +lceilf = 0x800CE150; // type:func +lceil = 0x800CE160; // type:func +truncf = 0x800CE170; // type:func +trunc = 0x800CE17C; // type:func +ltruncf = 0x800CE188; // type:func +ltrunc = 0x800CE198; // type:func +nearbyintf = 0x800CE1A8; // type:func +nearbyint = 0x800CE1B4; // type:func +lnearbyintf = 0x800CE1C0; // type:func +lnearbyint = 0x800CE1D0; // type:func +roundf = 0x800CE1E0; // type:func +round = 0x800CE1FC; // type:func +lroundf = 0x800CE21C; // type:func +lround = 0x800CE23C; // type:func +SystemArena_Malloc = 0x800CE260; // type:func +SystemArena_MallocR = 0x800CE2A8; // type:func +SystemArena_Realloc = 0x800CE2F0; // type:func +SystemArena_Free = 0x800CE340; // type:func +SystemArena_Calloc = 0x800CE380; // type:func +SystemArena_GetSizes = 0x800CE3F8; // type:func +SystemArena_Check = 0x800CE430; // type:func +SystemArena_Init = 0x800CE454; // type:func +SystemArena_Cleanup = 0x800CE484; // type:func +SystemArena_IsInitialized = 0x800CE4A8; // type:func +Rand_Next = 0x800CE4D0; // type:func +Rand_Seed = 0x800CE500; // type:func +Rand_ZeroOne = 0x800CE50C; // type:func +Rand_Seed_Variable = 0x800CE550; // type:func +Rand_Next_Variable = 0x800CE558; // type:func +Rand_ZeroOne_Variable = 0x800CE580; // type:func +__osMallocInit = 0x800CE5D0; // type:func +__osMallocCleanup = 0x800CE618; // type:func +__osMallocIsInitialized = 0x800CE638; // type:func +__osMallocDebug = 0x800CE644; // type:func +__osMallocRDebug = 0x800CE760; // type:func +__osMalloc = 0x800CE8A0; // type:func +__osMallocR = 0x800CE9BC; // type:func +__osFree = 0x800CEAF4; // type:func +__osFreeDebug = 0x800CEC24; // type:func +__osRealloc = 0x800CED54; // type:func +__osReallocDebug = 0x800CEEA8; // type:func +ArenaImpl_GetSizes = 0x800CEEC8; // type:func +__osCheckArena = 0x800CEF3C; // type:func +func_800FF334 = 0x800CEF78; // type:func +proutSprintf = 0x800CEF80; // type:func +vsprintf = 0x800CEFA4; // type:func +sprintf = 0x800CEFF4; // type:func +PrintUtils_VPrintf = 0x800CF050; // type:func +PrintUtils_Printf = 0x800CF084; // type:func +JpegUtils_ProcessQuantizationTable = 0x800CF0B0; // type:func +JpegUtils_ParseHuffmanCodesLengths = 0x800CF118; // type:func +JpegUtils_GetHuffmanCodes = 0x800CF19C; // type:func +JpegUtils_SetHuffmanTable = 0x800CF208; // type:func +JpegUtils_ProcessHuffmanTableImpl = 0x800CF2B0; // type:func +JpegUtils_ProcessHuffmanTable = 0x800CF36C; // type:func +JpegUtils_SetHuffmanTableOld = 0x800CF444; // type:func +JpegUtils_ProcessHuffmanTableImplOld = 0x800CF4EC; // type:func +JpegDecoder_Decode = 0x800CF5C0; // type:func +JpegDecoder_ProcessMcu = 0x800CF7E8; // type:func +JpegDecoder_ParseNextSymbol = 0x800CF984; // type:func +JpegDecoder_ReadBits = 0x800CFAC0; // type:func +osGetIntMask = 0x800CFBB0; // type:func +guScaleF = 0x800CFC10; // type:func +guScale = 0x800CFC64; // type:func +sinf = 0x800CFCB0; // type:func +sins = 0x800CFE70; // type:func +_VirtualToPhysicalTask = 0x800CFEE0; // type:func +osSpTaskLoad = 0x800CFFFC; // type:func +osSpTaskStartGo = 0x800D018C; // type:func +__osMotorAccess = 0x800D01D0; // type:func +_MakeMotorData = 0x800D0338; // type:func +osMotorInit = 0x800D0444; // type:func +__osSiCreateAccessQueue = 0x800D05A0; // type:func +__osSiGetAccess = 0x800D05F0; // type:func +__osSiRelAccess = 0x800D0634; // type:func +osContInit = 0x800D0660; // type:func +__osContGetInitData = 0x800D07D0; // type:func +__osPackRequestData = 0x800D08A0; // type:func +osContStartReadData = 0x800D09A0; // type:func +osContGetReadData = 0x800D0A24; // type:func +__osPackReadData = 0x800D0AB0; // type:func +guPerspectiveF = 0x800D0B80; // type:func +guPerspective = 0x800D0DB0; // type:func +__osSpRawStartDma = 0x800D0E10; // type:func +__osSiRawStartDma = 0x800D0EA0; // type:func +osSpTaskYield = 0x800D0F50; // type:func +guMtxF2L = 0x800D0F70; // type:func +guMtxIdentF = 0x800D1070; // type:func +guMtxIdent = 0x800D10F8; // type:func +guMtxL2F = 0x800D1128; // type:func +guLookAtF = 0x800D11E0; // type:func +guLookAt = 0x800D1498; // type:func +osStopTimer = 0x800D1510; // type:func +sqrtf = 0x800D1600; // type:func +osAfterPreNMI = 0x800D1610; // type:func +osContStartQuery = 0x800D1630; // type:func +osContGetQuery = 0x800D16B4; // type:func +guLookAtHiliteF = 0x800D16E0; // type:func +guLookAtHilite = 0x800D1E18; // type:func +_Putfld = 0x800D1ED0; // type:func +_Printf = 0x800D2540; // type:func +memcpy = 0x800D2B90; // type:func +strlen = 0x800D2BBC; // type:func +strchr = 0x800D2BE4; // type:func +__osSpDeviceBusy = 0x800D2C30; // type:func +guPositionF = 0x800D2C60; // type:func +guPosition = 0x800D2E10; // type:func +osSpTaskYielded = 0x800D2E80; // type:func +guRotateF = 0x800D2F00; // type:func +guRotate = 0x800D3094; // type:func +osAiSetFrequency = 0x800D30F0; // type:func +__osGetActiveQueue = 0x800D3240; // type:func +guNormalize = 0x800D3250; // type:func +osDpGetStatus = 0x800D32E0; // type:func +osDpSetStatus = 0x800D32F0; // type:func +guOrthoF = 0x800D3300; // type:func +guOrtho = 0x800D3454; // type:func +cosf = 0x800D34C0; // type:func +coss = 0x800D3630; // type:func +osSetTime = 0x800D3660; // type:func +osViSetEvent = 0x800D3690; // type:func +guS2DInitBg = 0x800D3700; // type:func +__osPfsSelectBank = 0x800D3880; // type:func +osContSetCh = 0x800D3900; // type:func +osAiGetLength = 0x800D3970; // type:func +guTranslateF = 0x800D3980; // type:func +guTranslate = 0x800D39C8; // type:func +__osContRamWrite = 0x800D3A20; // type:func +__osPfsGetStatus = 0x800D3C70; // type:func +__osPfsRequestOneChannel = 0x800D3D40; // type:func +__osPfsGetOneChannelData = 0x800D3E04; // type:func +__osSumcalc = 0x800D3EA0; // type:func +__osIdCheckSum = 0x800D3F14; // type:func +__osRepairPackId = 0x800D4010; // type:func +__osCheckPackId = 0x800D4360; // type:func +__osGetId = 0x800D44C4; // type:func +__osCheckId = 0x800D4670; // type:func +__osPfsRWInode = 0x800D4744; // type:func +bcmp = 0x800D4A20; // type:func +__osContRamRead = 0x800D4B40; // type:func +__osContAddressCrc = 0x800D4D70; // type:func +__osContDataCrc = 0x800D4E40; // type:func +osPfsIsPlug = 0x800D4EE0; // type:func +__osPfsRequestData = 0x800D5080; // type:func +__osPfsGetInitData = 0x800D5150; // type:func +_Litob = 0x800D5220; // type:func +lldiv = 0x800D54C0; // type:func +ldiv = 0x800D55C0; // type:func +_Genld = 0x800D5650; // type:func +_Ldunscale = 0x800D5BB8; // type:func +_Ldtob = 0x800D5BC0; // type:func +__osSpGetStatus = 0x800D6110; // type:func +__osSpSetStatus = 0x800D6120; // type:func +osWritebackDCacheAll = 0x800D6130; // type:func +__osGetCurrFaultedThread = 0x800D6160; // type:func +__d_to_ll = 0x800D6170; // type:func +__f_to_ll = 0x800D618C; // type:func +__d_to_ull = 0x800D61A8; // type:func +__f_to_ull = 0x800D6248; // type:func +__ll_to_d = 0x800D62E4; // type:func +__ll_to_f = 0x800D62FC; // type:func +__ull_to_d = 0x800D6314; // type:func +__ull_to_f = 0x800D6348; // type:func +osViGetCurrentFramebuffer = 0x800D6380; // type:func +__osSpSetPc = 0x800D63C0; // type:func +sqrt = 0x800D6400; // type:func +fmodf = 0x800D6410; // type:func +__osMemset = 0x800D6460; // type:func +__osMemmove = 0x800D6490; // type:func +Message_ResetOcarinaNoteState = 0x800D6520; // type:func +Message_UpdateOcarinaMemoryGame = 0x800D661C; // type:func +Message_ShouldAdvance = 0x800D6740; // type:func +Message_ShouldAdvanceSilent = 0x800D6800; // type:func +Message_CloseTextbox = 0x800D6848; // type:func +Message_HandleChoiceSelection = 0x800D68C0; // type:func +Message_DrawTextChar = 0x800D6AA0; // type:func +Message_GrowTextbox = 0x800D6E18; // type:func +Message_FindMessageJPN = 0x800D701C; // type:func +Message_FindMessageNES = 0x800D70C0; // type:func +Message_FindCreditsMessage = 0x800D7164; // type:func +Message_SetTextColor = 0x800D71D8; // type:func +Message_DrawTextboxIcon = 0x800D748C; // type:func +Message_DrawItemIcon = 0x800D7BD4; // type:func +Message_HandleOcarina = 0x800D7F20; // type:func +Message_DrawTextJPN = 0x800D8130; // type:func +Message_DrawTextNES = 0x800D9524; // type:func +Message_LoadItemIcon = 0x800DA79C; // type:func +Message_Decode = 0x800DA93C; // type:func +Message_OpenText = 0x800DCE64; // type:func +Message_StartTextbox = 0x800DD440; // type:func +Message_ContinueTextbox = 0x800DD4AC; // type:func +Message_StartOcarinaImpl = 0x800DD57C; // type:func +Message_StartOcarina = 0x800DDA2C; // type:func +Message_StartOcarinaSunsSongDisabled = 0x800DDA5C; // type:func +Message_GetState = 0x800DDA90; // type:func +Message_DrawTextBox = 0x800DDBB0; // type:func +Message_SetView = 0x800DE050; // type:func +Message_DrawMain = 0x800DE098; // type:func +Message_Draw = 0x800E1074; // type:func +Message_Update = 0x800E1100; // type:func +Message_SetTables = 0x800E1C88; // type:func +GameOver_Init = 0x800E1D00; // type:func +GameOver_FadeInLights = 0x800E1D14; // type:func +GameOver_Update = 0x800E1D7C; // type:func +Interface_Destroy = 0x800E2240; // type:func +Interface_Init = 0x800E2260; // type:func +Message_Init = 0x800E2660; // type:func +Regs_InitDataImpl = 0x800E2704; // type:func +Regs_InitData = 0x800E35D0; // type:func +njpgdspMainTextStart = 0x800E7200; // type:func +n64dd_SetDiskVersion = 0x801C8808; // type:func +ConsoleLogo_Calc = 0x80800000; // type:func +ConsoleLogo_SetupView = 0x8080009C; // type:func +ConsoleLogo_Draw = 0x80800134; // type:func +ConsoleLogo_Main = 0x80800690; // type:func +ConsoleLogo_Destroy = 0x80800750; // type:func +ConsoleLogo_Init = 0x808007B0; // type:func +MapSelect_LoadTitle = 0x808009C0; // type:func +MapSelect_LoadGame = 0x808009E0; // type:func +func_80800AD0_unknown = 0x80800AD0; // type:func +func_80800B08_unknown = 0x80800B08; // type:func +MapSelect_UpdateMenu = 0x80800B40; // type:func +MapSelect_PrintMenu = 0x808014A0; // type:func +MapSelect_PrintLoadingMessage = 0x8080167C; // type:func +MapSelect_PrintAgeSetting = 0x80801708; // type:func +MapSelect_PrintCutsceneSetting = 0x8080177C; // type:func +MapSelect_DrawMenu = 0x80801938; // type:func +MapSelect_DrawLoadingScreen = 0x80801A4C; // type:func +MapSelect_Draw = 0x80801B34; // type:func +MapSelect_Main = 0x80801BDC; // type:func +MapSelect_Destroy = 0x80801C08; // type:func +MapSelect_Init = 0x80801C14; // type:func +TitleSetup_SetupTitleScreen = 0x80803720; // type:func +func_80803C5C = 0x8080378C; // type:func +TitleSetup_Main = 0x80803798; // type:func +TitleSetup_Destroy = 0x808037DC; // type:func +TitleSetup_Init = 0x808037E8; // type:func +FileSelect_SetupCopySource = 0x80803880; // type:func +FileSelect_SelectCopySource = 0x80803A18; // type:func +FileSelect_SetupCopyDest1 = 0x80803D88; // type:func +FileSelect_SetupCopyDest2 = 0x80803F18; // type:func +FileSelect_SelectCopyDest = 0x80803FE0; // type:func +FileSelect_ExitToCopySource1 = 0x80804398; // type:func +FileSelect_ExitToCopySource2 = 0x80804464; // type:func +FileSelect_SetupCopyConfirm1 = 0x80804590; // type:func +FileSelect_SetupCopyConfirm2 = 0x808047B4; // type:func +FileSelect_CopyConfirm = 0x80804810; // type:func +FileSelect_ReturnToCopyDest = 0x80804A18; // type:func +FileSelect_CopyAnim1 = 0x80804C4C; // type:func +FileSelect_CopyAnim2 = 0x80804CC8; // type:func +FileSelect_CopyAnim3 = 0x80804E18; // type:func +FileSelect_CopyAnim4 = 0x80804F34; // type:func +FileSelect_CopyAnim5 = 0x80805024; // type:func +FileSelect_ExitCopyToMain = 0x80805324; // type:func +FileSelect_SetupEraseSelect = 0x80805460; // type:func +FileSelect_EraseSelect = 0x80805630; // type:func +FileSelect_SetupEraseConfirm1 = 0x808059BC; // type:func +FileSelect_SetupEraseConfirm2 = 0x80805C84; // type:func +FileSelect_EraseConfirm = 0x80805D60; // type:func +FileSelect_ExitToEraseSelect1 = 0x80805F48; // type:func +FileSelect_ExitToEraseSelect2 = 0x80805FF8; // type:func +FileSelect_EraseAnim1 = 0x80806214; // type:func +FileSelect_EraseAnim2 = 0x808063F4; // type:func +FileSelect_EraseAnim3 = 0x808064B8; // type:func +FileSelect_ExitEraseToMain = 0x80806724; // type:func +FileSelect_DrawCharacter = 0x808068C0; // type:func +FileSelect_DrawCharacterTransition = 0x80806A18; // type:func +FileSelect_SetKeyboardVtx = 0x80806C24; // type:func +FileSelect_SetNameEntryVtx = 0x80806EE8; // type:func +FileSelect_DrawKeyboard = 0x80807BBC; // type:func +FileSelect_ApplyDiacriticToCharacter = 0x80808480; // type:func +FileSelect_ApplyDiacriticToFilename = 0x80808688; // type:func +FileSelect_DrawNameEntry = 0x80808708; // type:func +FileSelect_StartNameEntry = 0x80809B64; // type:func +FileSelect_UpdateKeyboardCursor = 0x80809C18; // type:func +FileSelect_StartOptions = 0x8080A5F8; // type:func +FileSelect_UpdateOptionsMenu = 0x8080A688; // type:func +FileSelect_DrawOptionsImpl = 0x8080A900; // type:func +FileSelect_DrawOptions = 0x8080BCA0; // type:func +FileSelect_SetView = 0x8080BCC0; // type:func +FileSelect_QuadTextureIA8 = 0x8080BD44; // type:func +FileSelect_InitModeUpdate = 0x8080BF30; // type:func +FileSelect_InitModeDraw = 0x8080BF88; // type:func +FileSelect_FadeInMenuElements = 0x8080BF94; // type:func +FileSelect_SplitNumber = 0x8080C0FC; // type:func +FileSelect_StartFadeIn = 0x8080C170; // type:func +FileSelect_FinishFadeIn = 0x8080C1F8; // type:func +FileSelect_UpdateMainMenu = 0x8080C290; // type:func +FileSelect_UnusedCM31 = 0x8080CB6C; // type:func +FileSelect_UnusedCMDelay = 0x8080CB78; // type:func +FileSelect_RotateToNameEntry = 0x8080CBCC; // type:func +FileSelect_RotateToOptions = 0x8080CC40; // type:func +FileSelect_RotateToMain = 0x8080CCB4; // type:func +FileSelect_PulsateCursor = 0x8080CD2C; // type:func +FileSelect_ConfigModeUpdate = 0x8080CE28; // type:func +FileSelect_SetWindowVtx = 0x8080CE64; // type:func +FileSelect_SetWindowContentVtx = 0x8080D138; // type:func +FileSelect_DrawFileInfo = 0x8080E3FC; // type:func +FileSelect_DrawWindowContents = 0x8080EB78; // type:func +FileSelect_ConfigModeDraw = 0x8081004C; // type:func +FileSelect_FadeMainToSelect = 0x808108B0; // type:func +FileSelect_MoveSelectedFileToTop = 0x80810A1C; // type:func +FileSelect_FadeInFileInfo = 0x80810B20; // type:func +FileSelect_ConfirmFile = 0x80810C04; // type:func +FileSelect_FadeOutFileInfo = 0x80810DD8; // type:func +FileSelect_MoveSelectedFileToSlot = 0x80810EC8; // type:func +FileSelect_FadeOut = 0x80811120; // type:func +FileSelect_LoadGame = 0x8081117C; // type:func +FileSelect_SelectModeUpdate = 0x80811370; // type:func +FileSelect_SelectModeDraw = 0x808113AC; // type:func +FileSelect_Main = 0x80811760; // type:func +FileSelect_InitContext = 0x80811D5C; // type:func +FileSelect_Destroy = 0x80812388; // type:func +FileSelect_Init = 0x80812394; // type:func +KaleidoScope_DrawQuestStatus = 0x808137C0; // type:func +KaleidoScope_UpdateQuestStatusPoint = 0x80815BF4; // type:func +KaleidoScope_DrawDebugEditorText = 0x80815C10; // type:func +KaleidoScope_DrawDigit = 0x80815F04; // type:func +KaleidoScope_DrawDebugEditor = 0x80816078; // type:func +KaleidoScope_DrawEquipmentImage = 0x80817BA0; // type:func +KaleidoScope_DrawPlayerWork = 0x80817FE8; // type:func +KaleidoScope_DrawEquipment = 0x8081818C; // type:func +KaleidoScope_DrawAmmoCount = 0x80819670; // type:func +KaleidoScope_SetCursorVtx = 0x80819BF4; // type:func +KaleidoScope_SetItemCursorVtx = 0x80819C24; // type:func +KaleidoScope_DrawItemSelect = 0x80819C50; // type:func +KaleidoScope_UpdateItemEquip = 0x8081AA60; // type:func +KaleidoScope_DrawDungeonMap = 0x8081B660; // type:func +KaleidoScope_DrawWorldMap = 0x8081CE54; // type:func +KaleidoScope_UpdatePrompt = 0x8081E970; // type:func +KaleidoScope_SetupPlayerPreRender = 0x8081EB70; // type:func +KaleidoScope_ProcessPlayerPreRender = 0x8081EC48; // type:func +KaleidoScope_QuadTextureIA4 = 0x8081EC80; // type:func +KaleidoScope_QuadTextureIA8 = 0x8081EE60; // type:func +KaleidoScope_OverridePalIndexCI4 = 0x8081F04C; // type:func +KaleidoScope_MoveCursorToSpecialPos = 0x8081F184; // type:func +KaleidoScope_DrawQuadTextureRGBA32 = 0x8081F1E8; // type:func +KaleidoScope_SetDefaultCursor = 0x8081F3F8; // type:func +KaleidoScope_SetupPageSwitch = 0x8081F4B8; // type:func +KaleidoScope_HandlePageToggles = 0x8081F630; // type:func +KaleidoScope_DrawCursor = 0x8081F760; // type:func +KaleidoScope_DrawPageSections = 0x8081FAD8; // type:func +KaleidoScope_DrawPages = 0x8081FD98; // type:func +KaleidoScope_DrawInfoPanel = 0x80821594; // type:func +KaleidoScope_UpdateNamePanel = 0x80822D48; // type:func +KaleidoScope_UpdatePageSwitch = 0x80822F40; // type:func +KaleidoScope_SetView = 0x80823120; // type:func +func_80823A0C = 0x8082319C; // type:func +KaleidoScope_InitVertices = 0x8082382C; // type:func +KaleidoScope_DrawGameOver = 0x8082536C; // type:func +KaleidoScope_Draw = 0x80825A00; // type:func +KaleidoScope_GrayOutTextureRGBA32 = 0x80825C1C; // type:func +KaleidoScope_UpdateOpening = 0x80825CD0; // type:func +KaleidoScope_UpdateCursorSize = 0x80825EC0; // type:func +KaleidoScope_LoadDungeonMap = 0x80826204; // type:func +KaleidoScope_UpdateDungeonMap = 0x808262A0; // type:func +KaleidoScope_Update = 0x808263C0; // type:func +PauseMapMark_Init = 0x80828C00; // type:func +PauseMapMark_Clear = 0x80828C6C; // type:func +PauseMapMark_DrawForDungeon = 0x80828CB8; // type:func +PauseMapMark_Draw = 0x808292E8; // type:func +Player_ZeroSpeedXZ = 0x808301C0; // type:func +func_80832224 = 0x808301D8; // type:func +func_8083224C = 0x80830200; // type:func +Player_AnimPlayOnce = 0x8083021C; // type:func +Player_AnimPlayLoop = 0x80830240; // type:func +Player_AnimPlayLoopAdjusted = 0x80830264; // type:func +Player_AnimPlayOnceAdjusted = 0x80830294; // type:func +func_808322FC = 0x808302C4; // type:func +func_80832318 = 0x808302E4; // type:func +func_80832340 = 0x80830310; // type:func +Player_DetachHeldActor = 0x80830380; // type:func +func_80832440 = 0x8083040C; // type:func +Player_PutAwayHeldItem = 0x808304F4; // type:func +func_80832564 = 0x80830530; // type:func +func_80832594 = 0x80830568; // type:func +func_80832630 = 0x80830608; // type:func +Player_RequestRumble = 0x80830624; // type:func +func_80832698 = 0x80830670; // type:func +func_808326F0 = 0x808306D0; // type:func +func_8083275C = 0x8083073C; // type:func +func_80832770 = 0x80830758; // type:func +func_808327A4 = 0x80830790; // type:func +func_808327C4 = 0x808307B8; // type:func +func_808327F8 = 0x808307F0; // type:func +func_80832854 = 0x8083084C; // type:func +func_808328A0 = 0x80830898; // type:func +func_808328EC = 0x808308E4; // type:func +Player_ProcessAnimSfxList = 0x80830918; // type:func +Player_AnimChangeOnceMorph = 0x80830B00; // type:func +Player_AnimChangeOnceMorphAdjusted = 0x80830B6C; // type:func +Player_AnimChangeLoopMorph = 0x80830BDC; // type:func +Player_AnimChangeFreeze = 0x80830C24; // type:func +Player_AnimChangeLoopSlowMorph = 0x80830C68; // type:func +func_80832CB0 = 0x80830CB0; // type:func +Player_SkelAnimeResetPrevTranslRot = 0x80830D04; // type:func +Player_SkelAnimeResetPrevTranslRotAgeScale = 0x80830D2C; // type:func +Player_ZeroRootLimbYaw = 0x80830DB8; // type:func +func_80832DBC = 0x80830DC8; // type:func +func_80832E48 = 0x80830E54; // type:func +Player_AnimReplaceApplyFlags = 0x80830F64; // type:func +Player_AnimReplacePlayOnceSetSpeed = 0x8083100C; // type:func +Player_AnimReplacePlayOnce = 0x80831054; // type:func +Player_AnimReplacePlayOnceAdjusted = 0x8083107C; // type:func +Player_AnimReplaceNormalPlayOnceAdjusted = 0x808310A4; // type:func +Player_AnimReplacePlayLoopSetSpeed = 0x808310C4; // type:func +Player_AnimReplacePlayLoop = 0x8083110C; // type:func +Player_AnimReplacePlayLoopAdjusted = 0x80831134; // type:func +Player_AnimReplaceNormalPlayLoopAdjusted = 0x8083115C; // type:func +Player_ProcessControlStick = 0x8083117C; // type:func +func_8083328C = 0x808312A8; // type:func +func_808332B8 = 0x808312D8; // type:func +func_808332E4 = 0x80831304; // type:func +func_808332F4 = 0x80831318; // type:func +func_80833338 = 0x8083135C; // type:func +func_80833350 = 0x80831378; // type:func +func_808333FC = 0x8083142C; // type:func +func_80833438 = 0x80831468; // type:func +func_808334B4 = 0x808314E4; // type:func +func_808334E4 = 0x80831518; // type:func +func_80833528 = 0x80831560; // type:func +func_8083356C = 0x808315A8; // type:func +func_808335B0 = 0x808315F0; // type:func +func_808335F4 = 0x80831638; // type:func +Player_SetUpperActionFunc = 0x80831680; // type:func +Player_InitItemActionWithAnim = 0x808316AC; // type:func +Player_ItemToItemAction = 0x8083176C; // type:func +Player_InitDefaultIA = 0x808317B8; // type:func +Player_InitDekuStickIA = 0x808317C8; // type:func +Player_InitHammerIA = 0x808317E4; // type:func +Player_InitBowOrSlingshotIA = 0x808317F4; // type:func +Player_InitExplosiveIA = 0x8083182C; // type:func +Player_InitHookshotIA = 0x8083196C; // type:func +Player_InitBoomerangIA = 0x808319DC; // type:func +Player_InitItemAction = 0x808319F8; // type:func +func_80833A20 = 0x80831A84; // type:func +func_80833B2C = 0x80831B8C; // type:func +func_80833B54 = 0x80831BB4; // type:func +func_80833BCC = 0x80831C2C; // type:func +func_80833C04 = 0x80831C68; // type:func +func_80833C3C = 0x80831CA4; // type:func +Player_ItemIsInUse = 0x80831CBC; // type:func +Player_ItemIsItemAction = 0x80831D08; // type:func +Player_GetItemOnButton = 0x80831D50; // type:func +Player_ProcessItemButtons = 0x80831E6C; // type:func +Player_StartChangingHeldItem = 0x8083214C; // type:func +Player_UpdateItems = 0x80832304; // type:func +func_80834380 = 0x808323EC; // type:func +func_8083442C = 0x80832498; // type:func +Player_FinishItemChange = 0x80832600; // type:func +func_80834644 = 0x808326B0; // type:func +func_808346C4 = 0x80832730; // type:func +func_80834758 = 0x808327C4; // type:func +func_8083485C = 0x808328CC; // type:func +func_80834894 = 0x80832904; // type:func +Player_WaitToFinishItemChange = 0x80832960; // type:func +func_8083499C = 0x80832A10; // type:func +Player_UpperAction_Sword = 0x80832A50; // type:func +Player_UpperAction_ChangeHeldItem = 0x80832AA0; // type:func +func_80834B5C = 0x80832BD0; // type:func +func_80834BD4 = 0x80832C4C; // type:func +func_80834C74 = 0x80832CF0; // type:func +func_80834D2C = 0x80832DA8; // type:func +func_80834E44 = 0x80832EC0; // type:func +func_80834E7C = 0x80832EF8; // type:func +func_80834EB8 = 0x80832F34; // type:func +func_80834F2C = 0x80832FA8; // type:func +func_80834FBC = 0x80833038; // type:func +func_8083501C = 0x80833098; // type:func +func_808350A4 = 0x80833120; // type:func +func_808351D4 = 0x80833254; // type:func +func_808353D8 = 0x80833460; // type:func +func_80835588 = 0x80833610; // type:func +func_808355DC = 0x8083366C; // type:func +func_80835644 = 0x808336D8; // type:func +func_80835688 = 0x80833720; // type:func +Player_UpperAction_CarryActor = 0x80833780; // type:func +func_808357E8 = 0x80833880; // type:func +func_80835800 = 0x8083389C; // type:func +func_80835884 = 0x80833920; // type:func +func_808358F0 = 0x8083398C; // type:func +func_808359FC = 0x80833AA0; // type:func +func_80835B60 = 0x80833C08; // type:func +func_80835C08 = 0x80833CB0; // type:func +Player_SetupAction = 0x80833D08; // type:func +func_80835DAC = 0x80833E64; // type:func +func_80835DE4 = 0x80833E98; // type:func +func_80835E44 = 0x80833EFC; // type:func +func_80835EA4 = 0x80833F60; // type:func +Player_DestroyHookshot = 0x80833FBC; // type:func +Player_UseItem = 0x8083400C; // type:func +func_80836448 = 0x80834514; // type:func +Player_CanUpdateItems = 0x80834694; // type:func +Player_UpdateUpperBody = 0x80834740; // type:func +Player_SetupWaitForPutAway = 0x80834968; // type:func +Player_UpdateShapeYaw = 0x808349C0; // type:func +func_808369C8 = 0x80834A9C; // type:func +func_80836AB8 = 0x80834B88; // type:func +func_80836BEC = 0x80834CBC; // type:func +Player_CalcSpeedAndYawFromControlStick = 0x80835080; // type:func +func_8083721C = 0x808352F0; // type:func +Player_GetMovementSpeedAndYaw = 0x80835344; // type:func +Player_TryActionChangeList = 0x80835424; // type:func +Player_TryActionInterrupt = 0x80835580; // type:func +func_80837530 = 0x80835618; // type:func +Player_CanSpinAttack = 0x808356C8; // type:func +func_80837704 = 0x808357F8; // type:func +func_808377DC = 0x808358D0; // type:func +func_80837818 = 0x80835914; // type:func +func_80837918 = 0x80835A14; // type:func +func_80837948 = 0x80835A44; // type:func +func_80837AE0 = 0x80835BE4; // type:func +func_80837AFC = 0x80835C00; // type:func +func_80837B18 = 0x80835C20; // type:func +func_80837B60 = 0x80835C68; // type:func +func_80837B9C = 0x80835CA4; // type:func +func_80837C0C = 0x80835D14; // type:func +func_80838144 = 0x8083624C; // type:func +func_8083816C = 0x80836274; // type:func +func_8083819C = 0x808362A4; // type:func +func_8083821C = 0x80836328; // type:func +func_80838280 = 0x8083638C; // type:func +func_808382BC = 0x808363C8; // type:func +func_808382DC = 0x808363E8; // type:func +func_80838940 = 0x80836A4C; // type:func +func_808389E8 = 0x80836AF0; // type:func +Player_ActionChange_12 = 0x80836B1C; // type:func +func_80838E70 = 0x80836F70; // type:func +func_80838F18 = 0x80837020; // type:func +func_80838F5C = 0x8083706C; // type:func +func_80838FB8 = 0x808370D0; // type:func +Player_HandleExitsAndVoids = 0x8083714C; // type:func +Player_GetRelativePosition = 0x808376F0; // type:func +Player_SpawnFairy = 0x80837794; // type:func +func_808396F4 = 0x80837808; // type:func +func_8083973C = 0x80837854; // type:func +Player_PosVsWallLineTest = 0x80837880; // type:func +Player_ActionChange_1 = 0x8083791C; // type:func +func_80839E88 = 0x80837FB0; // type:func +func_80839F30 = 0x80838054; // type:func +func_80839F90 = 0x808380B0; // type:func +func_80839FFC = 0x8083811C; // type:func +func_8083A060 = 0x80838184; // type:func +func_8083A098 = 0x808381C0; // type:func +func_8083A0D4 = 0x80838200; // type:func +func_8083A0F4 = 0x80838220; // type:func +func_8083A2F8 = 0x80838424; // type:func +func_8083A360 = 0x80838494; // type:func +func_8083A388 = 0x808384BC; // type:func +func_8083A3B0 = 0x808384E4; // type:func +func_8083A40C = 0x8083853C; // type:func +func_8083A434 = 0x80838564; // type:func +func_8083A4A8 = 0x808385D8; // type:func +func_8083A5C4 = 0x808386F4; // type:func +func_8083A6AC = 0x808387E8; // type:func +func_8083A9B8 = 0x80838AF0; // type:func +func_8083AA10 = 0x80838B48; // type:func +func_8083AD4C = 0x80838E84; // type:func +Player_StartCsAction = 0x80838F0C; // type:func +func_8083AE40 = 0x80838F78; // type:func +func_8083AF44 = 0x80839000; // type:func +func_8083B010 = 0x808390D4; // type:func +Player_ActionChange_13 = 0x80839108; // type:func +Player_ActionChange_4 = 0x8083970C; // type:func +func_8083B8F4 = 0x808399B8; // type:func +Player_ActionChange_0 = 0x80839A60; // type:func +func_8083BA90 = 0x80839B58; // type:func +func_8083BB20 = 0x80839BF0; // type:func +func_8083BBA0 = 0x80839C70; // type:func +func_8083BC04 = 0x80839CD8; // type:func +func_8083BC7C = 0x80839D50; // type:func +func_8083BCD0 = 0x80839DA4; // type:func +Player_ActionChange_10 = 0x80839E90; // type:func +func_8083BF50 = 0x8083A024; // type:func +func_8083C0B8 = 0x8083A188; // type:func +func_8083C0E8 = 0x8083A1C0; // type:func +func_8083C148 = 0x8083A21C; // type:func +Player_ActionChange_6 = 0x8083A2B8; // type:func +Player_ActionChange_11 = 0x8083A390; // type:func +func_8083C484 = 0x8083A568; // type:func +func_8083C50C = 0x8083A5F0; // type:func +Player_ActionChange_8 = 0x8083A628; // type:func +func_8083C61C = 0x8083A704; // type:func +func_8083C6B8 = 0x8083A7A0; // type:func +func_8083C858 = 0x8083A944; // type:func +func_8083C8DC = 0x8083A9C8; // type:func +func_8083C910 = 0x8083A9FC; // type:func +func_8083CA20 = 0x8083AB10; // type:func +func_8083CA54 = 0x8083AB48; // type:func +func_8083CA9C = 0x8083AB90; // type:func +func_8083CB2C = 0x8083AC24; // type:func +func_8083CB94 = 0x8083AC88; // type:func +func_8083CBF0 = 0x8083ACE4; // type:func +func_8083CC9C = 0x8083AD8C; // type:func +func_8083CD00 = 0x8083ADEC; // type:func +func_8083CD54 = 0x8083AE40; // type:func +func_8083CE0C = 0x8083AEFC; // type:func +func_8083CEAC = 0x8083AF98; // type:func +func_8083CF10 = 0x8083AFF8; // type:func +func_8083CF5C = 0x8083B040; // type:func +func_8083CFA8 = 0x8083B088; // type:func +func_8083D0A8 = 0x8083B190; // type:func +func_8083D12C = 0x8083B218; // type:func +func_8083D330 = 0x8083B41C; // type:func +func_8083D36C = 0x8083B458; // type:func +func_8083D53C = 0x8083B62C; // type:func +func_8083D6EC = 0x8083B7DC; // type:func +func_8083DB98 = 0x8083BC8C; // type:func +func_8083DC54 = 0x8083BD48; // type:func +func_8083DDC8 = 0x8083BEBC; // type:func +func_8083DF68 = 0x8083C064; // type:func +func_8083DFE0 = 0x8083C0E0; // type:func +Player_ActionChange_3 = 0x8083C200; // type:func +Player_GetSlopeDirection = 0x8083C39C; // type:func +Player_HandleSlopes = 0x8083C418; // type:func +func_8083E4C4 = 0x8083C5CC; // type:func +Player_ActionChange_2 = 0x8083C6B4; // type:func +func_8083EA94 = 0x8083CB48; // type:func +func_8083EAF0 = 0x8083CBA4; // type:func +Player_ActionChange_9 = 0x8083CBF8; // type:func +func_8083EC18 = 0x8083CCCC; // type:func +func_8083F070 = 0x8083D128; // type:func +Player_TryEnteringCrawlspace = 0x8083D180; // type:func +func_8083F360 = 0x8083D418; // type:func +func_8083F524 = 0x8083D5DC; // type:func +Player_TryLeavingCrawlspace = 0x8083D628; // type:func +func_8083F72C = 0x8083D7E4; // type:func +Player_ActionChange_5 = 0x8083D870; // type:func +func_8083F9D0 = 0x8083DA84; // type:func +func_8083FAB8 = 0x8083DB68; // type:func +func_8083FB14 = 0x8083DBC4; // type:func +func_8083FB7C = 0x8083DC2C; // type:func +func_8083FBC0 = 0x8083DC6C; // type:func +func_8083FC68 = 0x8083DD18; // type:func +func_8083FD78 = 0x8083DE28; // type:func +func_8083FFB8 = 0x8083E06C; // type:func +func_80840058 = 0x8083E10C; // type:func +func_80840138 = 0x8083E1F4; // type:func +func_808401B0 = 0x8083E26C; // type:func +func_8084021C = 0x8083E2D8; // type:func +func_8084029C = 0x8083E358; // type:func +Player_Action_80840450 = 0x8083E510; // type:func +Player_Action_808407CC = 0x8083E88C; // type:func +func_808409CC = 0x8083EA8C; // type:func +Player_Action_80840BC8 = 0x8083EC88; // type:func +Player_Action_80840DE4 = 0x8083EEA8; // type:func +func_80841138 = 0x8083F1FC; // type:func +func_8084140C = 0x8083F4D8; // type:func +func_80841458 = 0x8083F524; // type:func +Player_Action_808414F8 = 0x8083F5C4; // type:func +func_808416C0 = 0x8083F798; // type:func +Player_Action_8084170C = 0x8083F7E4; // type:func +Player_Action_808417FC = 0x8083F8D4; // type:func +func_80841860 = 0x8083F938; // type:func +Player_Action_8084193C = 0x8083FA14; // type:func +Player_Action_80841BA8 = 0x8083FC78; // type:func +func_80841CC4 = 0x8083FD94; // type:func +func_80841EE4 = 0x8083FFB8; // type:func +Player_Action_80842180 = 0x8084025C; // type:func +Player_Action_8084227C = 0x80840360; // type:func +Player_Action_808423EC = 0x808404D4; // type:func +Player_Action_8084251C = 0x80840604; // type:func +func_8084260C = 0x808406F4; // type:func +func_8084269C = 0x80840784; // type:func +Player_Action_8084279C = 0x80840884; // type:func +func_8084285C = 0x80840944; // type:func +func_808428D8 = 0x808409C0; // type:func +func_80842964 = 0x80840A50; // type:func +Player_RequestQuake = 0x80840AA8; // type:func +func_80842A28 = 0x80840B1C; // type:func +func_80842A88 = 0x80840B80; // type:func +func_80842AC4 = 0x80840BBC; // type:func +func_80842B7C = 0x80840C78; // type:func +func_80842CF0 = 0x80840DF0; // type:func +func_80842D20 = 0x80840E28; // type:func +func_80842DF4 = 0x80840F00; // type:func +Player_Action_80843188 = 0x80841294; // type:func +Player_Action_808435C4 = 0x808416D0; // type:func +Player_Action_8084370C = 0x8084181C; // type:func +Player_Action_8084377C = 0x80841890; // type:func +Player_Action_80843954 = 0x80841A6C; // type:func +Player_Action_80843A38 = 0x80841B54; // type:func +func_80843AE8 = 0x80841C08; // type:func +Player_Action_80843CEC = 0x80841E0C; // type:func +func_80843E14 = 0x80841F38; // type:func +func_80843E64 = 0x80841F8C; // type:func +func_8084409C = 0x808421C4; // type:func +Player_Action_8084411C = 0x8084224C; // type:func +Player_Action_80844708 = 0x80842840; // type:func +Player_Action_80844A44 = 0x80842B7C; // type:func +Player_Action_80844AF4 = 0x80842C2C; // type:func +func_80844BE4 = 0x80842D1C; // type:func +func_80844CF8 = 0x80842E34; // type:func +func_80844D30 = 0x80842E6C; // type:func +func_80844D68 = 0x80842EA4; // type:func +func_80844DC8 = 0x80842F08; // type:func +func_80844E3C = 0x80842F7C; // type:func +Player_Action_80844E68 = 0x80842FAC; // type:func +Player_Action_80845000 = 0x80843144; // type:func +Player_Action_80845308 = 0x8084344C; // type:func +Player_Action_80845668 = 0x808437AC; // type:func +Player_Action_WaitForPutAway = 0x80843A18; // type:func +func_80845964 = 0x80843AAC; // type:func +func_80845BA0 = 0x80843CF0; // type:func +func_80845C68 = 0x80843DBC; // type:func +Player_Action_80845CA4 = 0x80843DFC; // type:func +Player_Action_80845EF8 = 0x8084405C; // type:func +Player_Action_80846050 = 0x808441B4; // type:func +Player_Action_80846120 = 0x8084428C; // type:func +Player_Action_80846260 = 0x808443CC; // type:func +Player_Action_80846358 = 0x808444CC; // type:func +Player_Action_80846408 = 0x8084457C; // type:func +Player_Action_808464B0 = 0x80844624; // type:func +Player_Action_80846578 = 0x808446F0; // type:func +func_8084663C = 0x808447B8; // type:func +func_80846648 = 0x808447C8; // type:func +func_80846660 = 0x808447E4; // type:func +func_80846720 = 0x808448A4; // type:func +func_808467D4 = 0x80844958; // type:func +func_808468A8 = 0x80844A34; // type:func +func_808468E8 = 0x80844A7C; // type:func +func_80846978 = 0x80844B0C; // type:func +func_808469BC = 0x80844B50; // type:func +Player_SpawnMagicSpell = 0x80844B90; // type:func +func_80846A68 = 0x80844BFC; // type:func +Player_InitCommon = 0x80844C3C; // type:func +Player_Init = 0x80844E6C; // type:func +func_808471F4 = 0x8084537C; // type:func +func_80847298 = 0x80845420; // type:func +Player_UpdateInterface = 0x8084555C; // type:func +Player_UpdateHoverBoots = 0x80845C0C; // type:func +Player_ProcessSceneCollision = 0x80845D34; // type:func +Player_UpdateCamAndSeqModes = 0x8084683C; // type:func +Player_UpdateBurningDekuStick = 0x80846B9C; // type:func +Player_UpdateBodyShock = 0x80846CE4; // type:func +Player_UpdateBodyBurn = 0x80846E14; // type:func +Player_DetectRumbleSecrets = 0x80847098; // type:func +Player_UpdateCommon = 0x80847140; // type:func +Player_Update = 0x8084804C; // type:func +Player_DrawGameplay = 0x80848284; // type:func +Player_Draw = 0x80848704; // type:func +Player_Destroy = 0x80848C38; // type:func +func_8084ABD8 = 0x80848CBC; // type:func +func_8084AEEC = 0x80848FD0; // type:func +func_8084B000 = 0x808490EC; // type:func +func_8084B158 = 0x8084924C; // type:func +Player_Action_8084B1D8 = 0x808492CC; // type:func +func_8084B3CC = 0x808494BC; // type:func +func_8084B498 = 0x80849590; // type:func +func_8084B4D4 = 0x808495CC; // type:func +Player_Action_8084B530 = 0x8084962C; // type:func +Player_Action_8084B78C = 0x80849894; // type:func +func_8084B840 = 0x80849948; // type:func +Player_Action_8084B898 = 0x808499A4; // type:func +Player_Action_8084B9E4 = 0x80849AF0; // type:func +Player_Action_8084BBE4 = 0x80849CF4; // type:func +Player_Action_8084BDFC = 0x80849F08; // type:func +func_8084BEE4 = 0x80849FF0; // type:func +Player_Action_8084BF1C = 0x8084A028; // type:func +Player_Action_8084C5F8 = 0x8084A708; // type:func +Player_Action_8084C760 = 0x8084A870; // type:func +Player_Action_8084C81C = 0x8084A92C; // type:func +func_8084C89C = 0x8084A9AC; // type:func +func_8084C9BC = 0x8084AAD8; // type:func +func_8084CBF4 = 0x8084AD10; // type:func +Player_Action_8084CC98 = 0x8084ADB8; // type:func +Player_Action_8084D3E4 = 0x8084B508; // type:func +func_8084D530 = 0x8084B65C; // type:func +func_8084D574 = 0x8084B6A4; // type:func +func_8084D5CC = 0x8084B700; // type:func +Player_Action_8084D610 = 0x8084B74C; // type:func +Player_Action_8084D7C4 = 0x8084B8FC; // type:func +Player_Action_8084D84C = 0x8084B98C; // type:func +func_8084D980 = 0x8084BAC0; // type:func +Player_Action_8084DAB4 = 0x8084BBF8; // type:func +func_8084DBC4 = 0x8084BD08; // type:func +Player_Action_8084DC48 = 0x8084BD8C; // type:func +func_8084DF6C = 0x8084C0B0; // type:func +func_8084DFAC = 0x8084C0F4; // type:func +func_8084DFF4 = 0x8084C140; // type:func +Player_Action_8084E1EC = 0x8084C338; // type:func +Player_Action_8084E30C = 0x8084C458; // type:func +Player_Action_8084E368 = 0x8084C4B8; // type:func +Player_Action_8084E3C4 = 0x8084C518; // type:func +Player_Action_8084E604 = 0x8084C758; // type:func +Player_Action_8084E6D4 = 0x8084C828; // type:func +func_8084E988 = 0x8084CADC; // type:func +Player_Action_8084E9AC = 0x8084CB00; // type:func +Player_Action_8084EAC0 = 0x8084CC14; // type:func +Player_Action_8084ECA4 = 0x8084CE00; // type:func +Player_Action_8084EED8 = 0x8084D038; // type:func +Player_Action_8084EFC0 = 0x8084D120; // type:func +Player_Action_8084F104 = 0x8084D268; // type:func +Player_Action_8084F308 = 0x8084D470; // type:func +Player_Action_8084F390 = 0x8084D4F8; // type:func +Player_Action_8084F608 = 0x8084D770; // type:func +Player_Action_8084F698 = 0x8084D800; // type:func +Player_Action_8084F710 = 0x8084D878; // type:func +Player_Action_8084F88C = 0x8084D9F4; // type:func +Player_Action_8084F9A0 = 0x8084DB08; // type:func +Player_Action_8084F9C0 = 0x8084DB28; // type:func +Player_Action_8084FA54 = 0x8084DBBC; // type:func +Player_Action_8084FB10 = 0x8084DC78; // type:func +Player_Action_8084FBF4 = 0x8084DD5C; // type:func +func_8084FF7C = 0x8084DE14; // type:func +Player_UpdateBunnyEars = 0x8084DEC8; // type:func +Player_ActionChange_7 = 0x8084E0C0; // type:func +Player_Action_808502D0 = 0x8084E16C; // type:func +Player_Action_808505DC = 0x8084E47C; // type:func +Player_Action_8085063C = 0x8084E4DC; // type:func +Player_Action_8085076C = 0x8084E60C; // type:func +Player_Action_808507F4 = 0x8084E694; // type:func +Player_Action_80850AEC = 0x8084E990; // type:func +Player_Action_80850C68 = 0x8084EB10; // type:func +Player_Action_80850E84 = 0x8084ED2C; // type:func +Player_AnimChangeOnceMorphZeroRootYawSpeed = 0x8084ED80; // type:func +Player_AnimChangeOnceMorphAdjustedZeroRootYawSpeed = 0x8084EDC4; // type:func +Player_AnimChangeLoopMorphAdjustedZeroRootYawSpeed = 0x8084EE44; // type:func +func_80851008 = 0x8084EEB0; // type:func +func_80851030 = 0x8084EED8; // type:func +func_80851050 = 0x8084EEF8; // type:func +func_80851094 = 0x8084EF3C; // type:func +func_808510B4 = 0x8084EF5C; // type:func +func_808510D4 = 0x8084EF7C; // type:func +func_808510F4 = 0x8084EF9C; // type:func +func_80851114 = 0x8084EFBC; // type:func +func_80851134 = 0x8084EFDC; // type:func +func_80851154 = 0x8084EFFC; // type:func +func_80851174 = 0x8084F01C; // type:func +func_80851194 = 0x8084F03C; // type:func +func_808511B4 = 0x8084F05C; // type:func +func_808511D4 = 0x8084F07C; // type:func +func_808511FC = 0x8084F0A8; // type:func +func_80851248 = 0x8084F0FC; // type:func +func_80851294 = 0x8084F150; // type:func +func_808512E0 = 0x8084F1A4; // type:func +func_80851314 = 0x8084F1DC; // type:func +func_80851368 = 0x8084F230; // type:func +func_808513BC = 0x8084F284; // type:func +func_808514C0 = 0x8084F38C; // type:func +func_8085157C = 0x8084F448; // type:func +func_808515A4 = 0x8084F474; // type:func +func_80851688 = 0x8084F558; // type:func +func_80851750 = 0x8084F628; // type:func +func_80851788 = 0x8084F664; // type:func +func_80851828 = 0x8084F704; // type:func +func_808518DC = 0x8084F7BC; // type:func +func_8085190C = 0x8084F7F0; // type:func +func_80851998 = 0x8084F87C; // type:func +func_808519C0 = 0x8084F8A4; // type:func +func_808519EC = 0x8084F8D0; // type:func +func_80851A50 = 0x8084F934; // type:func +func_80851B90 = 0x8084FA74; // type:func +func_80851BE8 = 0x8084FAD0; // type:func +func_80851CA4 = 0x8084FB90; // type:func +func_80851D2C = 0x8084FC1C; // type:func +func_80851D80 = 0x8084FC74; // type:func +func_80851DEC = 0x8084FCE8; // type:func +func_80851E28 = 0x8084FD28; // type:func +func_80851E64 = 0x8084FD68; // type:func +func_80851E90 = 0x8084FD94; // type:func +func_80851ECC = 0x8084FDD4; // type:func +func_80851F14 = 0x8084FE24; // type:func +func_80851F84 = 0x8084FE98; // type:func +func_80851FB0 = 0x8084FEC4; // type:func +func_80852048 = 0x8084FF60; // type:func +func_80852080 = 0x8084FF9C; // type:func +func_808520BC = 0x8084FFDC; // type:func +func_80852174 = 0x80850094; // type:func +func_808521B8 = 0x808500E0; // type:func +func_808521F4 = 0x80850120; // type:func +func_80852234 = 0x80850160; // type:func +func_8085225C = 0x8085018C; // type:func +func_80852280 = 0x808501B0; // type:func +func_80852298 = 0x808501CC; // type:func +func_80852328 = 0x80850260; // type:func +func_80852358 = 0x80850290; // type:func +func_80852388 = 0x808502C0; // type:func +func_80852414 = 0x80850350; // type:func +func_80852450 = 0x80850390; // type:func +func_80852480 = 0x808503C0; // type:func +func_808524B0 = 0x808503F0; // type:func +func_808524D0 = 0x80850414; // type:func +func_80852514 = 0x8085045C; // type:func +func_80852544 = 0x80850490; // type:func +func_80852554 = 0x808504A4; // type:func +func_80852564 = 0x808504B8; // type:func +func_808525C0 = 0x8085051C; // type:func +func_80852608 = 0x80850568; // type:func +func_80852648 = 0x808505B0; // type:func +func_808526EC = 0x80850658; // type:func +func_8085283C = 0x808507B0; // type:func +func_808528C8 = 0x80850840; // type:func +func_80852944 = 0x808508C0; // type:func +func_808529D0 = 0x8085094C; // type:func +func_80852A54 = 0x808509D4; // type:func +func_80852B4C = 0x80850ACC; // type:func +func_80852C0C = 0x80850B8C; // type:func +func_80852C50 = 0x80850BD0; // type:func +Player_Action_CsAction = 0x80850D8C; // type:func +Player_IsDroppingFish = 0x80850E34; // type:func +Player_StartFishing = 0x80850E68; // type:func +func_80852F38 = 0x80850EA4; // type:func +Player_TryCsAction = 0x80850F70; // type:func +func_80853080 = 0x80850FF4; // type:func +Player_InflictDamage = 0x80851050; // type:func +func_80853148 = 0x808510B8; // type:func +EnTest_SetupAction = 0x8085D460; // type:func +EnTest_Init = 0x8085D46C; // type:func +EnTest_Destroy = 0x8085D6B8; // type:func +EnTest_ChooseRandomAction = 0x8085D750; // type:func +EnTest_ChooseAction = 0x8085D8CC; // type:func +EnTest_SetupWaitGround = 0x8085DBEC; // type:func +EnTest_WaitGround = 0x8085DC64; // type:func +EnTest_SetupWaitAbove = 0x8085DD44; // type:func +EnTest_WaitAbove = 0x8085DDB8; // type:func +EnTest_SetupIdle = 0x8085DE84; // type:func +EnTest_Idle = 0x8085DF08; // type:func +EnTest_Fall = 0x8085E138; // type:func +EnTest_Land = 0x8085E1EC; // type:func +EnTest_SetupWalkAndBlock = 0x8085E25C; // type:func +EnTest_WalkAndBlock = 0x8085E320; // type:func +func_80860BDC = 0x8085EA04; // type:func +func_80860C24 = 0x8085EA4C; // type:func +func_80860EC0 = 0x8085ECE8; // type:func +func_80860F84 = 0x8085EDAC; // type:func +EnTest_SetupSlashDown = 0x8085F240; // type:func +EnTest_SlashDown = 0x8085F2C4; // type:func +EnTest_SetupSlashDownEnd = 0x8085F3D0; // type:func +EnTest_SlashDownEnd = 0x8085F420; // type:func +EnTest_SetupSlashUp = 0x8085F64C; // type:func +EnTest_SlashUp = 0x8085F6C8; // type:func +EnTest_SetupJumpBack = 0x8085F780; // type:func +EnTest_JumpBack = 0x8085F820; // type:func +EnTest_SetupJumpslash = 0x8085F9C8; // type:func +EnTest_Jumpslash = 0x8085FA74; // type:func +EnTest_SetupJumpUp = 0x8085FB84; // type:func +EnTest_JumpUp = 0x8085FBFC; // type:func +EnTest_SetupStopAndBlock = 0x8085FCF4; // type:func +EnTest_StopAndBlock = 0x8085FDB4; // type:func +EnTest_SetupIdleFromBlock = 0x8085FE84; // type:func +EnTest_IdleFromBlock = 0x8085FED0; // type:func +func_80862154 = 0x8085FF88; // type:func +func_808621D4 = 0x80860008; // type:func +func_80862398 = 0x808601D0; // type:func +func_80862418 = 0x80860250; // type:func +EnTest_SetupStunned = 0x808603B4; // type:func +EnTest_Stunned = 0x80860490; // type:func +func_808627C4 = 0x80860608; // type:func +func_808628C8 = 0x8086070C; // type:func +func_80862DBC = 0x80860C04; // type:func +func_80862E6C = 0x80860CB8; // type:func +func_80862FA8 = 0x80860DF4; // type:func +func_80863044 = 0x80860E90; // type:func +func_808630F0 = 0x80860F3C; // type:func +func_8086318C = 0x80860FD8; // type:func +EnTest_SetupRecoil = 0x8086108C; // type:func +EnTest_Recoil = 0x808610E0; // type:func +EnTest_Rise = 0x808611AC; // type:func +func_808633E8 = 0x80861234; // type:func +EnTest_UpdateHeadRot = 0x808612B0; // type:func +EnTest_UpdateDamage = 0x80861348; // type:func +EnTest_Update = 0x808614E8; // type:func +EnTest_OverrideLimbDraw = 0x80861914; // type:func +EnTest_PostLimbDraw = 0x80861AE8; // type:func +EnTest_Draw = 0x80861E70; // type:func +func_80864158 = 0x80861F84; // type:func +EnTest_ReactToProjectile = 0x80862014; // type:func +EnGirlA_SetupAction = 0x80862D10; // type:func +EnGirlA_TryChangeShopItem = 0x80862D1C; // type:func +EnGirlA_InitItem = 0x80862E94; // type:func +EnGirlA_Init = 0x80862F38; // type:func +EnGirlA_Destroy = 0x80862F6C; // type:func +EnGirlA_CanBuy_Arrows = 0x80862F9C; // type:func +EnGirlA_CanBuy_Bombs = 0x8086304C; // type:func +EnGirlA_CanBuy_DekuNuts = 0x808630EC; // type:func +EnGirlA_CanBuy_DekuSticks = 0x808631A4; // type:func +EnGirlA_CanBuy_Fish = 0x8086325C; // type:func +EnGirlA_CanBuy_RedPotion = 0x808632D4; // type:func +EnGirlA_CanBuy_GreenPotion = 0x8086334C; // type:func +EnGirlA_CanBuy_BluePotion = 0x808633C4; // type:func +EnGirlA_CanBuy_Longsword = 0x8086343C; // type:func +EnGirlA_CanBuy_HylianShield = 0x808634D0; // type:func +EnGirlA_CanBuy_DekuShield = 0x80863550; // type:func +EnGirlA_CanBuy_GoronTunic = 0x808635D0; // type:func +EnGirlA_CanBuy_ZoraTunic = 0x80863678; // type:func +EnGirlA_CanBuy_RecoveryHeart = 0x80863720; // type:func +EnGirlA_CanBuy_MilkBottle = 0x8086376C; // type:func +EnGirlA_CanBuy_WeirdEgg = 0x808637C8; // type:func +EnGirlA_CanBuy_Unk19 = 0x80863824; // type:func +EnGirlA_CanBuy_Unk20 = 0x80863838; // type:func +EnGirlA_CanBuy_Bombchus = 0x8086384C; // type:func +EnGirlA_CanBuy_DekuSeeds = 0x808638D0; // type:func +EnGirlA_CanBuy_SoldOut = 0x80863980; // type:func +EnGirlA_CanBuy_BlueFire = 0x80863994; // type:func +EnGirlA_CanBuy_Bugs = 0x80863A0C; // type:func +EnGirlA_CanBuy_Poe = 0x80863A84; // type:func +EnGirlA_CanBuy_Fairy = 0x80863AFC; // type:func +EnGirlA_ItemGive_Arrows = 0x80863B74; // type:func +EnGirlA_ItemGive_Bombs = 0x80863BBC; // type:func +EnGirlA_ItemGive_DekuNuts = 0x80863C5C; // type:func +EnGirlA_ItemGive_DekuSticks = 0x80863CCC; // type:func +EnGirlA_ItemGive_Longsword = 0x80863D08; // type:func +EnGirlA_ItemGive_HylianShield = 0x80863D50; // type:func +EnGirlA_ItemGive_DekuShield = 0x80863D8C; // type:func +EnGirlA_ItemGive_GoronTunic = 0x80863DC8; // type:func +EnGirlA_ItemGive_ZoraTunic = 0x80863E04; // type:func +EnGirlA_ItemGive_Health = 0x80863E40; // type:func +EnGirlA_ItemGive_MilkBottle = 0x80863E80; // type:func +EnGirlA_ItemGive_WeirdEgg = 0x80863EBC; // type:func +EnGirlA_ItemGive_Unk19 = 0x80863EF8; // type:func +EnGirlA_ItemGive_Unk20 = 0x80863F28; // type:func +EnGirlA_ItemGive_DekuSeeds = 0x80863F58; // type:func +EnGirlA_ItemGive_BottledItem = 0x80863F94; // type:func +EnGirlA_BuyEvent_ShieldDiscount = 0x808640C4; // type:func +EnGirlA_BuyEvent_GoronTunic = 0x80864164; // type:func +EnGirlA_BuyEvent_ZoraTunic = 0x80864194; // type:func +EnGirlA_BuyEvent_ObtainBombchuPack = 0x808641C4; // type:func +EnGirlA_Noop = 0x808642D8; // type:func +EnGirlA_SetItemDescription = 0x808642E8; // type:func +EnGirlA_SetItemOutOfStock = 0x80864410; // type:func +EnGirlA_UpdateStockedItem = 0x80864444; // type:func +EnGirlA_TrySetMaskItemDescription = 0x808644BC; // type:func +EnGirlA_WaitForObject = 0x8086454C; // type:func +EnGirlA_Update2 = 0x808648FC; // type:func +EnGirlA_Update = 0x808649B8; // type:func +func_80A3C498 = 0x808649DC; // type:func +EnGirlA_Draw = 0x80864A20; // type:func +EnPart_Init = 0x80865630; // type:func +EnPart_Destroy = 0x80865640; // type:func +func_80ACDDE8 = 0x80865650; // type:func +func_80ACE13C = 0x808659A4; // type:func +func_80ACE5B8 = 0x80865E20; // type:func +func_80ACE5C8 = 0x80865E34; // type:func +func_80ACE7E8 = 0x80866058; // type:func +EnPart_Update = 0x80866254; // type:func +func_80ACEAC0 = 0x80866334; // type:func +EnPart_Draw = 0x808663D8; // type:func +EnLight_Init = 0x80866C40; // type:func +EnLight_Destroy = 0x80866E20; // type:func +EnLight_UpdatePosRot = 0x80866E54; // type:func +EnLight_Update = 0x80866ED0; // type:func +EnLight_UpdateSwitch = 0x80867174; // type:func +EnLight_Draw = 0x808675AC; // type:func +EnDoor_Init = 0x80867A30; // type:func +EnDoor_Destroy = 0x80867C4C; // type:func +EnDoor_SetupType = 0x80867C80; // type:func +EnDoor_Idle = 0x80867E38; // type:func +EnDoor_WaitForCheck = 0x808680F0; // type:func +EnDoor_Check = 0x8086813C; // type:func +EnDoor_AjarWait = 0x80868174; // type:func +EnDoor_AjarOpen = 0x808681A8; // type:func +EnDoor_AjarClose = 0x80868218; // type:func +EnDoor_Open = 0x80868260; // type:func +EnDoor_Update = 0x808684B4; // type:func +EnDoor_OverrideLimbDraw = 0x808684D8; // type:func +EnDoor_Draw = 0x8086860C; // type:func +EnBox_SetupAction = 0x80868870; // type:func +EnBox_ClipToGround = 0x8086887C; // type:func +EnBox_Init = 0x80868908; // type:func +EnBox_Destroy = 0x80868D78; // type:func +EnBox_RandomDustKinematic = 0x80868DAC; // type:func +EnBox_SpawnDust = 0x80868EB0; // type:func +EnBox_Fall = 0x80868F64; // type:func +EnBox_FallOnSwitchFlag = 0x808690E8; // type:func +func_809C9700 = 0x808691B8; // type:func +EnBox_AppearOnSwitchFlag = 0x80869348; // type:func +EnBox_AppearOnRoomClear = 0x808693C8; // type:func +EnBox_AppearInit = 0x80869480; // type:func +EnBox_AppearAnimation = 0x8086953C; // type:func +EnBox_WaitOpen = 0x808695E8; // type:func +EnBox_Open = 0x8086981C; // type:func +EnBox_SpawnIceSmoke = 0x808699A4; // type:func +EnBox_Update = 0x80869C50; // type:func +EnBox_PostLimbDraw = 0x80869D8C; // type:func +EnBox_EmptyDList = 0x80869EEC; // type:func +func_809CA4A0 = 0x80869F10; // type:func +func_809CA518 = 0x80869F4C; // type:func +EnBox_Draw = 0x80869F88; // type:func +EnPoh_Init = 0x8086A3B0; // type:func +EnPoh_Destroy = 0x8086A6F8; // type:func +func_80ADE114 = 0x8086A778; // type:func +EnPoh_SetupIdle = 0x8086A7D0; // type:func +func_80ADE1BC = 0x8086A820; // type:func +EnPoh_SetupAttack = 0x8086A870; // type:func +func_80ADE28C = 0x8086A8F0; // type:func +func_80ADE368 = 0x8086A9CC; // type:func +EnPoh_SetupInitialAction = 0x8086AA40; // type:func +func_80ADE48C = 0x8086AAF0; // type:func +func_80ADE4C8 = 0x8086AB30; // type:func +func_80ADE514 = 0x8086AB7C; // type:func +EnPoh_SetupDisappear = 0x8086ABD4; // type:func +EnPoh_SetupAppear = 0x8086AC2C; // type:func +EnPoh_SetupDeath = 0x8086AC78; // type:func +func_80ADE6D4 = 0x8086AD44; // type:func +EnPoh_Talk = 0x8086AE30; // type:func +func_80ADE950 = 0x8086AFC8; // type:func +func_80ADE998 = 0x8086B014; // type:func +func_80ADE9BC = 0x8086B03C; // type:func +EnPoh_MoveTowardsPlayerHeight = 0x8086B050; // type:func +func_80ADEA5C = 0x8086B0E4; // type:func +func_80ADEAC4 = 0x8086B154; // type:func +EnPoh_Idle = 0x8086B210; // type:func +func_80ADEC9C = 0x8086B32C; // type:func +EnPoh_Attack = 0x8086B490; // type:func +func_80ADEECC = 0x8086B560; // type:func +func_80ADEF38 = 0x8086B5CC; // type:func +EnPoh_ComposerAppear = 0x8086B74C; // type:func +func_80ADF15C = 0x8086B7F0; // type:func +func_80ADF574 = 0x8086BC08; // type:func +func_80ADF5E0 = 0x8086BC74; // type:func +EnPoh_Disappear = 0x8086BCF4; // type:func +EnPoh_Appear = 0x8086BE10; // type:func +func_80ADF894 = 0x8086BF30; // type:func +EnPoh_Death = 0x8086C030; // type:func +func_80ADFA90 = 0x8086C130; // type:func +func_80ADFE28 = 0x8086C4C8; // type:func +func_80ADFE80 = 0x8086C520; // type:func +func_80AE009C = 0x8086C73C; // type:func +EnPoh_TalkRegular = 0x8086C77C; // type:func +EnPoh_TalkComposer = 0x8086C8A8; // type:func +func_80AE032C = 0x8086C9D4; // type:func +EnPoh_UpdateVisibility = 0x8086CA6C; // type:func +EnPoh_Update = 0x8086CBDC; // type:func +func_80AE067C = 0x8086CD28; // type:func +func_80AE089C = 0x8086CF48; // type:func +EnPoh_UpdateLiving = 0x8086D0C8; // type:func +EnPoh_OverrideLimbDraw = 0x8086D2A8; // type:func +EnPoh_PostLimbDraw = 0x8086D39C; // type:func +EnPoh_DrawRegular = 0x8086D58C; // type:func +EnPoh_DrawComposer = 0x8086D7AC; // type:func +EnPoh_UpdateDead = 0x8086DBD4; // type:func +EnPoh_DrawSoul = 0x8086DC28; // type:func +EnOkuta_Init = 0x8086E540; // type:func +EnOkuta_Destroy = 0x8086E74C; // type:func +EnOkuta_SpawnBubbles = 0x8086E778; // type:func +EnOkuta_SpawnDust = 0x8086E824; // type:func +EnOkuta_SpawnSplash = 0x8086E88C; // type:func +EnOkuta_SpawnRipple = 0x8086E8D0; // type:func +EnOkuta_SetupWaitToAppear = 0x8086E974; // type:func +EnOkuta_SetupAppear = 0x8086E9A4; // type:func +EnOkuta_SetupHide = 0x8086EA14; // type:func +EnOkuta_SetupWaitToShoot = 0x8086EA54; // type:func +EnOkuta_SetupShoot = 0x8086EAB4; // type:func +EnOkuta_SetupWaitToDie = 0x8086EBA0; // type:func +EnOkuta_SetupDie = 0x8086EC28; // type:func +EnOkuta_SetupFreeze = 0x8086EC70; // type:func +EnOkuta_SpawnProjectile = 0x8086ECBC; // type:func +EnOkuta_WaitToAppear = 0x8086EDFC; // type:func +EnOkuta_Appear = 0x8086EE58; // type:func +EnOkuta_Hide = 0x8086EF9C; // type:func +EnOkuta_WaitToShoot = 0x8086F09C; // type:func +EnOkuta_Shoot = 0x8086F1CC; // type:func +EnOkuta_WaitToDie = 0x8086F34C; // type:func +EnOkuta_Die = 0x8086F3A0; // type:func +EnOkuta_Freeze = 0x8086F6B4; // type:func +EnOkuta_ProjectileFly = 0x8086F830; // type:func +EnOkuta_UpdateHeadScale = 0x8086FA7C; // type:func +EnOkuta_ColliderCheck = 0x8086FE24; // type:func +EnOkuta_Update = 0x8086FED4; // type:func +EnOkuta_GetSnoutScale = 0x80870254; // type:func +EnOkuta_OverrideLimbDraw = 0x808704DC; // type:func +EnOkuta_Draw = 0x808705D8; // type:func +EnBom_SetupAction = 0x80870B20; // type:func +EnBom_Init = 0x80870B2C; // type:func +EnBom_Destroy = 0x80870C44; // type:func +EnBom_Move = 0x80870C84; // type:func +EnBom_WaitForRelease = 0x80870E54; // type:func +EnBom_Explode = 0x80870EA0; // type:func +EnBom_Update = 0x80870FF0; // type:func +EnBom_Draw = 0x80871680; // type:func +EnWallmas_Init = 0x808719F0; // type:func +EnWallmas_Destroy = 0x80871B30; // type:func +EnWallmas_TimerInit = 0x80871B5C; // type:func +EnWallmas_SetupDrop = 0x80871BB8; // type:func +EnWallmas_SetupLand = 0x80871C7C; // type:func +EnWallmas_SetupStand = 0x80871D40; // type:func +EnWallmas_SetupWalk = 0x80871D80; // type:func +EnWallmas_SetupJumpToCeiling = 0x80871DD0; // type:func +EnWallmas_SetupReturnToCeiling = 0x80871E18; // type:func +EnWallmas_SetupTakeDamage = 0x80871E9C; // type:func +EnWallmas_SetupCooldown = 0x80871F58; // type:func +EnWallmas_SetupDie = 0x80871FAC; // type:func +EnWallmas_SetupTakePlayer = 0x80872074; // type:func +EnWallmas_ProximityOrSwitchInit = 0x808720FC; // type:func +EnWallmas_SetupStun = 0x80872144; // type:func +EnWallmas_WaitToDrop = 0x80872214; // type:func +EnWallmas_Drop = 0x80872320; // type:func +EnWallmas_Land = 0x808723EC; // type:func +EnWallmas_Stand = 0x80872428; // type:func +EnWallmas_Walk = 0x80872488; // type:func +EnWallmas_JumpToCeiling = 0x8087253C; // type:func +EnWallmas_ReturnToCeiling = 0x80872578; // type:func +EnWallmas_TakeDamage = 0x80872694; // type:func +EnWallmas_Cooldown = 0x80872728; // type:func +EnWallmas_Die = 0x80872764; // type:func +EnWallmas_TakePlayer = 0x808727D8; // type:func +EnWallmas_WaitForProximity = 0x808729FC; // type:func +EnWallmas_WaitForSwitchFlag = 0x80872A58; // type:func +EnWallmas_Stun = 0x80872AA4; // type:func +EnWallmas_ColUpdate = 0x80872B18; // type:func +EnWallmas_Update = 0x80872C34; // type:func +EnWallmas_DrawXlu = 0x80872DFC; // type:func +EnWallMas_OverrideLimbDraw = 0x80872F90; // type:func +EnWallMas_PostLimbDraw = 0x80873004; // type:func +EnWallmas_Draw = 0x808730F4; // type:func +EnDodongo_SetupAction = 0x80873400; // type:func +EnDodongo_SpawnBombSmoke = 0x8087340C; // type:func +EnDodongo_Init = 0x808738FC; // type:func +EnDodongo_Destroy = 0x80873B24; // type:func +EnDodongo_SetupIdle = 0x80873B84; // type:func +EnDodongo_SetupWalk = 0x80873BEC; // type:func +EnDodongo_SetupBreatheFire = 0x80873C90; // type:func +EnDodongo_SetupEndBreatheFire = 0x80873CE4; // type:func +EnDodongo_SetupSwallowBomb = 0x80873D34; // type:func +EnDodongo_SetupStunned = 0x80873DB4; // type:func +EnDodongo_Idle = 0x80873E4C; // type:func +EnDodongo_EndBreatheFire = 0x80873EC4; // type:func +EnDodongo_BreatheFire = 0x80873F14; // type:func +EnDodongo_SwallowBomb = 0x808740EC; // type:func +EnDodongo_Walk = 0x808745E4; // type:func +EnDodongo_SetupSweepTail = 0x80874924; // type:func +EnDodongo_SweepTail = 0x80874984; // type:func +EnDodongo_SetupDeath = 0x80874C48; // type:func +EnDodongo_Death = 0x80874CC0; // type:func +EnDodongo_Stunned = 0x80874E0C; // type:func +EnDodongo_CollisionCheck = 0x80874E70; // type:func +EnDodongo_UpdateQuad = 0x80874F98; // type:func +EnDodongo_Update = 0x80875104; // type:func +EnDodongo_OverrideLimbDraw = 0x808752D0; // type:func +EnDodongo_PostLimbDraw = 0x80875324; // type:func +EnDodongo_Draw = 0x80875760; // type:func +EnDodongo_ShiftVecRadial = 0x80875850; // type:func +EnDodongo_AteBomb = 0x808758B0; // type:func +EnFirefly_Extinguish = 0x808761A0; // type:func +EnFirefly_Ignite = 0x808761CC; // type:func +EnFirefly_Init = 0x8087620C; // type:func +EnFirefly_Destroy = 0x80876404; // type:func +EnFirefly_SetupFlyIdle = 0x80876430; // type:func +EnFirefly_SetupFall = 0x808764DC; // type:func +EnFirefly_SetupDie = 0x80876580; // type:func +EnFirefly_SetupRebound = 0x808765A4; // type:func +EnFirefly_SetupDiveAttack = 0x808765E0; // type:func +EnFirefly_SetupFlyAway = 0x80876650; // type:func +EnFirefly_SetupStunned = 0x80876680; // type:func +EnFirefly_SetupFrozenFall = 0x808766F0; // type:func +EnFirefly_SetupPerch = 0x80876890; // type:func +EnFirefly_SetupDisturbDiveAttack = 0x808768B4; // type:func +EnFirefly_ReturnToPerch = 0x808768F0; // type:func +EnFirefly_SeekTorch = 0x80876A0C; // type:func +EnFirefly_FlyIdle = 0x80876B5C; // type:func +EnFirefly_Fall = 0x80876DEC; // type:func +EnFirefly_Die = 0x80876EBC; // type:func +EnFirefly_DiveAttack = 0x80876F38; // type:func +EnFirefly_Rebound = 0x8087714C; // type:func +EnFirefly_FlyAway = 0x808771E0; // type:func +EnFirefly_Stunned = 0x80877348; // type:func +EnFirefly_FrozenFall = 0x808773EC; // type:func +EnFirefly_Perch = 0x8087744C; // type:func +EnFirefly_DisturbDiveAttack = 0x8087750C; // type:func +EnFirefly_Combust = 0x808775E4; // type:func +EnFirefly_UpdateDamage = 0x80877664; // type:func +EnFirefly_Update = 0x80877814; // type:func +EnFirefly_OverrideLimbDraw = 0x80877ABC; // type:func +EnFirefly_PostLimbDraw = 0x80877B10; // type:func +EnFirefly_Draw = 0x80877EA0; // type:func +EnFirefly_DrawInvisible = 0x80877F54; // type:func +EnHorse_BgCheckBridgeJumpPoint = 0x80878310; // type:func +EnHorse_CheckBridgeJumps = 0x80878470; // type:func +EnHorse_RaceWaypointPos = 0x808785B0; // type:func +EnHorse_RotateToPoint = 0x80878604; // type:func +EnHorse_UpdateIngoRaceInfo = 0x80878640; // type:func +EnHorse_PlayWalkingSfx = 0x808789F4; // type:func +EnHorse_PlayTrottingSfx = 0x80878AB0; // type:func +EnHorse_PlayGallopingSfx = 0x80878AF8; // type:func +EnHorse_SlopeSpeedMultiplier = 0x80878B40; // type:func +func_80A5BB90 = 0x80878BC0; // type:func +func_80A5BBBC = 0x80878BF0; // type:func +EnHorse_IdleAnimSounds = 0x80878CA0; // type:func +EnHorse_Spawn = 0x80878DCC; // type:func +EnHorse_ResetCutscene = 0x80879010; // type:func +EnHorse_ResetRace = 0x80879028; // type:func +EnHorse_PlayerCanMove = 0x80879038; // type:func +EnHorse_ResetHorsebackArchery = 0x808790F4; // type:func +EnHorse_ClearDustFlags = 0x8087910C; // type:func +EnHorse_Init = 0x80879118; // type:func +EnHorse_Destroy = 0x80879848; // type:func +EnHorse_RotateToPlayer = 0x808798B8; // type:func +EnHorse_Freeze = 0x80879928; // type:func +EnHorse_Frozen = 0x808799A8; // type:func +EnHorse_UpdateSpeed = 0x80879B18; // type:func +EnHorse_StartMountedIdleResetAnim = 0x80879F5C; // type:func +EnHorse_StartMountedIdle = 0x80879F98; // type:func +EnHorse_MountedIdle = 0x8087A0D4; // type:func +EnHorse_MountedIdleAnim = 0x8087A1D4; // type:func +EnHorse_MountedIdleWhinney = 0x8087A1F8; // type:func +EnHorse_MountedIdleWhinneying = 0x8087A2F4; // type:func +EnHorse_StartTurning = 0x8087A3F4; // type:func +EnHorse_MountedTurn = 0x8087A49C; // type:func +EnHorse_StartWalkingFromIdle = 0x8087A660; // type:func +EnHorse_StartWalkingInterruptable = 0x8087A6B0; // type:func +EnHorse_StartWalking = 0x8087A6D4; // type:func +EnHorse_MountedWalkingReset = 0x8087A780; // type:func +EnHorse_MountedWalk = 0x8087A7D4; // type:func +EnHorse_StartTrotting = 0x8087AAA4; // type:func +EnHorse_MountedTrotReset = 0x8087AB48; // type:func +EnHorse_MountedTrot = 0x8087AB94; // type:func +EnHorse_StartGallopingInterruptable = 0x8087ACCC; // type:func +EnHorse_StartGalloping = 0x8087ACF0; // type:func +EnHorse_MountedGallopReset = 0x8087AD98; // type:func +EnHorse_JumpLanding = 0x8087ADF0; // type:func +EnHorse_MountedGallop = 0x8087AE74; // type:func +EnHorse_StartRearing = 0x8087B048; // type:func +EnHorse_MountedRearing = 0x8087B16C; // type:func +EnHorse_StartBraking = 0x8087B2E8; // type:func +EnHorse_Stopping = 0x8087B3D8; // type:func +EnHorse_StartReversingInterruptable = 0x8087B5C4; // type:func +EnHorse_StartReversing = 0x8087B5E8; // type:func +EnHorse_Reverse = 0x8087B68C; // type:func +EnHorse_LowJumpInit = 0x8087BA3C; // type:func +EnHorse_StartLowJump = 0x8087BA60; // type:func +EnHorse_Stub1 = 0x8087BB90; // type:func +EnHorse_LowJump = 0x8087BB9C; // type:func +EnHorse_HighJumpInit = 0x8087BD60; // type:func +EnHorse_StartHighJump = 0x8087BD84; // type:func +EnHorse_Stub2 = 0x8087BEC0; // type:func +EnHorse_HighJump = 0x8087BECC; // type:func +EnHorse_InitInactive = 0x8087C090; // type:func +EnHorse_Inactive = 0x8087C0E0; // type:func +EnHorse_PlayIdleAnimation = 0x8087C20C; // type:func +EnHorse_ChangeIdleAnimation = 0x8087C3DC; // type:func +EnHorse_ResetIdleAnimation = 0x8087C404; // type:func +EnHorse_StartIdleRidable = 0x8087C438; // type:func +EnHorse_Idle = 0x8087C46C; // type:func +EnHorse_StartMovingAnimation = 0x8087C654; // type:func +EnHorse_SetFollowAnimation = 0x8087C7BC; // type:func +EnHorse_FollowPlayer = 0x8087C8F0; // type:func +EnHorse_InitIngoHorse = 0x8087CD14; // type:func +EnHorse_SetIngoAnimation = 0x8087CD98; // type:func +EnHorse_UpdateIngoHorseAnim = 0x8087CE3C; // type:func +EnHorse_UpdateIngoRace = 0x8087D150; // type:func +EnHorse_CsMoveInit = 0x8087D300; // type:func +EnHorse_CsMoveToPoint = 0x8087D36C; // type:func +EnHorse_CsSetAnimHighJump = 0x8087D4BC; // type:func +EnHorse_CsPlayHighJumpAnim = 0x8087D4E0; // type:func +EnHorse_CsJumpInit = 0x8087D614; // type:func +EnHorse_CsJump = 0x8087D64C; // type:func +EnHorse_CsRearingInit = 0x8087D8A4; // type:func +EnHorse_CsRearing = 0x8087D9C4; // type:func +EnHorse_WarpMoveInit = 0x8087DB6C; // type:func +EnHorse_CsWarpMoveToPoint = 0x8087DC54; // type:func +EnHorse_CsWarpRearingInit = 0x8087DDA4; // type:func +EnHorse_CsWarpRearing = 0x8087DF2C; // type:func +EnHorse_InitCutscene = 0x8087E0D4; // type:func +EnHorse_GetCutsceneFunctionIndex = 0x8087E0F8; // type:func +EnHorse_CutsceneUpdate = 0x8087E148; // type:func +EnHorse_UpdateHbaRaceInfo = 0x8087E2A0; // type:func +EnHorse_InitHorsebackArchery = 0x8087E490; // type:func +EnHorse_UpdateHbaAnim = 0x8087E4C4; // type:func +EnHorse_UpdateHorsebackArchery = 0x8087E7FC; // type:func +EnHorse_InitFleePlayer = 0x8087EA88; // type:func +EnHorse_FleePlayer = 0x8087EAB0; // type:func +EnHorse_BridgeJumpInit = 0x8087F304; // type:func +EnHorse_StartBridgeJump = 0x8087F53C; // type:func +EnHorse_BridgeJumpMove = 0x8087F5EC; // type:func +EnHorse_CheckBridgeJumpLanding = 0x8087F748; // type:func +EnHorse_BridgeJump = 0x8087F834; // type:func +EnHorse_Vec3fOffset = 0x8087F878; // type:func +EnHorse_CalcFloorHeight = 0x8087F8F4; // type:func +EnHorse_ObstructMovement = 0x8087FA34; // type:func +EnHorse_CheckFloors = 0x8087FB5C; // type:func +EnHorse_MountDismount = 0x808800DC; // type:func +EnHorse_StickDirection = 0x808801E0; // type:func +EnHorse_UpdateStick = 0x8088026C; // type:func +EnHorse_ResolveCollision = 0x808802AC; // type:func +EnHorse_BgCheckSlowMoving = 0x80880404; // type:func +EnHorse_UpdateBgCheckInfo = 0x80880544; // type:func +EnHorse_CheckBoost = 0x80881050; // type:func +EnHorse_RegenBoost = 0x808811F8; // type:func +EnHorse_UpdatePlayerDir = 0x80881424; // type:func +EnHorse_TiltBody = 0x80881530; // type:func +EnHorse_UpdateConveyors = 0x8088162C; // type:func +EnHorse_RandInt = 0x80881734; // type:func +EnHorse_Update = 0x80881768; // type:func +EnHorse_PlayerDirToMountSide = 0x80881F94; // type:func +EnHorse_MountSideCheck = 0x80881FD4; // type:func +EnHorse_GetMountSide = 0x808820D8; // type:func +EnHorse_RandomOffset = 0x80882130; // type:func +EnHorse_PostDraw = 0x808821CC; // type:func +EnHorse_OverrideLimbDraw = 0x80882CC4; // type:func +EnHorse_Draw = 0x80882DC4; // type:func +EnArrow_SetupAction = 0x80884570; // type:func +EnArrow_Init = 0x8088457C; // type:func +EnArrow_Destroy = 0x80884784; // type:func +EnArrow_Shoot = 0x8088480C; // type:func +func_809B3CEC = 0x80884924; // type:func +EnArrow_CarryActor = 0x80884A0C; // type:func +EnArrow_Fly = 0x80884C10; // type:func +func_809B45E0 = 0x80885218; // type:func +func_809B4640 = 0x80885278; // type:func +EnArrow_Update = 0x808852E0; // type:func +func_809B4800 = 0x8088543C; // type:func +EnArrow_Draw = 0x808855A4; // type:func +EnElf_SetupAction = 0x80885C60; // type:func +func_80A01C38 = 0x80885C6C; // type:func +func_80A01F90 = 0x80885FC4; // type:func +func_80A01FE0 = 0x80886018; // type:func +func_80A020A4 = 0x808860E0; // type:func +func_80A0214C = 0x8088618C; // type:func +func_80A0232C = 0x8088636C; // type:func +EnElf_GetColorValue = 0x808863E4; // type:func +EnElf_Init = 0x80886454; // type:func +func_80A0299C = 0x808869C0; // type:func +func_80A029A8 = 0x808869D0; // type:func +EnElf_Destroy = 0x808869F8; // type:func +func_80A02A20 = 0x80886A48; // type:func +func_80A02AA4 = 0x80886ACC; // type:func +func_80A02B38 = 0x80886B60; // type:func +func_80A02BD8 = 0x80886BFC; // type:func +func_80A02C98 = 0x80886CBC; // type:func +func_80A02E30 = 0x80886E54; // type:func +func_80A02EC0 = 0x80886EE0; // type:func +func_80A02F2C = 0x80886F4C; // type:func +func_80A03018 = 0x80887038; // type:func +func_80A03148 = 0x8088716C; // type:func +func_80A0329C = 0x808872C4; // type:func +func_80A0353C = 0x80887568; // type:func +func_80A03604 = 0x80887630; // type:func +func_80A03610 = 0x80887640; // type:func +func_80A03814 = 0x80887848; // type:func +func_80A03990 = 0x808879C8; // type:func +func_80A03AB0 = 0x80887AEC; // type:func +EnElf_UpdateLights = 0x80887B50; // type:func +func_80A03CF8 = 0x80887D24; // type:func +EnElf_ChangeColor = 0x808883BC; // type:func +func_80A04414 = 0x80888448; // type:func +func_80A0461C = 0x80888654; // type:func +EnElf_SpawnSparkles = 0x808889F0; // type:func +func_80A04D90 = 0x80888DD0; // type:func +func_80A04DE4 = 0x80888E24; // type:func +func_80A04F94 = 0x80888FD8; // type:func +func_80A05040 = 0x80889088; // type:func +func_80A05114 = 0x80889164; // type:func +func_80A05188 = 0x808891E0; // type:func +func_80A05208 = 0x80889268; // type:func +func_80A052F4 = 0x8088935C; // type:func +func_80A053F0 = 0x80889460; // type:func +EnElf_Update = 0x808896DC; // type:func +EnElf_OverrideLimbDraw = 0x80889738; // type:func +EnElf_Draw = 0x8088985C; // type:func +EnElf_GetCuePos = 0x80889EE0; // type:func +EnNiw_Init = 0x8088A620; // type:func +EnNiw_Destroy = 0x8088AB24; // type:func +func_80AB5BF8 = 0x8088AB50; // type:func +EnNiw_SpawnAttackCucco = 0x8088AEF8; // type:func +func_80AB6100 = 0x8088B040; // type:func +EnNiw_ResetAction = 0x8088B1BC; // type:func +func_80AB6324 = 0x8088B264; // type:func +func_80AB63A8 = 0x8088B2E8; // type:func +func_80AB6450 = 0x8088B390; // type:func +func_80AB6570 = 0x8088B4B0; // type:func +func_80AB6A38 = 0x8088B97C; // type:func +func_80AB6BF8 = 0x8088BB3C; // type:func +func_80AB6D08 = 0x8088BC4C; // type:func +func_80AB6EB4 = 0x8088BDF8; // type:func +func_80AB6F04 = 0x8088BE48; // type:func +func_80AB70A0 = 0x8088BFE8; // type:func +func_80AB70F8 = 0x8088C040; // type:func +func_80AB714C = 0x8088C094; // type:func +func_80AB7204 = 0x8088C14C; // type:func +func_80AB7290 = 0x8088C1DC; // type:func +func_80AB7328 = 0x8088C274; // type:func +func_80AB7420 = 0x8088C370; // type:func +func_80AB747C = 0x8088C3CC; // type:func +EnNiw_Update = 0x8088C484; // type:func +EnNiw_OverrideLimbDraw = 0x8088CD30; // type:func +EnNiw_Draw = 0x8088CE88; // type:func +EnNiw_SpawnFeather = 0x8088CF38; // type:func +EnNiw_UpdateEffects = 0x8088D028; // type:func +EnNiw_DrawEffects = 0x8088D1DC; // type:func +EnTite_SetupAction = 0x8088D950; // type:func +EnTite_Init = 0x8088D95C; // type:func +EnTite_Destroy = 0x8088DAB4; // type:func +EnTite_SetupIdle = 0x8088DAFC; // type:func +EnTite_Idle = 0x8088DB64; // type:func +EnTite_SetupAttack = 0x8088DCA8; // type:func +EnTite_Attack = 0x8088DD1C; // type:func +EnTite_SetupTurnTowardPlayer = 0x8088E3C4; // type:func +EnTite_TurnTowardPlayer = 0x8088E460; // type:func +EnTite_SetupMoveTowardPlayer = 0x8088E6FC; // type:func +EnTite_MoveTowardPlayer = 0x8088E7B8; // type:func +EnTite_SetupRecoil = 0x8088ECC8; // type:func +EnTite_Recoil = 0x8088ED34; // type:func +EnTite_SetupStunned = 0x8088F08C; // type:func +EnTite_Stunned = 0x8088F140; // type:func +EnTite_SetupDeathCry = 0x8088F4DC; // type:func +EnTite_DeathCry = 0x8088F510; // type:func +EnTite_FallApart = 0x8088F584; // type:func +EnTite_SetupFlipOnBack = 0x8088F610; // type:func +EnTite_FlipOnBack = 0x8088F72C; // type:func +EnTite_SetupFlipUpright = 0x8088F8E8; // type:func +EnTite_FlipUpright = 0x8088F938; // type:func +EnTite_CheckDamage = 0x8088FA60; // type:func +EnTite_Update = 0x8088FC38; // type:func +EnTite_PostLimbDraw = 0x80890024; // type:func +EnTite_Draw = 0x80890114; // type:func +EnReeba_Init = 0x808906F0; // type:func +EnReeba_Destroy = 0x808908CC; // type:func +EnReeba_SetupSurface = 0x80890944; // type:func +EnReeba_Surface = 0x80890A58; // type:func +EnReeba_Move = 0x80890C78; // type:func +EnReeba_SetupMoveBig = 0x80890D94; // type:func +EnReeba_MoveBig = 0x80890DB8; // type:func +EnReeba_Recoiled = 0x80891028; // type:func +EnReeba_SetupSink = 0x80891094; // type:func +EnReeba_Sink = 0x808910EC; // type:func +EnReeba_SetupDamaged = 0x808911FC; // type:func +EnReeba_Damaged = 0x80891260; // type:func +EnReeba_SetupStunned = 0x808912F8; // type:func +EnReeba_Stunned = 0x80891348; // type:func +EnReeba_StunDie = 0x808914AC; // type:func +EnReeba_SetupDie = 0x808915D4; // type:func +EnReeba_Die = 0x80891648; // type:func +EnReeba_StunRecover = 0x80891828; // type:func +EnReeba_CheckDamage = 0x808918BC; // type:func +EnReeba_Update = 0x80891AF8; // type:func +EnReeba_Draw = 0x80891DA8; // type:func +EnPeehat_SetupAction = 0x80892160; // type:func +EnPeehat_Init = 0x8089216C; // type:func +EnPeehat_Destroy = 0x808923DC; // type:func +EnPeehat_SpawnDust = 0x80892450; // type:func +EnPeehat_HitWhenGrounded = 0x808925E8; // type:func +EnPeehat_Ground_SetStateGround = 0x80892804; // type:func +EnPeehat_Ground_StateGround = 0x8089289C; // type:func +EnPeehat_Flying_SetStateGround = 0x808929F0; // type:func +EnPeehat_Flying_StateGrounded = 0x80892A7C; // type:func +EnPeehat_Flying_SetStateFly = 0x80892B80; // type:func +EnPeehat_Flying_StateFly = 0x80892BC8; // type:func +EnPeehat_Ground_SetStateRise = 0x80892D40; // type:func +EnPeehat_Ground_StateRise = 0x80892DE8; // type:func +EnPeehat_Flying_SetStateRise = 0x80892FB0; // type:func +EnPeehat_Flying_StateRise = 0x80893058; // type:func +EnPeehat_Ground_SetStateSeekPlayer = 0x80893220; // type:func +EnPeehat_Ground_StateSeekPlayer = 0x80893270; // type:func +EnPeehat_Larva_SetStateSeekPlayer = 0x808933EC; // type:func +EnPeehat_Larva_StateSeekPlayer = 0x80893438; // type:func +EnPeehat_Ground_SetStateLanding = 0x80893810; // type:func +EnPeehat_Ground_StateLanding = 0x80893858; // type:func +EnPeehat_Flying_SetStateLanding = 0x80893A0C; // type:func +EnPeehat_Flying_StateLanding = 0x80893A54; // type:func +EnPeehat_Ground_SetStateHover = 0x80893C04; // type:func +EnPeehat_Ground_StateHover = 0x80893C94; // type:func +EnPeehat_Ground_SetStateReturnHome = 0x80893EF0; // type:func +EnPeehat_Ground_StateReturnHome = 0x80893F28; // type:func +EnPeehat_SetStateAttackRecoil = 0x80894114; // type:func +EnPeehat_StateAttackRecoil = 0x80894174; // type:func +EnPeehat_SetStateBoomerangStunned = 0x80894350; // type:func +EnPeehat_StateBoomerangStunned = 0x808943D4; // type:func +EnPeehat_Adult_SetStateDie = 0x80894450; // type:func +EnPeehat_Adult_StateDie = 0x808944BC; // type:func +EnPeehat_SetStateExplode = 0x8089477C; // type:func +EnPeehat_StateExplode = 0x808947D4; // type:func +EnPeehat_Adult_CollisionCheck = 0x808948AC; // type:func +EnPeehat_Update = 0x80894A98; // type:func +EnPeehat_OverrideLimbDraw = 0x80894EFC; // type:func +EnPeehat_PostLimbDraw = 0x808950D0; // type:func +EnPeehat_Draw = 0x80895284; // type:func +EnHoll_SetupAction = 0x80895860; // type:func +EnHoll_IsKokiriLayer8 = 0x8089586C; // type:func +EnHoll_ChooseAction = 0x8089589C; // type:func +EnHoll_Init = 0x80895904; // type:func +EnHoll_Destroy = 0x80895940; // type:func +EnHoll_SwapRooms = 0x80895970; // type:func +EnHoll_HorizontalVisibleNarrow = 0x80895A2C; // type:func +EnHoll_HorizontalInvisible = 0x80895C6C; // type:func +EnHoll_VerticalDownBgCoverLarge = 0x80895E1C; // type:func +EnHoll_VerticalBgCover = 0x80896008; // type:func +EnHoll_VerticalInvisible = 0x80896188; // type:func +EnHoll_HorizontalBgCoverSwitchFlag = 0x80896280; // type:func +EnHoll_WaitRoomLoaded = 0x80896490; // type:func +EnHoll_Update = 0x80896508; // type:func +EnHoll_Draw = 0x8089652C; // type:func +EnSceneChange_SetupAction = 0x80896830; // type:func +EnSceneChange_Init = 0x8089683C; // type:func +EnSceneChange_Destroy = 0x80896864; // type:func +EnSceneChange_DoNothing = 0x80896874; // type:func +EnSceneChange_Update = 0x80896884; // type:func +EnSceneChange_Draw = 0x808968A8; // type:func +EnZf_SetupAction = 0x80896960; // type:func +EnZf_PrimaryFloorCheck = 0x8089696C; // type:func +EnZf_SecondaryFloorCheck = 0x80896ADC; // type:func +EnZf_Init = 0x80896C0C; // type:func +EnZf_Destroy = 0x80896F44; // type:func +EnZf_FindPlatform = 0x80896FC8; // type:func +EnZf_FindNextPlatformAwayFromPlayer = 0x80897190; // type:func +EnZf_FindNextPlatformTowardsPlayer = 0x80897434; // type:func +EnZf_CanAttack = 0x80897610; // type:func +func_80B44DC4 = 0x808976E4; // type:func +EnZf_ChooseAction = 0x808977B0; // type:func +EnZf_SetupDropIn = 0x808979D0; // type:func +EnZf_DropIn = 0x80897A98; // type:func +func_80B45384 = 0x80897CA8; // type:func +func_80B4543C = 0x80897D60; // type:func +EnZf_SetupApproachPlayer = 0x80897FDC; // type:func +EnZf_ApproachPlayer = 0x80898070; // type:func +EnZf_SetupJumpForward = 0x8089875C; // type:func +EnZf_JumpForward = 0x8089881C; // type:func +func_80B4604C = 0x80898978; // type:func +func_80B46098 = 0x808989C4; // type:func +func_80B462E4 = 0x80898C10; // type:func +func_80B463E4 = 0x80898D18; // type:func +EnZf_SetupSlash = 0x8089935C; // type:func +EnZf_Slash = 0x80899418; // type:func +EnZf_SetupRecoilFromBlockedSlash = 0x808996A4; // type:func +EnZf_RecoilFromBlockedSlash = 0x80899718; // type:func +EnZf_SetupJumpBack = 0x808997D0; // type:func +EnZf_JumpBack = 0x80899870; // type:func +EnZf_SetupStunned = 0x80899994; // type:func +EnZf_Stunned = 0x80899A64; // type:func +EnZf_SetupSheatheSword = 0x80899CA4; // type:func +EnZf_SheatheSword = 0x80899D80; // type:func +EnZf_SetupHopAndTaunt = 0x80899E2C; // type:func +EnZf_HopAndTaunt = 0x80899E8C; // type:func +EnZf_SetupHopAway = 0x8089A0E4; // type:func +EnZf_HopAway = 0x8089A164; // type:func +EnZf_SetupDrawSword = 0x8089A5B0; // type:func +EnZf_DrawSword = 0x8089A644; // type:func +EnZf_SetupDamaged = 0x8089A6F4; // type:func +EnZf_Damaged = 0x8089A800; // type:func +EnZf_SetupJumpUp = 0x8089AB60; // type:func +EnZf_JumpUp = 0x8089AC08; // type:func +func_80B483E4 = 0x8089AD34; // type:func +EnZf_CircleAroundPlayer = 0x8089AED0; // type:func +EnZf_SetupDie = 0x8089B650; // type:func +EnZf_Die = 0x8089B7B4; // type:func +EnZf_UpdateHeadRotation = 0x8089B8F4; // type:func +EnZf_UpdateDamage = 0x8089BA18; // type:func +EnZf_Update = 0x8089BBB0; // type:func +EnZf_OverrideLimbDraw = 0x8089BF68; // type:func +EnZf_PostLimbDraw = 0x8089BFF4; // type:func +EnZf_Draw = 0x8089C248; // type:func +EnZf_SetupCircleAroundPlayer = 0x8089C49C; // type:func +EnZf_DodgeRangedEngaging = 0x8089C568; // type:func +EnZf_DodgeRangedWaiting = 0x8089C794; // type:func +EnHata_Init = 0x8089D460; // type:func +EnHata_Destroy = 0x8089D598; // type:func +EnHata_Update = 0x8089D5E0; // type:func +EnHata_OverrideLimbDraw = 0x8089D7FC; // type:func +EnHata_PostLimbDraw = 0x8089D880; // type:func +EnHata_Draw = 0x8089D898; // type:func +func_808C1190 = 0x8089D9F0; // type:func +func_808C11D0 = 0x8089DA30; // type:func +func_808C1200 = 0x8089DA60; // type:func +func_808C1230 = 0x8089DA90; // type:func +func_808C1278 = 0x8089DAD8; // type:func +func_808C12C4 = 0x8089DB24; // type:func +func_808C1554 = 0x8089DDB4; // type:func +func_808C17C8 = 0x8089E034; // type:func +BossDodongo_AteExplosive = 0x8089E11C; // type:func +BossDodongo_Init = 0x8089E1DC; // type:func +BossDodongo_Destroy = 0x8089E4B8; // type:func +BossDodongo_SetupIntroCutscene = 0x8089E4F8; // type:func +BossDodongo_IntroCutscene = 0x8089E578; // type:func +BossDodongo_SetupDamaged = 0x8089F0F4; // type:func +BossDodongo_SetupExplode = 0x8089F188; // type:func +BossDodongo_SetupWalk = 0x8089F22C; // type:func +BossDodongo_SetupRoll = 0x8089F2BC; // type:func +BossDodongo_SetupBlowFire = 0x8089F330; // type:func +BossDodongo_SetupInhale = 0x8089F3B8; // type:func +BossDodongo_Damaged = 0x8089F448; // type:func +BossDodongo_Explode = 0x8089F4FC; // type:func +BossDodongo_LayDown = 0x8089F750; // type:func +BossDodongo_Vulnerable = 0x8089F830; // type:func +BossDodongo_GetUp = 0x8089F91C; // type:func +BossDodongo_BlowFire = 0x8089F980; // type:func +BossDodongo_Inhale = 0x8089FAB0; // type:func +BossDodongo_Walk = 0x8089FB84; // type:func +BossDodongo_Roll = 0x8089FF94; // type:func +BossDodongo_Update = 0x808A0390; // type:func +BossDodongo_OverrideLimbDraw = 0x808A11D0; // type:func +BossDodongo_PostLimbDraw = 0x808A13D4; // type:func +BossDodongo_Draw = 0x808A14B8; // type:func +func_808C4F6C = 0x808A1780; // type:func +func_808C50A8 = 0x808A18BC; // type:func +BossDodongo_PlayerYawCheck = 0x808A1A08; // type:func +BossDodongo_PlayerPosCheck = 0x808A1A64; // type:func +BossDodongo_SpawnFire = 0x808A1AF8; // type:func +BossDodongo_UpdateDamage = 0x808A1B6C; // type:func +BossDodongo_SetupDeathCutscene = 0x808A1CD8; // type:func +BossDodongo_DeathCutscene = 0x808A1D90; // type:func +BossDodongo_UpdateEffects = 0x808A34D0; // type:func +BossDodongo_DrawEffects = 0x808A3604; // type:func +BossGoma_ClearPixels16x16Rgba16 = 0x808A74D0; // type:func +BossGoma_ClearPixels32x32Rgba16 = 0x808A7500; // type:func +BossGoma_ClearPixels = 0x808A7554; // type:func +BossGoma_Init = 0x808A7704; // type:func +BossGoma_PlayEffectsAndSfx = 0x808A78BC; // type:func +BossGoma_Destroy = 0x808A79C4; // type:func +BossGoma_SetupDefeated = 0x808A7A04; // type:func +BossGoma_SetupEncounter = 0x808A7ACC; // type:func +BossGoma_SetupFloorIdle = 0x808A7B70; // type:func +BossGoma_SetupCeilingIdle = 0x808A7BF8; // type:func +BossGoma_SetupFallJump = 0x808A7C7C; // type:func +BossGoma_SetupFallStruckDown = 0x808A7CF8; // type:func +BossGoma_SetupCeilingSpawnGohmas = 0x808A7D74; // type:func +BossGoma_SetupCeilingPrepareSpawnGohmas = 0x808A7DE8; // type:func +BossGoma_SetupWallClimb = 0x808A7E60; // type:func +BossGoma_SetupCeilingMoveToCenter = 0x808A7EE4; // type:func +BossGoma_SetupFloorMain = 0x808A7F78; // type:func +BossGoma_SetupFloorLand = 0x808A7FF8; // type:func +BossGoma_SetupFloorLandStruckDown = 0x808A8084; // type:func +BossGoma_SetupFloorStunned = 0x808A8128; // type:func +BossGoma_SetupFloorAttackPosture = 0x808A8198; // type:func +BossGoma_SetupFloorPrepareAttack = 0x808A820C; // type:func +BossGoma_SetupFloorAttack = 0x808A8280; // type:func +BossGoma_SetupFloorDamaged = 0x808A82FC; // type:func +BossGoma_UpdateCeilingMovement = 0x808A8370; // type:func +BossGoma_SetupEncounterState4 = 0x808A85AC; // type:func +BossGoma_Encounter = 0x808A875C; // type:func +BossGoma_Defeated = 0x808A9854; // type:func +BossGoma_FloorAttackPosture = 0x808AA6C4; // type:func +BossGoma_FloorPrepareAttack = 0x808AA7CC; // type:func +BossGoma_FloorAttack = 0x808AA828; // type:func +BossGoma_FloorDamaged = 0x808AAA78; // type:func +BossGoma_FloorLandStruckDown = 0x808AAB10; // type:func +BossGoma_FloorLand = 0x808AABB4; // type:func +BossGoma_FloorStunned = 0x808AAC10; // type:func +BossGoma_FallJump = 0x808AAD3C; // type:func +BossGoma_FallStruckDown = 0x808AADF0; // type:func +BossGoma_CeilingSpawnGohmas = 0x808AAEB0; // type:func +BossGoma_CeilingPrepareSpawnGohmas = 0x808AB00C; // type:func +BossGoma_FloorIdle = 0x808AB068; // type:func +BossGoma_CeilingIdle = 0x808AB0D0; // type:func +BossGoma_FloorMain = 0x808AB1C8; // type:func +BossGoma_WallClimb = 0x808AB438; // type:func +BossGoma_CeilingMoveToCenter = 0x808AB504; // type:func +BossGoma_UpdateEye = 0x808AB700; // type:func +BossGoma_UpdateTailLimbsScale = 0x808AB948; // type:func +BossGoma_UpdateHit = 0x808ABA54; // type:func +BossGoma_UpdateMainEnvColor = 0x808ABC34; // type:func +BossGoma_UpdateEyeEnvColor = 0x808ABDB0; // type:func +BossGoma_Update = 0x808ABE58; // type:func +BossGoma_OverrideLimbDraw = 0x808AC028; // type:func +BossGoma_PostLimbDraw = 0x808AC468; // type:func +BossGoma_EmptyDlist = 0x808AC66C; // type:func +BossGoma_NoBackfaceCullingDlist = 0x808AC690; // type:func +BossGoma_Draw = 0x808AC6E8; // type:func +BossGoma_SpawnChildGohma = 0x808AC7D8; // type:func +func_80B4AB40 = 0x808AD450; // type:func +func_80B4AB48 = 0x808AD458; // type:func +EnZl1_Init = 0x808AD460; // type:func +EnZl1_Destroy = 0x808AD6F0; // type:func +func_80B4AE18 = 0x808AD730; // type:func +func_80B4AF18 = 0x808AD830; // type:func +func_80B4B010 = 0x808AD928; // type:func +func_80B4B240 = 0x808ADB60; // type:func +func_80B4B7F4 = 0x808AE114; // type:func +func_80B4B834 = 0x808AE158; // type:func +func_80B4B874 = 0x808AE19C; // type:func +func_80B4B8B4 = 0x808AE1DC; // type:func +func_80B4BBC4 = 0x808AE4EC; // type:func +func_80B4BC78 = 0x808AE5A0; // type:func +func_80B4BF2C = 0x808AE854; // type:func +EnZl1_Update = 0x808AEB48; // type:func +EnZl1_OverrideLimbDraw = 0x808AEC6C; // type:func +EnZl1_PostLimbDraw = 0x808AED2C; // type:func +EnZl1_Draw = 0x808AED88; // type:func +EnViewer_SetupAction = 0x808B1250; // type:func +EnViewer_Init = 0x808B125C; // type:func +EnViewer_Destroy = 0x808B1330; // type:func +EnViewer_InitAnimGanondorfOrZelda = 0x808B135C; // type:func +EnViewer_InitAnimImpa = 0x808B14A8; // type:func +EnViewer_InitAnimHorse = 0x808B1538; // type:func +EnViewer_InitImpl = 0x808B15D0; // type:func +EnViewer_UpdateImpl = 0x808B178C; // type:func +EnViewer_Update = 0x808B22E4; // type:func +EnViewer_Ganondorf3OverrideLimbDraw = 0x808B2338; // type:func +EnViewer_Ganondorf9PostLimbDraw = 0x808B23A8; // type:func +EnViewer_GanondorfPostLimbDrawUpdateCapeVec = 0x808B246C; // type:func +EnViewer_DrawGanondorf = 0x808B24AC; // type:func +EnViewer_DrawHorse = 0x808B28DC; // type:func +EnViewer_ZeldaOverrideLimbDraw = 0x808B2908; // type:func +EnViewer_ZeldaPostLimbDraw = 0x808B2988; // type:func +EnViewer_DrawZelda = 0x808B29D0; // type:func +EnViewer_ImpaOverrideLimbDraw = 0x808B3078; // type:func +EnViewer_DrawImpa = 0x808B30A0; // type:func +EnViewer_Draw = 0x808B31B4; // type:func +EnViewer_UpdatePosition = 0x808B32A4; // type:func +EnViewer_InitFireEffect = 0x808B3674; // type:func +EnViewer_DrawFireEffects = 0x808B37BC; // type:func +EnViewer_UpdateGanondorfCape = 0x808B3B00; // type:func +EnGoma_Init = 0x808B4120; // type:func +EnGoma_Destroy = 0x808B44AC; // type:func +EnGoma_SetupFlee = 0x808B44FC; // type:func +EnGoma_Flee = 0x808B45A0; // type:func +EnGoma_EggFallToGround = 0x808B4640; // type:func +EnGoma_Egg = 0x808B48CC; // type:func +EnGoma_SetupHatch = 0x808B4B0C; // type:func +EnGoma_Hatch = 0x808B4BD4; // type:func +EnGoma_SetupHurt = 0x808B4C1C; // type:func +EnGoma_Hurt = 0x808B4D08; // type:func +EnGoma_SetupDie = 0x808B4D90; // type:func +EnGoma_Die = 0x808B4E50; // type:func +EnGoma_SetupDead = 0x808B4EF4; // type:func +EnGoma_Dead = 0x808B4F6C; // type:func +EnGoma_SetupStand = 0x808B50DC; // type:func +EnGoma_SetupChasePlayer = 0x808B5168; // type:func +EnGoma_SetupPrepareJump = 0x808B51E8; // type:func +EnGoma_PrepareJump = 0x808B5264; // type:func +EnGoma_SetupLand = 0x808B52FC; // type:func +EnGoma_Land = 0x808B5374; // type:func +EnGoma_SetupJump = 0x808B53E0; // type:func +EnGoma_Jump = 0x808B5488; // type:func +EnGoma_Stand = 0x808B5540; // type:func +EnGoma_ChasePlayer = 0x808B55BC; // type:func +EnGoma_SetupStunned = 0x808B56C4; // type:func +EnGoma_Stunned = 0x808B5760; // type:func +EnGoma_LookAtPlayer = 0x808B5860; // type:func +EnGoma_UpdateHit = 0x808B590C; // type:func +EnGoma_UpdateEyeEnvColor = 0x808B5B3C; // type:func +EnGoma_SetFloorRot = 0x808B5BCC; // type:func +EnGoma_Update = 0x808B5CE0; // type:func +EnGoma_OverrideLimbDraw = 0x808B5F2C; // type:func +EnGoma_NoBackfaceCullingDlist = 0x808B6088; // type:func +EnGoma_Draw = 0x808B60E0; // type:func +EnGoma_Debris = 0x808B6564; // type:func +EnGoma_SpawnHatchDebris = 0x808B65A8; // type:func +EnGoma_BossLimb = 0x808B670C; // type:func +BgPushbox_SetupAction = 0x808B6DB0; // type:func +BgPushbox_Init = 0x808B6DBC; // type:func +BgPushbox_Destroy = 0x808B6E54; // type:func +BgPushbox_UpdateImpl = 0x808B6E88; // type:func +BgPushbox_Update = 0x808B6F64; // type:func +BgPushbox_Draw = 0x808B6F94; // type:func +EnBubble_SetDimensions = 0x808B70B0; // type:func +func_809CBCBC = 0x808B716C; // type:func +func_809CBCEC = 0x808B71A0; // type:func +EnBubble_DamagePlayer = 0x808B71C4; // type:func +EnBubble_Explosion = 0x808B7230; // type:func +func_809CBFD4 = 0x808B748C; // type:func +func_809CC020 = 0x808B74D8; // type:func +EnBubble_Vec3fNormalizedReflect = 0x808B752C; // type:func +EnBubble_Vec3fNormalize = 0x808B75B4; // type:func +EnBubble_Fly = 0x808B762C; // type:func +func_809CC648 = 0x808B7B08; // type:func +EnBubble_DetectPop = 0x808B7BA4; // type:func +func_809CC774 = 0x808B7C34; // type:func +EnBubble_Init = 0x808B7D48; // type:func +EnBubble_Destroy = 0x808B7E48; // type:func +EnBubble_Wait = 0x808B7E74; // type:func +EnBubble_Pop = 0x808B7F28; // type:func +EnBubble_Disappear = 0x808B7F78; // type:func +EnBubble_Regrow = 0x808B7FC0; // type:func +EnBubble_Update = 0x808B8030; // type:func +EnBubble_Draw = 0x808B80AC; // type:func +DoorShutter_SetupAction = 0x808B84D0; // type:func +DoorShutter_SetupDoor = 0x808B84E0; // type:func +DoorShutter_Init = 0x808B86C8; // type:func +DoorShutter_Destroy = 0x808B88E0; // type:func +DoorShutter_WaitForObject = 0x808B8950; // type:func +DoorShutter_GetPlayerDistance = 0x808B8A8C; // type:func +DoorShutter_GetPlayerSide = 0x808B8B24; // type:func +DoorShutter_WaitClear = 0x808B8CA4; // type:func +DoorShutter_Unopenable = 0x808B8D50; // type:func +DoorShutter_Idle = 0x808B8D60; // type:func +DoorShutter_InitOpeningDoorCam = 0x808B8EB4; // type:func +DoorShutter_UpdateOpening = 0x808B8F6C; // type:func +DoorShutter_UpdateBarsClosed = 0x808B9064; // type:func +DoorShutter_BarAndWaitSwitchFlag = 0x808B9148; // type:func +DoorShutter_UnbarredCheckSwitchFlag = 0x808B9200; // type:func +DoorShutter_Open = 0x808B926C; // type:func +DoorShutter_Unbar = 0x808B93BC; // type:func +DoorShutter_SetupClosed = 0x808B948C; // type:func +DoorShutter_Close = 0x808B9658; // type:func +DoorShutter_JabuDoorClose = 0x808B979C; // type:func +DoorShutter_WaitPlayerSurprised = 0x808B97E0; // type:func +DoorShutter_GohmaBlockFall = 0x808B9838; // type:func +DoorShutter_GohmaBlockBounce = 0x808B9934; // type:func +DoorShutter_PhantomGanonBarsRaise = 0x808B99C0; // type:func +DoorShutter_Update = 0x808B9A50; // type:func +DoorShutter_DrawJabuJabuDoor = 0x808B9AA4; // type:func +DoorShutter_ShouldDraw = 0x808B9C94; // type:func +DoorShutter_Draw = 0x808B9D40; // type:func +DoorShutter_RequestQuakeAndRumble = 0x808BA248; // type:func +EnDodojr_Init = 0x808BA750; // type:func +EnDodojr_Destroy = 0x808BA838; // type:func +EnDodojr_DoSwallowedBombEffects = 0x808BA864; // type:func +EnDodojr_SpawnLargeDust = 0x808BA8A8; // type:func +EnDodojr_SpawnSmallDust = 0x808BAAC8; // type:func +EnDodojr_UpdateBounces = 0x808BAC48; // type:func +EnDodojr_SetupCrawlTowardsTarget = 0x808BAD2C; // type:func +EnDodojr_SetupFlipBounce = 0x808BADB4; // type:func +EnDodojr_SetupSwallowedBombDeathSequence = 0x808BAE58; // type:func +EnDodojr_SetupJumpAttackBounce = 0x808BAEC8; // type:func +EnDodojr_SetupDespawn = 0x808BAF4C; // type:func +EnDodojr_SetupEatBomb = 0x808BAFB8; // type:func +EnDodojr_CheckNearbyBombs = 0x808BB034; // type:func +EnDodojr_TryEatBomb = 0x808BB160; // type:func +EnDodojr_UpdateCrawl = 0x808BB1E4; // type:func +EnDodojr_IsPlayerWithinAttackRange = 0x808BB3F8; // type:func +EnDodojr_SetupStandardDeathBounce = 0x808BB428; // type:func +EnDodojr_CheckDamaged = 0x808BB474; // type:func +EnDodojr_UpdateCollider = 0x808BB630; // type:func +EnDodojr_WaitUnderground = 0x808BB740; // type:func +EnDodojr_EmergeFromGround = 0x808BB858; // type:func +EnDodojr_CrawlTowardsTarget = 0x808BB920; // type:func +EnDodojr_EatBomb = 0x808BBA24; // type:func +EnDodojr_SwallowBomb = 0x808BBAD4; // type:func +EnDodojr_SwallowedBombDeathBounce = 0x808BBB44; // type:func +EnDodojr_SwallowedBombDeathSequence = 0x808BBBE4; // type:func +EnDodojr_StunnedBounce = 0x808BBC04; // type:func +EnDodojr_Stunned = 0x808BBC84; // type:func +EnDodojr_JumpAttackBounce = 0x808BBD34; // type:func +EnDodojr_Despawn = 0x808BBD9C; // type:func +EnDodojr_StandardDeathBounce = 0x808BBE54; // type:func +EnDodojr_DeathSequence = 0x808BBEDC; // type:func +EnDodojr_DropItem = 0x808BBF88; // type:func +EnDodojr_WaitFreezeFrames = 0x808BBFEC; // type:func +EnDodojr_Update = 0x808BC034; // type:func +EnDodojr_OverrideLimbDraw = 0x808BC0F4; // type:func +EnDodojr_PostLimbDraw = 0x808BC1A0; // type:func +EnDodojr_Draw = 0x808BC1B8; // type:func +EnBdfire_SetupAction = 0x808BC5F0; // type:func +EnbdFire_SetupDraw = 0x808BC5FC; // type:func +EnBdfire_Init = 0x808BC608; // type:func +EnBdfire_Destroy = 0x808BC838; // type:func +func_809BC2A4 = 0x808BC870; // type:func +func_809BC598 = 0x808BCB64; // type:func +EnBdfire_Update = 0x808BCE54; // type:func +EnBdfire_DrawFire = 0x808BCE90; // type:func +EnBdfire_Draw = 0x808BD048; // type:func +EnBoom_SetupAction = 0x808BD180; // type:func +EnBoom_Init = 0x808BD18C; // type:func +EnBoom_Destroy = 0x808BD2A8; // type:func +EnBoom_Fly = 0x808BD2E8; // type:func +EnBoom_Update = 0x808BD728; // type:func +EnBoom_Draw = 0x808BD780; // type:func +EnTorch2_Init = 0x808BDA40; // type:func +EnTorch2_Destroy = 0x808BDBE8; // type:func +EnTorch2_GetAttackItem = 0x808BDC58; // type:func +EnTorch2_SwingSword = 0x808BDCA0; // type:func +EnTorch2_Backflip = 0x808BDE38; // type:func +EnTorch2_Update = 0x808BDE90; // type:func +EnTorch2_OverrideLimbDraw = 0x808BF878; // type:func +EnTorch2_PostLimbDraw = 0x808BF8A4; // type:func +EnTorch2_Draw = 0x808BF8C8; // type:func +EnBili_Init = 0x808C01E0; // type:func +EnBili_Destroy = 0x808C02D8; // type:func +EnBili_SetupFloatIdle = 0x808C0304; // type:func +EnBili_SetupSpawnedFlyApart = 0x808C0360; // type:func +EnBili_SetupDischargeLightning = 0x808C03D8; // type:func +EnBili_SetupClimb = 0x808C0434; // type:func +EnBili_SetupApproachPlayer = 0x808C048C; // type:func +EnBili_SetupSetNewHomeHeight = 0x808C04AC; // type:func +EnBili_SetupRecoil = 0x808C0514; // type:func +EnBili_SetupBurnt = 0x808C059C; // type:func +EnBili_SetupDie = 0x808C063C; // type:func +EnBili_SetupStunned = 0x808C0670; // type:func +EnBili_SetupFrozen = 0x808C06E8; // type:func +EnBili_UpdateTentaclesIndex = 0x808C08C0; // type:func +EnBili_UpdateFloating = 0x808C09E0; // type:func +EnBili_FloatIdle = 0x808C0AC8; // type:func +EnBili_SpawnedFlyApart = 0x808C0BB4; // type:func +EnBili_DischargeLightning = 0x808C0C0C; // type:func +EnBili_Climb = 0x808C0E08; // type:func +EnBili_ApproachPlayer = 0x808C0EC4; // type:func +EnBili_SetNewHomeHeight = 0x808C0F54; // type:func +EnBili_Recoil = 0x808C0FD0; // type:func +EnBili_Burnt = 0x808C1034; // type:func +EnBili_Die = 0x808C10A8; // type:func +EnBili_Stunned = 0x808C12D0; // type:func +EnBili_Frozen = 0x808C1330; // type:func +EnBili_UpdateDamage = 0x808C13C0; // type:func +EnBili_Update = 0x808C158C; // type:func +EnBili_PulseLimb3 = 0x808C1760; // type:func +EnBili_PulseLimb2 = 0x808C1978; // type:func +EnBili_PulseLimb4 = 0x808C1B98; // type:func +EnBili_OverrideLimbDraw = 0x808C1D00; // type:func +EnBili_Draw = 0x808C1DF0; // type:func +EnTp_SetupAction = 0x808C24B0; // type:func +EnTp_Init = 0x808C24BC; // type:func +EnTp_Destroy = 0x808C2734; // type:func +EnTp_Tail_SetupFollowHead = 0x808C2760; // type:func +EnTp_Tail_FollowHead = 0x808C278C; // type:func +EnTp_Head_SetupApproachPlayer = 0x808C2968; // type:func +EnTp_Head_ApproachPlayer = 0x808C299C; // type:func +EnTp_SetupDie = 0x808C2B38; // type:func +EnTp_Die = 0x808C2BB0; // type:func +EnTp_Fragment_SetupFade = 0x808C2EE0; // type:func +EnTp_Fragment_Fade = 0x808C2FE4; // type:func +EnTp_Head_SetupTakeOff = 0x808C3030; // type:func +EnTp_Head_TakeOff = 0x808C308C; // type:func +EnTp_Head_SetupWait = 0x808C3274; // type:func +EnTp_Head_Wait = 0x808C32C0; // type:func +EnTp_Head_SetupBurrowReturnHome = 0x808C35CC; // type:func +EnTp_Head_BurrowReturnHome = 0x808C35FC; // type:func +EnTp_UpdateDamage = 0x808C38CC; // type:func +EnTp_Update = 0x808C3B24; // type:func +EnTp_Draw = 0x808C3E90; // type:func +EnSt_SetupAction = 0x808C4300; // type:func +EnSt_SpawnDust = 0x808C430C; // type:func +EnSt_SpawnBlastEffect = 0x808C452C; // type:func +EnSt_SpawnDeadEffect = 0x808C45B4; // type:func +EnSt_CreateBlureEffect = 0x808C46F0; // type:func +EnSt_CheckCeilingPos = 0x808C47EC; // type:func +EnSt_AddBlurVertex = 0x808C48BC; // type:func +EnSt_AddBlurSpace = 0x808C49C4; // type:func +EnSt_SetWaitingAnimation = 0x808C49F0; // type:func +EnSt_SetReturnToCeilingAnimation = 0x808C4A20; // type:func +EnSt_SetLandAnimation = 0x808C4A60; // type:func +EnSt_SetDropAnimAndVel = 0x808C4ABC; // type:func +EnSt_InitColliders = 0x808C4B1C; // type:func +EnSt_CheckBodyStickHit = 0x808C4C5C; // type:func +EnSt_SetBodyCylinderAC = 0x808C4CD0; // type:func +EnSt_SetLegsCylinderAC = 0x808C4D14; // type:func +EnSt_SetCylinderOC = 0x808C4DCC; // type:func +EnSt_UpdateCylinders = 0x808C4FA4; // type:func +EnSt_CheckHitPlayer = 0x808C5068; // type:func +EnSt_CheckHitFrontside = 0x808C5154; // type:func +EnSt_CheckHitBackside = 0x808C5194; // type:func +EnSt_CheckColliders = 0x808C5384; // type:func +EnSt_SetColliderScale = 0x808C540C; // type:func +EnSt_SetTeethColor = 0x808C5578; // type:func +EnSt_DecrStunTimer = 0x808C56A8; // type:func +EnSt_UpdateYaw = 0x808C56C8; // type:func +EnSt_IsDoneBouncing = 0x808C5968; // type:func +EnSt_Bob = 0x808C5A30; // type:func +EnSt_IsCloseToPlayer = 0x808C5A9C; // type:func +EnSt_IsCloseToInitalPos = 0x808C5B44; // type:func +EnSt_IsCloseToGround = 0x808C5B7C; // type:func +EnSt_Sway = 0x808C5BBC; // type:func +EnSt_Init = 0x808C5D8C; // type:func +EnSt_Destroy = 0x808C5EB0; // type:func +EnSt_WaitOnCeiling = 0x808C5F30; // type:func +EnSt_WaitOnGround = 0x808C5F8C; // type:func +EnSt_LandOnGround = 0x808C6084; // type:func +EnSt_MoveToGround = 0x808C6188; // type:func +EnSt_ReturnToCeiling = 0x808C6280; // type:func +EnSt_BounceAround = 0x808C6354; // type:func +EnSt_FinishBouncing = 0x808C6428; // type:func +EnSt_Die = 0x808C659C; // type:func +EnSt_StartOnCeilingOrGround = 0x808C6614; // type:func +EnSt_Update = 0x808C6698; // type:func +EnSt_OverrideLimbDraw = 0x808C6818; // type:func +EnSt_PostLimbDraw = 0x808C68F8; // type:func +EnSt_Draw = 0x808C6934; // type:func +EnBw_SetupAction = 0x808C6F70; // type:func +EnBw_Init = 0x808C6F7C; // type:func +EnBw_Destroy = 0x808C70DC; // type:func +func_809CE884 = 0x808C711C; // type:func +func_809CE9A8 = 0x808C7240; // type:func +func_809CEA24 = 0x808C72BC; // type:func +func_809CF72C = 0x808C7FC4; // type:func +func_809CF7AC = 0x808C8044; // type:func +func_809CF8F0 = 0x808C8188; // type:func +func_809CF984 = 0x808C821C; // type:func +func_809CFBA8 = 0x808C8444; // type:func +func_809CFC4C = 0x808C84E8; // type:func +func_809CFF10 = 0x808C87AC; // type:func +func_809CFF98 = 0x808C8834; // type:func +func_809D00F4 = 0x808C8990; // type:func +func_809D014C = 0x808C89E8; // type:func +func_809D01CC = 0x808C8A68; // type:func +func_809D0268 = 0x808C8B04; // type:func +func_809D03CC = 0x808C8C68; // type:func +func_809D0424 = 0x808C8CC0; // type:func +func_809D0584 = 0x808C8E20; // type:func +EnBw_Update = 0x808C912C; // type:func +EnBw_OverrideLimbDraw = 0x808C95BC; // type:func +EnBw_Draw = 0x808C97CC; // type:func +EnEiyer_Init = 0x808CA2E0; // type:func +EnEiyer_Destroy = 0x808CA4C0; // type:func +EnEiyer_RotateAroundHome = 0x808CA4EC; // type:func +EnEiyer_SetupAppearFromGround = 0x808CA55C; // type:func +EnEiyer_SetupUnderground = 0x808CA69C; // type:func +EnEiyer_SetupInactive = 0x808CA6FC; // type:func +EnEiyer_SetupAmbush = 0x808CA728; // type:func +EnEiyer_SetupGlide = 0x808CA808; // type:func +EnEiyer_SetupStartAttack = 0x808CA884; // type:func +EnEiyer_SetupDiveAttack = 0x808CA898; // type:func +EnEiyer_SetupLand = 0x808CA8E0; // type:func +EnEiyer_SetupHurt = 0x808CA958; // type:func +EnEiyer_SetupDie = 0x808CAA08; // type:func +EnEiyer_SetupDead = 0x808CAAC8; // type:func +EnEiyer_SetupStunned = 0x808CAAF4; // type:func +EnEiyer_AppearFromGround = 0x808CABB8; // type:func +EnEiyer_CheckPlayerCollision = 0x808CAC08; // type:func +EnEiyer_CircleUnderground = 0x808CAC38; // type:func +EnEiyer_WanderUnderground = 0x808CACB4; // type:func +EnEiyer_Inactive = 0x808CADE8; // type:func +EnEiyer_Ambush = 0x808CAE7C; // type:func +EnEiyer_Glide = 0x808CAFD4; // type:func +EnEiyer_StartAttack = 0x808CB1F0; // type:func +EnEiyer_DiveAttack = 0x808CB2EC; // type:func +EnEiyer_Land = 0x808CB378; // type:func +EnEiyer_Hurt = 0x808CB46C; // type:func +EnEiyer_Die = 0x808CB5A4; // type:func +EnEiyer_Dead = 0x808CB658; // type:func +EnEiyer_Stunned = 0x808CB6D8; // type:func +EnEiyer_UpdateDamage = 0x808CB790; // type:func +EnEiyer_Update = 0x808CB8D8; // type:func +EnEiyer_OverrideLimbDraw = 0x808CBAFC; // type:func +EnEiyer_Draw = 0x808CBB50; // type:func +EnRiverSound_Init = 0x808CBF40; // type:func +EnRiverSound_Destroy = 0x808CC010; // type:func +EnRiverSound_FindClosestPointOnLineSegment = 0x808CC068; // type:func +EnRiverSound_GetSfxPos = 0x808CC1D4; // type:func +EnRiverSound_Update = 0x808CC4D0; // type:func +EnRiverSound_Draw = 0x808CC6A0; // type:func +func_80A6B250 = 0x808CC8D0; // type:func +func_80A6B30C = 0x808CC98C; // type:func +EnHorseNormal_Init = 0x808CCA54; // type:func +EnHorseNormal_Destroy = 0x808CCF44; // type:func +func_80A6B91C = 0x808CCFA4; // type:func +EnHorseNormal_FollowPath = 0x808CD05C; // type:func +EnHorseNormal_NextAnimation = 0x808CD238; // type:func +EnHorseNormal_CycleAnimations = 0x808CD28C; // type:func +func_80A6BC48 = 0x808CD2D4; // type:func +func_80A6BCEC = 0x808CD37C; // type:func +func_80A6BD7C = 0x808CD40C; // type:func +EnHorseNormal_Wander = 0x808CD500; // type:func +func_80A6C4CC = 0x808CDB64; // type:func +EnHorseNormal_Wait = 0x808CDC0C; // type:func +func_80A6C6B0 = 0x808CDD4C; // type:func +EnHorseNormal_WaitClone = 0x808CDE00; // type:func +func_80A6C8E0 = 0x808CDF84; // type:func +EnHorseNormal_Update = 0x808CE048; // type:func +EnHorseNormal_PostDraw = 0x808CE1A4; // type:func +func_80A6CC88 = 0x808CE330; // type:func +EnHorseNormal_Draw = 0x808CE518; // type:func +EnOssan_SetupAction = 0x808CEEF0; // type:func +ShopItemDisp_Default = 0x808CEEFC; // type:func +ShopItemDisp_SpookyMask = 0x808CEF14; // type:func +ShopItemDisp_SkullMask = 0x808CEF48; // type:func +ShopItemDisp_BunnyHood = 0x808CEF7C; // type:func +ShopItemDisp_ZoraMask = 0x808CEFB0; // type:func +ShopItemDisp_GoronMask = 0x808CEFE4; // type:func +ShopItemDisp_GerudoMask = 0x808CF018; // type:func +EnOssan_SpawnItemsOnShelves = 0x808CF04C; // type:func +EnOssan_UpdateShopOfferings = 0x808CF1A0; // type:func +EnOssan_TalkDefaultShopkeeper = 0x808CF30C; // type:func +EnOssan_TalkKakarikoPotionShopkeeper = 0x808CF32C; // type:func +EnOssan_TalkMarketPotionShopkeeper = 0x808CF370; // type:func +EnOssan_TalkKokiriShopkeeper = 0x808CF390; // type:func +EnOssan_TalkBazaarShopkeeper = 0x808CF3B0; // type:func +EnOssan_TalkBombchuShopkeeper = 0x808CF3F4; // type:func +EnOssan_TalkZoraShopkeeper = 0x808CF414; // type:func +EnOssan_TalkGoronShopkeeper = 0x808CF46C; // type:func +EnOssan_TalkHappyMaskShopkeeper = 0x808CF540; // type:func +EnOssan_UpdateCameraDirection = 0x808CF5CC; // type:func +EnOssan_TryGetObjBankIndices = 0x808CF630; // type:func +EnOssan_Init = 0x808CF6F4; // type:func +EnOssan_Destroy = 0x808CF8C0; // type:func +EnOssan_UpdateCursorPos = 0x808CF900; // type:func +EnOssan_EndInteraction = 0x808CF964; // type:func +EnOssan_TestEndInteraction = 0x808CFA28; // type:func +EnOssan_TestCancelOption = 0x808CFA70; // type:func +EnOssan_SetStateStartShopping = 0x808CFAD4; // type:func +EnOssan_StartShopping = 0x808CFB58; // type:func +EnOssan_ChooseTalkToOwner = 0x808CFC30; // type:func +EnOssan_SetLookToShopkeeperFromShelf = 0x808CFC90; // type:func +EnOssan_State_Idle = 0x808CFCC4; // type:func +EnOssan_UpdateJoystickInputState = 0x808CFD74; // type:func +EnOssan_SetCursorIndexFromNeutral = 0x808CFEC0; // type:func +EnOssan_CursorRight = 0x808CFFF8; // type:func +EnOssan_CursorLeft = 0x808D0084; // type:func +EnOssan_TryPaybackMask = 0x808D00EC; // type:func +EnOssan_State_StartConversation = 0x808D0228; // type:func +EnOssan_FacingShopkeeperDialogResult = 0x808D03D0; // type:func +EnOssan_State_FacingShopkeeper = 0x808D043C; // type:func +EnOssan_State_TalkingToShopkeeper = 0x808D0554; // type:func +EnOssan_State_LookToLeftShelf = 0x808D05A8; // type:func +EnOssan_State_LookToRightShelf = 0x808D0694; // type:func +EnOssan_CursorUpDown = 0x808D0780; // type:func +EnOssan_HasPlayerSelectedItem = 0x808D0994; // type:func +EnOssan_State_BrowseLeftShelf = 0x808D0B30; // type:func +EnOssan_State_BrowseRightShelf = 0x808D0CF0; // type:func +EnOssan_State_LookFromShelfToShopkeeper = 0x808D0EB0; // type:func +EnOssan_State_DisplayOnlyBombDialog = 0x808D0F6C; // type:func +EnOssan_GiveItemWithFanfare = 0x808D103C; // type:func +EnOssan_SetStateCantGetItem = 0x808D1108; // type:func +EnOssan_SetStateQuickBuyDialog = 0x808D113C; // type:func +EnOssan_HandleCanBuyItem = 0x808D1170; // type:func +EnOssan_HandleCanBuyLonLonMilk = 0x808D1318; // type:func +EnOssan_HandleCanBuyWeirdEgg = 0x808D1424; // type:func +EnOssan_HandleCanBuyBombs = 0x808D155C; // type:func +EnOssan_BuyGoronCityBombs = 0x808D1660; // type:func +EnOssan_State_ItemSelected = 0x808D1704; // type:func +EnOssan_State_SelectMilkBottle = 0x808D17D8; // type:func +EnOssan_State_SelectWeirdEgg = 0x808D18AC; // type:func +EnOssan_State_SelectUnimplementedItem = 0x808D1980; // type:func +EnOssan_State_SelectBombs = 0x808D1A10; // type:func +EnOssan_State_SelectMaskItem = 0x808D1B08; // type:func +EnOssan_State_CantGetItem = 0x808D1CE4; // type:func +EnOssan_State_QuickBuyDialog = 0x808D1D60; // type:func +EnOssan_State_GiveItemWithFanfare = 0x808D1E08; // type:func +EnOssan_State_ItemPurchased = 0x808D1E78; // type:func +EnOssan_State_ContinueShoppingPrompt = 0x808D1FBC; // type:func +EnOssan_State_WaitForDisplayOnlyBombDialog = 0x808D219C; // type:func +EnOssan_State_21 = 0x808D2204; // type:func +EnOssan_State_22 = 0x808D2278; // type:func +EnOssan_State_GiveLonLonMilk = 0x808D22CC; // type:func +EnOssan_State_LendMaskOfTruth = 0x808D2320; // type:func +EnOssan_SetStateGiveDiscountDialog = 0x808D2390; // type:func +EnOssan_State_GiveDiscountDialog = 0x808D23BC; // type:func +EnOssan_PositionSelectedItem = 0x808D2450; // type:func +EnOssan_ResetItemPosition = 0x808D2538; // type:func +EnOssan_TakeItemOffShelf = 0x808D255C; // type:func +EnOssan_ReturnItemToShelf = 0x808D25F8; // type:func +EnOssan_UpdateItemSelectedProperty = 0x808D2684; // type:func +EnOssan_UpdateCursorAnim = 0x808D27C0; // type:func +EnOssan_UpdateStickDirectionPromptAnim = 0x808D288C; // type:func +EnOssan_WaitForBlink = 0x808D2A3C; // type:func +EnOssan_Blink = 0x808D2A70; // type:func +EnOssan_AreShopkeeperObjectsLoaded = 0x808D2B10; // type:func +EnOssan_InitBazaarShopkeeper = 0x808D2BAC; // type:func +EnOssan_InitKokiriShopkeeper = 0x808D2C0C; // type:func +EnOssan_InitGoronShopkeeper = 0x808D2D24; // type:func +EnOssan_InitZoraShopkeeper = 0x808D2E00; // type:func +EnOssan_InitPotionShopkeeper = 0x808D2EDC; // type:func +EnOssan_InitHappyMaskShopkeeper = 0x808D2F3C; // type:func +EnOssan_InitBombchuShopkeeper = 0x808D2F9C; // type:func +EnOssan_SetupHelloDialog = 0x808D2FFC; // type:func +EnOssan_InitActionFunc = 0x808D3164; // type:func +EnOssan_Obj3ToSeg6 = 0x808D341C; // type:func +EnOssan_MainActionFunc = 0x808D3454; // type:func +EnOssan_Update = 0x808D3570; // type:func +EnOssan_OverrideLimbDrawDefaultShopkeeper = 0x808D359C; // type:func +EnOssan_DrawCursor = 0x808D35D4; // type:func +EnOssan_DrawTextRec = 0x808D3840; // type:func +EnOssan_DrawStickDirectionPrompts = 0x808D39DC; // type:func +EnOssan_DrawBazaarShopkeeper = 0x808D3D84; // type:func +EnOssan_OverrideLimbDrawKokiriShopkeeper = 0x808D3E78; // type:func +EnOssan_EmptyDList = 0x808D3F70; // type:func +EnOssan_SetEnvColor = 0x808D3F94; // type:func +EnOssan_DrawKokiriShopkeeper = 0x808D4000; // type:func +EnOssan_DrawGoronShopkeeper = 0x808D4160; // type:func +EnOssan_OverrideLimbDrawZoraShopkeeper = 0x808D4294; // type:func +EnOssan_DrawZoraShopkeeper = 0x808D42CC; // type:func +EnOssan_DrawPotionShopkeeper = 0x808D440C; // type:func +EnOssan_DrawHappyMaskShopkeeper = 0x808D44F8; // type:func +EnOssan_DrawBombchuShopkeeper = 0x808D45E4; // type:func +BgTreemouth_SetupAction = 0x808D54D0; // type:func +BgTreemouth_Init = 0x808D54DC; // type:func +BgTreemouth_Destroy = 0x808D5604; // type:func +func_808BC65C = 0x808D5638; // type:func +func_808BC6F8 = 0x808D56D4; // type:func +func_808BC80C = 0x808D57E8; // type:func +func_808BC864 = 0x808D5840; // type:func +func_808BC8B8 = 0x808D5894; // type:func +func_808BC9EC = 0x808D59C8; // type:func +func_808BCAF0 = 0x808D5AD0; // type:func +BgTreemouth_DoNothing = 0x808D5B6C; // type:func +BgTreemouth_Update = 0x808D5B7C; // type:func +BgTreemouth_Draw = 0x808D5BFC; // type:func +BgDodoago_SetupAction = 0x808D6B30; // type:func +BgDodoago_SpawnSparkles = 0x808D6B3C; // type:func +BgDodoago_Init = 0x808D6C5C; // type:func +BgDodoago_Destroy = 0x808D6DC0; // type:func +BgDodoago_WaitExplosives = 0x808D6E2C; // type:func +BgDodoago_OpenJaw = 0x808D70F0; // type:func +BgDodoago_DoNothing = 0x808D73B4; // type:func +BgDodoago_LightOneEye = 0x808D73C4; // type:func +BgDodoago_Update = 0x808D7428; // type:func +BgDodoago_Draw = 0x808D7580; // type:func +BgHidanDalm_Init = 0x808D78E0; // type:func +BgHidanDalm_Destroy = 0x808D79C8; // type:func +BgHidanDalm_Wait = 0x808D7A10; // type:func +BgHidanDalm_Shrink = 0x808D7B94; // type:func +BgHidanDalm_Update = 0x808D7D44; // type:func +BgHidanDalm_UpdateCollider = 0x808D7DA4; // type:func +BgHidanDalm_Draw = 0x808D7ED0; // type:func +BgHidanHrock_Init = 0x808D8130; // type:func +BgHidanHrock_Destroy = 0x808D8460; // type:func +func_808894A4 = 0x808D84A8; // type:func +func_808894B0 = 0x808D84B8; // type:func +func_8088960C = 0x808D8614; // type:func +func_808896B8 = 0x808D86C0; // type:func +BgHidanHrock_Update = 0x808D87A0; // type:func +BgHidanHrock_Draw = 0x808D87C4; // type:func +func_80A68660 = 0x808D8960; // type:func +func_80A686A8 = 0x808D89AC; // type:func +func_80A68870 = 0x808D8B74; // type:func +EnHorseGanon_Init = 0x808D8C30; // type:func +EnHorseGanon_Destroy = 0x808D8D7C; // type:func +func_80A68AC4 = 0x808D8DCC; // type:func +func_80A68AF0 = 0x808D8DFC; // type:func +func_80A68B20 = 0x808D8E30; // type:func +func_80A68DB0 = 0x808D90C0; // type:func +func_80A68E14 = 0x808D9124; // type:func +EnHorseGanon_Update = 0x808D91E8; // type:func +EnHorseGanon_PostDraw = 0x808D92BC; // type:func +EnHorseGanon_Draw = 0x808D9448; // type:func +BgHidanRock_Init = 0x808D96E0; // type:func +BgHidanRock_Destroy = 0x808D985C; // type:func +func_8088B24C = 0x808D98B0; // type:func +func_8088B268 = 0x808D98D0; // type:func +func_8088B5F4 = 0x808D9C60; // type:func +func_8088B634 = 0x808D9CA0; // type:func +func_8088B69C = 0x808D9D0C; // type:func +func_8088B79C = 0x808D9E0C; // type:func +func_8088B90C = 0x808D9F7C; // type:func +func_8088B954 = 0x808D9FC4; // type:func +func_8088B990 = 0x808DA000; // type:func +BgHidanRock_Update = 0x808DA1EC; // type:func +func_8088BC40 = 0x808DA2BC; // type:func +BgHidanRock_Draw = 0x808DA4B8; // type:func +BgHidanRsekizou_Init = 0x808DA7D0; // type:func +BgHidanRsekizou_Destroy = 0x808DA8D4; // type:func +BgHidanRsekizou_Update = 0x808DA91C; // type:func +BgHidanRsekizou_DrawFireball = 0x808DACE0; // type:func +BgHidanRsekizou_Draw = 0x808DB000; // type:func +func_8088CEC0 = 0x808DB3B0; // type:func +BgHidanSekizou_Init = 0x808DB76C; // type:func +BgHidanSekizou_Destroy = 0x808DB8E0; // type:func +func_8088D434 = 0x808DB928; // type:func +func_8088D720 = 0x808DBC14; // type:func +func_8088D750 = 0x808DBC44; // type:func +BgHidanSekizou_Update = 0x808DBDB0; // type:func +func_8088D9F4 = 0x808DBEEC; // type:func +func_8088DC50 = 0x808DC134; // type:func +func_8088DE08 = 0x808DC2EC; // type:func +BgHidanSekizou_Draw = 0x808DC3CC; // type:func +BgHidanSima_Init = 0x808DC800; // type:func +BgHidanSima_Destroy = 0x808DC904; // type:func +func_8088E518 = 0x808DC94C; // type:func +func_8088E5D0 = 0x808DCA08; // type:func +func_8088E6D0 = 0x808DCB0C; // type:func +func_8088E760 = 0x808DCBA4; // type:func +func_8088E7A8 = 0x808DCBEC; // type:func +func_8088E90C = 0x808DCD50; // type:func +BgHidanSima_Update = 0x808DCEB0; // type:func +func_8088EB54 = 0x808DCFA0; // type:func +BgHidanSima_Draw = 0x808DD438; // type:func +BgHidanSyoku_Init = 0x808DD720; // type:func +BgHidanSyoku_Destroy = 0x808DD7AC; // type:func +func_8088F47C = 0x808DD7E0; // type:func +func_8088F4B8 = 0x808DD81C; // type:func +func_8088F514 = 0x808DD87C; // type:func +func_8088F5A0 = 0x808DD908; // type:func +func_8088F62C = 0x808DD994; // type:func +BgHidanSyoku_Update = 0x808DD9F0; // type:func +BgHidanSyoku_Draw = 0x808DDA98; // type:func +EnXc_InitCollider = 0x808DDB80; // type:func +EnXc_UpdateCollider = 0x808DDBCC; // type:func +EnXc_Destroy = 0x808DDC10; // type:func +EnXc_CalculateHeadTurn = 0x808DDC3C; // type:func +EnXc_SetEyePattern = 0x808DDCC4; // type:func +EnXc_SpawnNut = 0x808DDD4C; // type:func +EnXc_BgCheck = 0x808DDE14; // type:func +EnXc_AnimIsFinished = 0x808DDE5C; // type:func +EnXc_GetCue = 0x808DDE80; // type:func +EnXc_CheckForCue = 0x808DDEA4; // type:func +EnXc_CheckForNoCue = 0x808DDEF0; // type:func +func_80B3C588 = 0x808DDF3C; // type:func +func_80B3C620 = 0x808DDFD4; // type:func +EnXc_ChangeAnimation = 0x808DE0B4; // type:func +EnXc_CheckAndSetAction = 0x808DE170; // type:func +func_80B3C7D4 = 0x808DE188; // type:func +func_80B3C8CC = 0x808DE1B4; // type:func +func_80B3C924 = 0x808DE210; // type:func +func_80B3C964 = 0x808DE250; // type:func +func_80B3C9DC = 0x808DE2C8; // type:func +func_80B3C9EC = 0x808DE2DC; // type:func +func_80B3CA38 = 0x808DE328; // type:func +EnXc_MinuetCS = 0x808DE37C; // type:func +func_80B3CB58 = 0x808DE454; // type:func +EnXc_BoleroCS = 0x808DE4A8; // type:func +EnXc_SetupSerenadeAction = 0x808DE608; // type:func +EnXc_SerenadeCS = 0x808DE660; // type:func +EnXc_DoNothing = 0x808DE728; // type:func +EnXc_SetWalkingSFX = 0x808DE738; // type:func +EnXc_SetNutThrowSFX = 0x808DE7B8; // type:func +EnXc_SetLandingSFX = 0x808DE844; // type:func +EnXc_SetColossusAppearSFX = 0x808DE8C4; // type:func +func_80B3D118 = 0x808DE9D0; // type:func +EnXc_SetColossusWindSFX = 0x808DEA14; // type:func +EnXc_SpawnFlame = 0x808DEB1C; // type:func +EnXc_SetupFlamePos = 0x808DEBC0; // type:func +EnXc_DestroyFlame = 0x808DEC3C; // type:func +EnXc_InitFlame = 0x808DEC7C; // type:func +func_80B3D48C = 0x808DED18; // type:func +EnXc_GetCurrentHarpAnim = 0x808DED68; // type:func +EnXc_CalcXZAccel = 0x808DEDFC; // type:func +func_80B3D644 = 0x808DEED4; // type:func +EnXc_CalcXZSpeed = 0x808DEEF4; // type:func +func_80B3D6F0 = 0x808DEF80; // type:func +func_80B3D710 = 0x808DEFA0; // type:func +func_80B3D730 = 0x808DEFC0; // type:func +func_80B3D750 = 0x808DEFE0; // type:func +EnXc_SetupFallFromSkyAction = 0x808DF02C; // type:func +func_80B3D8A4 = 0x808DF13C; // type:func +EnXc_SetupWalkAction = 0x808DF22C; // type:func +EnXc_SetupHaltAction = 0x808DF29C; // type:func +EnXc_SetupStoppedAction = 0x808DF348; // type:func +func_80B3DAF0 = 0x808DF390; // type:func +EnXc_SetupInitialHarpAction = 0x808DF450; // type:func +EnXc_SetupPlayingHarpAction = 0x808DF4C8; // type:func +func_80B3DCA8 = 0x808DF550; // type:func +EnXc_SetupHarpPutawayAction = 0x808DF5E4; // type:func +func_80B3DE00 = 0x808DF6B4; // type:func +func_80B3DE78 = 0x808DF72C; // type:func +EnXc_SetupReverseAccel = 0x808DF7A8; // type:func +EnXc_SetupReverseWalkAction = 0x808DF858; // type:func +EnXc_SetupReverseHaltAction = 0x808DF8C8; // type:func +EnXc_SetupNutThrow = 0x808DF974; // type:func +func_80B3E164 = 0x808DFA1C; // type:func +EnXc_SetupDisappear = 0x808DFA70; // type:func +EnXc_ActionFunc0 = 0x808DFAE0; // type:func +EnXc_ActionFunc1 = 0x808DFB20; // type:func +EnXc_GracefulFall = 0x808DFB60; // type:func +EnXc_Accelerate = 0x808DFBDC; // type:func +EnXc_Walk = 0x808DFC3C; // type:func +EnXc_Stopped = 0x808DFC9C; // type:func +EnXc_ActionFunc6 = 0x808DFCFC; // type:func +EnXc_ActionFunc7 = 0x808DFD44; // type:func +EnXc_ActionFunc8 = 0x808DFD90; // type:func +EnXc_ActionFunc9 = 0x808DFDE0; // type:func +EnXc_ActionFunc10 = 0x808DFE28; // type:func +EnXc_ActionFunc11 = 0x808DFE70; // type:func +EnXc_ActionFunc12 = 0x808DFEBC; // type:func +EnXc_ActionFunc13 = 0x808DFF08; // type:func +EnXc_ReverseAccelerate = 0x808DFF64; // type:func +EnXc_ActionFunc15 = 0x808DFFD0; // type:func +EnXc_HaltAndWaitToThrowNut = 0x808E003C; // type:func +EnXc_ThrowNut = 0x808E00A8; // type:func +EnXc_Delete = 0x808E0110; // type:func +EnXc_Fade = 0x808E016C; // type:func +func_80B3E87C = 0x808E018C; // type:func +EnXc_PullingOutHarpOverrideLimbDraw = 0x808E01BC; // type:func +EnXc_HarpOverrideLimbDraw = 0x808E01F8; // type:func +EnXc_DrawPullingOutHarp = 0x808E0220; // type:func +EnXc_DrawHarp = 0x808E035C; // type:func +func_80B3EBF0 = 0x808E0498; // type:func +func_80B3EC00 = 0x808E04AC; // type:func +func_80B3EC0C = 0x808E04BC; // type:func +func_80B3EC90 = 0x808E0540; // type:func +func_80B3ECD8 = 0x808E0588; // type:func +EnXc_ActionFunc20 = 0x808E05F8; // type:func +EnXc_ActionFunc21 = 0x808E061C; // type:func +EnXc_ActionFunc22 = 0x808E063C; // type:func +EnXc_ActionFunc23 = 0x808E0684; // type:func +EnXc_ActionFunc24 = 0x808E06E4; // type:func +EnXc_ActionFunc25 = 0x808E06F4; // type:func +EnXc_ActionFunc26 = 0x808E0704; // type:func +EnXc_ActionFunc27 = 0x808E0714; // type:func +EnXc_ActionFunc28 = 0x808E0724; // type:func +func_80B3EE64 = 0x808E0734; // type:func +func_80B3EE74 = 0x808E0748; // type:func +func_80B3EEA4 = 0x808E077C; // type:func +func_80B3EEC8 = 0x808E07A0; // type:func +func_80B3EEEC = 0x808E07C4; // type:func +func_80B3EF10 = 0x808E07E8; // type:func +func_80B3EF34 = 0x808E080C; // type:func +func_80B3EF58 = 0x808E0830; // type:func +func_80B3EF80 = 0x808E0858; // type:func +func_80B3EFA4 = 0x808E087C; // type:func +func_80B3EFC8 = 0x808E08A0; // type:func +func_80B3EFEC = 0x808E08C4; // type:func +func_80B3F010 = 0x808E08E8; // type:func +func_80B3F0B8 = 0x808E0994; // type:func +func_80B3F0DC = 0x808E09B8; // type:func +func_80B3F100 = 0x808E09DC; // type:func +EnXc_Serenade = 0x808E0A00; // type:func +EnXc_ActionFunc30 = 0x808E0A20; // type:func +EnXc_ActionFunc31 = 0x808E0A4C; // type:func +EnXc_ActionFunc32 = 0x808E0A90; // type:func +EnXc_ActionFunc33 = 0x808E0ABC; // type:func +EnXc_ActionFunc34 = 0x808E0AE8; // type:func +EnXc_ActionFunc35 = 0x808E0B14; // type:func +EnXc_ActionFunc36 = 0x808E0B40; // type:func +EnXc_ActionFunc37 = 0x808E0B6C; // type:func +EnXc_ActionFunc38 = 0x808E0B98; // type:func +EnXc_ActionFunc39 = 0x808E0BC4; // type:func +EnXc_ActionFunc40 = 0x808E0BF0; // type:func +EnXc_ActionFunc41 = 0x808E0C50; // type:func +EnXc_ActionFunc42 = 0x808E0C7C; // type:func +EnXc_ActionFunc43 = 0x808E0CA8; // type:func +EnXc_ActionFunc44 = 0x808E0CD4; // type:func +func_80B3F3C8 = 0x808E0CE4; // type:func +func_80B3F3D8 = 0x808E0CF8; // type:func +EnXc_PlayDiveSFX = 0x808E0D18; // type:func +EnXc_LakeHyliaDive = 0x808E0D6C; // type:func +func_80B3F534 = 0x808E0E58; // type:func +func_80B3F59C = 0x808E0EC0; // type:func +func_80B3F620 = 0x808E0F44; // type:func +func_80B3F644 = 0x808E0F68; // type:func +func_80B3F668 = 0x808E0F8C; // type:func +func_80B3F6DC = 0x808E1000; // type:func +EnXc_SetupKneelAction = 0x808E1024; // type:func +func_80B3F754 = 0x808E107C; // type:func +func_80B3F7BC = 0x808E10EC; // type:func +EnXc_ActionFunc45 = 0x808E1128; // type:func +EnXc_ActionFunc46 = 0x808E1154; // type:func +EnXc_ActionFunc47 = 0x808E1180; // type:func +EnXc_ActionFunc48 = 0x808E11D8; // type:func +EnXc_ActionFunc49 = 0x808E1204; // type:func +EnXc_Kneel = 0x808E1268; // type:func +EnXc_ActionFunc51 = 0x808E12CC; // type:func +EnXc_ActionFunc52 = 0x808E1330; // type:func +func_80B3FA08 = 0x808E1350; // type:func +func_80B3FA2C = 0x808E1378; // type:func +EnXc_PlayTriforceSFX = 0x808E1398; // type:func +func_80B3FAE0 = 0x808E1430; // type:func +EnXc_CalcTriforce = 0x808E1478; // type:func +func_80B3FF0C = 0x808E1870; // type:func +EnXc_SetupShowTriforceAction = 0x808E1918; // type:func +EnXc_SetupShowTriforceIdleAction = 0x808E19A8; // type:func +func_80B400AC = 0x808E1A14; // type:func +EnXc_ActionFunc53 = 0x808E1A50; // type:func +EnXc_ActionFunc54 = 0x808E1A70; // type:func +EnXc_ShowTriforce = 0x808E1AB8; // type:func +EnXc_ShowTriforceIdle = 0x808E1B20; // type:func +EnXc_TriforceOverrideLimbDraw = 0x808E1B7C; // type:func +EnXc_TriforcePostLimbDraw = 0x808E1BA4; // type:func +EnXc_DrawTriforce = 0x808E1C20; // type:func +func_80B40590 = 0x808E1EB4; // type:func +EnXc_SetThrownAroundSFX = 0x808E1ED0; // type:func +EnXc_PlayLinkScreamSFX = 0x808E1F94; // type:func +EnXc_SetCrySFX = 0x808E1FC8; // type:func +func_80B406F8 = 0x808E2024; // type:func +EnXc_SetupIdleInNocturne = 0x808E203C; // type:func +EnXc_SetupDefenseStance = 0x808E20D8; // type:func +EnXc_SetupContortions = 0x808E2150; // type:func +EnXc_SetupFallInNocturne = 0x808E21EC; // type:func +EnXc_SetupHittingGroundInNocturne = 0x808E22C8; // type:func +func_80B40A78 = 0x808E2368; // type:func +EnXc_SetupKneelInNocturne = 0x808E2408; // type:func +func_80B40BB4 = 0x808E24A4; // type:func +func_80B40C50 = 0x808E2540; // type:func +func_80B40C74 = 0x808E2564; // type:func +func_80B40C98 = 0x808E2588; // type:func +func_80B40CBC = 0x808E25AC; // type:func +func_80B40CE0 = 0x808E25D0; // type:func +func_80B40D08 = 0x808E25F8; // type:func +func_80B40D2C = 0x808E261C; // type:func +func_80B40D50 = 0x808E2640; // type:func +func_80B40D74 = 0x808E2664; // type:func +EnXc_SetupReverseHaltInNocturneCS = 0x808E2688; // type:func +func_80B40E40 = 0x808E2734; // type:func +func_80B40E64 = 0x808E2758; // type:func +func_80B40E88 = 0x808E277C; // type:func +EnXc_SetupNocturneState = 0x808E27A0; // type:func +EnXc_InitialNocturneAction = 0x808E28E0; // type:func +EnXc_IdleInNocturne = 0x808E2900; // type:func +EnXc_DefenseStance = 0x808E2950; // type:func +EnXc_Contort = 0x808E2998; // type:func +EnXc_FallInNocturne = 0x808E2A04; // type:func +EnXc_HitGroundInNocturne = 0x808E2A6C; // type:func +EnXc_ActionFunc63 = 0x808E2AAC; // type:func +EnXc_KneelInNocturneCS = 0x808E2B08; // type:func +EnXc_ActionFunc65 = 0x808E2B50; // type:func +EnXc_ActionFunc66 = 0x808E2B94; // type:func +EnXc_ActionFunc67 = 0x808E2BC0; // type:func +EnXc_ActionFunc68 = 0x808E2BEC; // type:func +EnXc_ActionFunc69 = 0x808E2C18; // type:func +EnXc_ActionFunc70 = 0x808E2C44; // type:func +EnXc_ActionFunc71 = 0x808E2C70; // type:func +EnXc_ActionFunc72 = 0x808E2C9C; // type:func +EnXc_ReverseAccelInNocturneCS = 0x808E2CC8; // type:func +EnXc_ReverseWalkInNocturneCS = 0x808E2CF4; // type:func +EnXc_ReverseHaltInNocturneCS = 0x808E2D48; // type:func +EnXc_ThrowNutInNocturneCS = 0x808E2D74; // type:func +EnXc_DeleteInNocturneCS = 0x808E2DA0; // type:func +EnXc_KillInNocturneCS = 0x808E2DCC; // type:func +EnXc_DrawSquintingEyes = 0x808E2DF0; // type:func +EnXc_InitTempleOfTime = 0x808E2ED0; // type:func +EnXc_SetupDialogueAction = 0x808E303C; // type:func +func_80B41798 = 0x808E30C4; // type:func +EnXc_BlockingPedestalAction = 0x808E3110; // type:func +EnXc_ActionFunc80 = 0x808E3178; // type:func +EnXc_Update = 0x808E31E0; // type:func +EnXc_Init = 0x808E3228; // type:func +EnXc_OverrideLimbDraw = 0x808E3394; // type:func +EnXc_PostLimbDraw = 0x808E341C; // type:func +EnXc_DrawNothing = 0x808E34A8; // type:func +EnXc_DrawDefault = 0x808E34B8; // type:func +EnXc_Draw = 0x808E35C0; // type:func +BgHidanCurtain_Init = 0x808E4310; // type:func +BgHidanCurtain_Destroy = 0x808E4524; // type:func +BgHidanCurtain_WaitForSwitchOn = 0x808E4550; // type:func +BgHidanCurtain_WaitForCutscene = 0x808E4604; // type:func +BgHidanCurtain_WaitForClear = 0x808E4630; // type:func +BgHidanCurtain_WaitForSwitchOff = 0x808E4674; // type:func +BgHidanCurtain_TurnOn = 0x808E46B8; // type:func +BgHidanCurtain_TurnOff = 0x808E472C; // type:func +BgHidanCurtain_WaitForTimer = 0x808E481C; // type:func +BgHidanCurtain_Update = 0x808E4880; // type:func +BgHidanCurtain_Draw = 0x808E4B14; // type:func +BgSpot00Hanebasi_Init = 0x808E4DB0; // type:func +BgSpot00Hanebasi_Destroy = 0x808E51C0; // type:func +BgSpot00Hanebasi_DrawbridgeWait = 0x808E521C; // type:func +BgSpot00Hanebasi_DoNothing = 0x808E534C; // type:func +BgSpot00Hanebasi_DrawbridgeRiseAndFall = 0x808E535C; // type:func +BgSpot00Hanebasi_SetTorchLightInfo = 0x808E5490; // type:func +BgSpot00Hanebasi_Update = 0x808E55E8; // type:func +BgSpot00Hanebasi_DrawTorches = 0x808E58F8; // type:func +BgSpot00Hanebasi_Draw = 0x808E5BA0; // type:func +EnMb_SetupAction = 0x808E5EC0; // type:func +EnMb_Init = 0x808E5ECC; // type:func +EnMb_Destroy = 0x808E6230; // type:func +EnMb_FaceWaypoint = 0x808E6280; // type:func +EnMb_NextWaypoint = 0x808E62B8; // type:func +EnMb_IsPlayerInCorridor = 0x808E63A4; // type:func +EnMb_FindWaypointTowardsPlayer = 0x808E6518; // type:func +EnMb_SetupSpearGuardLookAround = 0x808E66A8; // type:func +EnMb_SetupClubWaitPlayerNear = 0x808E6710; // type:func +EnMb_SetupSpearPatrolTurnTowardsWaypoint = 0x808E6774; // type:func +EnMb_SetupSpearGuardWalk = 0x808E67EC; // type:func +EnMb_SetupSpearPatrolWalkTowardsWaypoint = 0x808E6890; // type:func +EnMb_SetupSpearPrepareAndCharge = 0x808E6940; // type:func +EnMb_SetupSpearPatrolImmediateCharge = 0x808E69F8; // type:func +EnMb_SetupClubAttack = 0x808E6A68; // type:func +EnMb_SetupSpearEndChargeQuick = 0x808E6B38; // type:func +EnMb_SetupSpearPatrolEndCharge = 0x808E6B98; // type:func +EnMb_SetupClubWaitAfterAttack = 0x808E6C1C; // type:func +EnMb_SetupClubDamaged = 0x808E6C94; // type:func +EnMb_SetupClubDamagedWhileKneeling = 0x808E6CF4; // type:func +EnMb_SetupClubDead = 0x808E6D7C; // type:func +EnMb_SetupStunned = 0x808E6E04; // type:func +EnMb_Stunned = 0x808E6EA8; // type:func +EnMb_SpearGuardLookAround = 0x808E6FB4; // type:func +EnMb_SpearPatrolTurnTowardsWaypoint = 0x808E702C; // type:func +EnMb_SpearEndChargeQuick = 0x808E7190; // type:func +EnMb_ClubWaitAfterAttack = 0x808E72F8; // type:func +EnMb_SpearPatrolEndCharge = 0x808E733C; // type:func +EnMb_SpearGuardPrepareAndCharge = 0x808E7654; // type:func +EnMb_ClubAttack = 0x808E77BC; // type:func +EnMb_SpearPatrolPrepareAndCharge = 0x808E7B34; // type:func +EnMb_SpearPatrolImmediateCharge = 0x808E7E98; // type:func +EnMb_ClubDamaged = 0x808E8208; // type:func +EnMb_ClubDamagedWhileKneeling = 0x808E829C; // type:func +EnMb_ClubDead = 0x808E83A8; // type:func +EnMb_SpearGuardWalk = 0x808E866C; // type:func +EnMb_SpearPatrolWalkTowardsWaypoint = 0x808E897C; // type:func +EnMb_ClubWaitPlayerNear = 0x808E8C68; // type:func +EnMb_SetupSpearDamaged = 0x808E8D18; // type:func +EnMb_SpearDamaged = 0x808E8DE0; // type:func +EnMb_SetupSpearDead = 0x808E8E58; // type:func +EnMb_SpearDead = 0x808E8F30; // type:func +EnMb_SpearUpdateAttackCollider = 0x808E9148; // type:func +EnMb_ClubUpdateAttackCollider = 0x808E92D4; // type:func +EnMb_CheckColliding = 0x808E936C; // type:func +EnMb_Update = 0x808E9538; // type:func +EnMb_PostLimbDraw = 0x808E970C; // type:func +EnMb_Draw = 0x808E98A8; // type:func +EnBombf_SetupAction = 0x808EA0F0; // type:func +EnBombf_Init = 0x808EA0FC; // type:func +EnBombf_Destroy = 0x808EA2D8; // type:func +EnBombf_SetupGrowBomb = 0x808EA318; // type:func +EnBombf_GrowBomb = 0x808EA340; // type:func +EnBombf_Move = 0x808EA650; // type:func +EnBombf_WaitForRelease = 0x808EA774; // type:func +EnBombf_Explode = 0x808EA7D8; // type:func +EnBombf_Update = 0x808EA92C; // type:func +EnBombf_NewMtxDList = 0x808EB0D8; // type:func +EnBombf_Draw = 0x808EB160; // type:func +BgHidanFirewall_Init = 0x808EB560; // type:func +BgHidanFirewall_Destroy = 0x808EB600; // type:func +BgHidanFirewall_CheckProximity = 0x808EB62C; // type:func +BgHidanFirewall_Wait = 0x808EB69C; // type:func +BgHidanFirewall_Countdown = 0x808EB6E4; // type:func +BgHidanFirewall_Erupt = 0x808EB718; // type:func +BgHidanFirewall_Collide = 0x808EB7A8; // type:func +BgHidanFirewall_ColliderFollowPlayer = 0x808EB810; // type:func +BgHidanFirewall_Update = 0x808EB974; // type:func +BgHidanFirewall_Draw = 0x808EBA4C; // type:func +BgDyYoseizo_Init = 0x808EBCC0; // type:func +BgDyYoseizo_Destroy = 0x808EBDC4; // type:func +BgDyYoseizo_SpawnEffects = 0x808EBDD4; // type:func +BgDyYoseizo_Bob = 0x808EC0D0; // type:func +BgDyYoseizo_CheckMagicAcquired = 0x808EC198; // type:func +BgDyYoseizo_ChooseType = 0x808EC25C; // type:func +BgDyYoseizo_SetupSpinGrow_NoReward = 0x808EC658; // type:func +BgDyYoseizo_SpinGrow_NoReward = 0x808EC754; // type:func +BgDyYoseizo_CompleteSpinGrow_NoReward = 0x808EC8B0; // type:func +BgDyYoseizo_SetupGreetPlayer_NoReward = 0x808EC960; // type:func +BgDyYoseizo_GreetPlayer_NoReward = 0x808ECA78; // type:func +BgDyYoseizo_SetupHealPlayer_NoReward = 0x808ECB54; // type:func +BgDyYoseizo_HealPlayer_NoReward = 0x808ECC40; // type:func +BgDyYoseizo_SayFarewell_NoReward = 0x808ECF18; // type:func +BgDyYoseizo_SetupSpinShrink = 0x808ECFF4; // type:func +BgDyYoseizo_SpinShrink = 0x808ED0F8; // type:func +BgDyYoseizo_Vanish = 0x808ED1E8; // type:func +BgDyYoseizo_SetupSpinGrow_Reward = 0x808ED28C; // type:func +BgDyYoseizo_SpinGrowSetupGive_Reward = 0x808ED3C0; // type:func +BgDyYoseizo_Give_Reward = 0x808ED6EC; // type:func +BgDyYoseizo_Update = 0x808EDD3C; // type:func +BgDyYoseizo_OverrideLimbDraw = 0x808EDF68; // type:func +BgDyYoseizo_Draw = 0x808EDFD0; // type:func +BgDyYoseizo_SpawnEffect = 0x808EE158; // type:func +BgDyYoseizo_UpdateEffects = 0x808EE268; // type:func +BgDyYoseizo_DrawEffects = 0x808EE55C; // type:func +EnZl2_Destroy = 0x808EEAC0; // type:func +EnZl2_UpdateEyes = 0x808EEAE4; // type:func +func_80B4EA40 = 0x808EEB74; // type:func +func_80B4EAF4 = 0x808EEC28; // type:func +func_80B4EBB8 = 0x808EECEC; // type:func +func_80B4EC48 = 0x808EED7C; // type:func +EnZl2_setEyesIndex = 0x808EEE1C; // type:func +EnZl2_setEyeIndex2 = 0x808EEE3C; // type:func +EnZl2_setMouthIndex = 0x808EEE54; // type:func +func_80B4ED2C = 0x808EEE6C; // type:func +EnZl2_UpdateSkelAnime = 0x808EEEB4; // type:func +EnZl2_GetCue = 0x808EEED8; // type:func +func_80B4EDB8 = 0x808EEF00; // type:func +func_80B4EE38 = 0x808EEF80; // type:func +func_80B4EF64 = 0x808EF0B0; // type:func +func_80B4F230 = 0x808EF380; // type:func +func_80B4F45C = 0x808EF5B0; // type:func +EnZl2_PostLimbDraw = 0x808EFCAC; // type:func +func_80B4FCCC = 0x808EFDF8; // type:func +func_80B4FD00 = 0x808EFE30; // type:func +func_80B4FD90 = 0x808EFEC0; // type:func +func_80B4FDD4 = 0x808EFF04; // type:func +func_80B4FE10 = 0x808EFF44; // type:func +func_80B4FE48 = 0x808EFF7C; // type:func +func_80B4FE6C = 0x808EFFA4; // type:func +func_80B4FE90 = 0x808EFFCC; // type:func +func_80B4FEB4 = 0x808EFFF4; // type:func +func_80B4FED8 = 0x808F001C; // type:func +EnZl2_GiveLightArrows = 0x808F0044; // type:func +func_80B4FF84 = 0x808F00D4; // type:func +func_80B4FFF0 = 0x808F0140; // type:func +func_80B5008C = 0x808F01E0; // type:func +func_80B500E0 = 0x808F0234; // type:func +func_80B501C4 = 0x808F0318; // type:func +func_80B501E8 = 0x808F033C; // type:func +func_80B50260 = 0x808F03B4; // type:func +func_80B50278 = 0x808F03D0; // type:func +func_80B50304 = 0x808F045C; // type:func +func_80B503DC = 0x808F0534; // type:func +func_80B5042C = 0x808F0584; // type:func +func_80B50488 = 0x808F05E0; // type:func +func_80B504D4 = 0x808F062C; // type:func +func_80B5053C = 0x808F0690; // type:func +func_80B50580 = 0x808F06D8; // type:func +func_80B505D4 = 0x808F072C; // type:func +func_80B50618 = 0x808F0774; // type:func +func_80B50644 = 0x808F07A0; // type:func +func_80B50670 = 0x808F07CC; // type:func +func_80B506C4 = 0x808F0820; // type:func +func_80B5073C = 0x808F089C; // type:func +func_80B50780 = 0x808F08E4; // type:func +func_80B507E8 = 0x808F094C; // type:func +func_80B5082C = 0x808F0994; // type:func +func_80B50880 = 0x808F09E8; // type:func +func_80B508C8 = 0x808F0A30; // type:func +func_80B50928 = 0x808F0A8C; // type:func +func_80B50970 = 0x808F0AD4; // type:func +func_80B50980 = 0x808F0AE8; // type:func +func_80B509A0 = 0x808F0B0C; // type:func +func_80B50A04 = 0x808F0B70; // type:func +func_80B50BBC = 0x808F0D14; // type:func +func_80B50BEC = 0x808F0D4C; // type:func +func_80B50C40 = 0x808F0DA8; // type:func +func_80B50CA8 = 0x808F0E18; // type:func +func_80B50CFC = 0x808F0E74; // type:func +func_80B50D50 = 0x808F0ED0; // type:func +func_80B50D94 = 0x808F0F1C; // type:func +func_80B50DE8 = 0x808F0F78; // type:func +func_80B50E3C = 0x808F0FD4; // type:func +func_80B50E90 = 0x808F1030; // type:func +func_80B50EE4 = 0x808F108C; // type:func +func_80B50F38 = 0x808F10E8; // type:func +func_80B50F8C = 0x808F1144; // type:func +func_80B50FE8 = 0x808F11A8; // type:func +func_80B51034 = 0x808F11FC; // type:func +func_80B51080 = 0x808F1250; // type:func +func_80B510CC = 0x808F12A4; // type:func +func_80B51118 = 0x808F12F8; // type:func +func_80B51164 = 0x808F134C; // type:func +func_80B511B0 = 0x808F13A0; // type:func +func_80B511FC = 0x808F13F4; // type:func +func_80B51250 = 0x808F1450; // type:func +func_80B512B8 = 0x808F14C0; // type:func +func_80B51310 = 0x808F1520; // type:func +func_80B5135C = 0x808F1570; // type:func +func_80B513A8 = 0x808F15BC; // type:func +func_80B51418 = 0x808F1630; // type:func +func_80B5146C = 0x808F1684; // type:func +func_80B5149C = 0x808F16B8; // type:func +func_80B514F8 = 0x808F1718; // type:func +func_80B5154C = 0x808F176C; // type:func +func_80B515C4 = 0x808F17E4; // type:func +func_80B515D8 = 0x808F17FC; // type:func +func_80B51644 = 0x808F1868; // type:func +func_80B51678 = 0x808F189C; // type:func +func_80B516D0 = 0x808F18F4; // type:func +func_80B51704 = 0x808F1928; // type:func +func_80B5175C = 0x808F1980; // type:func +func_80B51790 = 0x808F19B4; // type:func +func_80B517E0 = 0x808F1A04; // type:func +func_80B51824 = 0x808F1A4C; // type:func +func_80B5187C = 0x808F1AA4; // type:func +func_80B518C0 = 0x808F1AEC; // type:func +func_80B51948 = 0x808F1B74; // type:func +func_80B51A5C = 0x808F1C74; // type:func +func_80B51A8C = 0x808F1CAC; // type:func +func_80B51AE4 = 0x808F1D0C; // type:func +func_80B51B44 = 0x808F1D74; // type:func +func_80B51BA8 = 0x808F1DE0; // type:func +func_80B51C0C = 0x808F1E4C; // type:func +func_80B51C64 = 0x808F1EAC; // type:func +func_80B51CA8 = 0x808F1EF8; // type:func +func_80B51D0C = 0x808F1F64; // type:func +func_80B51D24 = 0x808F1F80; // type:func +func_80B51DA4 = 0x808F2000; // type:func +func_80B51EA8 = 0x808F2104; // type:func +func_80B51EBC = 0x808F211C; // type:func +func_80B51F38 = 0x808F219C; // type:func +func_80B51FA8 = 0x808F220C; // type:func +func_80B52068 = 0x808F22B8; // type:func +func_80B52098 = 0x808F22F0; // type:func +func_80B52108 = 0x808F2368; // type:func +func_80B52114 = 0x808F2378; // type:func +func_80B521A0 = 0x808F23D8; // type:func +EnZl2_Update = 0x808F2464; // type:func +EnZl2_Init = 0x808F24AC; // type:func +EnZl2_OverrideLimbDraw = 0x808F2558; // type:func +func_80B523BC = 0x808F25C0; // type:func +func_80B523C8 = 0x808F25D0; // type:func +func_80B525D4 = 0x808F27AC; // type:func +EnZl2_Draw = 0x808F2954; // type:func +BgHidanFslift_Init = 0x808F31F0; // type:func +BgHidanFslift_SetHookshotTargetPos = 0x808F32D8; // type:func +BgHidanFslift_Destroy = 0x808F3338; // type:func +BgHidanFslift_SetupIdle = 0x808F336C; // type:func +BgHidanFslift_Idle = 0x808F3388; // type:func +BgHidanFslift_Descend = 0x808F3428; // type:func +BgHidanFslift_Ascend = 0x808F3494; // type:func +BgHidanFslift_Update = 0x808F3530; // type:func +BgHidanFslift_Draw = 0x808F35D8; // type:func +EnOE2_SetupAction = 0x808F36C0; // type:func +EnOE2_Init = 0x808F36CC; // type:func +EnOE2_Destroy = 0x808F36F4; // type:func +EnOE2_DoNothing = 0x808F3704; // type:func +EnOE2_Update = 0x808F3714; // type:func +EnOE2_Draw = 0x808F3724; // type:func +BgYdanHasi_Init = 0x808F37A0; // type:func +BgYdanHasi_Destroy = 0x808F3904; // type:func +BgYdanHasi_UpdateFloatingBlock = 0x808F3938; // type:func +BgYdanHasi_InitWater = 0x808F3A70; // type:func +BgYdanHasi_MoveWater = 0x808F3ABC; // type:func +BgYdanHasi_DecWaterTimer = 0x808F3B8C; // type:func +BgYdanHasi_SetupThreeBlocks = 0x808F3BE0; // type:func +BgYdanHasi_UpdateThreeBlocks = 0x808F3C4C; // type:func +BgYdanHasi_Update = 0x808F3D1C; // type:func +BgYdanHasi_Draw = 0x808F3D40; // type:func +BgYdanMaruta_Init = 0x808F3F50; // type:func +BgYdanMaruta_Destroy = 0x808F41B4; // type:func +func_808BEFF4 = 0x808F4208; // type:func +func_808BF078 = 0x808F428C; // type:func +func_808BF108 = 0x808F431C; // type:func +func_808BF1EC = 0x808F4400; // type:func +BgYdanMaruta_DoNothing = 0x808F4470; // type:func +BgYdanMaruta_Update = 0x808F4480; // type:func +BgYdanMaruta_Draw = 0x808F44A4; // type:func +BossGanondrof_ClearPixels8x8 = 0x808F4630; // type:func +BossGanondrof_ClearPixels16x8 = 0x808F4670; // type:func +BossGanondrof_ClearPixels16x16 = 0x808F46B0; // type:func +BossGanondrof_ClearPixels32x16 = 0x808F46E0; // type:func +BossGanondrof_ClearPixels16x32 = 0x808F4728; // type:func +BossGanondrof_ClearPixels = 0x808F4774; // type:func +BossGanondrof_SetColliderPos = 0x808F4A24; // type:func +BossGanondrof_Init = 0x808F4A68; // type:func +BossGanondrof_Destroy = 0x808F4CF8; // type:func +BossGanondrof_SetupIntro = 0x808F4D64; // type:func +BossGanondrof_Intro = 0x808F4DB0; // type:func +BossGanondrof_SetupPaintings = 0x808F5268; // type:func +BossGanondrof_Paintings = 0x808F52AC; // type:func +BossGanondrof_SetupNeutral = 0x808F5480; // type:func +BossGanondrof_Neutral = 0x808F5500; // type:func +BossGanondrof_SetupThrow = 0x808F5C48; // type:func +BossGanondrof_Throw = 0x808F5D70; // type:func +BossGanondrof_SetupReturn = 0x808F5F7C; // type:func +BossGanondrof_Return = 0x808F601C; // type:func +BossGanondrof_SetupStunned = 0x808F6128; // type:func +BossGanondrof_Stunned = 0x808F61EC; // type:func +BossGanondrof_SetupBlock = 0x808F6300; // type:func +BossGanondrof_Block = 0x808F6374; // type:func +BossGanondrof_SetupCharge = 0x808F6450; // type:func +BossGanondrof_Charge = 0x808F64C0; // type:func +BossGanondrof_SetupDeath = 0x808F6BA4; // type:func +BossGanondrof_Death = 0x808F6C3C; // type:func +BossGanondrof_CollisionCheck = 0x808F7B2C; // type:func +BossGanondrof_Update = 0x808F7D58; // type:func +BossGanondrof_OverrideLimbDraw = 0x808F8160; // type:func +BossGanondrof_PostLimbDraw = 0x808F853C; // type:func +BossGanondrof_GetClearPixelDList = 0x808F8600; // type:func +BossGanondrof_EmptyDList = 0x808F8658; // type:func +BossGanondrof_Draw = 0x808F867C; // type:func +EnAm_SetupAction = 0x808F93A0; // type:func +EnAm_CanMove = 0x808F93AC; // type:func +EnAm_Init = 0x808F94D8; // type:func +EnAm_Destroy = 0x808F96A4; // type:func +EnAm_SpawnEffects = 0x808F96FC; // type:func +EnAm_SetupSleep = 0x808F9898; // type:func +EnAm_SetupStatue = 0x808F9934; // type:func +EnAm_SetupLunge = 0x808F99C4; // type:func +EnAm_SetupCooldown = 0x808F9A28; // type:func +EnAm_SetupMoveToHome = 0x808F9A94; // type:func +EnAm_SetupRotateToInit = 0x808F9AF0; // type:func +EnAm_SetupRotateToHome = 0x808F9B4C; // type:func +EnAm_SetupRecoilFromDamage = 0x808F9BA8; // type:func +EnAm_SetupRicochet = 0x808F9C80; // type:func +EnAm_Sleep = 0x808F9D34; // type:func +EnAm_RotateToHome = 0x808F9FA0; // type:func +EnAm_RotateToInit = 0x808FA0A4; // type:func +EnAm_MoveToHome = 0x808FA210; // type:func +EnAm_RecoilFromDamage = 0x808FA380; // type:func +EnAm_Cooldown = 0x808FA424; // type:func +EnAm_Lunge = 0x808FA55C; // type:func +EnAm_Statue = 0x808FA790; // type:func +EnAm_SetupStunned = 0x808FA9E0; // type:func +EnAm_Stunned = 0x808FAACC; // type:func +EnAm_Ricochet = 0x808FABA0; // type:func +EnAm_TransformSwordHitbox = 0x808FAC54; // type:func +EnAm_UpdateDamage = 0x808FACEC; // type:func +EnAm_Update = 0x808FAE84; // type:func +EnAm_PostLimbDraw = 0x808FB228; // type:func +EnAm_Draw = 0x808FB270; // type:func +EnDekubaba_Init = 0x808FB7A0; // type:func +EnDekubaba_Destroy = 0x808FB9E4; // type:func +EnDekubaba_DisableACColliderElems = 0x808FBA10; // type:func +EnDekubaba_SetupWait = 0x808FBA98; // type:func +EnDekubaba_SetupGrow = 0x808FBD00; // type:func +EnDekubaba_SetupRetract = 0x808FBE30; // type:func +EnDekubaba_SetupDecideLunge = 0x808FBF18; // type:func +EnDekubaba_SetupPrepareLunge = 0x808FBF70; // type:func +EnDekubaba_SetupLunge = 0x808FBF94; // type:func +EnDekubaba_SetupPullBack = 0x808FBFD8; // type:func +EnDekubaba_SetupRecover = 0x808FC050; // type:func +EnDekubaba_SetupHit = 0x808FC084; // type:func +EnDekubaba_SetupPrunedSomersault = 0x808FC14C; // type:func +EnDekubaba_SetupShrinkDie = 0x808FC1C0; // type:func +EnDekubaba_SetupStunnedVertical = 0x808FC240; // type:func +EnDekubaba_SetupSway = 0x808FC3C4; // type:func +EnDekubaba_SetupDeadStickDrop = 0x808FC430; // type:func +EnDekubaba_Wait = 0x808FC4D0; // type:func +EnDekubaba_Grow = 0x808FC57C; // type:func +EnDekubaba_Retract = 0x808FC9E4; // type:func +EnDekubaba_UpdateHeadPosition = 0x808FCDAC; // type:func +EnDekubaba_DecideLunge = 0x808FCEB0; // type:func +EnDekubaba_Lunge = 0x808FD0E0; // type:func +EnDekubaba_PrepareLunge = 0x808FD368; // type:func +EnDekubaba_PullBack = 0x808FD434; // type:func +EnDekubaba_Recover = 0x808FD7C0; // type:func +EnDekubaba_Hit = 0x808FD8B8; // type:func +EnDekubaba_StunnedVertical = 0x808FD9C8; // type:func +EnDekubaba_Sway = 0x808FDA64; // type:func +EnDekubaba_PrunedSomersault = 0x808FDB8C; // type:func +EnDekubaba_ShrinkDie = 0x808FDEF0; // type:func +EnDekubaba_DeadStickDrop = 0x808FE0B4; // type:func +EnDekubaba_UpdateDamage = 0x808FE11C; // type:func +EnDekubaba_Update = 0x808FE3D0; // type:func +EnDekubaba_DrawStemRetracted = 0x808FE570; // type:func +EnDekubaba_DrawStemExtended = 0x808FE660; // type:func +EnDekubaba_DrawStemBasePruned = 0x808FE950; // type:func +EnDekubaba_DrawBaseShadow = 0x808FEA0C; // type:func +EnDekubaba_PostLimbDraw = 0x808FEAFC; // type:func +EnDekubaba_Draw = 0x808FEB38; // type:func +EnMFire1_Init = 0x808FF240; // type:func +EnMFire1_Destroy = 0x808FF2AC; // type:func +EnMFire1_Update = 0x808FF2D8; // type:func +func_80A9EFE0 = 0x808FF3E0; // type:func +EnMThunder_Init = 0x808FF3EC; // type:func +EnMThunder_Destroy = 0x808FF6AC; // type:func +func_80A9F314 = 0x808FF71C; // type:func +func_80A9F350 = 0x808FF758; // type:func +func_80A9F408 = 0x808FF810; // type:func +func_80A9F938 = 0x808FFD44; // type:func +func_80A9F9B4 = 0x808FFDC0; // type:func +EnMThunder_Update = 0x808FFF2C; // type:func +EnMThunder_Draw = 0x80900100; // type:func +BgDdanJd_Init = 0x809009D0; // type:func +BgDdanJd_Destroy = 0x80900A7C; // type:func +BgDdanJd_Idle = 0x80900AB0; // type:func +BgDdanJd_MoveEffects = 0x80900C54; // type:func +BgDdanJd_Move = 0x80900E2C; // type:func +BgDdanJd_Update = 0x80900F30; // type:func +BgDdanJd_Draw = 0x80900F54; // type:func +BgBreakwall_SetupAction = 0x80901020; // type:func +BgBreakwall_Init = 0x8090102C; // type:func +BgBreakwall_Destroy = 0x809011D8; // type:func +BgBreakwall_SpawnFragments = 0x8090120C; // type:func +BgBreakwall_WaitForObject = 0x809016DC; // type:func +BgBreakwall_Wait = 0x809017E4; // type:func +BgBreakwall_LavaCoverMove = 0x809019B4; // type:func +BgBreakwall_Update = 0x80901A08; // type:func +BgBreakwall_Draw = 0x80901A2C; // type:func +EnJj_SetupAction = 0x80901E90; // type:func +EnJj_Init = 0x80901E9C; // type:func +EnJj_Destroy = 0x8090212C; // type:func +EnJj_Blink = 0x809021BC; // type:func +EnJj_OpenMouth = 0x8090223C; // type:func +EnJj_WaitToOpenMouth = 0x80902290; // type:func +EnJj_WaitForFish = 0x809022D4; // type:func +EnJj_BeginCutscene = 0x80902390; // type:func +EnJj_CutsceneUpdate = 0x80902438; // type:func +EnJj_RemoveDust = 0x80902594; // type:func +EnJj_UpdateStaticCollision = 0x809025EC; // type:func +EnJj_Update = 0x809025FC; // type:func +EnJj_Draw = 0x809026A8; // type:func +EnHorseZelda_GetFieldPosition = 0x80903460; // type:func +EnHorseZelda_Move = 0x809034AC; // type:func +EnHorseZelda_Init = 0x80903674; // type:func +EnHorseZelda_Destroy = 0x809037C4; // type:func +EnHorseZelda_SetupStop = 0x80903814; // type:func +EnHorseZelda_Stop = 0x80903864; // type:func +EnHorseZelda_Spur = 0x809038AC; // type:func +EnHorseZelda_Gallop = 0x80903994; // type:func +EnHorseZelda_SetRotate = 0x809039D4; // type:func +EnHorseZelda_Update = 0x80903A98; // type:func +EnHorseZelda_PostDraw = 0x80903B74; // type:func +EnHorseZelda_Draw = 0x80903D00; // type:func +BgDdanKd_SetupAction = 0x80903F50; // type:func +BgDdanKd_Init = 0x80903F5C; // type:func +BgDdanKd_Destroy = 0x80904054; // type:func +BgDdanKd_CheckForExplosions = 0x8090409C; // type:func +BgDdanKd_LowerStairs = 0x809041B4; // type:func +BgDdanKd_DoNothing = 0x80904688; // type:func +BgDdanKd_Update = 0x80904698; // type:func +BgDdanKd_Draw = 0x809046BC; // type:func +DoorWarp1_SetupAction = 0x80904840; // type:func +DoorWarp1_Init = 0x8090484C; // type:func +DoorWarp1_Destroy = 0x809049BC; // type:func +DoorWarp1_SetupWarp = 0x80904A44; // type:func +DoorWarp1_SetupAdultDungeonWarp = 0x80904D4C; // type:func +DoorWarp1_SetupBlueCrystal = 0x80904F18; // type:func +DoorWarp1_SetupPurpleCrystal = 0x809050B0; // type:func +DoorWarp1_SetPlayerPos = 0x80905250; // type:func +DoorWarp1_BlueCrystal = 0x80905288; // type:func +func_80999214 = 0x809052D4; // type:func +func_80999348 = 0x80905408; // type:func +DoorWarp1_FloatPlayer = 0x809054D0; // type:func +DoorWarp1_PurpleCrystal = 0x809054EC; // type:func +DoorWarp1_ChooseInitialAction = 0x809055CC; // type:func +DoorWarp1_AwaitClearFlag = 0x80905644; // type:func +func_809995D4 = 0x8090569C; // type:func +DoorWarp1_WarpAppear = 0x809057EC; // type:func +func_809998A4 = 0x80905970; // type:func +DoorWarp1_PlayerInRange = 0x80905A08; // type:func +DoorWarp1_ChildWarpIdle = 0x80905A74; // type:func +DoorWarp1_ChildWarpOut = 0x80905B40; // type:func +DoorWarp1_RutoWarpIdle = 0x80905F34; // type:func +func_80999EE0 = 0x80905FB4; // type:func +func_80999FE4 = 0x809060BC; // type:func +DoorWarp1_RutoWarpOut = 0x80906174; // type:func +func_8099A3A4 = 0x80906480; // type:func +DoorWarp1_AdultWarpIdle = 0x8090654C; // type:func +func_8099A508 = 0x809065EC; // type:func +DoorWarp1_AdultWarpOut = 0x809066D0; // type:func +DoorWarp1_Destination = 0x80906FB4; // type:func +DoorWarp1_DoNothing = 0x809070E4; // type:func +func_8099B020 = 0x809070F4; // type:func +DoorWarp1_Update = 0x809071B0; // type:func +DoorWarp1_DrawBlueCrystal = 0x80907214; // type:func +DoorWarp1_DrawPurpleCrystal = 0x809073E0; // type:func +DoorWarp1_DrawWarp = 0x80907664; // type:func +DoorWarp1_Draw = 0x809084AC; // type:func +ObjSyokudai_Init = 0x80908AF0; // type:func +ObjSyokudai_Destroy = 0x80908CB4; // type:func +ObjSyokudai_Update = 0x80908D08; // type:func +ObjSyokudai_Draw = 0x80909324; // type:func +ItemBHeart_Init = 0x80909730; // type:func +ItemBHeart_Destroy = 0x8090979C; // type:func +ItemBHeart_Update = 0x809097AC; // type:func +func_80B85264 = 0x80909854; // type:func +ItemBHeart_Draw = 0x80909940; // type:func +EnDekunuts_Init = 0x80909B20; // type:func +EnDekunuts_Destroy = 0x80909C8C; // type:func +EnDekunuts_SetupWait = 0x80909CC8; // type:func +EnDekunuts_SetupLookAround = 0x80909D3C; // type:func +EnDekunuts_SetupThrowNut = 0x80909D84; // type:func +EnDekunuts_SetupStand = 0x80909DC8; // type:func +EnDekunuts_SetupBurrow = 0x80909E30; // type:func +EnDekunuts_SetupBeginRun = 0x80909E80; // type:func +EnDekunuts_SetupRun = 0x80909EE8; // type:func +EnDekunuts_SetupGasp = 0x80909F40; // type:func +EnDekunuts_SetupBeDamaged = 0x80909FA0; // type:func +EnDekunuts_SetupBeStunned = 0x8090A07C; // type:func +EnDekunuts_SetupDie = 0x8090A110; // type:func +EnDekunuts_Wait = 0x8090A160; // type:func +EnDekunuts_LookAround = 0x8090A3C4; // type:func +EnDekunuts_Stand = 0x8090A448; // type:func +EnDekunuts_ThrowNut = 0x8090A534; // type:func +EnDekunuts_Burrow = 0x8090A68C; // type:func +EnDekunuts_BeginRun = 0x8090A7A0; // type:func +EnDekunuts_Run = 0x8090A808; // type:func +EnDekunuts_Gasp = 0x8090AA48; // type:func +EnDekunuts_BeDamaged = 0x8090AAB0; // type:func +EnDekunuts_BeStunned = 0x8090AB00; // type:func +EnDekunuts_Die = 0x8090AB7C; // type:func +EnDekunuts_ColliderCheck = 0x8090ACD8; // type:func +EnDekunuts_Update = 0x8090ADFC; // type:func +EnDekunuts_OverrideLimbDraw = 0x8090AF64; // type:func +EnDekunuts_Draw = 0x8090B098; // type:func +BgMenkuriKaiten_Init = 0x8090B320; // type:func +BgMenkuriKaiten_Destroy = 0x8090B388; // type:func +BgMenkuriKaiten_Update = 0x8090B3BC; // type:func +BgMenkuriKaiten_Draw = 0x8090B41C; // type:func +BgMenkuriEye_Init = 0x8090B4B0; // type:func +BgMenkuriEye_Destroy = 0x8090B58C; // type:func +BgMenkuriEye_Update = 0x8090B5B8; // type:func +BgMenkuriEye_Draw = 0x8090B728; // type:func +EnVali_Init = 0x8090B950; // type:func +EnVali_Destroy = 0x8090BACC; // type:func +EnVali_SetupLurk = 0x8090BB1C; // type:func +EnVali_SetupDropAppear = 0x8090BB6C; // type:func +EnVali_SetupFloatIdle = 0x8090BBA4; // type:func +EnVali_SetupAttacked = 0x8090BDBC; // type:func +EnVali_SetupRetaliate = 0x8090BDF4; // type:func +EnVali_SetupMoveArmsDown = 0x8090BE64; // type:func +EnVali_SetupBurnt = 0x8090BEA4; // type:func +EnVali_SetupDivideAndDie = 0x8090BEFC; // type:func +EnVali_SetupStunned = 0x8090C000; // type:func +EnVali_SetupFrozen = 0x8090C08C; // type:func +EnVali_SetupReturnToLurk = 0x8090C0EC; // type:func +EnVali_DischargeLightning = 0x8090C148; // type:func +EnVali_Lurk = 0x8090C344; // type:func +EnVali_DropAppear = 0x8090C384; // type:func +EnVali_FloatIdle = 0x8090C418; // type:func +EnVali_Attacked = 0x8090C5C4; // type:func +EnVali_Retaliate = 0x8090C67C; // type:func +EnVali_MoveArmsDown = 0x8090C6D8; // type:func +EnVali_Burnt = 0x8090C714; // type:func +EnVali_DivideAndDie = 0x8090C750; // type:func +EnVali_Stunned = 0x8090C904; // type:func +EnVali_Frozen = 0x8090C9C0; // type:func +EnVali_ReturnToLurk = 0x8090CB50; // type:func +EnVali_UpdateDamage = 0x8090CBC0; // type:func +EnVali_Update = 0x8090CD78; // type:func +EnVali_PulseOutside = 0x8090CED4; // type:func +EnVali_PulseInsides = 0x8090D0F0; // type:func +EnVali_SetArmLength = 0x8090D30C; // type:func +EnVali_OverrideLimbDraw = 0x8090D4AC; // type:func +EnVali_PostLimbDraw = 0x8090D53C; // type:func +EnVali_DrawBody = 0x8090D600; // type:func +EnVali_Draw = 0x8090D948; // type:func +BgMizuMovebg_GetDragonStatueBossRoomOffsetIndex = 0x8090DFF0; // type:func +BgMizuMovebg_Init = 0x8090E05C; // type:func +BgMizuMovebg_Destroy = 0x8090E424; // type:func +BgMizuMovebg_SetPosFromPath = 0x8090E4D8; // type:func +BgMizuMovebg_SetScrollAlphas = 0x8090E56C; // type:func +BgMizuMovebg_UpdateMain = 0x8090E6F0; // type:func +BgMizuMovebg_UpdateHookshotPlatform = 0x8090EA2C; // type:func +BgMizuMovebg_Update = 0x8090EBE8; // type:func +BgMizuMovebg_Draw = 0x8090EC0C; // type:func +BgMizuWater_GetWaterLevelActionIndex = 0x8090F190; // type:func +BgMizuWater_SetWaterBoxesHeight = 0x8090F230; // type:func +BgMizuWater_Init = 0x8090F29C; // type:func +BgMizuWater_Destroy = 0x8090F4F8; // type:func +BgMizuWater_WaitForAction = 0x8090F508; // type:func +BgMizuWater_ChangeWaterLevel = 0x8090F6D4; // type:func +BgMizuWater_Update = 0x8090F9E4; // type:func +BgMizuWater_Draw = 0x8090FB3C; // type:func +ArmsHook_SetupAction = 0x8090FE60; // type:func +ArmsHook_Init = 0x8090FE6C; // type:func +ArmsHook_Destroy = 0x8090FEE0; // type:func +ArmsHook_Wait = 0x8090FF28; // type:func +func_80865044 = 0x8090FFA8; // type:func +ArmsHook_AttachToPlayer = 0x8090FFBC; // type:func +ArmsHook_DetachHookFromActor = 0x8090FFEC; // type:func +ArmsHook_CheckForCancel = 0x80910014; // type:func +ArmsHook_AttachHookToActor = 0x809100B0; // type:func +ArmsHook_Shoot = 0x809100F8; // type:func +ArmsHook_Update = 0x80910764; // type:func +ArmsHook_Draw = 0x809107A4; // type:func +EnfHG_Init = 0x80910BC0; // type:func +EnfHG_Destroy = 0x80910CC0; // type:func +EnfHG_SetupIntro = 0x80910CEC; // type:func +EnfHG_Intro = 0x80910D50; // type:func +EnfHG_SetupApproach = 0x80911F5C; // type:func +EnfHG_Approach = 0x809121A8; // type:func +EnfHG_Attack = 0x8091234C; // type:func +EnfHG_Damage = 0x809127D0; // type:func +EnfHG_Retreat = 0x80912B00; // type:func +EnfHG_Done = 0x80912D34; // type:func +EnfHG_Update = 0x80912D44; // type:func +EnfHG_PostDraw = 0x80912ED8; // type:func +EnfHG_Draw = 0x80912EEC; // type:func +BgMoriHineri_Init = 0x809134F0; // type:func +BgMoriHineri_Destroy = 0x809136F0; // type:func +func_808A39FC = 0x80913724; // type:func +BgMoriHineri_DoNothing = 0x8091391C; // type:func +BgMoriHineri_SpawnBossKeyChest = 0x8091392C; // type:func +func_808A3C8C = 0x809139BC; // type:func +func_808A3D58 = 0x80913A88; // type:func +func_808A3E54 = 0x80913B84; // type:func +BgMoriHineri_Update = 0x80913C64; // type:func +BgMoriHineri_DrawHallAndRoom = 0x80913C88; // type:func +EnBb_SetupAction = 0x809141F0; // type:func +EnBb_FindExplosive = 0x809141FC; // type:func +EnBb_SpawnFlameTrail = 0x80914290; // type:func +EnBb_KillFlameTrail = 0x8091442C; // type:func +EnBb_Init = 0x80914478; // type:func +EnBb_Destroy = 0x80914820; // type:func +EnBb_SetupFlameTrail = 0x8091484C; // type:func +EnBb_FlameTrail = 0x809148A0; // type:func +EnBb_SetupDeath = 0x80914A1C; // type:func +EnBb_Death = 0x80914AB0; // type:func +EnBb_SetupDamage = 0x80914C2C; // type:func +EnBb_Damage = 0x80914CEC; // type:func +EnBb_SetupBlue = 0x80914D58; // type:func +EnBb_Blue = 0x80914E18; // type:func +EnBb_SetupDown = 0x8091560C; // type:func +EnBb_Down = 0x8091569C; // type:func +EnBb_SetupRed = 0x80915970; // type:func +EnBb_Red = 0x80915A80; // type:func +EnBb_FaceWaypoint = 0x80915E48; // type:func +EnBb_SetWaypoint = 0x80915E7C; // type:func +EnBb_SetupWhite = 0x80915F48; // type:func +EnBb_White = 0x80915FF8; // type:func +EnBb_InitGreen = 0x8091637C; // type:func +EnBb_SetupGreen = 0x809164B4; // type:func +EnBb_Green = 0x8091654C; // type:func +EnBb_SetupStunned = 0x80916BBC; // type:func +EnBb_Stunned = 0x80916CD0; // type:func +EnBb_CollisionCheck = 0x80916E74; // type:func +EnBb_Update = 0x809171A8; // type:func +EnBb_PostLimbDraw = 0x80917428; // type:func +EnBb_Draw = 0x80917478; // type:func +BgTokiHikari_Init = 0x80917EC0; // type:func +BgTokiHikari_Destroy = 0x80917F4C; // type:func +BgTokiHikari_DoNothing = 0x80917F5C; // type:func +BgTokiHikari_Update = 0x80917F6C; // type:func +BgTokiHikari_Draw = 0x80917F90; // type:func +func_808BA018 = 0x80917FE0; // type:func +func_808BA204 = 0x8091818C; // type:func +func_808BA22C = 0x809181B4; // type:func +func_808BA274 = 0x809181FC; // type:func +func_808BA2CC = 0x80918254; // type:func +EnYukabyun_Init = 0x80918C60; // type:func +EnYukabyun_Destroy = 0x80918D10; // type:func +func_80B43A94 = 0x80918D3C; // type:func +func_80B43AD4 = 0x80918D7C; // type:func +func_80B43B6C = 0x80918E14; // type:func +EnYukabyun_Break = 0x80918E74; // type:func +EnYukabyun_Update = 0x80918EE8; // type:func +EnYukabyun_Draw = 0x80919088; // type:func +BgTokiSwd_SetupAction = 0x80919270; // type:func +BgTokiSwd_Init = 0x8091927C; // type:func +BgTokiSwd_Destroy = 0x80919350; // type:func +func_808BAF40 = 0x8091937C; // type:func +func_808BB0AC = 0x809194F0; // type:func +func_808BB128 = 0x80919570; // type:func +BgTokiSwd_Update = 0x809195C4; // type:func +BgTokiSwd_Draw = 0x80919618; // type:func +EnFhgFire_SetUpdate = 0x8091A8C0; // type:func +EnFhgFire_Init = 0x8091A8CC; // type:func +EnFhgFire_Destroy = 0x8091ACDC; // type:func +EnFhgFire_LightningStrike = 0x8091AD4C; // type:func +EnFhgFire_LightningTrail = 0x8091B0E4; // type:func +EnFhgFire_LightningShock = 0x8091B284; // type:func +EnFhgFire_LightningBurst = 0x8091B3C8; // type:func +EnFhgFire_SpearLight = 0x8091B644; // type:func +EnFhgFire_EnergyBall = 0x8091B838; // type:func +EnFhgFire_PhantomWarp = 0x8091C4E4; // type:func +EnFhgFire_Update = 0x8091C6A0; // type:func +EnFhgFire_Draw = 0x8091C6F0; // type:func +BgMjin_SetupAction = 0x8091CEE0; // type:func +BgMjin_Init = 0x8091CEEC; // type:func +BgMjin_Destroy = 0x8091CF8C; // type:func +func_808A0850 = 0x8091CFC0; // type:func +BgMjin_DoNothing = 0x8091D094; // type:func +BgMjin_Update = 0x8091D0A4; // type:func +BgMjin_Draw = 0x8091D0C8; // type:func +BgHidanKousi_SetupAction = 0x8091D2C0; // type:func +BgHidanKousi_Init = 0x8091D2CC; // type:func +BgHidanKousi_Destroy = 0x8091D3C4; // type:func +func_80889ACC = 0x8091D3F8; // type:func +func_80889B5C = 0x8091D484; // type:func +func_80889BC0 = 0x8091D4E8; // type:func +func_80889C18 = 0x8091D540; // type:func +func_80889C90 = 0x8091D5B8; // type:func +func_80889D28 = 0x8091D654; // type:func +BgHidanKousi_Update = 0x8091D664; // type:func +BgHidanKousi_Draw = 0x8091D688; // type:func +DoorToki_Init = 0x8091D840; // type:func +DoorToki_Destroy = 0x8091D8A8; // type:func +DoorToki_Update = 0x8091D8DC; // type:func +BgHidanHamstep_SetupAction = 0x8091D9A0; // type:func +BgHidanHamstep_SpawnChildren = 0x8091D9C0; // type:func +BgHidanHamstep_Init = 0x8091DB3C; // type:func +BgHidanHamstep_Destroy = 0x8091DDAC; // type:func +func_808884C8 = 0x8091DE00; // type:func +func_80888638 = 0x8091DF70; // type:func +func_80888694 = 0x8091DFCC; // type:func +func_80888734 = 0x8091E06C; // type:func +func_808887C4 = 0x8091E100; // type:func +func_80888860 = 0x8091E19C; // type:func +func_808889B8 = 0x8091E2E8; // type:func +func_80888A58 = 0x8091E388; // type:func +BgHidanHamstep_DoNothing = 0x8091E520; // type:func +BgHidanHamstep_Update = 0x8091E530; // type:func +BgHidanHamstep_Draw = 0x8091E554; // type:func +EnBird_SetupAction = 0x8091E850; // type:func +EnBird_Init = 0x8091E85C; // type:func +EnBird_Destroy = 0x8091E948; // type:func +EnBird_SetupIdle = 0x8091E958; // type:func +EnBird_Idle = 0x8091EA0C; // type:func +EnBird_SetupMove = 0x8091EAAC; // type:func +EnBird_Move = 0x8091EAEC; // type:func +EnBird_Update = 0x8091EC08; // type:func +EnBird_Draw = 0x8091EC38; // type:func +EnWood02_SpawnZoneCheck = 0x8091ED10; // type:func +EnWood02_SpawnOffspring = 0x8091EE38; // type:func +EnWood02_Init = 0x8091F050; // type:func +EnWood02_Destroy = 0x8091F48C; // type:func +EnWood02_Update = 0x8091F4C8; // type:func +EnWood02_Draw = 0x8091F9C0; // type:func +EnLightbox_Init = 0x8091FEF0; // type:func +EnLightbox_Destroy = 0x8092001C; // type:func +EnLightbox_Update = 0x80920050; // type:func +EnLightbox_Draw = 0x809202D8; // type:func +EnPubox_Init = 0x80920370; // type:func +EnPubox_Destroy = 0x809204A8; // type:func +EnPubox_Update = 0x809204DC; // type:func +EnPubox_Draw = 0x8092062C; // type:func +EnTrap_Init = 0x809206B0; // type:func +EnTrap_Destroy = 0x80920A6C; // type:func +EnTrap_Update = 0x80920A98; // type:func +EnTrap_Draw = 0x8092182C; // type:func +EnArowTrap_Init = 0x80921950; // type:func +EnArowTrap_Destroy = 0x809219A0; // type:func +EnArowTrap_Update = 0x809219B0; // type:func +EnVase_Init = 0x80921AA0; // type:func +EnVase_Destroy = 0x80921B04; // type:func +EnVase_Draw = 0x80921B14; // type:func +EnTa_SetupAction = 0x80921BA0; // type:func +EnTa_SetTextForTalkInLonLonHouse = 0x80921BB0; // type:func +EnTa_Init = 0x80921C90; // type:func +EnTa_DecreaseShadowSize = 0x80922314; // type:func +EnTa_Destroy = 0x80922348; // type:func +EnTa_RequestTalk = 0x809223C0; // type:func +EnTa_SleepTalkInKakariko = 0x80922468; // type:func +EnTa_SleepTalkInLonLonHouse = 0x809224A8; // type:func +EnTa_SetupAwake = 0x809224E8; // type:func +EnTa_TalkWakingUp2 = 0x80922564; // type:func +EnTa_TalkWakingUp1 = 0x809225B0; // type:func +EnTa_WakeUp = 0x8092264C; // type:func +EnTa_SleepTalkInCastle = 0x809226D8; // type:func +EnTa_IdleAsleepInCastle = 0x80922718; // type:func +EnTa_IdleAsleepInLonLonHouse = 0x809227E0; // type:func +EnTa_IdleAsleepInKakariko = 0x80922844; // type:func +EnTa_RunWithAccelerationAndSfx = 0x8092290C; // type:func +EnTa_RunAwayRunOutOfGate = 0x8092298C; // type:func +EnTa_RunAwayTurnTowardsGate = 0x80922A00; // type:func +EnTa_RunAwayRunWest = 0x80922A60; // type:func +EnTa_RunAwayTurnWest = 0x80922AE8; // type:func +EnTa_RunAwayRunSouth = 0x80922B48; // type:func +EnTa_RunAwayStart = 0x80922BE8; // type:func +EnTa_TalkAwakeInCastle = 0x80922C60; // type:func +EnTa_IdleAwakeInCastle = 0x80922D0C; // type:func +EnTa_TalkAwakeInKakariko = 0x80922D58; // type:func +EnTa_IdleAwakeInKakariko = 0x80922DA4; // type:func +EnTa_TalkAtRanch = 0x80922E4C; // type:func +EnTa_IdleAtRanch = 0x80922E98; // type:func +EnTa_CheckCanBuyMilk = 0x80922EDC; // type:func +EnTa_CreateFloorCamera = 0x80922F2C; // type:func +EnTa_RemoveFloorCamera = 0x80922FE0; // type:func +EnTa_SetupActionWithSleepAnimation = 0x80923024; // type:func +EnTa_SetupActionWithWakeUpAnimation = 0x809230B4; // type:func +EnTa_TalkNotEnoughRupees = 0x80923140; // type:func +EnTa_IsPlayerHoldingSuperCucco = 0x809231B8; // type:func +EnTa_TalkFoundSuperCucco = 0x8092320C; // type:func +EnTa_IdleFoundSuperCucco = 0x8092336C; // type:func +EnTa_GetSuperCuccosCount = 0x809233DC; // type:func +EnTa_AnimateHandsUpDown = 0x80923418; // type:func +EnTa_TransitionToPostCuccoGame = 0x809234E4; // type:func +EnTa_TalkCuccoGameEnd = 0x80923534; // type:func +EnTa_RunCuccoGame = 0x80923610; // type:func +EnTa_ThrowSuperCuccos = 0x80923970; // type:func +EnTa_StartingCuccoGame3 = 0x80923BE8; // type:func +EnTa_StartingCuccoGame2 = 0x80923D0C; // type:func +EnTa_StartingCuccoGame1 = 0x80923DDC; // type:func +EnTa_StartCuccoGame = 0x80923EA4; // type:func +EnTa_TalkGeneralInLonLonHouse = 0x80923F3C; // type:func +EnTa_GiveItemInLonLonHouse = 0x80923F98; // type:func +EnTa_TalkAfterCuccoGameFirstWon = 0x8092406C; // type:func +EnTa_WaitBuyMilkOrPlayCuccoGameResponse = 0x80924104; // type:func +EnTa_WaitForPlayCuccoGameResponse = 0x809242E0; // type:func +EnTa_WaitForMarryMalonResponse = 0x80924408; // type:func +EnTa_ContinueTalkInLonLonHouse = 0x80924488; // type:func +EnTa_TalkAfterCuccoGameWon = 0x80924554; // type:func +EnTa_IdleSittingInLonLonHouse = 0x8092462C; // type:func +EnTa_IdleAfterCuccoGameFinished = 0x8092472C; // type:func +EnTa_BlinkWaitUntilNext = 0x809247F0; // type:func +EnTa_BlinkAdvanceState = 0x80924824; // type:func +EnTa_AnimRepeatCurrent = 0x809248E4; // type:func +EnTa_AnimSleeping = 0x80924924; // type:func +EnTa_AnimSitSleeping = 0x80924978; // type:func +EnTa_AnimRunToEnd = 0x80924A58; // type:func +EnTa_Update = 0x80924AB0; // type:func +EnTa_OverrideLimbDraw = 0x80924C40; // type:func +EnTa_PostLimbDraw = 0x80924DC4; // type:func +EnTa_Draw = 0x80924E04; // type:func +EnTkEff_Create = 0x80925560; // type:func +EnTkEff_Update = 0x80925604; // type:func +EnTkEff_Draw = 0x80925710; // type:func +EnTkEff_CreateDflt = 0x80925A00; // type:func +EnTk_RestAnim = 0x80925AB8; // type:func +EnTk_WalkAnim = 0x80925B34; // type:func +EnTk_DigAnim = 0x80925BA8; // type:func +EnTk_UpdateEyes = 0x80925C28; // type:func +EnTk_CheckFacingPlayer = 0x80925CEC; // type:func +EnTk_CheckNextSpot = 0x80925D70; // type:func +EnTk_CheckCurrentSpot = 0x80925E58; // type:func +EnTk_Step = 0x80925ED0; // type:func +EnTk_Orient = 0x80925FF8; // type:func +EnTk_GetTextId = 0x80926168; // type:func +EnTk_UpdateTalkState = 0x809261BC; // type:func +EnTk_ChooseReward = 0x80926358; // type:func +EnTk_DigEff = 0x80926514; // type:func +EnTk_Init = 0x80926684; // type:func +EnTk_Destroy = 0x80926800; // type:func +EnTk_Rest = 0x8092682C; // type:func +EnTk_Walk = 0x80926A54; // type:func +EnTk_Dig = 0x80926B24; // type:func +EnTk_Update = 0x80926D88; // type:func +func_80B1D200 = 0x80926E34; // type:func +EnTk_OverrideLimbDraw = 0x80926E60; // type:func +EnTk_PostLimbDraw = 0x80926ECC; // type:func +EnTk_Draw = 0x80926F80; // type:func +BgMoriBigst_SetupAction = 0x80927390; // type:func +BgMoriBigst_InitDynapoly = 0x8092739C; // type:func +BgMoriBigst_Init = 0x809273F4; // type:func +BgMoriBigst_Destroy = 0x809274CC; // type:func +BgMoriBigst_SetupWaitForMoriTex = 0x80927500; // type:func +BgMoriBigst_WaitForMoriTex = 0x80927528; // type:func +BgMoriBigst_SetupNoop = 0x809275F4; // type:func +BgMoriBigst_SetupStalfosFight = 0x80927618; // type:func +BgMoriBigst_StalfosFight = 0x809276CC; // type:func +BgMoriBigst_SetupFall = 0x80927744; // type:func +BgMoriBigst_Fall = 0x8092776C; // type:func +BgMoriBigst_SetupLanding = 0x809277F8; // type:func +BgMoriBigst_Landing = 0x8092788C; // type:func +BgMoriBigst_SetupStalfosPairFight = 0x809278B8; // type:func +BgMoriBigst_StalfosPairFight = 0x809279D0; // type:func +BgMoriBigst_SetupDone = 0x80927A30; // type:func +BgMoriBigst_Update = 0x80927A54; // type:func +BgMoriBigst_Draw = 0x80927AC8; // type:func +func_808A1800 = 0x80927CC0; // type:func +func_808A18FC = 0x80927DB8; // type:func +BgMoriElevator_Init = 0x80927E40; // type:func +BgMoriElevator_Destroy = 0x80927F24; // type:func +BgMoriElevator_IsPlayerRiding = 0x80927F64; // type:func +BgMoriElevator_SetupWaitAfterInit = 0x80927FC4; // type:func +BgMoriElevator_WaitAfterInit = 0x80927FD8; // type:func +func_808A1C30 = 0x8092807C; // type:func +BgMoriElevator_MoveIntoGround = 0x80928090; // type:func +func_808A1CF4 = 0x80928144; // type:func +BgMoriElevator_MoveAboveGround = 0x809281A0; // type:func +BgMoriElevator_SetupSetPosition = 0x80928254; // type:func +BgMoriElevator_SetPosition = 0x80928268; // type:func +BgMoriElevator_StopMovement = 0x80928430; // type:func +func_808A2008 = 0x8092844C; // type:func +BgMoriElevator_Update = 0x80928500; // type:func +BgMoriElevator_Draw = 0x80928558; // type:func +BgMoriKaitenkabe_CrossProduct = 0x809287B0; // type:func +BgMoriKaitenkabe_Init = 0x80928824; // type:func +BgMoriKaitenkabe_Destroy = 0x809288D8; // type:func +BgMoriKaitenkabe_WaitForMoriTex = 0x8092890C; // type:func +BgMoriKaitenkabe_SetupWait = 0x80928964; // type:func +BgMoriKaitenkabe_Wait = 0x8092897C; // type:func +BgMoriKaitenkabe_SetupRotate = 0x80928ADC; // type:func +BgMoriKaitenkabe_Rotate = 0x80928AFC; // type:func +BgMoriKaitenkabe_Update = 0x80928C68; // type:func +BgMoriKaitenkabe_Draw = 0x80928C8C; // type:func +BgMoriRakkatenjo_Init = 0x80928E10; // type:func +BgMoriRakkatenjo_Destroy = 0x80928EC8; // type:func +BgMoriRakkatenjo_IsLinkUnder = 0x80928EFC; // type:func +BgMoriRakkatenjo_IsLinkClose = 0x80928FAC; // type:func +BgMoriRakkatenjo_SetupWaitForMoriTex = 0x8092905C; // type:func +BgMoriRakkatenjo_WaitForMoriTex = 0x80929070; // type:func +BgMoriRakkatenjo_SetupWait = 0x809290C8; // type:func +BgMoriRakkatenjo_Wait = 0x80929104; // type:func +BgMoriRakkatenjo_SetupFall = 0x809291D4; // type:func +BgMoriRakkatenjo_Fall = 0x809291F4; // type:func +BgMoriRakkatenjo_SetupRest = 0x8092936C; // type:func +BgMoriRakkatenjo_Rest = 0x80929394; // type:func +BgMoriRakkatenjo_SetupRise = 0x809293C4; // type:func +BgMoriRakkatenjo_Rise = 0x809293E4; // type:func +BgMoriRakkatenjo_Update = 0x80929464; // type:func +BgMoriRakkatenjo_Draw = 0x8092953C; // type:func +EnVm_SetupAction = 0x80929780; // type:func +EnVm_Init = 0x8092978C; // type:func +EnVm_Destroy = 0x809298FC; // type:func +EnVm_SetupWait = 0x80929928; // type:func +EnVm_Wait = 0x809299B4; // type:func +EnVm_SetupAttack = 0x80929D08; // type:func +EnVm_Attack = 0x80929DAC; // type:func +EnVm_SetupStun = 0x80929FFC; // type:func +EnVm_Stun = 0x8092A0A4; // type:func +EnVm_SetupDie = 0x8092A1B0; // type:func +EnVm_Die = 0x8092A2B8; // type:func +EnVm_CheckHealth = 0x8092A36C; // type:func +EnVm_Update = 0x8092A468; // type:func +EnVm_OverrideLimbDraw = 0x8092A5FC; // type:func +EnVm_PostLimbDraw = 0x8092A664; // type:func +EnVm_Draw = 0x8092A93C; // type:func +DemoEffect_SetupUpdate = 0x8092B030; // type:func +DemoEffect_InterpolateCsFrames = 0x8092B03C; // type:func +DemoEffect_InitJewel = 0x8092B09C; // type:func +DemoEffect_InitGetItem = 0x8092B15C; // type:func +DemoEffect_Init = 0x8092B1A8; // type:func +DemoEffect_Destroy = 0x8092B9A8; // type:func +DemoEffect_WaitForObject = 0x8092B9F8; // type:func +DemoEffect_UpdatePositionToParent = 0x8092BA50; // type:func +DemoEffect_UpdateCrystalLight = 0x8092BA80; // type:func +DemoEffect_MedalSparkle = 0x8092BAB4; // type:func +DemoEffect_UpdateGetItem = 0x8092BC4C; // type:func +DemoEffect_InitTimeWarp = 0x8092BE8C; // type:func +DemoEffect_UpdateTimeWarpPullMasterSword = 0x8092C048; // type:func +DemoEffect_TimewarpShrink = 0x8092C0EC; // type:func +DemoEffect_UpdateTimeWarpReturnFromChamberOfSages = 0x8092C210; // type:func +DemoEffect_UpdateTimeWarpTimeblock = 0x8092C2C8; // type:func +DemoEffect_InitTimeWarpTimeblock = 0x8092C384; // type:func +DemoEffect_UpdateTriforceSpot = 0x8092C408; // type:func +DemoEffect_UpdateLightRingShrinking = 0x8092C6F0; // type:func +DemoEffect_UpdateLightRingExpanding = 0x8092C780; // type:func +DemoEffect_UpdateLightRingTriforce = 0x8092C7F4; // type:func +DemoEffect_UpdateCreationFireball = 0x8092C8B0; // type:func +DemoEffect_InitCreationFireball = 0x8092CA04; // type:func +DemoEffect_UpdateBlueOrbShrink = 0x8092CA54; // type:func +DemoEffect_UpdateBlueOrbGrow = 0x8092CABC; // type:func +DemoEffect_UpdateLightEffect = 0x8092CB9C; // type:func +DemoEffect_UpdateLgtShower = 0x8092CE94; // type:func +DemoEffect_UpdateGodLgtDin = 0x8092CF00; // type:func +DemoEffect_UpdateGodLgtNayru = 0x8092D09C; // type:func +DemoEffect_UpdateGodLgtFarore = 0x8092D294; // type:func +DemoEffect_MoveTowardTarget = 0x8092D438; // type:func +DemoEffect_InitJewelColor = 0x8092D498; // type:func +DemoEffect_SetJewelColor = 0x8092D598; // type:func +DemoEffect_MoveJewelSplit = 0x8092DD0C; // type:func +DemoEffect_MoveJewelSpherical = 0x8092DD68; // type:func +DemoEffect_MoveJewelActivateDoorOfTime = 0x8092DF4C; // type:func +DemoEffect_JewelSparkle = 0x8092E1B8; // type:func +DemoEffect_PlayJewelSfx = 0x8092E31C; // type:func +DemoEffect_UpdateJewelAdult = 0x8092E380; // type:func +DemoEffect_UpdateJewelChild = 0x8092E3C4; // type:func +DemoEffect_UpdateDust = 0x8092E5D8; // type:func +DemoEffect_Update = 0x8092E6FC; // type:func +DemoEffect_CheckForCue = 0x8092E720; // type:func +DemoEffect_DrawJewel = 0x8092E764; // type:func +DemoEffect_DrawCrystalLight = 0x8092EB6C; // type:func +DemoEffect_DrawFireBall = 0x8092EE38; // type:func +DemoEffect_DrawGodLgt = 0x8092EFBC; // type:func +DemoEffect_DrawLightEffect = 0x8092F378; // type:func +DemoEffect_DrawBlueOrb = 0x8092F5A8; // type:func +DemoEffect_DrawLgtShower = 0x8092F6D0; // type:func +DemoEffect_DrawLightRing = 0x8092F858; // type:func +DemoEffect_DrawTriforceSpot = 0x8092F9C0; // type:func +DemoEffect_DrawGetItem = 0x8092FF00; // type:func +DemoEffect_OverrideLimbDrawTimeWarp = 0x8092FF98; // type:func +DemoEffect_DrawTimeWarp = 0x80930118; // type:func +DemoEffect_FaceTowardPoint = 0x809301F0; // type:func +DemoEffect_SetPosRotFromCue = 0x809302A0; // type:func +DemoEffect_MoveTowardCuePos = 0x80930400; // type:func +DemoEffect_SetStartPosFromCue = 0x809304AC; // type:func +DemoKankyo_SetupAction = 0x80930B20; // type:func +DemoKankyo_Init = 0x80930B2C; // type:func +DemoKankyo_Destroy = 0x80930F10; // type:func +DemoKankyo_SetupType = 0x80930F1C; // type:func +DemoKankyo_DoNothing = 0x80931354; // type:func +DemoKankyo_DoNothing2 = 0x80931364; // type:func +DemoKankyo_SetPosFromCue = 0x8093138C; // type:func +DemoKankyo_UpdateRock = 0x8093147C; // type:func +DemoKankyo_UpdateClouds = 0x809314F4; // type:func +DemoKankyo_UpdateDoorOfTime = 0x80931540; // type:func +DemoKankyo_KillDoorOfTimeCollision = 0x809315DC; // type:func +DemoKankyo_Update = 0x80931608; // type:func +DemoKankyo_Draw = 0x8093162C; // type:func +func_80989B54 = 0x809317D4; // type:func +DemoKankyo_DrawRain = 0x809319A4; // type:func +DemoKankyo_DrawRock = 0x80931FA4; // type:func +DemoKankyo_DrawClouds = 0x809320E4; // type:func +DemoKankyo_DrawDoorOfTime = 0x80932424; // type:func +DemoKankyo_DrawLightPlane = 0x80932538; // type:func +DemoKankyo_Vec3fCopy = 0x80932620; // type:func +DemoKankyo_AddVecGeoToVec3f = 0x80932640; // type:func +DemoKankyo_Vec3fAddPosRot = 0x809326C0; // type:func +DemoKankyo_DrawWarpSparkles = 0x8093271C; // type:func +DemoKankyo_DrawSparkles = 0x80932E7C; // type:func +BgHidanFwbig_Init = 0x80934820; // type:func +BgHidanFwbig_Destroy = 0x809349C0; // type:func +BgHidanFwbig_UpdatePosition = 0x809349EC; // type:func +BgHidanFwbig_WaitForSwitch = 0x80934A6C; // type:func +BgHidanFwbig_WaitForCs = 0x80934AD0; // type:func +BgHidanFwbig_Rise = 0x80934AFC; // type:func +BgHidanFwbig_Lower = 0x80934B70; // type:func +BgHidanFwbig_WaitForTimer = 0x80934C50; // type:func +BgHidanFwbig_WaitForPlayer = 0x80934CA0; // type:func +BgHidanFwbig_Move = 0x80934D04; // type:func +BgHidanFwbig_MoveCollider = 0x80934DA4; // type:func +BgHidanFwbig_Update = 0x80934FA4; // type:func +BgHidanFwbig_Draw = 0x8093511C; // type:func +EnFloormas_Init = 0x80935500; // type:func +EnFloormas_Destroy = 0x80935714; // type:func +EnFloormas_MakeInvulnerable = 0x80935740; // type:func +EnFloormas_MakeVulnerable = 0x80935764; // type:func +EnFloormas_SetupBigDecideAction = 0x80935780; // type:func +EnFloormas_SetupStand = 0x809357C8; // type:func +EnFloormas_SetupBigWalk = 0x8093580C; // type:func +EnFloormas_SetupBigStopWalk = 0x80935898; // type:func +EnFloormas_SetupRun = 0x809358E0; // type:func +EnFloormas_SetupTurn = 0x80935910; // type:func +EnFloormas_SetupHover = 0x80935A40; // type:func +EnFloormas_SetupCharge = 0x80935B18; // type:func +EnFloormas_SetupLand = 0x80935B4C; // type:func +EnFloormas_SetupSplit = 0x80935BF8; // type:func +EnFloormas_SetupSmallWalk = 0x80935D58; // type:func +EnFloormas_SetupSmallDecideAction = 0x80935DA8; // type:func +EnFloormas_SetupSmallShrink = 0x80935E08; // type:func +EnFloormas_SetupSmallFollowerJumpAtLeader = 0x80935EE0; // type:func +EnFloormas_SetupJumpAtLink = 0x80935F4C; // type:func +EnFloormas_SetupGrabLink = 0x80935FB8; // type:func +EnFloormas_SetupMerge = 0x8093618C; // type:func +EnFloormas_SetupSmallWait = 0x809361E4; // type:func +EnFloormas_SetupTakeDamage = 0x80936268; // type:func +EnFloormas_SetupRecover = 0x80936324; // type:func +EnFloormas_SetupFreeze = 0x80936378; // type:func +EnFloormas_Die = 0x80936478; // type:func +EnFloormas_BigDecideAction = 0x80936514; // type:func +EnFloormas_Stand = 0x809365D8; // type:func +EnFloormas_BigWalk = 0x80936664; // type:func +EnFloormas_BigStopWalk = 0x809367C0; // type:func +EnFloormas_Run = 0x809367FC; // type:func +EnFloormas_Turn = 0x80936908; // type:func +EnFloormas_Hover = 0x80936ACC; // type:func +EnFloormas_Slide = 0x80936B50; // type:func +EnFloormas_Charge = 0x80936C90; // type:func +EnFloormas_Land = 0x80936D80; // type:func +EnFloormas_Split = 0x80936F68; // type:func +EnFloormas_SmallWalk = 0x80936FF0; // type:func +EnFloormas_SmallDecideAction = 0x809370E0; // type:func +EnFloormas_SmallShrink = 0x80937248; // type:func +EnFloormas_JumpAtLink = 0x809372A0; // type:func +EnFloormas_GrabLink = 0x809373DC; // type:func +EnFloormas_SmallFollowerJumpAtLeader = 0x809376F8; // type:func +EnFloormas_Merge = 0x80937908; // type:func +EnFloormas_SmallWait = 0x80937BB8; // type:func +EnFloormas_TakeDamage = 0x80937BC8; // type:func +EnFloormas_Recover = 0x80937C8C; // type:func +EnFloormas_Freeze = 0x80937CC8; // type:func +EnFloormas_ColliderCheck = 0x80937D3C; // type:func +EnFloormas_Update = 0x80937EEC; // type:func +EnFloormas_OverrideLimbDraw = 0x80938154; // type:func +EnFloormas_PostLimbDraw = 0x80938190; // type:func +EnFloormas_Draw = 0x80938280; // type:func +EnFloormas_DrawHighlighted = 0x8093834C; // type:func +EnHeishi1_Init = 0x809388E0; // type:func +EnHeishi1_Destroy = 0x80938AF8; // type:func +EnHeishi1_SetupWalk = 0x80938B08; // type:func +EnHeishi1_Walk = 0x80938BBC; // type:func +EnHeishi1_SetupMoveToLink = 0x80938EDC; // type:func +EnHeishi1_MoveToLink = 0x80938F98; // type:func +EnHeishi1_SetupWait = 0x80939090; // type:func +EnHeishi1_Wait = 0x80939158; // type:func +EnHeishi1_SetupTurnTowardLink = 0x80939314; // type:func +EnHeishi1_TurnTowardLink = 0x809393B0; // type:func +EnHeishi1_SetupKick = 0x8093945C; // type:func +EnHeishi1_Kick = 0x809394F0; // type:func +EnHeishi1_SetupWaitNight = 0x809395C4; // type:func +EnHeishi1_WaitNight = 0x80939658; // type:func +EnHeishi1_Update = 0x809396D8; // type:func +EnHeishi1_OverrideLimbDraw = 0x809399EC; // type:func +EnHeishi1_Draw = 0x80939A30; // type:func +EnRd_SetupAction = 0x80939DF0; // type:func +EnRd_Init = 0x80939DFC; // type:func +EnRd_Destroy = 0x80939FE8; // type:func +EnRd_UpdateMourningTarget = 0x8093A02C; // type:func +EnRd_SetupIdle = 0x8093A098; // type:func +EnRd_Idle = 0x8093A140; // type:func +EnRd_SetupRiseFromCoffin = 0x8093A36C; // type:func +EnRd_RiseFromCoffin = 0x8093A40C; // type:func +EnRd_SetupWalkToPlayer = 0x8093A58C; // type:func +EnRd_WalkToPlayer = 0x8093A618; // type:func +EnRd_SetupWalkToHome = 0x8093A94C; // type:func +EnRd_WalkToHome = 0x8093A9CC; // type:func +EnRd_SetupWalkToParent = 0x8093ABE0; // type:func +EnRd_WalkToParent = 0x8093AC64; // type:func +EnRd_SetupGrab = 0x8093ADF8; // type:func +EnRd_Grab = 0x8093AE5C; // type:func +EnRd_SetupAttemptPlayerFreeze = 0x8093B1C8; // type:func +EnRd_AttemptPlayerFreeze = 0x8093B240; // type:func +EnRd_SetupStandUp = 0x8093B338; // type:func +EnRd_StandUp = 0x8093B384; // type:func +EnRd_SetupCrouch = 0x8093B3E0; // type:func +EnRd_Crouch = 0x8093B460; // type:func +EnRd_SetupDamaged = 0x8093B49C; // type:func +EnRd_Damaged = 0x8093B528; // type:func +EnRd_SetupDead = 0x8093B638; // type:func +EnRd_Dead = 0x8093B6B0; // type:func +EnRd_SetupStunned = 0x8093B7FC; // type:func +EnRd_Stunned = 0x8093B8E8; // type:func +EnRd_TurnTowardsPlayer = 0x8093B9BC; // type:func +EnRd_UpdateDamage = 0x8093BB34; // type:func +EnRd_Update = 0x8093BD00; // type:func +EnRd_OverrideLimbDraw = 0x8093BEEC; // type:func +EnRd_PostLimbDraw = 0x8093BF48; // type:func +EnRd_Draw = 0x8093C090; // type:func +EnPoSisters_Init = 0x8093C6A0; // type:func +EnPoSisters_Destroy = 0x8093C8EC; // type:func +func_80AD9240 = 0x8093C954; // type:func +func_80AD9368 = 0x8093CA80; // type:func +func_80AD93C4 = 0x8093CADC; // type:func +func_80AD943C = 0x8093CB54; // type:func +func_80AD944C = 0x8093CB68; // type:func +func_80AD94E0 = 0x8093CBFC; // type:func +func_80AD9568 = 0x8093CC84; // type:func +func_80AD95D8 = 0x8093CCF4; // type:func +func_80AD96A4 = 0x8093CDC0; // type:func +func_80AD9718 = 0x8093CE34; // type:func +func_80AD97C8 = 0x8093CEE4; // type:func +func_80AD98F4 = 0x8093D010; // type:func +func_80AD99D4 = 0x8093D0F0; // type:func +func_80AD9A54 = 0x8093D170; // type:func +func_80AD9AA8 = 0x8093D1C4; // type:func +func_80AD9C24 = 0x8093D340; // type:func +func_80AD9D44 = 0x8093D460; // type:func +func_80AD9DF0 = 0x8093D50C; // type:func +func_80AD9E60 = 0x8093D57C; // type:func +func_80AD9F1C = 0x8093D638; // type:func +func_80AD9F90 = 0x8093D6AC; // type:func +func_80ADA028 = 0x8093D744; // type:func +func_80ADA094 = 0x8093D7B0; // type:func +func_80ADA10C = 0x8093D828; // type:func +func_80ADA1B8 = 0x8093D8D8; // type:func +func_80ADA25C = 0x8093D97C; // type:func +func_80ADA2BC = 0x8093D9DC; // type:func +func_80ADA35C = 0x8093DA7C; // type:func +func_80ADA4A8 = 0x8093DBC8; // type:func +func_80ADA530 = 0x8093DC50; // type:func +func_80ADA6A0 = 0x8093DDC0; // type:func +func_80ADA7F0 = 0x8093DF10; // type:func +func_80ADA8C0 = 0x8093DFE0; // type:func +func_80ADA9E8 = 0x8093E108; // type:func +func_80ADAAA4 = 0x8093E1C4; // type:func +func_80ADAC70 = 0x8093E390; // type:func +func_80ADAD54 = 0x8093E474; // type:func +func_80ADAE6C = 0x8093E58C; // type:func +func_80ADAFC0 = 0x8093E6E0; // type:func +func_80ADB17C = 0x8093E89C; // type:func +func_80ADB2B8 = 0x8093E9D8; // type:func +func_80ADB338 = 0x8093EA54; // type:func +func_80ADB4B0 = 0x8093EBD0; // type:func +func_80ADB51C = 0x8093EC3C; // type:func +func_80ADB770 = 0x8093EE90; // type:func +func_80ADB9F0 = 0x8093F110; // type:func +func_80ADBB6C = 0x8093F28C; // type:func +func_80ADBBF4 = 0x8093F314; // type:func +func_80ADBC88 = 0x8093F3A8; // type:func +func_80ADBD38 = 0x8093F45C; // type:func +func_80ADBD8C = 0x8093F4B0; // type:func +func_80ADBEE8 = 0x8093F610; // type:func +func_80ADBF58 = 0x8093F680; // type:func +func_80ADC034 = 0x8093F75C; // type:func +func_80ADC10C = 0x8093F834; // type:func +EnPoSisters_Update = 0x8093F9F8; // type:func +func_80ADC55C = 0x8093FC8C; // type:func +EnPoSisters_OverrideLimbDraw = 0x8093FEAC; // type:func +EnPoSisters_PostLimbDraw = 0x8094009C; // type:func +EnPoSisters_Draw = 0x8094076C; // type:func +BgHeavyBlock_SetPieceRandRot = 0x80941390; // type:func +BgHeavyBlock_InitPiece = 0x80941420; // type:func +BgHeavyBlock_SetupDynapoly = 0x8094159C; // type:func +BgHeavyBlock_Init = 0x80941610; // type:func +BgHeavyBlock_Destroy = 0x80941854; // type:func +BgHeavyBlock_MovePiece = 0x8094189C; // type:func +BgHeavyBlock_SpawnDust = 0x80941A60; // type:func +BgHeavyBlock_SpawnPieces = 0x80941DC4; // type:func +BgHeavyBlock_Wait = 0x80941FBC; // type:func +BgHeavyBlock_LiftedUp = 0x809420E4; // type:func +BgHeavyBlock_Fly = 0x8094224C; // type:func +BgHeavyBlock_DoNothing = 0x80942564; // type:func +BgHeavyBlock_Land = 0x80942574; // type:func +BgHeavyBlock_Update = 0x809427E4; // type:func +BgHeavyBlock_Draw = 0x80942808; // type:func +BgHeavyBlock_DrawPiece = 0x8094296C; // type:func +BgPoEvent_InitPaintings = 0x80942C80; // type:func +BgPoEvent_InitBlocks = 0x80942FFC; // type:func +BgPoEvent_Init = 0x809431AC; // type:func +BgPoEvent_Destroy = 0x809432BC; // type:func +BgPoEvent_BlockWait = 0x80943340; // type:func +BgPoEvent_BlockShake = 0x8094344C; // type:func +BgPoEvent_CheckBlock = 0x80943504; // type:func +BgPoEvent_BlockFall = 0x8094363C; // type:func +BgPoEvent_BlockIdle = 0x80943740; // type:func +BgPoEvent_BlockPush = 0x809439F4; // type:func +BgPoEvent_BlockReset = 0x80943BB4; // type:func +BgPoEvent_BlockSolved = 0x80943CB4; // type:func +BgPoEvent_AmyWait = 0x80943D2C; // type:func +BgPoEvent_AmyPuzzle = 0x80943DA8; // type:func +BgPoEvent_NextPainting = 0x80943EC4; // type:func +BgPoEvent_PaintingEmpty = 0x80943F80; // type:func +BgPoEvent_PaintingAppear = 0x80943FB0; // type:func +BgPoEvent_PaintingVanish = 0x80943FE8; // type:func +BgPoEvent_PaintingPresent = 0x80944038; // type:func +BgPoEvent_PaintingBurn = 0x80944294; // type:func +BgPoEvent_Update = 0x80944440; // type:func +BgPoEvent_Draw = 0x809444B0; // type:func +ObjMure_SetCullingImpl = 0x80944AC0; // type:func +ObjMure_SetCulling = 0x80944B18; // type:func +ObjMure_Init = 0x80944B44; // type:func +ObjMure_Destroy = 0x80944BF4; // type:func +ObjMure_GetMaxChildSpawns = 0x80944C04; // type:func +ObjMure_GetSpawnPos = 0x80944C30; // type:func +ObjMure_SpawnActors0 = 0x80944C58; // type:func +ObjMure_SpawnActors1 = 0x80944E20; // type:func +ObjMure_SpawnActors = 0x80944F6C; // type:func +ObjMure_KillActorsImpl = 0x80944FBC; // type:func +ObjMure_KillActors = 0x809450B4; // type:func +ObjMure_CheckChildren = 0x809450D4; // type:func +ObjMure_InitialAction = 0x80945198; // type:func +ObjMure_CulledState = 0x809451B0; // type:func +ObjMure_SetFollowTargets = 0x80945210; // type:func +ObjMure_SetChildToFollowPlayer = 0x809452E8; // type:func +ObjMure_GroupBehavior0 = 0x80945468; // type:func +ObjMure_GroupBehavior1 = 0x80945690; // type:func +ObjMure_ActiveState = 0x80945814; // type:func +ObjMure_Update = 0x809458BC; // type:func +EnSw_CrossProduct = 0x80945AD0; // type:func +func_80B0BE20 = 0x80945B44; // type:func +func_80B0C020 = 0x80945D44; // type:func +func_80B0C0CC = 0x80945DF4; // type:func +EnSw_Init = 0x80946228; // type:func +EnSw_Destroy = 0x809466F0; // type:func +func_80B0C9F0 = 0x8094671C; // type:func +func_80B0CBE8 = 0x80946918; // type:func +func_80B0CCF4 = 0x80946A24; // type:func +func_80B0CEA8 = 0x80946BD8; // type:func +func_80B0CF44 = 0x80946C78; // type:func +func_80B0D14C = 0x80946E80; // type:func +func_80B0D364 = 0x80947098; // type:func +func_80B0D3AC = 0x809470E0; // type:func +func_80B0D590 = 0x809472C8; // type:func +func_80B0D878 = 0x809475B0; // type:func +func_80B0DB00 = 0x80947838; // type:func +func_80B0DC7C = 0x809479B8; // type:func +func_80B0DE34 = 0x80947B74; // type:func +func_80B0DEA8 = 0x80947BF0; // type:func +func_80B0DFFC = 0x80947D44; // type:func +func_80B0E314 = 0x8094805C; // type:func +func_80B0E430 = 0x80948174; // type:func +func_80B0E5E0 = 0x80948324; // type:func +func_80B0E728 = 0x80948470; // type:func +func_80B0E90C = 0x80948654; // type:func +func_80B0E9BC = 0x80948704; // type:func +EnSw_Update = 0x809487B4; // type:func +EnSw_OverrideLimbDraw = 0x80948810; // type:func +EnSw_PostLimbDraw = 0x80948AB4; // type:func +func_80B0EDB8 = 0x80948ACC; // type:func +func_80B0EEA4 = 0x80948B84; // type:func +EnSw_Draw = 0x80948BB0; // type:func +BossFd_SpawnEmber = 0x809492C0; // type:func +BossFd_SpawnDebris = 0x8094938C; // type:func +BossFd_SpawnDust = 0x8094945C; // type:func +BossFd_SpawnFireBreath = 0x809494F4; // type:func +BossFd_SetCameraSpeed = 0x80949600; // type:func +BossFd_UpdateCamera = 0x809496A0; // type:func +BossFd_Init = 0x8094980C; // type:func +BossFd_Destroy = 0x80949B2C; // type:func +BossFd_IsFacingLink = 0x80949B8C; // type:func +BossFd_SetupFly = 0x80949BBC; // type:func +BossFd_Fly = 0x80949C2C; // type:func +BossFd_Wait = 0x8094C2B4; // type:func +BossFd_Effects = 0x8094C4A4; // type:func +BossFd_CollisionCheck = 0x8094D0C4; // type:func +BossFd_Update = 0x8094D178; // type:func +BossFd_UpdateEffects = 0x8094D8B8; // type:func +BossFd_DrawEffects = 0x8094DD10; // type:func +BossFd_Draw = 0x8094E388; // type:func +BossFd_OverrideRightArmDraw = 0x8094E440; // type:func +BossFd_OverrideLeftArmDraw = 0x8094E560; // type:func +BossFd_DrawMane = 0x8094E680; // type:func +BossFd_OverrideHeadDraw = 0x8094EB00; // type:func +BossFd_PostHeadDraw = 0x8094EBF8; // type:func +BossFd_DrawBody = 0x8094EC4C; // type:func +ObjectKankyo_SetupAction = 0x809505F0; // type:func +ObjectKankyo_Init = 0x809505FC; // type:func +ObjectKankyo_Destroy = 0x809508FC; // type:func +ObjectKankyo_Snow = 0x80950920; // type:func +ObjectKankyo_Fairies = 0x80950930; // type:func +ObjectKankyo_Update = 0x80951748; // type:func +ObjectKankyo_Draw = 0x8095176C; // type:func +ObjectKankyo_DrawFairies = 0x809517F0; // type:func +ObjectKankyo_DrawSnow = 0x80951C70; // type:func +ObjectKankyo_Lightning = 0x80952408; // type:func +ObjectKankyo_DrawLightning = 0x809524B0; // type:func +ObjectKankyo_SunGraveSparkInit = 0x809526AC; // type:func +ObjectKankyo_WaitForSunGraveSparkObject = 0x809526F8; // type:func +ObjectKankyo_SunGraveSpark = 0x80952768; // type:func +ObjectKankyo_DrawSunGraveSpark = 0x80952814; // type:func +ObjectKankyo_InitBeams = 0x80952D44; // type:func +ObjectKankyo_WaitForBeamObject = 0x80952D90; // type:func +ObjectKankyo_Beams = 0x80952DF0; // type:func +ObjectKankyo_DrawBeams = 0x80952ED0; // type:func +EnDu_SetupAction = 0x80953810; // type:func +EnDu_GetTextId = 0x8095381C; // type:func +EnDu_UpdateTalkState = 0x809538C0; // type:func +func_809FDDB4 = 0x8095399C; // type:func +func_809FDE24 = 0x80953A0C; // type:func +func_809FDE9C = 0x80953A84; // type:func +func_809FDFC0 = 0x80953BA8; // type:func +func_809FE000 = 0x80953BEC; // type:func +func_809FE040 = 0x80953C30; // type:func +func_809FE104 = 0x80953CF4; // type:func +EnDu_Init = 0x80953D9C; // type:func +EnDu_Destroy = 0x80953F6C; // type:func +func_809FE3B4 = 0x80953FAC; // type:func +func_809FE3C0 = 0x80953FBC; // type:func +func_809FE4A4 = 0x809540A4; // type:func +func_809FE638 = 0x8095423C; // type:func +func_809FE6CC = 0x809542D4; // type:func +func_809FE740 = 0x80954348; // type:func +func_809FE798 = 0x809543A0; // type:func +func_809FE890 = 0x80954498; // type:func +func_809FEB08 = 0x80954714; // type:func +func_809FEC14 = 0x80954820; // type:func +func_809FEC70 = 0x8095487C; // type:func +func_809FECE4 = 0x809548F4; // type:func +EnDu_Update = 0x8095492C; // type:func +EnDu_OverrideLimbDraw = 0x80954AB8; // type:func +EnDu_PostLimbDraw = 0x80954C34; // type:func +EnDu_Draw = 0x80954C90; // type:func +EnFd_SpawnCore = 0x809552B0; // type:func +EnFd_SpawnChildFire = 0x809553A8; // type:func +EnFd_SpawnDot = 0x809554C8; // type:func +EnFd_CheckHammer = 0x80955634; // type:func +EnFd_ColliderCheck = 0x809556D0; // type:func +EnFd_CanSeeActor = 0x80955868; // type:func +EnFd_FindBomb = 0x80955978; // type:func +EnFd_FindPotentialTheat = 0x80955A38; // type:func +EnFd_GetPosAdjAroundCircle = 0x80955AAC; // type:func +EnFd_ShouldStopRunning = 0x80955B74; // type:func +EnFd_Fade = 0x80955CA8; // type:func +EnFd_Init = 0x80955DB8; // type:func +EnFd_Destroy = 0x80955EF4; // type:func +EnFd_Reappear = 0x80955F20; // type:func +EnFd_SpinAndGrow = 0x80955FB0; // type:func +EnFd_JumpToGround = 0x80956084; // type:func +EnFd_Land = 0x80956100; // type:func +EnFd_SpinAndSpawnFire = 0x809561E0; // type:func +EnFd_Run = 0x80956400; // type:func +EnFd_WaitForCore = 0x80956660; // type:func +EnFd_Update = 0x809566D8; // type:func +EnFd_OverrideLimbDraw = 0x809568D4; // type:func +EnFd_PostLimbDraw = 0x80956910; // type:func +EnFd_Draw = 0x80956C3C; // type:func +EnFd_SpawnEffect = 0x80957008; // type:func +EnFd_UpdateEffectsFlames = 0x809570F8; // type:func +EnFd_UpdateEffectsDots = 0x80957210; // type:func +EnFd_DrawEffectsFlames = 0x8095732C; // type:func +EnFd_DrawEffectsDots = 0x809576F8; // type:func +func_80A693D0 = 0x80957F70; // type:func +func_80A6948C = 0x8095802C; // type:func +func_80A695A4 = 0x80958144; // type:func +EnHorseLinkChild_Init = 0x8095820C; // type:func +EnHorseLinkChild_Destroy = 0x809583E4; // type:func +func_80A6988C = 0x80958434; // type:func +func_80A698F4 = 0x80958498; // type:func +func_80A6993C = 0x809584E0; // type:func +func_80A699FC = 0x809585A0; // type:func +func_80A69B7C = 0x80958728; // type:func +func_80A69C18 = 0x809587C8; // type:func +func_80A69EC0 = 0x80958A70; // type:func +func_80A69F5C = 0x80958B10; // type:func +func_80A6A068 = 0x80958C1C; // type:func +func_80A6A4DC = 0x80959098; // type:func +func_80A6A5A4 = 0x80959160; // type:func +func_80A6A724 = 0x809592E0; // type:func +func_80A6A7D0 = 0x80959390; // type:func +EnHorseLinkChild_Update = 0x8095966C; // type:func +EnHorseLinkChild_PostDraw = 0x809597C4; // type:func +EnHorseLinkChild_OverrideLimbDraw = 0x80959950; // type:func +EnHorseLinkChild_Draw = 0x809599D8; // type:func +DoorAna_SetupAction = 0x80959D70; // type:func +DoorAna_Init = 0x80959D7C; // type:func +DoorAna_Destroy = 0x80959E38; // type:func +DoorAna_WaitClosed = 0x80959E74; // type:func +DoorAna_WaitOpen = 0x80959FAC; // type:func +DoorAna_GrabPlayer = 0x8095A160; // type:func +DoorAna_Update = 0x8095A20C; // type:func +DoorAna_Draw = 0x8095A260; // type:func +BgSpot02Objects_Init = 0x8095A3E0; // type:func +BgSpot02Objects_Destroy = 0x8095A650; // type:func +func_808AC8FC = 0x8095A684; // type:func +func_808AC908 = 0x8095A694; // type:func +func_808ACA08 = 0x8095A794; // type:func +func_808ACAFC = 0x8095A88C; // type:func +func_808ACB58 = 0x8095A8E8; // type:func +BgSpot02Objects_Update = 0x8095A968; // type:func +BgSpot02Objects_Draw = 0x8095A98C; // type:func +func_808ACC34 = 0x8095A9C8; // type:func +func_808ACCB8 = 0x8095AA4C; // type:func +func_808AD3D4 = 0x8095B12C; // type:func +func_808AD450 = 0x8095B1A8; // type:func +BgHaka_Init = 0x8095B730; // type:func +BgHaka_Destroy = 0x8095B7AC; // type:func +func_8087B758 = 0x8095B7E0; // type:func +func_8087B7E8 = 0x8095B870; // type:func +func_8087B938 = 0x8095B9C4; // type:func +func_8087BAAC = 0x8095BB3C; // type:func +func_8087BAE4 = 0x8095BB78; // type:func +BgHaka_Update = 0x8095BBF0; // type:func +BgHaka_Draw = 0x8095BC14; // type:func +MagicWind_SetupAction = 0x8095BDF0; // type:func +MagicWind_Init = 0x8095BDFC; // type:func +MagicWind_Destroy = 0x8095BF08; // type:func +MagicWind_UpdateAlpha = 0x8095BF3C; // type:func +MagicWind_WaitForTimer = 0x8095C05C; // type:func +MagicWind_Grow = 0x8095C0D8; // type:func +MagicWind_WaitAtFullSize = 0x8095C128; // type:func +MagicWind_FadeOut = 0x8095C174; // type:func +MagicWind_Shrink = 0x8095C1D8; // type:func +MagicWind_Update = 0x8095C218; // type:func +MagicWind_OverrideLimbDraw = 0x8095C26C; // type:func +MagicWind_Draw = 0x8095C3F0; // type:func +MagicFire_Init = 0x8095DAF0; // type:func +MagicFire_Destroy = 0x8095DB9C; // type:func +MagicFire_UpdateBeforeCast = 0x8095DBC0; // type:func +MagicFire_Update = 0x8095DC64; // type:func +MagicFire_Draw = 0x8095DFF8; // type:func +func_80AEAC10 = 0x8095FDC0; // type:func +func_80AEAC54 = 0x8095FE04; // type:func +func_80AEACDC = 0x8095FE8C; // type:func +func_80AEAD20 = 0x8095FED0; // type:func +EnRu1_DestroyColliders = 0x8095FF48; // type:func +func_80AEADD8 = 0x8095FF88; // type:func +func_80AEADE0 = 0x8095FF94; // type:func +func_80AEADF0 = 0x8095FFA8; // type:func +EnRu1_Destroy = 0x8095FFB8; // type:func +EnRu1_UpdateEyes = 0x8095FFD8; // type:func +EnRu1_SetEyeIndex = 0x80960060; // type:func +EnRu1_SetMouthIndex = 0x80960078; // type:func +func_80AEAECC = 0x80960090; // type:func +EnRu1_IsCsStateIdle = 0x809600F8; // type:func +EnRu1_GetCue = 0x80960118; // type:func +func_80AEAFA0 = 0x80960164; // type:func +func_80AEAFE0 = 0x809601A4; // type:func +func_80AEB020 = 0x809601E4; // type:func +EnRu1_FindSwitch = 0x8096024C; // type:func +func_80AEB0EC = 0x80960294; // type:func +func_80AEB104 = 0x809602AC; // type:func +func_80AEB124 = 0x809602CC; // type:func +func_80AEB174 = 0x8096031C; // type:func +func_80AEB1B4 = 0x80960360; // type:func +func_80AEB264 = 0x8096038C; // type:func +EnRu1_UpdateSkelAnime = 0x80960448; // type:func +func_80AEB364 = 0x8096048C; // type:func +func_80AEB3A4 = 0x809604CC; // type:func +func_80AEB3CC = 0x809604F4; // type:func +func_80AEB3DC = 0x80960508; // type:func +EnRu1_GetCueChannel3 = 0x80960564; // type:func +func_80AEB458 = 0x80960584; // type:func +func_80AEB480 = 0x809605AC; // type:func +EnRu1_SpawnRipple = 0x809605D4; // type:func +func_80AEB50C = 0x8096063C; // type:func +func_80AEB59C = 0x809606CC; // type:func +EnRu1_SpawnSplash = 0x809607B8; // type:func +func_80AEB6E0 = 0x8096081C; // type:func +func_80AEB738 = 0x80960878; // type:func +func_80AEB7D0 = 0x80960910; // type:func +func_80AEB7E0 = 0x80960924; // type:func +func_80AEB87C = 0x809609C0; // type:func +func_80AEB89C = 0x809609E4; // type:func +func_80AEB914 = 0x80960A5C; // type:func +func_80AEB934 = 0x80960A7C; // type:func +func_80AEB954 = 0x80960A9C; // type:func +func_80AEB974 = 0x80960ABC; // type:func +func_80AEBA0C = 0x80960B54; // type:func +func_80AEBA2C = 0x80960B74; // type:func +func_80AEBAFC = 0x80960C44; // type:func +func_80AEBB3C = 0x80960C88; // type:func +func_80AEBB78 = 0x80960CC8; // type:func +func_80AEBBF4 = 0x80960D48; // type:func +func_80AEBC30 = 0x80960D88; // type:func +func_80AEBC84 = 0x80960DE0; // type:func +func_80AEBCB8 = 0x80960E18; // type:func +func_80AEBD1C = 0x80960E7C; // type:func +func_80AEBD94 = 0x80960EF4; // type:func +func_80AEBE3C = 0x80960F9C; // type:func +func_80AEBEC8 = 0x8096102C; // type:func +func_80AEBF60 = 0x809610C4; // type:func +func_80AEBFD8 = 0x80961140; // type:func +func_80AEC070 = 0x809611D8; // type:func +func_80AEC0B4 = 0x80961220; // type:func +func_80AEC100 = 0x80961274; // type:func +func_80AEC130 = 0x809612A8; // type:func +func_80AEC17C = 0x809612F8; // type:func +func_80AEC1D4 = 0x80961358; // type:func +func_80AEC244 = 0x809613CC; // type:func +func_80AEC2C0 = 0x8096144C; // type:func +func_80AEC320 = 0x809614B0; // type:func +func_80AEC40C = 0x809615A4; // type:func +func_80AEC4CC = 0x80961664; // type:func +func_80AEC4F4 = 0x8096168C; // type:func +func_80AEC5FC = 0x80961794; // type:func +func_80AEC650 = 0x809617E8; // type:func +func_80AEC6B0 = 0x8096184C; // type:func +func_80AEC6E4 = 0x80961884; // type:func +func_80AEC780 = 0x80961924; // type:func +func_80AEC81C = 0x809619C4; // type:func +func_80AEC8B8 = 0x80961A60; // type:func +func_80AEC93C = 0x80961AE8; // type:func +func_80AEC9C4 = 0x80961B70; // type:func +func_80AECA18 = 0x80961BC4; // type:func +func_80AECA44 = 0x80961BF4; // type:func +func_80AECA94 = 0x80961C48; // type:func +func_80AECAB4 = 0x80961C68; // type:func +func_80AECAD4 = 0x80961C88; // type:func +func_80AECB18 = 0x80961CD0; // type:func +func_80AECB60 = 0x80961D1C; // type:func +func_80AECBB8 = 0x80961D78; // type:func +func_80AECC1C = 0x80961DE0; // type:func +func_80AECC84 = 0x80961E4C; // type:func +func_80AECCB0 = 0x80961E78; // type:func +func_80AECDA0 = 0x80961F68; // type:func +func_80AECE04 = 0x80961FCC; // type:func +func_80AECE20 = 0x80961FEC; // type:func +func_80AECEB4 = 0x8096207C; // type:func +func_80AECF6C = 0x80962134; // type:func +func_80AED084 = 0x8096224C; // type:func +func_80AED0B0 = 0x80962278; // type:func +func_80AED0C8 = 0x80962290; // type:func +func_80AED0D8 = 0x809622A4; // type:func +func_80AED110 = 0x809622DC; // type:func +func_80AED154 = 0x80962320; // type:func +func_80AED19C = 0x80962368; // type:func +func_80AED218 = 0x809623E4; // type:func +func_80AED304 = 0x809624D4; // type:func +func_80AED324 = 0x809624F4; // type:func +func_80AED344 = 0x80962514; // type:func +func_80AED374 = 0x80962548; // type:func +func_80AED3A4 = 0x8096257C; // type:func +func_80AED3E0 = 0x809625BC; // type:func +func_80AED414 = 0x809625F4; // type:func +func_80AED44C = 0x80962634; // type:func +func_80AED4FC = 0x809626E8; // type:func +func_80AED520 = 0x80962710; // type:func +func_80AED57C = 0x80962770; // type:func +func_80AED5B8 = 0x809627B0; // type:func +func_80AED5DC = 0x809627D8; // type:func +func_80AED600 = 0x80962800; // type:func +func_80AED624 = 0x80962828; // type:func +func_80AED6DC = 0x809628E0; // type:func +func_80AED6F8 = 0x80962900; // type:func +func_80AED738 = 0x80962940; // type:func +func_80AED83C = 0x80962A48; // type:func +func_80AED8DC = 0x80962AEC; // type:func +func_80AEDAE0 = 0x80962CF0; // type:func +func_80AEDB30 = 0x80962D44; // type:func +func_80AEDEF4 = 0x80963104; // type:func +func_80AEDFF4 = 0x80963208; // type:func +func_80AEE02C = 0x80963248; // type:func +func_80AEE050 = 0x80963270; // type:func +func_80AEE264 = 0x8096348C; // type:func +func_80AEE2F8 = 0x80963520; // type:func +func_80AEE394 = 0x809635BC; // type:func +func_80AEE488 = 0x809636B0; // type:func +func_80AEE568 = 0x80963790; // type:func +func_80AEE628 = 0x80963854; // type:func +func_80AEE6D0 = 0x809638F8; // type:func +func_80AEE7C4 = 0x809639EC; // type:func +func_80AEEA48_unknown = 0x80AEEA48; // type:func +func_80AEEAC8 = 0x80963D0C; // type:func +func_80AEEB24 = 0x80963D68; // type:func +func_80AEEBB4 = 0x80963DF8; // type:func +func_80AEEBD4 = 0x80963E18; // type:func +func_80AEEC5C = 0x80963EA4; // type:func +func_80AEECF0 = 0x80963F3C; // type:func +func_80AEED58 = 0x80963FA8; // type:func +func_80AEEDCC = 0x80964020; // type:func +func_80AEEE34 = 0x8096408C; // type:func +func_80AEEE9C = 0x809640F8; // type:func +func_80AEEF08 = 0x80964168; // type:func +func_80AEEF5C = 0x809641C0; // type:func +func_80AEEF68 = 0x809641D0; // type:func +func_80AEEFEC = 0x80964258; // type:func +func_80AEF080 = 0x809642EC; // type:func +func_80AEF0BC = 0x8096432C; // type:func +func_80AEF170 = 0x809643E4; // type:func +func_80AEF188 = 0x809643FC; // type:func +func_80AEF1F0 = 0x80964464; // type:func +func_80AEF29C = 0x80964510; // type:func +func_80AEF2AC = 0x80964524; // type:func +func_80AEF2D0 = 0x8096454C; // type:func +func_80AEF354 = 0x809645D8; // type:func +func_80AEF3A8 = 0x80964634; // type:func +func_80AEF40C = 0x8096469C; // type:func +func_80AEF4A8 = 0x8096473C; // type:func +func_80AEF4E0 = 0x80964774; // type:func +func_80AEF51C = 0x809647B4; // type:func +func_80AEF540 = 0x809647DC; // type:func +func_80AEF5B8 = 0x80964858; // type:func +func_80AEF624 = 0x809648C8; // type:func +func_80AEF728 = 0x809649CC; // type:func +func_80AEF79C = 0x80964A40; // type:func +func_80AEF820 = 0x80964AC8; // type:func +func_80AEF890 = 0x80964B38; // type:func +func_80AEF930 = 0x80964BC4; // type:func +func_80AEF99C = 0x80964C34; // type:func +func_80AEF9D8 = 0x80964C70; // type:func +func_80AEFA2C = 0x80964CB4; // type:func +func_80AEFAAC = 0x80964D2C; // type:func +func_80AEFB04 = 0x80964D74; // type:func +func_80AEFB68 = 0x80964DD0; // type:func +func_80AEFBC8 = 0x80964E28; // type:func +func_80AEFC24 = 0x80964E88; // type:func +func_80AEFC54 = 0x80964EBC; // type:func +func_80AEFCE8 = 0x80964F58; // type:func +func_80AEFD38 = 0x80964FA8; // type:func +func_80AEFDC0 = 0x80965034; // type:func +func_80AEFE38 = 0x809650B8; // type:func +func_80AEFE84 = 0x80965104; // type:func +func_80AEFE9C = 0x8096511C; // type:func +func_80AEFECC = 0x80965150; // type:func +func_80AEFF40 = 0x809651CC; // type:func +func_80AEFF94 = 0x80965228; // type:func +EnRu1_Update = 0x809652C4; // type:func +EnRu1_Init = 0x8096530C; // type:func +func_80AF0278 = 0x80965448; // type:func +EnRu1_OverrideLimbDraw = 0x809654B8; // type:func +EnRu1_PostLimbDraw = 0x80965524; // type:func +EnRu1_DrawNothing = 0x809655B0; // type:func +EnRu1_DrawOpa = 0x809655C0; // type:func +EnRu1_DrawXlu = 0x80965764; // type:func +EnRu1_Draw = 0x80965904; // type:func +BossFd2_SpawnDebris = 0x80967460; // type:func +BossFd2_SpawnFireBreath = 0x80967538; // type:func +BossFd2_SpawnEmber = 0x8096764C; // type:func +BossFd2_SpawnSkullPiece = 0x80967720; // type:func +BossFd2_SpawnDust = 0x809677F8; // type:func +BossFd2_Init = 0x80967890; // type:func +BossFd2_Destroy = 0x8096798C; // type:func +BossFd2_SetupEmerge = 0x809679CC; // type:func +BossFd2_Emerge = 0x80967AC4; // type:func +BossFd2_SetupIdle = 0x80967E04; // type:func +BossFd2_Idle = 0x80967EAC; // type:func +BossFd2_SetupBurrow = 0x80968000; // type:func +BossFd2_Burrow = 0x80968078; // type:func +BossFd2_SetupBreatheFire = 0x80968148; // type:func +BossFd2_BreatheFire = 0x809681AC; // type:func +BossFd2_SetupClawSwipe = 0x809686F0; // type:func +BossFd2_ClawSwipe = 0x80968750; // type:func +BossFd2_SetupVulnerable = 0x809687C8; // type:func +BossFd2_Vulnerable = 0x80968824; // type:func +BossFd2_SetupDamaged = 0x80968A7C; // type:func +BossFd2_Damaged = 0x80968AD8; // type:func +BossFd2_SetupDeath = 0x80968C08; // type:func +BossFd2_UpdateCamera = 0x80968C98; // type:func +BossFd2_Death = 0x80968E08; // type:func +BossFd2_Wait = 0x8096948C; // type:func +BossFd2_CollisionCheck = 0x809694D4; // type:func +BossFd2_UpdateFace = 0x80969974; // type:func +BossFd2_Update = 0x80969AE0; // type:func +BossFd2_OverrideLimbDraw = 0x80969C94; // type:func +BossFd2_PostLimbDraw = 0x80969E88; // type:func +BossFd2_UpdateMane = 0x80969F30; // type:func +BossFd2_DrawMane = 0x8096A500; // type:func +BossFd2_Draw = 0x8096A944; // type:func +EnFdFire_UpdatePos = 0x8096B190; // type:func +EnFdFire_CheckCollider = 0x8096B258; // type:func +EnFdFire_Init = 0x8096B2BC; // type:func +EnFdFire_Destroy = 0x8096B3C4; // type:func +func_80A0E70C = 0x8096B3F0; // type:func +EnFdFire_WaitToDie = 0x8096B52C; // type:func +EnFdFire_DanceTowardsPlayer = 0x8096B568; // type:func +EnFdFire_Disappear = 0x8096B718; // type:func +EnFdFire_Update = 0x8096B7CC; // type:func +EnFdFire_Draw = 0x8096B8C8; // type:func +EnDh_SetupAction = 0x8096BEA0; // type:func +EnDh_Init = 0x8096BEAC; // type:func +EnDh_Destroy = 0x8096BFE8; // type:func +EnDh_SpawnDebris = 0x8096C030; // type:func +EnDh_SetupWait = 0x8096C1C8; // type:func +EnDh_Wait = 0x8096C27C; // type:func +EnDh_SetupWalk = 0x8096C4A0; // type:func +EnDh_Walk = 0x8096C53C; // type:func +EnDh_SetupRetreat = 0x8096C644; // type:func +EnDh_Retreat = 0x8096C6A8; // type:func +EnDh_SetupAttack = 0x8096C734; // type:func +EnDh_Attack = 0x8096C794; // type:func +EnDh_SetupBurrow = 0x8096CAA4; // type:func +EnDh_Burrow = 0x8096CB28; // type:func +EnDh_SetupDamage = 0x8096CCB8; // type:func +EnDh_Damage = 0x8096CD38; // type:func +EnDh_SetupDeath = 0x8096CE60; // type:func +EnDh_Death = 0x8096CEE8; // type:func +EnDh_CollisionCheck = 0x8096D018; // type:func +EnDh_Update = 0x8096D168; // type:func +EnDh_PostLimbDraw = 0x8096D318; // type:func +EnDh_Draw = 0x8096D3A8; // type:func +EnDha_SetupAction = 0x8096D970; // type:func +EnDha_Init = 0x8096D97C; // type:func +EnDha_Destroy = 0x8096DA98; // type:func +EnDha_SetupWait = 0x8096DAC4; // type:func +EnDha_Wait = 0x8096DB4C; // type:func +EnDha_SetupTakeDamage = 0x8096E05C; // type:func +EnDha_TakeDamage = 0x8096E088; // type:func +EnDha_SetupDeath = 0x8096E150; // type:func +EnDha_Die = 0x8096E1C0; // type:func +EnDha_UpdateHealth = 0x8096E37C; // type:func +EnDha_Update = 0x8096E470; // type:func +EnDha_OverrideLimbDraw = 0x8096E518; // type:func +EnDha_PostLimbDraw = 0x8096E5B8; // type:func +EnDha_Draw = 0x8096E6D0; // type:func +EnRl_Destroy = 0x8096E970; // type:func +func_80AE72D0 = 0x8096E994; // type:func +func_80AE744C = 0x8096EA1C; // type:func +func_80AE7494 = 0x8096EA64; // type:func +func_80AE74B4 = 0x8096EA88; // type:func +func_80AE74FC = 0x8096EAD4; // type:func +func_80AE7544 = 0x8096EB20; // type:func +func_80AE7590 = 0x8096EB6C; // type:func +func_80AE7668 = 0x8096EC4C; // type:func +func_80AE7698 = 0x8096EC80; // type:func +func_80AE772C = 0x8096ED14; // type:func +func_80AE7798 = 0x8096ED80; // type:func +func_80AE77B8 = 0x8096EDA0; // type:func +func_80AE77F8 = 0x8096EDE8; // type:func +func_80AE7838 = 0x8096EE2C; // type:func +func_80AE7878 = 0x8096EE74; // type:func +func_80AE78D4 = 0x8096EECC; // type:func +func_80AE7954 = 0x8096EF4C; // type:func +func_80AE79A4 = 0x8096EF9C; // type:func +func_80AE7AF8 = 0x8096F0F0; // type:func +func_80AE7BF8 = 0x8096F1FC; // type:func +func_80AE7C64 = 0x8096F268; // type:func +func_80AE7C94 = 0x8096F288; // type:func +func_80AE7CE8 = 0x8096F2D0; // type:func +func_80AE7D40 = 0x8096F314; // type:func +func_80AE7D94 = 0x8096F35C; // type:func +EnRl_Update = 0x8096F4A4; // type:func +EnRl_Init = 0x8096F4EC; // type:func +func_80AE7FD0 = 0x8096F558; // type:func +func_80AE7FDC = 0x8096F568; // type:func +EnRl_Draw = 0x8096F69C; // type:func +EnEncount1_Init = 0x8096F850; // type:func +EnEncount1_SpawnLeevers = 0x8096F984; // type:func +EnEncount1_SpawnTektites = 0x8096FCE0; // type:func +EnEncount1_SpawnStalchildOrWolfos = 0x8096FE78; // type:func +EnEncount1_Update = 0x809702CC; // type:func +DemoDu_Destroy = 0x809703B0; // type:func +DemoDu_UpdateEyes = 0x809703D4; // type:func +DemoDu_SetEyeTexIndex = 0x8097045C; // type:func +DemoDu_SetMouthTexIndex = 0x80970474; // type:func +DemoDu_UpdateSkelAnime = 0x8097048C; // type:func +DemoDu_UpdateBgCheckInfo = 0x809704B0; // type:func +DemoDu_GetCue = 0x809704F8; // type:func +DemoDu_CheckForCue = 0x80970520; // type:func +DemoDu_CheckForNoCue = 0x8097056C; // type:func +DemoDu_SetStartPosRotFromCue = 0x809705B8; // type:func +func_80969DDC = 0x80970638; // type:func +DemoDu_InitCs_FireMedallion = 0x809706C8; // type:func +DemoDu_CsFireMedallion_SpawnDoorWarp = 0x80970738; // type:func +func_80969F38 = 0x80970794; // type:func +func_80969FB4 = 0x80970810; // type:func +DemoDu_CsFireMedallion_AdvanceTo01 = 0x80970830; // type:func +DemoDu_CsFireMedallion_AdvanceTo02 = 0x809708C8; // type:func +DemoDu_CsFireMedallion_AdvanceTo03 = 0x80970918; // type:func +DemoDu_CsFireMedallion_AdvanceTo04 = 0x80970944; // type:func +DemoDu_CsFireMedallion_AdvanceTo05 = 0x809709D8; // type:func +DemoDu_CsFireMedallion_AdvanceTo06 = 0x80970A44; // type:func +DemoDu_UpdateCs_FM_00 = 0x80970A90; // type:func +DemoDu_UpdateCs_FM_01 = 0x80970AB0; // type:func +DemoDu_UpdateCs_FM_02 = 0x80970AD0; // type:func +DemoDu_UpdateCs_FM_03 = 0x80970B04; // type:func +DemoDu_UpdateCs_FM_04 = 0x80970B44; // type:func +DemoDu_UpdateCs_FM_05 = 0x80970B7C; // type:func +DemoDu_UpdateCs_FM_06 = 0x80970BBC; // type:func +DemoDu_InitCs_GoronsRuby = 0x80970BE8; // type:func +DemoDu_CsPlaySfx_GoronLanding = 0x80970C38; // type:func +DemoDu_CsPlaySfx_DaruniaFalling = 0x80970C60; // type:func +DemoDu_CsPlaySfx_DaruniaHitsLink = 0x80970C90; // type:func +DemoDu_CsPlaySfx_HitBreast = 0x80970CE8; // type:func +DemoDu_CsPlaySfx_LinkEscapeFromGorons = 0x80970D10; // type:func +DemoDu_CsPlaySfx_LinkSurprised = 0x80970D68; // type:func +DemoDu_CsGoronsRuby_UpdateFaceTextures = 0x80970DC0; // type:func +func_8096A630 = 0x80970EC8; // type:func +DemoDu_CsGoronsRuby_SpawnDustWhenHittingLink = 0x80970F7C; // type:func +DemoDu_CsGoronsRuby_DaruniaFalling = 0x80971210; // type:func +DemoDu_CsGoronsRuby_AdvanceTo01 = 0x809712EC; // type:func +DemoDu_CsGoronsRuby_AdvanceTo02 = 0x80971300; // type:func +DemoDu_CsGoronsRuby_AdvanceTo03 = 0x809713A4; // type:func +DemoDu_CsGoronsRuby_AdvanceTo04 = 0x809713F8; // type:func +DemoDu_CsGoronsRuby_AdvanceTo05 = 0x80971430; // type:func +DemoDu_CsGoronsRuby_AdvanceTo06 = 0x8097149C; // type:func +DemoDu_CsGoronsRuby_AdvanceTo07 = 0x80971534; // type:func +DemoDu_CsGoronsRuby_AdvanceTo08 = 0x809715A0; // type:func +DemoDu_CsGoronsRuby_AdvanceTo09 = 0x80971634; // type:func +DemoDu_CsGoronsRuby_AdvanceTo10 = 0x809716A4; // type:func +DemoDu_CsGoronsRuby_AdvanceTo11 = 0x80971710; // type:func +DemoDu_CsGoronsRuby_AdvanceTo12 = 0x809717A4; // type:func +DemoDu_CsGoronsRuby_AdvanceTo13 = 0x80971810; // type:func +DemoDu_UpdateCs_GR_00 = 0x809718A0; // type:func +DemoDu_UpdateCs_GR_01 = 0x809718D4; // type:func +DemoDu_UpdateCs_GR_02 = 0x80971910; // type:func +DemoDu_UpdateCs_GR_03 = 0x8097196C; // type:func +DemoDu_UpdateCs_GR_04 = 0x809719AC; // type:func +DemoDu_UpdateCs_GR_05 = 0x809719FC; // type:func +DemoDu_UpdateCs_GR_06 = 0x80971A48; // type:func +DemoDu_UpdateCs_GR_07 = 0x80971AA8; // type:func +DemoDu_UpdateCs_GR_08 = 0x80971AF4; // type:func +DemoDu_UpdateCs_GR_09 = 0x80971B58; // type:func +DemoDu_UpdateCs_GR_10 = 0x80971BB8; // type:func +DemoDu_UpdateCs_GR_11 = 0x80971C04; // type:func +DemoDu_UpdateCs_GR_12 = 0x80971C54; // type:func +DemoDu_UpdateCs_GR_13 = 0x80971CA0; // type:func +DemoDu_InitCs_AfterGanon = 0x80971CE8; // type:func +DemoDu_CsPlaySfx_WhiteOut = 0x80971D88; // type:func +DemoDu_CsAfterGanon_SpawnDemo6K = 0x80971DA8; // type:func +DemoDu_CsAfterGanon_AdvanceTo01 = 0x80971E28; // type:func +DemoDu_CsAfterGanon_AdvanceTo02 = 0x80971E7C; // type:func +DemoDu_CsAfterGanon_BackTo01 = 0x80971FD0; // type:func +DemoDu_UpdateCs_AG_00 = 0x8097206C; // type:func +DemoDu_UpdateCs_AG_01 = 0x8097208C; // type:func +DemoDu_UpdateCs_AG_02 = 0x809720D4; // type:func +DemoDu_Draw_02 = 0x8097211C; // type:func +DemoDu_InitCs_Credits = 0x809722D8; // type:func +DemoDu_CsCredits_UpdateShadowAlpha = 0x80972344; // type:func +DemoDu_CsCredits_AdvanceTo01 = 0x809723D0; // type:func +DemoDu_CsCredits_AdvanceTo02 = 0x80972408; // type:func +DemoDu_CsCredits_AdvanceTo03 = 0x80972454; // type:func +DemoDu_CsCredits_AdvanceTo04 = 0x80972494; // type:func +DemoDu_CsCredits_BackTo02 = 0x809724D4; // type:func +DemoDu_CsCredits_HandleCues = 0x8097251C; // type:func +DemoDu_UpdateCs_CR_00 = 0x809725C8; // type:func +DemoDu_UpdateCs_CR_01 = 0x809725E8; // type:func +DemoDu_UpdateCs_CR_02 = 0x80972634; // type:func +DemoDu_UpdateCs_CR_03 = 0x8097267C; // type:func +DemoDu_UpdateCs_CR_04 = 0x809726C4; // type:func +DemoDu_Update = 0x80972708; // type:func +DemoDu_Init = 0x80972750; // type:func +DemoDu_Draw_NoDraw = 0x809727F4; // type:func +DemoDu_Draw_01 = 0x80972804; // type:func +DemoDu_Draw = 0x809729AC; // type:func +func_80984BE0 = 0x80973B90; // type:func +DemoIm_InitCollider = 0x80973C18; // type:func +DemoIm_DestroyCollider = 0x80973C64; // type:func +DemoIm_UpdateCollider = 0x80973C90; // type:func +func_80984DB8 = 0x80973CD4; // type:func +func_80984E58 = 0x80973D78; // type:func +func_80984F10 = 0x80973E30; // type:func +func_80984F94 = 0x80973EB8; // type:func +DemoIm_UpdateBgCheckInfo = 0x80973F40; // type:func +DemoIm_UpdateSkelAnime = 0x80973F88; // type:func +DemoIm_IsCutsceneIdle = 0x80973FAC; // type:func +DemoIm_GetCue = 0x80973FCC; // type:func +func_809850E8 = 0x80974018; // type:func +func_80985134 = 0x80974064; // type:func +func_80985180 = 0x809740B0; // type:func +func_80985200 = 0x80974130; // type:func +DemoIm_ChangeAnim = 0x809741B0; // type:func +func_80985310 = 0x80974240; // type:func +func_80985358 = 0x80974288; // type:func +func_809853B4 = 0x809742E4; // type:func +func_80985430 = 0x80974360; // type:func +func_8098544C = 0x80974380; // type:func +func_809854DC = 0x8097441C; // type:func +func_8098557C = 0x809744BC; // type:func +func_809855A8 = 0x809744E8; // type:func +func_80985640 = 0x80974580; // type:func +func_809856AC = 0x809745EC; // type:func +func_809856F8 = 0x80974638; // type:func +func_80985718 = 0x80974658; // type:func +func_80985738 = 0x80974678; // type:func +func_80985770 = 0x809746B4; // type:func +func_809857B0 = 0x809746FC; // type:func +func_809857F0 = 0x80974740; // type:func +func_80985830 = 0x80974788; // type:func +func_80985860 = 0x809747BC; // type:func +func_809858A8 = 0x80974800; // type:func +DemoIm_SpawnLightBall = 0x80974820; // type:func +func_80985948 = 0x809748A0; // type:func +func_809859E0 = 0x8097493C; // type:func +func_80985B34 = 0x80974A90; // type:func +func_80985C10 = 0x80974B74; // type:func +func_80985C40 = 0x80974B94; // type:func +func_80985C94 = 0x80974BDC; // type:func +DemoIm_DrawTranslucent = 0x80974C24; // type:func +func_80985E60 = 0x80974D6C; // type:func +func_80985EAC = 0x80974DB8; // type:func +func_80985EF4 = 0x80974E00; // type:func +func_80985F54 = 0x80974E60; // type:func +func_80985F64 = 0x80974E74; // type:func +func_80985FE8 = 0x80974EF8; // type:func +func_8098604C = 0x80974F5C; // type:func +func_809860C8 = 0x80974FD8; // type:func +func_809860DC = 0x80974FF0; // type:func +func_80986148 = 0x8097505C; // type:func +func_809861C4 = 0x809750D8; // type:func +func_8098629C = 0x8097519C; // type:func +func_809862E0 = 0x809751E0; // type:func +func_809863BC = 0x809752A8; // type:func +func_809863DC = 0x809752C8; // type:func +func_80986430 = 0x80975324; // type:func +func_80986494 = 0x80975390; // type:func +func_809864D4 = 0x809753D8; // type:func +func_8098652C = 0x80975438; // type:func +func_80986570 = 0x8097547C; // type:func +func_809865F8 = 0x80975504; // type:func +func_80986700 = 0x80975614; // type:func +func_80986710 = 0x80975628; // type:func +func_80986794 = 0x809756AC; // type:func +func_8098680C = 0x80975724; // type:func +func_809868E8 = 0x809757EC; // type:func +func_80986908 = 0x8097580C; // type:func +func_80986948 = 0x80975854; // type:func +func_809869B0 = 0x809758C4; // type:func +func_809869F8 = 0x80975908; // type:func +func_80986A5C = 0x8097596C; // type:func +func_80986AD0 = 0x809759E0; // type:func +func_80986B2C = 0x80975A3C; // type:func +func_80986BA0 = 0x80975AB0; // type:func +func_80986BE4 = 0x80975AF4; // type:func +func_80986BF8 = 0x80975B08; // type:func +func_80986C30 = 0x80975B40; // type:func +func_80986CC8 = 0x80975BE4; // type:func +func_80986CFC = 0x80975C18; // type:func +func_80986D40 = 0x80975C60; // type:func +func_80986DC8 = 0x80975CC8; // type:func +func_80986E20 = 0x80975D24; // type:func +func_80986E40 = 0x80975D44; // type:func +func_80986EAC = 0x80975DB8; // type:func +func_80986F08 = 0x80975E1C; // type:func +func_80986F28 = 0x80975E3C; // type:func +func_80986F88 = 0x80975EA4; // type:func +func_80986FA8 = 0x80975EC8; // type:func +func_80987018 = 0x80975F40; // type:func +func_80987064 = 0x80975F88; // type:func +func_809870F0 = 0x80976014; // type:func +func_80987128 = 0x8097604C; // type:func +func_80987174 = 0x80976098; // type:func +func_809871B4 = 0x809760D8; // type:func +func_809871E8 = 0x8097610C; // type:func +func_80987288 = 0x80976198; // type:func +func_809872A8 = 0x809761B8; // type:func +func_809872F0 = 0x80976204; // type:func +func_80987330 = 0x8097624C; // type:func +DemoIm_Update = 0x80976290; // type:func +DemoIm_Init = 0x809762D8; // type:func +DemoIm_Destroy = 0x80976400; // type:func +DemoIm_OverrideLimbDraw = 0x80976420; // type:func +DemoIm_PostLimbDraw = 0x809764D0; // type:func +DemoIm_DrawNothing = 0x8097655C; // type:func +DemoIm_DrawSolid = 0x8097656C; // type:func +DemoIm_Draw = 0x809766B0; // type:func +DemoTreLgt_Init = 0x80977B00; // type:func +DemoTreLgt_Destroy = 0x80977B5C; // type:func +func_80993754 = 0x80977B88; // type:func +func_8099375C = 0x80977B94; // type:func +func_809937B4 = 0x80977BEC; // type:func +func_80993848 = 0x80977C84; // type:func +DemoTreLgt_Update = 0x80977F38; // type:func +DemoTreLgt_OverrideLimbDraw = 0x80977F6C; // type:func +DemoTreLgt_Draw = 0x809780C0; // type:func +EnFw_DoBounce = 0x80978210; // type:func +EnFw_PlayerInRange = 0x809782D8; // type:func +EnFw_GetPosAdjAroundCircle = 0x809783D4; // type:func +EnFw_CheckCollider = 0x809784A8; // type:func +EnFw_SpawnDust = 0x80978568; // type:func +EnFw_Init = 0x809787B0; // type:func +EnFw_Destroy = 0x809788B8; // type:func +EnFw_Bounce = 0x809788E4; // type:func +EnFw_Run = 0x80978950; // type:func +EnFw_TurnToParentInitPos = 0x80978F24; // type:func +EnFw_JumpToParentInitPos = 0x80979018; // type:func +EnFw_Update = 0x809790CC; // type:func +EnFw_OverrideLimbDraw = 0x809791AC; // type:func +EnFw_PostLimbDraw = 0x809791C8; // type:func +EnFw_Draw = 0x80979264; // type:func +EnFw_SpawnEffectDust = 0x809792EC; // type:func +EnFw_UpdateEffects = 0x80979390; // type:func +EnFw_DrawEffects = 0x8097949C; // type:func +BgVbSima_Init = 0x809799C0; // type:func +BgVbSima_Destroy = 0x80979A28; // type:func +BgVbSima_SpawnEmber = 0x80979A5C; // type:func +BgVbSima_Update = 0x80979B28; // type:func +BgVbSima_Draw = 0x80979F88; // type:func +EnVbBall_Init = 0x8097A0D0; // type:func +EnVbBall_Destroy = 0x8097A250; // type:func +EnVbBall_SpawnDebris = 0x8097A28C; // type:func +EnVbBall_SpawnDust = 0x8097A364; // type:func +EnVbBall_UpdateBones = 0x8097A404; // type:func +EnVbBall_Update = 0x8097A6E8; // type:func +EnVbBall_Draw = 0x8097AEB4; // type:func +BgHakaMegane_Init = 0x8097B270; // type:func +BgHakaMegane_Destroy = 0x8097B328; // type:func +func_8087DB24 = 0x8097B35C; // type:func +func_8087DBF0 = 0x8097B42C; // type:func +BgHakaMegane_DoNothing = 0x8097B4A0; // type:func +BgHakaMegane_Update = 0x8097B4B0; // type:func +BgHakaMegane_Draw = 0x8097B4D4; // type:func +BgHakaMeganeBG_Init = 0x8097B670; // type:func +BgHakaMeganeBG_Destroy = 0x8097B80C; // type:func +func_8087DFF8 = 0x8097B840; // type:func +func_8087E040 = 0x8097B888; // type:func +func_8087E10C = 0x8097B954; // type:func +func_8087E1E0 = 0x8097BA28; // type:func +func_8087E258 = 0x8097BAA0; // type:func +func_8087E288 = 0x8097BAD0; // type:func +func_8087E2D8 = 0x8097BB20; // type:func +func_8087E34C = 0x8097BB94; // type:func +BgHakaMeganeBG_Update = 0x8097BBA4; // type:func +BgHakaMeganeBG_Draw = 0x8097BBC8; // type:func +BgHakaShip_Init = 0x8097BD30; // type:func +BgHakaShip_Destroy = 0x8097BE74; // type:func +BgHakaShip_ChildUpdatePosition = 0x8097BEB4; // type:func +BgHakaShip_WaitForSong = 0x8097BF10; // type:func +BgHakaShip_CutsceneStationary = 0x8097BF88; // type:func +BgHakaShip_Move = 0x8097C024; // type:func +BgHakaShip_SetupCrash = 0x8097C1E8; // type:func +BgHakaShip_CrashShake = 0x8097C244; // type:func +BgHakaShip_CrashFall = 0x8097C2D4; // type:func +BgHakaShip_Update = 0x8097C394; // type:func +BgHakaShip_Draw = 0x8097C3D4; // type:func +BgHakaSgami_Init = 0x8097C770; // type:func +BgHakaSgami_Destroy = 0x8097CA18; // type:func +BgHakaSgami_SetupSpin = 0x8097CA78; // type:func +BgHakaSgami_Spin = 0x8097CAF0; // type:func +BgHakaSgami_Update = 0x8097D004; // type:func +BgHakaSgami_Draw = 0x8097D058; // type:func +EnHeishi2_Init = 0x8097D390; // type:func +EnHeishi2_Destroy = 0x8097D610; // type:func +EnHeishi2_DoNothing1 = 0x8097D654; // type:func +EnHeishi_DoNothing2 = 0x8097D664; // type:func +func_80A531E4 = 0x8097D674; // type:func +func_80A53278 = 0x8097D708; // type:func +func_80A5344C = 0x8097D888; // type:func +func_80A53538 = 0x8097D974; // type:func +func_80A535BC = 0x8097D9FC; // type:func +func_80A53638 = 0x8097DA78; // type:func +func_80A5372C = 0x8097DB64; // type:func +func_80A53850 = 0x8097DC88; // type:func +func_80A53908 = 0x8097DD40; // type:func +func_80A5399C = 0x8097DDD4; // type:func +func_80A53AD4 = 0x8097DEF8; // type:func +func_80A53C0C = 0x8097E034; // type:func +func_80A53C90 = 0x8097E0BC; // type:func +func_80A53D0C = 0x8097E138; // type:func +func_80A53DF8 = 0x8097E21C; // type:func +func_80A53F30 = 0x8097E354; // type:func +func_80A54038 = 0x8097E45C; // type:func +func_80A540C0 = 0x8097E4E8; // type:func +func_80A541FC = 0x8097E624; // type:func +func_80A5427C = 0x8097E6A8; // type:func +func_80A54320 = 0x8097E74C; // type:func +func_80A543A0 = 0x8097E7CC; // type:func +func_80A544AC = 0x8097E8D8; // type:func +func_80A5455C = 0x8097E988; // type:func +func_80A546DC = 0x8097EAFC; // type:func +func_80A5475C = 0x8097EB7C; // type:func +func_80A54954 = 0x8097ED74; // type:func +func_80A549E8 = 0x8097EE08; // type:func +EnHeishi2_Update = 0x8097EE98; // type:func +EnHeishi2_OverrideLimbDraw = 0x8097EFE4; // type:func +EnHeishi2_PostLimbDraw = 0x8097F05C; // type:func +EnHeishi2_DrawKingGuard = 0x8097F094; // type:func +EnHeishi2_Draw = 0x8097F108; // type:func +EnEncount2_Init = 0x8097F590; // type:func +EnEncount2_Wait = 0x8097F604; // type:func +EnEncount2_SpawnRocks = 0x8097F85C; // type:func +EnEncount2_Update = 0x8097FE24; // type:func +EnEncount2_Draw = 0x809801F0; // type:func +EnEncount2_SpawnEffect = 0x80980210; // type:func +EnEncount2_UpdateEffects = 0x809802C4; // type:func +EnEncount2_DrawEffects = 0x80980498; // type:func +EnFireRock_Init = 0x809807C0; // type:func +EnFireRock_Destroy = 0x80980BB0; // type:func +EnFireRock_Fall = 0x80980C14; // type:func +EnFireRock_SpawnMoreBrokenPieces = 0x80980F68; // type:func +FireRock_WaitSpawnRocksFromCeiling = 0x809810E8; // type:func +FireRock_WaitOnFloor = 0x809811D8; // type:func +EnFireRock_Update = 0x809812BC; // type:func +EnFireRock_Draw = 0x80981568; // type:func +EnBrob_Init = 0x809818D0; // type:func +EnBrob_Destroy = 0x80981B44; // type:func +EnBrob_SetupIdle = 0x80981B9C; // type:func +EnBrob_SetupMoveUp = 0x80981C04; // type:func +EnBrob_SetupWobble = 0x80981C64; // type:func +EnBrob_SetupStunned = 0x80981CB8; // type:func +EnBrob_SetupMoveDown = 0x80981D4C; // type:func +EnBrob_SetupShock = 0x80981DCC; // type:func +EnBrob_Idle = 0x80981E18; // type:func +EnBrob_MoveUp = 0x80981ED8; // type:func +EnBrob_Wobble = 0x80981FDC; // type:func +EnBrob_Stunned = 0x8098207C; // type:func +EnBrob_MoveDown = 0x80982118; // type:func +EnBrob_Shock = 0x8098221C; // type:func +EnBrob_Update = 0x80982434; // type:func +EnBrob_PostLimbDraw = 0x809826D0; // type:func +EnBrob_Draw = 0x809827A4; // type:func +MirRay_SetupCollider = 0x809829C0; // type:func +MirRay_MakeShieldLight = 0x80982A88; // type:func +MirRay_Init = 0x80982C2C; // type:func +MirRay_Destroy = 0x80982EC4; // type:func +MirRay_Update = 0x80982F3C; // type:func +MirRay_SetIntensity = 0x80983028; // type:func +MirRay_SetupReflectionPolys = 0x809831DC; // type:func +MirRay_RemoveSimilarReflections = 0x809833B8; // type:func +MirRay_ReflectedBeam = 0x809834BC; // type:func +MirRay_Draw = 0x80983A2C; // type:func +MirRay_CheckInFrustum = 0x80983D1C; // type:func +func_808B1AE0 = 0x80984280; // type:func +func_808B1BA0 = 0x80984340; // type:func +func_808B1BEC = 0x8098438C; // type:func +func_808B1C70 = 0x80984418; // type:func +func_808B1CEC = 0x80984494; // type:func +func_808B1D18 = 0x809844C0; // type:func +func_808B1D44 = 0x809844EC; // type:func +BgSpot09Obj_Init = 0x8098452C; // type:func +BgSpot09Obj_Destroy = 0x80984594; // type:func +BgSpot09Obj_Update = 0x809845D4; // type:func +BgSpot09Obj_Draw = 0x809845E4; // type:func +func_808B8910 = 0x80984790; // type:func +func_808B8A5C = 0x80984848; // type:func +func_808B8A98 = 0x80984884; // type:func +func_808B8B08 = 0x809848F4; // type:func +func_808B8B38 = 0x80984928; // type:func +func_808B8BB4 = 0x809849A4; // type:func +func_808B8C90 = 0x80984A88; // type:func +func_808B8CC8 = 0x80984AC4; // type:func +BgSpot18Obj_Init = 0x80984B18; // type:func +BgSpot18Obj_Destroy = 0x80984B74; // type:func +func_808B8DC0 = 0x80984BA8; // type:func +func_808B8DD0 = 0x80984BBC; // type:func +func_808B8DDC = 0x80984BCC; // type:func +func_808B8E20 = 0x80984C10; // type:func +func_808B8E64 = 0x80984C54; // type:func +func_808B8E7C = 0x80984C70; // type:func +func_808B8EE0 = 0x80984CD4; // type:func +func_808B8F08 = 0x80984D00; // type:func +func_808B9030 = 0x80984E2C; // type:func +func_808B9040 = 0x80984E40; // type:func +BgSpot18Obj_Update = 0x80984E60; // type:func +BgSpot18Obj_Draw = 0x80984E94; // type:func +BossVa_SetupAction = 0x80985060; // type:func +BossVa_AttachToBody = 0x8098506C; // type:func +BossVa_BloodDroplets = 0x809852B0; // type:func +BossVa_BloodSplatter = 0x809853B0; // type:func +BossVa_Gore = 0x809854DC; // type:func +BossVa_Spark = 0x8098560C; // type:func +BossVa_Tumor = 0x80985790; // type:func +BossVa_SetSparkEnv = 0x80985914; // type:func +BossVa_SetDeathEnv = 0x80985960; // type:func +BossVa_FindBoomerang = 0x809859E0; // type:func +BossVa_KillBari = 0x80985A20; // type:func +BossVa_Init = 0x80985C0C; // type:func +BossVa_Destroy = 0x8098645C; // type:func +BossVa_SetupIntro = 0x809864AC; // type:func +BossVa_BodyIntro = 0x8098653C; // type:func +BossVa_SetupBodyPhase1 = 0x8098755C; // type:func +BossVa_BodyPhase1 = 0x80987600; // type:func +BossVa_SetupBodyPhase2 = 0x80987898; // type:func +BossVa_BodyPhase2 = 0x809879C4; // type:func +BossVa_SetupBodyPhase3 = 0x80987EC8; // type:func +BossVa_BodyPhase3 = 0x80987F04; // type:func +BossVa_SetupBodyPhase4 = 0x8098856C; // type:func +BossVa_BodyPhase4 = 0x80988620; // type:func +BossVa_SetupBodyDeath = 0x80989128; // type:func +BossVa_BodyDeath = 0x809891C0; // type:func +BossVa_SetupSupportIntro = 0x80989D18; // type:func +BossVa_SupportIntro = 0x80989D90; // type:func +BossVa_SetupSupportAttached = 0x80989EB4; // type:func +BossVa_SupportAttached = 0x80989F38; // type:func +BossVa_SetupSupportCut = 0x8098A160; // type:func +BossVa_SupportCut = 0x8098A228; // type:func +BossVa_SetupStump = 0x8098A6FC; // type:func +BossVa_Stump = 0x8098A780; // type:func +BossVa_SetupZapperIntro = 0x8098A818; // type:func +BossVa_ZapperIntro = 0x8098A8AC; // type:func +BossVa_SetupZapperAttack = 0x8098A96C; // type:func +BossVa_ZapperAttack = 0x8098AA00; // type:func +BossVa_SetupZapperDamaged = 0x8098B434; // type:func +BossVa_ZapperDamaged = 0x8098B53C; // type:func +BossVa_SetupZapperDeath = 0x8098B650; // type:func +BossVa_ZapperDeath = 0x8098B724; // type:func +BossVa_SetupZapperEnraged = 0x8098BC4C; // type:func +BossVa_ZapperEnraged = 0x8098BCD4; // type:func +BossVa_SetupZapperHold = 0x8098C42C; // type:func +BossVa_ZapperHold = 0x8098C4AC; // type:func +BossVa_SetupBariIntro = 0x8098C5B8; // type:func +BossVa_BariIntro = 0x8098C6C8; // type:func +BossVa_SetupBariPhase3Attack = 0x8098CC20; // type:func +BossVa_BariPhase3Attack = 0x8098CCC8; // type:func +BossVa_SetupBariPhase2Attack = 0x8098D0C8; // type:func +BossVa_BariPhase2Attack = 0x8098D170; // type:func +BossVa_SetupBariPhase3Stunned = 0x8098D788; // type:func +BossVa_BariPhase3Stunned = 0x8098D7E4; // type:func +BossVa_SetupBariDeath = 0x8098DA00; // type:func +BossVa_BariDeath = 0x8098DA58; // type:func +BossVa_SetupDoor = 0x8098DA8C; // type:func +BossVa_Door = 0x8098DADC; // type:func +BossVa_Update = 0x8098DB50; // type:func +BossVa_BodyOverrideLimbDraw = 0x8098DD5C; // type:func +BossVa_BodyPostLimbDraw = 0x8098DF00; // type:func +BossVa_SupportOverrideLimbDraw = 0x8098E400; // type:func +BossVa_SupportPostLimbDraw = 0x8098E444; // type:func +BossVa_ZapperOverrideLimbDraw = 0x8098E694; // type:func +BossVa_ZapperPostLimbDraw = 0x8098E870; // type:func +BossVa_BariOverrideLimbDraw = 0x8098ECD0; // type:func +BossVa_BariPostLimbDraw = 0x8098ED60; // type:func +BossVa_Draw = 0x8098EEE8; // type:func +BossVa_UpdateEffects = 0x8098F4DC; // type:func +BossVa_DrawEffects = 0x8098FE7C; // type:func +BossVa_SpawnSpark = 0x80990C20; // type:func +BossVa_SpawnSparkBall = 0x80990F10; // type:func +BossVa_SpawnBloodDroplets = 0x8099109C; // type:func +BossVa_SpawnBloodSplatter = 0x80991268; // type:func +BossVa_SpawnTumor = 0x80991404; // type:func +BossVa_SpawnGore = 0x809915A8; // type:func +BossVa_SpawnZapperCharge = 0x809917C8; // type:func +BossVa_DrawDoor = 0x8099191C; // type:func +BgHakaTubo_Init = 0x8099C250; // type:func +BgHakaTubo_Destroy = 0x8099C34C; // type:func +BgHakaTubo_Idle = 0x8099C3A4; // type:func +BgHakaTubo_DropCollectible = 0x8099C610; // type:func +BgHakaTubo_Update = 0x8099C8D4; // type:func +BgHakaTubo_DrawFlameCircle = 0x8099C908; // type:func +BgHakaTubo_Draw = 0x8099CAAC; // type:func +BgHakaTrap_Init = 0x8099CC70; // type:func +BgHakaTrap_Destroy = 0x8099CF10; // type:func +func_8087FFC0 = 0x8099CF94; // type:func +func_808801B8 = 0x8099D194; // type:func +func_808802D8 = 0x8099D2B8; // type:func +func_80880484 = 0x8099D464; // type:func +func_808805C0 = 0x8099D5A0; // type:func +func_808806BC = 0x8099D69C; // type:func +func_808808F4 = 0x8099D8D4; // type:func +func_808809B0 = 0x8099D994; // type:func +func_808809E4 = 0x8099D9C8; // type:func +func_80880AE8 = 0x8099DAD4; // type:func +func_80880C0C = 0x8099DBF8; // type:func +BgHakaTrap_Update = 0x8099DC6C; // type:func +func_80880D68 = 0x8099DD5C; // type:func +BgHakaTrap_Draw = 0x8099DDF8; // type:func +BgHakaHuta_Init = 0x8099E240; // type:func +BgHakaHuta_Destroy = 0x8099E300; // type:func +BgHakaHuta_SpawnDust = 0x8099E334; // type:func +BgHakaHuta_PlaySfx = 0x8099E4F0; // type:func +BgHakaHuta_SpawnEnemies = 0x8099E57C; // type:func +BgHakaHuta_Open = 0x8099E844; // type:func +BgHakaHuta_SlideOpen = 0x8099E8F8; // type:func +func_8087D720 = 0x8099E9AC; // type:func +BgHakaHuta_DoNothing = 0x8099EB50; // type:func +BgHakaHuta_Update = 0x8099EB60; // type:func +BgHakaHuta_Draw = 0x8099EB84; // type:func +BgHakaZou_Init = 0x8099ECE0; // type:func +BgHakaZou_Destroy = 0x8099EFC8; // type:func +func_808828F4 = 0x8099F018; // type:func +BgHakaZou_Wait = 0x8099F194; // type:func +func_80882BDC = 0x8099F304; // type:func +func_80882CC4 = 0x8099F3EC; // type:func +func_80882E54 = 0x8099F57C; // type:func +func_80883000 = 0x8099F72C; // type:func +func_80883104 = 0x8099F830; // type:func +func_80883144 = 0x8099F870; // type:func +func_80883254 = 0x8099F980; // type:func +func_80883328 = 0x8099FA58; // type:func +func_808834D8 = 0x8099FC08; // type:func +BgHakaZou_DoNothing = 0x8099FC98; // type:func +BgHakaZou_Update = 0x8099FCA8; // type:func +BgHakaZou_Draw = 0x8099FCEC; // type:func +BgSpot17Funen_Init = 0x8099FED0; // type:func +BgSpot17Funen_Destroy = 0x8099FEF8; // type:func +BgSpot17Funen_Update = 0x8099FF08; // type:func +func_808B746C = 0x8099FF2C; // type:func +func_808B7478 = 0x8099FF3C; // type:func +EnSyatekiItm_Init = 0x809A0120; // type:func +EnSyatekiItm_Destroy = 0x809A0284; // type:func +EnSyatekiItm_Idle = 0x809A0294; // type:func +EnSyatekiItm_StartRound = 0x809A03A4; // type:func +EnSyatekiItm_SpawnTargets = 0x809A0520; // type:func +EnSyatekiItm_CheckTargets = 0x809A09A0; // type:func +EnSyatekiItm_CleanupGame = 0x809A0A44; // type:func +EnSyatekiItm_EndGame = 0x809A0ACC; // type:func +EnSyatekiItm_Update = 0x809A0B18; // type:func +EnSyatekiMan_Init = 0x809A0EC0; // type:func +EnSyatekiMan_Destroy = 0x809A0F74; // type:func +EnSyatekiMan_Start = 0x809A0F84; // type:func +EnSyatekiMan_SetupIdle = 0x809A1018; // type:func +EnSyatekiMan_Idle = 0x809A1070; // type:func +EnSyatekiMan_Talk = 0x809A10CC; // type:func +EnSyatekiMan_StopTalk = 0x809A1274; // type:func +EnSyatekiMan_StartGame = 0x809A131C; // type:func +EnSyatekiMan_WaitForGame = 0x809A13DC; // type:func +EnSyatekiMan_EndGame = 0x809A14F8; // type:func +EnSyatekiMan_GivePrize = 0x809A1748; // type:func +EnSyatekiMan_FinishPrize = 0x809A17B8; // type:func +EnSyatekiMan_RestartGame = 0x809A187C; // type:func +EnSyatekiMan_BlinkWait = 0x809A18E4; // type:func +EnSyatekiMan_Blink = 0x809A1918; // type:func +EnSyatekiMan_Update = 0x809A19B8; // type:func +EnSyatekiMan_OverrideLimbDraw = 0x809A1A58; // type:func +EnSyatekiMan_Draw = 0x809A1AE8; // type:func +EnTana_Init = 0x809A1C80; // type:func +EnTana_Destroy = 0x809A1CD0; // type:func +EnTana_Update = 0x809A1CE0; // type:func +EnTana_DrawWoodenShelves = 0x809A1CF0; // type:func +EnTana_DrawStoneShelves = 0x809A1D84; // type:func +EnNb_GetPath = 0x809A1F20; // type:func +EnNb_GetType = 0x809A1F34; // type:func +EnNb_UpdatePath = 0x809A1F44; // type:func +EnNb_SetupCollider = 0x809A2070; // type:func +EnNb_UpdateCollider = 0x809A20BC; // type:func +EnNb_Destroy = 0x809A2100; // type:func +func_80AB0FBC = 0x809A212C; // type:func +func_80AB1040 = 0x809A21B4; // type:func +func_80AB10C4 = 0x809A223C; // type:func +EnNb_UpdateEyes = 0x809A22E0; // type:func +func_80AB1284 = 0x809A2368; // type:func +EnNb_UpdateSkelAnime = 0x809A23B0; // type:func +EnNb_GetCue = 0x809A23D4; // type:func +EnNb_SetStartPosRotFromCue1 = 0x809A23FC; // type:func +func_80AB1390 = 0x809A247C; // type:func +func_80AB13D8 = 0x809A24C8; // type:func +EnNb_SetStartPosRotFromCue2 = 0x809A2514; // type:func +EnNb_SetCurrentAnim = 0x809A2594; // type:func +EnNb_SetChamberAnim = 0x809A2624; // type:func +EnNb_SpawnBlueWarp = 0x809A266C; // type:func +EnNb_GiveMedallion = 0x809A26C8; // type:func +EnNb_ComeUpImpl = 0x809A2744; // type:func +EnNb_SetupChamberCsImpl = 0x809A2764; // type:func +EnNb_SetupChamberWarpImpl = 0x809A2800; // type:func +EnNb_SetupDefaultChamberIdle = 0x809A2850; // type:func +EnNb_SetupArmRaise = 0x809A287C; // type:func +EnNb_SetupRaisedArmTransition = 0x809A2910; // type:func +EnNb_SetupMedallion = 0x809A297C; // type:func +EnNb_SetupChamberCs = 0x809A29C8; // type:func +EnNb_SetupChamberWarp = 0x809A29E8; // type:func +EnNb_ComeUp = 0x809A2A08; // type:func +func_80AB193C = 0x809A2A44; // type:func +EnNb_RaiseArm = 0x809A2A8C; // type:func +func_80AB19BC = 0x809A2AD0; // type:func +func_80AB19FC = 0x809A2B18; // type:func +EnNb_SetupLightArrowOrSealingCs = 0x809A2B4C; // type:func +EnNb_PlaySealingSfx = 0x809A2B90; // type:func +EnNb_InitializeDemo6K = 0x809A2BB0; // type:func +EnNb_SetupHide = 0x809A2C30; // type:func +EnNb_CheckToFade = 0x809A2C84; // type:func +EnNb_SetupLightOrb = 0x809A2DD8; // type:func +EnNb_Hide = 0x809A2E74; // type:func +EnNb_Fade = 0x809A2E94; // type:func +EnNb_CreateLightOrb = 0x809A2EDC; // type:func +EnNb_DrawTransparency = 0x809A2F24; // type:func +EnNb_InitKidnap = 0x809A306C; // type:func +EnNb_PlayCrySFX = 0x809A30C4; // type:func +EnNb_PlayAgonySFX = 0x809A30FC; // type:func +EnNb_SetPosInPortal = 0x809A3134; // type:func +EnNb_SetupCaptureCutsceneState = 0x809A3218; // type:func +EnNb_SetRaisedArmCaptureAnim = 0x809A324C; // type:func +EnNb_SetupLookAroundInKidnap = 0x809A32AC; // type:func +EnNb_SetupKidnap = 0x809A3320; // type:func +EnNb_CheckKidnapCsMode = 0x809A3398; // type:func +func_80AB23A8 = 0x809A3460; // type:func +EnNb_MovingInPortal = 0x809A3498; // type:func +EnNb_SuckedInByPortal = 0x809A34F4; // type:func +EnNb_SetupConfrontation = 0x809A3550; // type:func +EnNb_PlayKnuckleDefeatSFX = 0x809A3594; // type:func +EnNb_PlayKneelingOnGroundSFX = 0x809A35D8; // type:func +EnNb_PlayLookRightSFX = 0x809A363C; // type:func +EnNb_PlayLookLeftSFX = 0x809A3688; // type:func +EnNb_InitDemo6KInConfrontation = 0x809A36E0; // type:func +func_80AB2688 = 0x809A3758; // type:func +func_80AB26C8 = 0x809A3798; // type:func +func_80AB26DC = 0x809A37B0; // type:func +EnNb_SetupKneel = 0x809A3848; // type:func +EnNb_CheckIfKneeling = 0x809A38C4; // type:func +EnNb_SetupLookRight = 0x809A3930; // type:func +EnNb_CheckIfLookingRight = 0x809A39B0; // type:func +EnNb_SetupLookLeft = 0x809A3A1C; // type:func +EnNb_CheckIfLookLeft = 0x809A3A9C; // type:func +EnNb_SetupDemo6KInConfrontation = 0x809A3AFC; // type:func +EnNb_SetupRun = 0x809A3B3C; // type:func +EnNb_SetupConfrontationDestroy = 0x809A3BBC; // type:func +EnNb_CheckConfrontationCsMode = 0x809A3BD4; // type:func +EnNb_CheckConfrontationCsModeWrapper = 0x809A3CBC; // type:func +func_80AB2C18 = 0x809A3CDC; // type:func +EnNb_Kneel = 0x809A3D28; // type:func +EnNb_LookRight = 0x809A3D98; // type:func +EnNb_LookLeft = 0x809A3E08; // type:func +EnNb_Run = 0x809A3E70; // type:func +EnNb_ConfrontationDestroy = 0x809A3EF8; // type:func +func_80AB2E70 = 0x809A3F4C; // type:func +func_80AB2FC0 = 0x809A4068; // type:func +func_80AB2FE4 = 0x809A4090; // type:func +EnNb_SetupCreditsSpawn = 0x809A41CC; // type:func +EnNb_SetAlphaInCredits = 0x809A4214; // type:func +EnNb_SetupCreditsFadeIn = 0x809A42A0; // type:func +EnNb_SetupCreditsSit = 0x809A42D8; // type:func +EnNb_SetupCreditsHeadTurn = 0x809A4324; // type:func +EnNb_CheckIfLookingUp = 0x809A4364; // type:func +EnNb_CheckCreditsCsModeImpl = 0x809A4398; // type:func +EnNb_CheckCreditsCsMode = 0x809A4424; // type:func +EnNb_CreditsFade = 0x809A4444; // type:func +func_80AB3428 = 0x809A4490; // type:func +EnNb_LookUp = 0x809A44D8; // type:func +EnNb_CrawlspaceSpawnCheck = 0x809A451C; // type:func +func_80AB359C = 0x809A4618; // type:func +EnNb_SetNoticeSFX = 0x809A46DC; // type:func +EnNb_GetNoticedStatus = 0x809A4704; // type:func +func_80AB36DC = 0x809A475C; // type:func +EnNb_CheckNoticed = 0x809A480C; // type:func +EnNb_SetupIdleCrawlspace = 0x809A4864; // type:func +func_80AB3838 = 0x809A48BC; // type:func +EnNb_SetupPathMovement = 0x809A4938; // type:func +EnNb_SetTextIdAsChild = 0x809A49A0; // type:func +func_80AB3A7C = 0x809A4B0C; // type:func +func_80AB3B04 = 0x809A4B98; // type:func +func_80AB3B7C = 0x809A4C20; // type:func +EnNb_WaitForNotice = 0x809A4C6C; // type:func +EnNb_StandUpAfterNotice = 0x809A4CC8; // type:func +EnNb_BlockCrawlspace = 0x809A4D28; // type:func +EnNb_InitCrawlspaceDialogue = 0x809A4D90; // type:func +EnNb_FollowPath = 0x809A4DF8; // type:func +func_80AB3DB0 = 0x809A4E78; // type:func +func_80AB3E10 = 0x809A4EE0; // type:func +EnNb_Update = 0x809A4F48; // type:func +EnNb_Init = 0x809A4F90; // type:func +EnNb_OverrideLimbDraw = 0x809A50AC; // type:func +EnNb_PostLimbDraw = 0x809A513C; // type:func +EnNb_DrawNothing = 0x809A51C8; // type:func +EnNb_DrawDefault = 0x809A51D8; // type:func +EnNb_Draw = 0x809A531C; // type:func +BossMo_InitRand = 0x809A64F0; // type:func +BossMo_RandZeroOne = 0x809A6510; // type:func +BossMo_NearLand = 0x809A6638; // type:func +BossMo_SpawnRipple = 0x809A6730; // type:func +BossMo_SpawnDroplet = 0x809A6850; // type:func +BossMo_SpawnStillDroplet = 0x809A692C; // type:func +BossMo_SpawnBubble = 0x809A69F0; // type:func +BossMo_Init = 0x809A6AA4; // type:func +BossMo_Destroy = 0x809A6E8C; // type:func +BossMo_SetupTentacle = 0x809A6EDC; // type:func +BossMo_Tentacle = 0x809A6F30; // type:func +BossMo_TentCollisionCheck = 0x809A9CEC; // type:func +BossMo_IntroCs = 0x809A9F98; // type:func +BossMo_DeathCs = 0x809AB0B0; // type:func +BossMo_CoreCollisionCheck = 0x809ABC6C; // type:func +BossMo_Core = 0x809AC074; // type:func +BossMo_UpdateCore = 0x809AD6D8; // type:func +BossMo_UpdateTent = 0x809AD900; // type:func +BossMo_UpdateTentColliders = 0x809AE138; // type:func +BossMo_DrawTentacle = 0x809AE1E4; // type:func +BossMo_DrawWater = 0x809AE910; // type:func +BossMo_DrawCore = 0x809AEB18; // type:func +BossMo_DrawTent = 0x809AF370; // type:func +BossMo_UpdateEffects = 0x809AF5A4; // type:func +BossMo_DrawEffects = 0x809AFCB4; // type:func +EnSb_Init = 0x809B65A0; // type:func +EnSb_Destroy = 0x809B6688; // type:func +EnSb_SpawnBubbles = 0x809B66C8; // type:func +EnSb_SetupWaitClosed = 0x809B6778; // type:func +EnSb_SetupOpen = 0x809B67F0; // type:func +EnSb_SetupWaitOpen = 0x809B686C; // type:func +EnSb_SetupLunge = 0x809B68E0; // type:func +EnSb_SetupBounce = 0x809B6988; // type:func +EnSb_SetupCooldown = 0x809B6A00; // type:func +EnSb_WaitClosed = 0x809B6B04; // type:func +EnSb_Open = 0x809B6B84; // type:func +EnSb_WaitOpen = 0x809B6C4C; // type:func +EnSb_TurnAround = 0x809B6D00; // type:func +EnSb_Lunge = 0x809B6DEC; // type:func +EnSb_Bounce = 0x809B6E94; // type:func +EnSb_Cooldown = 0x809B6FC8; // type:func +EnSb_IsVulnerable = 0x809B7030; // type:func +EnSb_UpdateDamage = 0x809B7178; // type:func +EnSb_Update = 0x809B7454; // type:func +EnSb_PostLimbDraw = 0x809B75D4; // type:func +EnSb_Draw = 0x809B7624; // type:func +EnBigokuta_Init = 0x809B79E0; // type:func +EnBigokuta_Destroy = 0x809B7B4C; // type:func +func_809BCE3C = 0x809B7BC0; // type:func +func_809BCEBC = 0x809B7C3C; // type:func +func_809BCF68 = 0x809B7CEC; // type:func +func_809BD1C8 = 0x809B7F54; // type:func +func_809BD2E4 = 0x809B8070; // type:func +func_809BD318 = 0x809B80A4; // type:func +func_809BD370 = 0x809B80FC; // type:func +func_809BD3AC = 0x809B8138; // type:func +func_809BD3E0 = 0x809B8170; // type:func +func_809BD3F8 = 0x809B818C; // type:func +func_809BD47C = 0x809B8210; // type:func +func_809BD4A4 = 0x809B823C; // type:func +func_809BD524 = 0x809B82BC; // type:func +func_809BD5E0 = 0x809B8378; // type:func +func_809BD658 = 0x809B83F0; // type:func +func_809BD6B8 = 0x809B8450; // type:func +func_809BD768 = 0x809B8500; // type:func +func_809BD7F0 = 0x809B8588; // type:func +func_809BD84C = 0x809B85E8; // type:func +func_809BD8DC = 0x809B8678; // type:func +func_809BDAE8 = 0x809B8884; // type:func +func_809BDB90 = 0x809B892C; // type:func +func_809BDC08 = 0x809B89A4; // type:func +func_809BDF34 = 0x809B8CD4; // type:func +func_809BDFC8 = 0x809B8D68; // type:func +func_809BE058 = 0x809B8DF8; // type:func +func_809BE180 = 0x809B8F20; // type:func +func_809BE26C = 0x809B900C; // type:func +func_809BE3E4 = 0x809B9184; // type:func +func_809BE4A4 = 0x809B9244; // type:func +func_809BE518 = 0x809B92B8; // type:func +func_809BE568 = 0x809B9308; // type:func +func_809BE798 = 0x809B9538; // type:func +EnBigokuta_UpdateDamage = 0x809B967C; // type:func +EnBigokuta_Update = 0x809B976C; // type:func +EnBigokuta_OverrideLimbDraw = 0x809B9964; // type:func +EnBigokuta_Draw = 0x809B9DE4; // type:func +EnKarebaba_Init = 0x809BA4F0; // type:func +EnKarebaba_Destroy = 0x809BA624; // type:func +EnKarebaba_ResetCollider = 0x809BA664; // type:func +EnKarebaba_SetupGrow = 0x809BA6A0; // type:func +EnKarebaba_SetupIdle = 0x809BA6F0; // type:func +EnKarebaba_SetupAwaken = 0x809BA744; // type:func +EnKarebaba_SetupUpright = 0x809BA7C0; // type:func +EnKarebaba_SetupSpin = 0x809BA860; // type:func +EnKarebaba_SetupDying = 0x809BA87C; // type:func +EnKarebaba_SetupDeadItemDrop = 0x809BA8F0; // type:func +EnKarebaba_SetupRetract = 0x809BA990; // type:func +EnKarebaba_SetupDead = 0x809BAA10; // type:func +EnKarebaba_SetupRegrow = 0x809BAA9C; // type:func +EnKarebaba_Grow = 0x809BAAF0; // type:func +EnKarebaba_Idle = 0x809BAB88; // type:func +EnKarebaba_Awaken = 0x809BABE8; // type:func +EnKarebaba_Upright = 0x809BACBC; // type:func +EnKarebaba_Spin = 0x809BADB0; // type:func +EnKarebaba_Dying = 0x809BAF44; // type:func +EnKarebaba_DeadItemDrop = 0x809BB1FC; // type:func +EnKarebaba_Retract = 0x809BB264; // type:func +EnKarebaba_Dead = 0x809BB338; // type:func +EnKarebaba_Regrow = 0x809BB390; // type:func +EnKarebaba_Update = 0x809BB45C; // type:func +EnKarebaba_DrawBaseShadow = 0x809BB610; // type:func +EnKarebaba_Draw = 0x809BB6FC; // type:func +BgBdanObjects_GetProperty = 0x809BBDE0; // type:func +BgBdanObjects_SetProperty = 0x809BBE34; // type:func +BgBdanObjects_Init = 0x809BBE88; // type:func +BgBdanObjects_Destroy = 0x809BC10C; // type:func +BgBdanObjects_OctoPlatform_WaitForRutoToStartCutscene = 0x809BC15C; // type:func +BgBdanObjects_OctoPlatform_RaiseToUpperPosition = 0x809BC2B0; // type:func +BgBdanObjects_OctoPlatform_WaitForRutoToAdvanceCutscene = 0x809BC3AC; // type:func +BgBdanObjects_OctoPlatform_DescendWithBigOcto = 0x809BC4E8; // type:func +BgBdanObjects_OctoPlatform_PauseBeforeDescending = 0x809BC66C; // type:func +BgBdanObjects_OctoPlatform_WaitForBigOctoToStartBattle = 0x809BC6D0; // type:func +BgBdanObjects_OctoPlatform_BattleInProgress = 0x809BC72C; // type:func +BgBdanObjects_SinkToFloorHeight = 0x809BC804; // type:func +BgBdanObjects_WaitForPlayerInRange = 0x809BC884; // type:func +BgBdanObjects_RaiseToUpperPosition = 0x809BC8F0; // type:func +BgBdanObjects_DoNothing = 0x809BC988; // type:func +BgBdanObjects_ElevatorOscillate = 0x809BC998; // type:func +BgBdanObjects_WaitForSwitch = 0x809BCACC; // type:func +BgBdanObjects_ChangeWaterBoxLevel = 0x809BCB18; // type:func +BgBdanObjects_WaitForTimerExpired = 0x809BCBE0; // type:func +BgBdanObjects_WaitForPlayerOnTop = 0x809BCC34; // type:func +BgBdanObjects_FallToLowerPos = 0x809BCCB8; // type:func +BgBdanObjects_Update = 0x809BCD74; // type:func +BgBdanObjects_Draw = 0x809BCDB0; // type:func +DemoSa_Destroy = 0x809BD0B0; // type:func +func_8098E480 = 0x809BD0D4; // type:func +DemoSa_SetEyeIndex = 0x809BD15C; // type:func +DemoSa_SetMouthIndex = 0x809BD174; // type:func +func_8098E5C8 = 0x809BD18C; // type:func +DemoSa_UpdateSkelAnime = 0x809BD1D4; // type:func +DemoSa_GetCue = 0x809BD1F8; // type:func +func_8098E654 = 0x809BD220; // type:func +func_8098E6A0 = 0x809BD26C; // type:func +func_8098E6EC = 0x809BD2B8; // type:func +func_8098E76C = 0x809BD338; // type:func +func_8098E7FC = 0x809BD3C8; // type:func +func_8098E86C = 0x809BD438; // type:func +func_8098E8C8 = 0x809BD494; // type:func +func_8098E944 = 0x809BD510; // type:func +func_8098E960 = 0x809BD530; // type:func +func_8098E9EC = 0x809BD5C8; // type:func +func_8098EA3C = 0x809BD618; // type:func +func_8098EA68 = 0x809BD644; // type:func +func_8098EB00 = 0x809BD6DC; // type:func +func_8098EB6C = 0x809BD748; // type:func +func_8098EBB8 = 0x809BD794; // type:func +func_8098EBD8 = 0x809BD7B4; // type:func +func_8098EBF8 = 0x809BD7D4; // type:func +func_8098EC28 = 0x809BD808; // type:func +func_8098EC60 = 0x809BD848; // type:func +func_8098EC94 = 0x809BD880; // type:func +func_8098ECCC = 0x809BD8C0; // type:func +func_8098ECF4 = 0x809BD8EC; // type:func +func_8098EDB0 = 0x809BD9A8; // type:func +func_8098EE08 = 0x809BDA00; // type:func +func_8098EE28 = 0x809BDA20; // type:func +func_8098EEA8 = 0x809BDAA0; // type:func +func_8098EEFC = 0x809BDAF4; // type:func +func_8098F050 = 0x809BDC48; // type:func +func_8098F0E8 = 0x809BDCE4; // type:func +func_8098F118 = 0x809BDD04; // type:func +func_8098F16C = 0x809BDD4C; // type:func +DemoSa_DrawXlu = 0x809BDD94; // type:func +func_8098F390 = 0x809BDF34; // type:func +func_8098F3F0 = 0x809BDF94; // type:func +func_8098F420 = 0x809BDFC8; // type:func +func_8098F480 = 0x809BE024; // type:func +func_8098F50C = 0x809BE0B0; // type:func +func_8098F544 = 0x809BE0E8; // type:func +func_8098F590 = 0x809BE134; // type:func +func_8098F5D0 = 0x809BE174; // type:func +func_8098F610 = 0x809BE1B4; // type:func +func_8098F654 = 0x809BE1FC; // type:func +func_8098F714 = 0x809BE2A8; // type:func +func_8098F734 = 0x809BE2C8; // type:func +func_8098F77C = 0x809BE314; // type:func +func_8098F7BC = 0x809BE35C; // type:func +func_8098F7FC = 0x809BE3A4; // type:func +func_8098F83C = 0x809BE3E8; // type:func +func_8098F8F8 = 0x809BE4A4; // type:func +func_8098F984 = 0x809BE530; // type:func +func_8098F998 = 0x809BE548; // type:func +func_8098FA2C = 0x809BE5DC; // type:func +func_8098FA84 = 0x809BE634; // type:func +func_8098FAE0 = 0x809BE690; // type:func +func_8098FB34 = 0x809BE6E4; // type:func +func_8098FB68 = 0x809BE718; // type:func +func_8098FC44 = 0x809BE7E0; // type:func +func_8098FC64 = 0x809BE800; // type:func +func_8098FC9C = 0x809BE83C; // type:func +func_8098FCD4 = 0x809BE87C; // type:func +func_8098FD0C = 0x809BE8BC; // type:func +DemoSa_Update = 0x809BE908; // type:func +DemoSa_Init = 0x809BE950; // type:func +DemoSa_OverrideLimbDraw = 0x809BEA18; // type:func +DemoSa_DrawNothing = 0x809BEA50; // type:func +DemoSa_DrawOpa = 0x809BEA60; // type:func +DemoSa_Draw = 0x809BEBF4; // type:func +DemoGo_GetCueChannel = 0x809BFBD0; // type:func +func_8097C8A8 = 0x809BFC0C; // type:func +DemoGo_Destroy = 0x809BFC78; // type:func +func_8097C930 = 0x809BFC9C; // type:func +func_8097C9B8 = 0x809BFD24; // type:func +func_8097C9DC = 0x809BFD4C; // type:func +func_8097CA30 = 0x809BFDA4; // type:func +func_8097CA78 = 0x809BFDEC; // type:func +func_8097CB0C = 0x809BFE84; // type:func +func_8097CC08 = 0x809BFF84; // type:func +func_8097CCC0 = 0x809C003C; // type:func +func_8097CCE0 = 0x809C005C; // type:func +DemoGo_UpdateSkelAnime = 0x809C0114; // type:func +func_8097CDB0 = 0x809C0138; // type:func +func_8097CE10 = 0x809C01A4; // type:func +func_8097CE20 = 0x809C01B8; // type:func +func_8097CE78 = 0x809C0214; // type:func +func_8097CEEC = 0x809C028C; // type:func +func_8097CF20 = 0x809C02C4; // type:func +func_8097CF9C = 0x809C0340; // type:func +func_8097CFDC = 0x809C0380; // type:func +func_8097CFFC = 0x809C03A0; // type:func +func_8097D01C = 0x809C03C0; // type:func +func_8097D058 = 0x809C0404; // type:func +func_8097D088 = 0x809C043C; // type:func +func_8097D0D0 = 0x809C048C; // type:func +func_8097D130 = 0x809C04F4; // type:func +DemoGo_Update = 0x809C0554; // type:func +DemoGo_Init = 0x809C059C; // type:func +func_8097D290 = 0x809C0648; // type:func +func_8097D29C = 0x809C0658; // type:func +DemoGo_Draw = 0x809C076C; // type:func +EnIn_GetTextIdChild = 0x809C0930; // type:func +EnIn_GetTextIdAdult = 0x809C0990; // type:func +EnIn_GetTextId = 0x809C0AE8; // type:func +EnIn_UpdateTalkStateOnClosing = 0x809C0B4C; // type:func +EnIn_UpdateTalkStateOnChoice = 0x809C0BC0; // type:func +EnIn_UpdateTalkStateOnEvent = 0x809C0E10; // type:func +EnIn_UpdateTalkState = 0x809C0E7C; // type:func +func_80A795C8 = 0x809C0F44; // type:func +func_80A79690 = 0x809C100C; // type:func +EnIn_ChangeAnim = 0x809C1068; // type:func +func_80A7975C = 0x809C10D8; // type:func +func_80A79830 = 0x809C11AC; // type:func +EnIn_UpdateEyes = 0x809C13A8; // type:func +func_80A79AB4 = 0x809C1430; // type:func +func_80A79BAC = 0x809C1528; // type:func +func_80A79C78 = 0x809C15F4; // type:func +EnIn_Init = 0x809C17E8; // type:func +EnIn_Destroy = 0x809C18F4; // type:func +EnIn_WaitForObject = 0x809C1938; // type:func +func_80A7A304 = 0x809C1C90; // type:func +func_80A7A4BC = 0x809C1E48; // type:func +func_80A7A4C8 = 0x809C1E58; // type:func +func_80A7A568 = 0x809C1EFC; // type:func +func_80A7A770 = 0x809C2104; // type:func +func_80A7A848 = 0x809C21DC; // type:func +func_80A7A940 = 0x809C22D4; // type:func +func_80A7AA40 = 0x809C23D4; // type:func +func_80A7ABD4 = 0x809C2568; // type:func +func_80A7AE84 = 0x809C281C; // type:func +func_80A7AEF0 = 0x809C2888; // type:func +func_80A7B018 = 0x809C29B4; // type:func +func_80A7B024 = 0x809C29C4; // type:func +EnIn_Update = 0x809C2AB0; // type:func +EnIn_OverrideLimbDraw = 0x809C2CC4; // type:func +EnIn_PostLimbDraw = 0x809C2F18; // type:func +EnIn_Draw = 0x809C3028; // type:func +EnTr_SetupAction = 0x809C36D0; // type:func +EnTr_Init = 0x809C36DC; // type:func +EnTr_Destroy = 0x809C382C; // type:func +EnTr_CrySpellcast = 0x809C383C; // type:func +EnTr_DoNothing = 0x809C38EC; // type:func +EnTr_ChooseAction2 = 0x809C38FC; // type:func +EnTr_FlyKidnapCutscene = 0x809C3AAC; // type:func +func_80B23254 = 0x809C3C28; // type:func +EnTr_ShrinkVanish = 0x809C3EA8; // type:func +EnTr_Reappear = 0x809C4064; // type:func +EnTr_WaitToReappear = 0x809C41FC; // type:func +EnTr_TakeOff = 0x809C42BC; // type:func +EnTr_TurnLookOverShoulder = 0x809C4384; // type:func +EnTr_ChooseAction1 = 0x809C4464; // type:func +EnTr_Update = 0x809C4598; // type:func +EnTr_OverrideLimbDraw = 0x809C4750; // type:func +EnTr_Draw = 0x809C4880; // type:func +func_80B23FDC = 0x809C498C; // type:func +func_80B24038 = 0x809C49EC; // type:func +EnTr_SetRotFromCue = 0x809C4BE8; // type:func +EnTr_SetStartPosRotFromCue = 0x809C4C70; // type:func +func_808B4C30 = 0x809C4FD0; // type:func +func_808B4C4C = 0x809C4FF0; // type:func +func_808B4D04 = 0x809C50A4; // type:func +func_808B4D9C = 0x809C5138; // type:func +func_808B4E58 = 0x809C51E8; // type:func +BgSpot16Bombstone_Init = 0x809C53E4; // type:func +BgSpot16Bombstone_Destroy = 0x809C5498; // type:func +BgSpot16Bombstone_SpawnDust = 0x809C54E4; // type:func +func_808B5240 = 0x809C5580; // type:func +BgSpot16Bombstone_SpawnFragments = 0x809C56E8; // type:func +func_808B561C = 0x809C5960; // type:func +func_808B56BC = 0x809C5A00; // type:func +func_808B57E0 = 0x809C5AFC; // type:func +func_808B5934 = 0x809C5C54; // type:func +func_808B5950 = 0x809C5C74; // type:func +func_808B5A78 = 0x809C5D60; // type:func +func_808B5A94 = 0x809C5D80; // type:func +func_808B5AF0 = 0x809C5DE4; // type:func +func_808B5B04 = 0x809C5DFC; // type:func +func_808B5B58 = 0x809C5E54; // type:func +func_808B5B6C = 0x809C5E6C; // type:func +BgSpot16Bombstone_Update = 0x809C5F68; // type:func +BgSpot16Bombstone_Draw = 0x809C5F9C; // type:func +BgHidanKowarerukabe_InitDynaPoly = 0x809C6510; // type:func +BgHidanKowarerukabe_InitColliderSphere = 0x809C65AC; // type:func +BgHidanKowarerukabe_OffsetActorYPos = 0x809C6640; // type:func +BgHidanKowarerukabe_Init = 0x809C666C; // type:func +BgHidanKowarerukabe_Destroy = 0x809C671C; // type:func +BgHidanKowarerukabe_SpawnDust = 0x809C6764; // type:func +BgHidanKowarerukabe_FloorBreak = 0x809C6888; // type:func +func_8088A67C = 0x809C6B54; // type:func +BgHidanKowarerukabe_LargeWallBreak = 0x809C6DEC; // type:func +BgHidanKowarerukabe_Break = 0x809C7078; // type:func +BgHidanKowarerukabe_Update = 0x809C7108; // type:func +BgHidanKowarerukabe_Draw = 0x809C71D8; // type:func +BgBombwall_InitDynapoly = 0x809C73E0; // type:func +BgBombwall_RotateVec = 0x809C7438; // type:func +BgBombwall_Init = 0x809C748C; // type:func +BgBombwall_DestroyCollision = 0x809C769C; // type:func +BgBombwall_Destroy = 0x809C7718; // type:func +func_8086EB5C = 0x809C7738; // type:func +func_8086ED50 = 0x809C792C; // type:func +func_8086ED70 = 0x809C7950; // type:func +func_8086EDFC = 0x809C79E0; // type:func +func_8086EE40 = 0x809C7A24; // type:func +func_8086EE94 = 0x809C7A78; // type:func +BgBombwall_Update = 0x809C7AA8; // type:func +BgBombwall_Draw = 0x809C7AD4; // type:func +func_80AF2550 = 0x809C7CA0; // type:func +func_80AF259C = 0x809C7CEC; // type:func +EnRu2_Destroy = 0x809C7D30; // type:func +func_80AF2608 = 0x809C7D5C; // type:func +func_80AF2690 = 0x809C7DE4; // type:func +func_80AF26A0 = 0x809C7DF8; // type:func +func_80AF2744 = 0x809C7E08; // type:func +EnRu2_UpdateSkelAnime = 0x809C7E50; // type:func +EnRu2_GetCue = 0x809C7E74; // type:func +func_80AF27D0 = 0x809C7E9C; // type:func +func_80AF281C = 0x809C7EE8; // type:func +func_80AF2868 = 0x809C7F34; // type:func +func_80AF28E8 = 0x809C7FB4; // type:func +func_80AF2978 = 0x809C8044; // type:func +func_80AF2994 = 0x809C8064; // type:func +func_80AF29DC = 0x809C80AC; // type:func +func_80AF2A38 = 0x809C8108; // type:func +func_80AF2AB4 = 0x809C8184; // type:func +func_80AF2B44 = 0x809C8220; // type:func +func_80AF2B94 = 0x809C8270; // type:func +func_80AF2BC0 = 0x809C829C; // type:func +func_80AF2C54 = 0x809C8330; // type:func +func_80AF2C68 = 0x809C8344; // type:func +func_80AF2CB4 = 0x809C8390; // type:func +func_80AF2CD4 = 0x809C83B0; // type:func +func_80AF2CF4 = 0x809C83D0; // type:func +func_80AF2D2C = 0x809C840C; // type:func +func_80AF2D6C = 0x809C8454; // type:func +func_80AF2DAC = 0x809C8498; // type:func +func_80AF2DEC = 0x809C84E0; // type:func +func_80AF2E1C = 0x809C8514; // type:func +func_80AF2E64 = 0x809C8558; // type:func +func_80AF2E84 = 0x809C8578; // type:func +func_80AF2F04 = 0x809C85F8; // type:func +func_80AF2F58 = 0x809C864C; // type:func +func_80AF30AC = 0x809C87A0; // type:func +func_80AF3144 = 0x809C883C; // type:func +func_80AF3174 = 0x809C885C; // type:func +func_80AF31C8 = 0x809C88A4; // type:func +func_80AF321C = 0x809C88EC; // type:func +func_80AF3394 = 0x809C8A34; // type:func +func_80AF33E0 = 0x809C8A7C; // type:func +func_80AF346C = 0x809C8B08; // type:func +func_80AF34A4 = 0x809C8B40; // type:func +func_80AF34F0 = 0x809C8B8C; // type:func +func_80AF3530 = 0x809C8BCC; // type:func +func_80AF3564 = 0x809C8C00; // type:func +func_80AF3604 = 0x809C8C8C; // type:func +func_80AF3624 = 0x809C8CAC; // type:func +func_80AF366C = 0x809C8CF8; // type:func +func_80AF36AC = 0x809C8D40; // type:func +func_80AF36EC = 0x809C8D84; // type:func +func_80AF3718 = 0x809C8DB4; // type:func +func_80AF3744 = 0x809C8DE4; // type:func +func_80AF37AC = 0x809C8E4C; // type:func +func_80AF37CC = 0x809C8E6C; // type:func +func_80AF383C = 0x809C8ED8; // type:func +func_80AF3878 = 0x809C8F14; // type:func +func_80AF38D0 = 0x809C8F74; // type:func +func_80AF390C = 0x809C8FB0; // type:func +func_80AF39DC = 0x809C9080; // type:func +func_80AF3ADC = 0x809C916C; // type:func +func_80AF3B74 = 0x809C9204; // type:func +func_80AF3BC8 = 0x809C9258; // type:func +func_80AF3C04 = 0x809C929C; // type:func +func_80AF3C64 = 0x809C9304; // type:func +func_80AF3CB8 = 0x809C9360; // type:func +func_80AF3D0C = 0x809C93BC; // type:func +func_80AF3D60 = 0x809C9418; // type:func +EnRu2_Update = 0x809C947C; // type:func +EnRu2_Init = 0x809C94C4; // type:func +func_80AF3F14 = 0x809C95BC; // type:func +func_80AF3F20 = 0x809C95CC; // type:func +EnRu2_Draw = 0x809C9700; // type:func +ObjDekujr_Init = 0x809CAA20; // type:func +ObjDekujr_Destroy = 0x809CAB2C; // type:func +ObjDekujr_GetCueStartPos = 0x809CAB3C; // type:func +ObjDekujr_GetCueEndPos = 0x809CAB80; // type:func +ObjDekujr_ComeUp = 0x809CABC4; // type:func +ObjDekujr_Update = 0x809CAD74; // type:func +ObjDekujr_Draw = 0x809CAE64; // type:func +BgMizuUzu_Init = 0x809CB060; // type:func +BgMizuUzu_Destroy = 0x809CB0DC; // type:func +func_8089F788 = 0x809CB110; // type:func +BgMizuUzu_Update = 0x809CB188; // type:func +BgMizuUzu_Draw = 0x809CB1AC; // type:func +BgSpot06Objects_Init = 0x809CB230; // type:func +BgSpot06Objects_Destroy = 0x809CB5FC; // type:func +BgSpot06Objects_GateSpawnBubbles = 0x809CB664; // type:func +BgSpot06Objects_GateWaitForSwitch = 0x809CB75C; // type:func +BgSpot06Objects_GateWaitToOpen = 0x809CB7F0; // type:func +BgSpot06Objects_GateOpen = 0x809CB824; // type:func +BgSpot06Objects_DoNothing = 0x809CB8B0; // type:func +BgSpot06Objects_LockSpawnWaterRipples = 0x809CB8C0; // type:func +BgSpot06Objects_LockSpawnBubbles = 0x809CB924; // type:func +BgSpot06Objects_LockWait = 0x809CB9B8; // type:func +BgSpot06Objects_LockPullOutward = 0x809CBBDC; // type:func +BgSpot06Objects_LockSwimToSurface = 0x809CBC94; // type:func +BgSpot06Objects_LockFloat = 0x809CBF0C; // type:func +BgSpot06Objects_Update = 0x809CBF8C; // type:func +BgSpot06Objects_DrawLakeHyliaWater = 0x809CBFEC; // type:func +BgSpot06Objects_Draw = 0x809CC1D8; // type:func +BgSpot06Objects_WaterPlaneCutsceneWait = 0x809CC29C; // type:func +BgSpot06Objects_WaterPlaneCutsceneRise = 0x809CC2C8; // type:func +BgIceObjects_Init = 0x809CC640; // type:func +BgIceObjects_Destroy = 0x809CC6CC; // type:func +BgIceObjects_SetNextTarget = 0x809CC700; // type:func +BgIceObjects_CheckPits = 0x809CCB80; // type:func +BgIceObjects_Idle = 0x809CCD08; // type:func +BgIceObjects_Slide = 0x809CCE0C; // type:func +BgIceObjects_Reset = 0x809CD19C; // type:func +BgIceObjects_Stuck = 0x809CD238; // type:func +BgIceObjects_Update = 0x809CD274; // type:func +BgIceObjects_Draw = 0x809CD298; // type:func +BgHakaWater_Init = 0x809CD580; // type:func +BgHakaWater_Destroy = 0x809CD60C; // type:func +BgHakaWater_LowerWater = 0x809CD61C; // type:func +BgHakaWater_Wait = 0x809CD764; // type:func +BgHakaWater_ChangeWaterLevel = 0x809CD820; // type:func +BgHakaWater_Update = 0x809CD928; // type:func +BgHakaWater_Draw = 0x809CD94C; // type:func +EnMa2_GetTextId = 0x809CDD60; // type:func +EnMa2_UpdateTalkState = 0x809CDDF8; // type:func +func_80AA1AE4 = 0x809CDEA8; // type:func +func_80AA1B58 = 0x809CDF1C; // type:func +func_80AA1C68 = 0x809CE02C; // type:func +EnMa2_UpdateEyes = 0x809CE084; // type:func +EnMa2_ChangeAnim = 0x809CE110; // type:func +func_80AA1DB4 = 0x809CE180; // type:func +EnMa2_Init = 0x809CE20C; // type:func +EnMa2_Destroy = 0x809CE3B0; // type:func +func_80AA2018 = 0x809CE3F0; // type:func +func_80AA204C = 0x809CE424; // type:func +func_80AA20E4 = 0x809CE4C0; // type:func +func_80AA21C8 = 0x809CE5AC; // type:func +EnMa2_Update = 0x809CE64C; // type:func +EnMa2_OverrideLimbDraw = 0x809CE73C; // type:func +EnMa2_PostLimbDraw = 0x809CE97C; // type:func +EnMa2_Draw = 0x809CEA30; // type:func +EnBomChu_Init = 0x809CEDC0; // type:func +EnBomChu_Destroy = 0x809CEF60; // type:func +EnBomChu_Explode = 0x809CEFB0; // type:func +EnBomChu_CrossProduct = 0x809CF0D0; // type:func +EnBomChu_UpdateFloorPoly = 0x809CF144; // type:func +EnBomChu_WaitForRelease = 0x809CF378; // type:func +EnBomChu_Move = 0x809CF4E8; // type:func +EnBomChu_WaitForKill = 0x809CFA00; // type:func +EnBomChu_ModelToWorld = 0x809CFA40; // type:func +EnBomChu_SpawnRipples = 0x809CFAF0; // type:func +EnBomChu_Update = 0x809CFB7C; // type:func +EnBomChu_Draw = 0x809CFF40; // type:func +EnHorseGameCheck_InitIngoRace = 0x809D0460; // type:func +EnHorseGameCheck_DestroyIngoRace = 0x809D051C; // type:func +EnHorseGameCheck_FinishIngoRace = 0x809D0530; // type:func +EnHorseGameCheck_UpdateIngoRace = 0x809D067C; // type:func +EnHorseGameCheck_InitGerudoArchery = 0x809D0AF4; // type:func +EnHorseGameCheck_DestroyGerudoArchery = 0x809D0B14; // type:func +EnHorseGameCheck_UpdateGerudoArchery = 0x809D0B28; // type:func +EnHorseGameCheck_InitType3 = 0x809D0B70; // type:func +EnHorseGameCheck_DestroyType3 = 0x809D0B8C; // type:func +EnHorseGameCheck_UpdateType3 = 0x809D0BA0; // type:func +EnHorseGameCheck_InitMalonRace = 0x809D0BB4; // type:func +EnHorseGameCheck_DestroyMalonRace = 0x809D0C04; // type:func +EnHorseGameCheck_FinishMalonRace = 0x809D0C18; // type:func +EnHorseGameCheck_UpdateMalonRace = 0x809D0D0C; // type:func +EnHorseGameCheck_Init = 0x809D1224; // type:func +EnHorseGameCheck_Destroy = 0x809D12A8; // type:func +EnHorseGameCheck_Update = 0x809D12E4; // type:func +EnHorseGameCheck_Draw = 0x809D1320; // type:func +BossTw_AddDotEffect = 0x809D1530; // type:func +BossTw_AddDmgCloud = 0x809D1624; // type:func +BossTw_AddRingEffect = 0x809D1720; // type:func +BossTw_AddPlayerFreezeEffect = 0x809D1824; // type:func +BossTw_AddFlameEffect = 0x809D18D0; // type:func +BossTw_AddMergeFlameEffect = 0x809D19A8; // type:func +BossTw_AddShieldBlastEffect = 0x809D1AB0; // type:func +BossTw_AddShieldDeflectEffect = 0x809D1B98; // type:func +BossTw_AddShieldHitEffect = 0x809D1D60; // type:func +BossTw_Init = 0x809D1F28; // type:func +BossTw_Destroy = 0x809D2744; // type:func +BossTw_SetupTurnToPlayer = 0x809D27AC; // type:func +BossTw_TurnToPlayer = 0x809D27FC; // type:func +BossTw_SetupFlyTo = 0x809D291C; // type:func +BossTw_FlyTo = 0x809D2B20; // type:func +BossTw_SetupShootBeam = 0x809D2D54; // type:func +BossTw_SpawnGroundBlast = 0x809D2E3C; // type:func +BossTw_BeamHitPlayerCheck = 0x809D31B8; // type:func +BossTw_CheckBeamReflection = 0x809D33B0; // type:func +BossTw_BeamReflHitCheck = 0x809D3638; // type:func +BossTw_GetFloorY = 0x809D3760; // type:func +BossTw_ShootBeam = 0x809D3A34; // type:func +BossTw_SetupFinishBeamShoot = 0x809D49EC; // type:func +BossTw_FinishBeamShoot = 0x809D4A48; // type:func +BossTw_SetupHitByBeam = 0x809D4AE0; // type:func +BossTw_HitByBeam = 0x809D4B48; // type:func +BossTw_SetupLaugh = 0x809D4E10; // type:func +BossTw_Laugh = 0x809D4E74; // type:func +BossTw_SetupSpin = 0x809D4F04; // type:func +BossTw_Spin = 0x809D4F80; // type:func +BossTw_SetupMergeCS = 0x809D5020; // type:func +BossTw_MergeCS = 0x809D506C; // type:func +BossTw_SetupWait = 0x809D50B0; // type:func +BossTw_Wait = 0x809D50E8; // type:func +BossTw_TwinrovaSetupMergeCS = 0x809D518C; // type:func +BossTw_TwinrovaMergeCS = 0x809D51AC; // type:func +BossTw_SetupDeathCS = 0x809D5C78; // type:func +BossTw_DeathCS = 0x809D5CE0; // type:func +BossTw_SetupCSWait = 0x809D5DE8; // type:func +BossTw_CSWait = 0x809D5E20; // type:func +BossTw_TwinrovaSetupIntroCS = 0x809D5E30; // type:func +BossTw_TwinrovaIntroCS = 0x809D5E68; // type:func +BossTw_DeathBall = 0x809D76BC; // type:func +BossTw_TwinrovaSetupDeathCS = 0x809D79B8; // type:func +BossTw_DeathCSMsgSfx = 0x809D7A74; // type:func +BossTw_TwinrovaDeathCS = 0x809D8294; // type:func +BossTw_Update = 0x809D8F88; // type:func +BossTw_TwinrovaUpdate = 0x809D95FC; // type:func +BossTw_OverrideLimbDraw = 0x809D9F78; // type:func +BossTw_PostLimbDraw = 0x809DA02C; // type:func +func_80941BC0 = 0x809DA430; // type:func +func_80942180 = 0x809DA988; // type:func +func_809426F0 = 0x809DAE68; // type:func +func_80942C70 = 0x809DB3CC; // type:func +func_80943028 = 0x809DB738; // type:func +BossTw_Draw = 0x809DB93C; // type:func +BossTw_TwinrovaOverrideLimbDraw = 0x809DBFEC; // type:func +BossTw_TwinrovaPostLimbDraw = 0x809DC418; // type:func +BossTw_ShieldChargeDraw = 0x809DC554; // type:func +BossTw_SpawnPortalDraw = 0x809DCDB4; // type:func +func_80944C50 = 0x809DD1C4; // type:func +BossTw_TwinrovaDraw = 0x809DD59C; // type:func +BossTw_BlastFire = 0x809DD8D4; // type:func +BossTw_BlastIce = 0x809DE20C; // type:func +BossTw_BlastShieldCheck = 0x809DED80; // type:func +BossTw_BlastUpdate = 0x809DF010; // type:func +BossTw_BlastDraw = 0x809DF18C; // type:func +BossTw_DrawDeathBall = 0x809DF6E8; // type:func +BossTw_UpdateEffects = 0x809DFC30; // type:func +BossTw_InitRand = 0x809E0988; // type:func +BossTw_RandZeroOne = 0x809E09A8; // type:func +BossTw_DrawEffects = 0x809E0AD0; // type:func +BossTw_TwinrovaSetupArriveAtTarget = 0x809E1904; // type:func +BossTw_TwinrovaArriveAtTarget = 0x809E1978; // type:func +BossTw_TwinrovaSetupChargeBlast = 0x809E1AA4; // type:func +BossTw_TwinrovaChargeBlast = 0x809E1B04; // type:func +BossTw_TwinrovaSetupShootBlast = 0x809E1CF0; // type:func +BossTw_TwinrovaShootBlast = 0x809E1D78; // type:func +BossTw_TwinrovaSetupDoneBlastShoot = 0x809E1FC8; // type:func +BossTw_TwinrovaDoneBlastShoot = 0x809E2014; // type:func +BossTw_TwinrovaDamage = 0x809E20AC; // type:func +BossTw_TwinrovaStun = 0x809E21D8; // type:func +BossTw_TwinrovaSetupGetUp = 0x809E248C; // type:func +BossTw_TwinrovaGetUp = 0x809E24F0; // type:func +BossTw_TwinrovaSetupFly = 0x809E2584; // type:func +BossTw_TwinrovaFly = 0x809E275C; // type:func +BossTw_TwinrovaSetupSpin = 0x809E29D0; // type:func +BossTw_TwinrovaSpin = 0x809E2A28; // type:func +BossTw_TwinrovaSetupLaugh = 0x809E2AA0; // type:func +BossTw_TwinrovaLaugh = 0x809E2B04; // type:func +EnRr_Init = 0x809E7030; // type:func +EnRr_Destroy = 0x809E71D0; // type:func +EnRr_Move = 0x809E7210; // type:func +EnRr_SetupReach = 0x809E7238; // type:func +EnRr_SetupNeutral = 0x809E7338; // type:func +EnRr_SetupGrabPlayer = 0x809E7404; // type:func +EnRr_GetMessage = 0x809E750C; // type:func +EnRr_SetupReleasePlayer = 0x809E7560; // type:func +EnRr_SetupDamage = 0x809E775C; // type:func +EnRr_SetupApproach = 0x809E7828; // type:func +EnRr_SetupDeath = 0x809E78E0; // type:func +EnRr_SetupStunned = 0x809E7980; // type:func +EnRr_CollisionCheck = 0x809E7A8C; // type:func +EnRr_InitBodySegments = 0x809E7E1C; // type:func +EnRr_UpdateBodySegments = 0x809E7FDC; // type:func +EnRr_Approach = 0x809E8160; // type:func +EnRr_Reach = 0x809E8220; // type:func +EnRr_GrabPlayer = 0x809E833C; // type:func +EnRr_Damage = 0x809E8434; // type:func +EnRr_Death = 0x809E84AC; // type:func +EnRr_Retreat = 0x809E8820; // type:func +EnRr_Stunned = 0x809E88B4; // type:func +EnRr_Update = 0x809E891C; // type:func +EnRr_Draw = 0x809E8D48; // type:func +EnBa_SetupAction = 0x809E9560; // type:func +EnBa_Init = 0x809E956C; // type:func +EnBa_Destroy = 0x809E9758; // type:func +EnBa_SetupIdle = 0x809E9784; // type:func +EnBa_Idle = 0x809E97C4; // type:func +EnBa_SetupFallAsBlob = 0x809E9BF0; // type:func +EnBa_FallAsBlob = 0x809E9C60; // type:func +EnBa_SetupSwingAtPlayer = 0x809E9D20; // type:func +EnBa_SwingAtPlayer = 0x809E9D74; // type:func +func_809B7174 = 0x809EA394; // type:func +EnBa_RecoilFromDamage = 0x809EA410; // type:func +func_809B75A0 = 0x809EA7C4; // type:func +EnBa_Die = 0x809EAA40; // type:func +EnBa_Update = 0x809EAD70; // type:func +EnBa_Draw = 0x809EAE50; // type:func +EnBx_Init = 0x809EB430; // type:func +EnBx_Destroy = 0x809EB638; // type:func +func_809D1D0C = 0x809EB664; // type:func +EnBx_Update = 0x809EB734; // type:func +EnBx_Draw = 0x809EBA58; // type:func +EnAnubice_Hover = 0x809EBF20; // type:func +EnAnubice_AimFireball = 0x809EBFC4; // type:func +EnAnubice_Init = 0x809EC0A4; // type:func +EnAnubice_Destroy = 0x809EC1BC; // type:func +EnAnubice_FindFlameCircles = 0x809EC218; // type:func +EnAnubice_SetupIdle = 0x809EC2A0; // type:func +EnAnubice_Idle = 0x809EC348; // type:func +EnAnubice_GoToHome = 0x809EC428; // type:func +EnAnubice_SetupShootFireball = 0x809EC578; // type:func +EnAnubice_ShootFireball = 0x809EC600; // type:func +EnAnubice_SetupDie = 0x809EC700; // type:func +EnAnubice_Die = 0x809EC7D0; // type:func +EnAnubice_Update = 0x809ECA84; // type:func +EnAnubice_OverrideLimbDraw = 0x809ECE88; // type:func +EnAnubice_PostLimbDraw = 0x809ECED4; // type:func +EnAnubice_Draw = 0x809ECF90; // type:func +EnAnubiceFire_Init = 0x809ED1D0; // type:func +EnAnubiceFire_Destroy = 0x809ED2F0; // type:func +func_809B26EC = 0x809ED31C; // type:func +func_809B27D8 = 0x809ED408; // type:func +func_809B2B48 = 0x809ED778; // type:func +EnAnubiceFire_Update = 0x809ED924; // type:func +EnAnubiceFire_Draw = 0x809EDB20; // type:func +BgMoriHashigo_InitDynapoly = 0x809EDF90; // type:func +BgMoriHashigo_InitCollider = 0x809EDFE8; // type:func +BgMoriHashigo_SpawnLadder = 0x809EE094; // type:func +BgMoriHashigo_InitClasp = 0x809EE14C; // type:func +BgMoriHashigo_InitLadder = 0x809EE1D8; // type:func +BgMoriHashigo_Init = 0x809EE21C; // type:func +BgMoriHashigo_Destroy = 0x809EE2E0; // type:func +BgMoriHashigo_SetupWaitForMoriTex = 0x809EE338; // type:func +BgMoriHashigo_WaitForMoriTex = 0x809EE34C; // type:func +BgMoriHashigo_SetupClasp = 0x809EE3CC; // type:func +BgMoriHashigo_Clasp = 0x809EE3E0; // type:func +BgMoriHashigo_SetupLadderWait = 0x809EE444; // type:func +BgMoriHashigo_LadderWait = 0x809EE458; // type:func +BgMoriHashigo_SetupLadderFall = 0x809EE48C; // type:func +BgMoriHashigo_LadderFall = 0x809EE4C8; // type:func +BgMoriHashigo_SetupLadderRest = 0x809EE5A8; // type:func +BgMoriHashigo_Update = 0x809EE5CC; // type:func +BgMoriHashigo_Draw = 0x809EE608; // type:func +BgMoriHashira4_SetupAction = 0x809EE850; // type:func +BgMoriHashira4_InitDynaPoly = 0x809EE85C; // type:func +BgMoriHashira4_Init = 0x809EE8B4; // type:func +BgMoriHashira4_Destroy = 0x809EE9C8; // type:func +BgMoriHashira4_SetupWaitForMoriTex = 0x809EE9FC; // type:func +BgMoriHashira4_WaitForMoriTex = 0x809EEA20; // type:func +BgMoriHashira4_SetupPillarsRotate = 0x809EEA9C; // type:func +BgMoriHashira4_PillarsRotate = 0x809EEAC0; // type:func +BgMoriHashira4_GateWait = 0x809EEAF8; // type:func +BgMoriHashira4_GateOpen = 0x809EEBA4; // type:func +BgMoriHashira4_Update = 0x809EEBFC; // type:func +BgMoriHashira4_Draw = 0x809EEC28; // type:func +BgMoriIdomizu_SetupAction = 0x809EEDE0; // type:func +BgMoriIdomizu_SetWaterLevel = 0x809EEDEC; // type:func +BgMoriIdomizu_Init = 0x809EEE14; // type:func +BgMoriIdomizu_Destroy = 0x809EEF38; // type:func +BgMoriIdomizu_SetupWaitForMoriTex = 0x809EEF58; // type:func +BgMoriIdomizu_WaitForMoriTex = 0x809EEF7C; // type:func +BgMoriIdomizu_SetupMain = 0x809EEFD4; // type:func +BgMoriIdomizu_Main = 0x809EEFF8; // type:func +BgMoriIdomizu_Update = 0x809EF1BC; // type:func +BgMoriIdomizu_Draw = 0x809EF1E8; // type:func +BgSpot16Doughnut_Init = 0x809EF420; // type:func +BgSpot16Doughnut_Destroy = 0x809EF594; // type:func +BgSpot16Doughnut_Update = 0x809EF5A4; // type:func +BgSpot16Doughnut_UpdateExpanding = 0x809EF638; // type:func +BgSpot16Doughnut_Draw = 0x809EF6A0; // type:func +BgSpot16Doughnut_DrawExpanding = 0x809EF850; // type:func +BgBdanSwitch_InitDynaPoly = 0x809EF9D0; // type:func +BgBdanSwitch_InitCollision = 0x809EFA28; // type:func +func_8086D0EC = 0x809EFA7C; // type:func +BgBdanSwitch_Init = 0x809EFBE8; // type:func +BgBdanSwitch_Destroy = 0x809EFDA4; // type:func +func_8086D4B4 = 0x809EFE10; // type:func +func_8086D548 = 0x809EFEA4; // type:func +func_8086D5C4 = 0x809EFF20; // type:func +func_8086D5E0 = 0x809EFF40; // type:func +func_8086D67C = 0x809EFFDC; // type:func +func_8086D694 = 0x809EFFF8; // type:func +func_8086D730 = 0x809F0098; // type:func +func_8086D754 = 0x809F00C0; // type:func +func_8086D7FC = 0x809F0168; // type:func +func_8086D80C = 0x809F017C; // type:func +func_8086D86C = 0x809F01DC; // type:func +func_8086D888 = 0x809F01FC; // type:func +func_8086D8BC = 0x809F0234; // type:func +func_8086D8CC = 0x809F0248; // type:func +func_8086D944 = 0x809F02C0; // type:func +func_8086D95C = 0x809F02DC; // type:func +func_8086D9F8 = 0x809F037C; // type:func +func_8086DA1C = 0x809F03A4; // type:func +func_8086DAB4 = 0x809F0440; // type:func +func_8086DAC4 = 0x809F0454; // type:func +func_8086DB24 = 0x809F04B4; // type:func +func_8086DB40 = 0x809F04D4; // type:func +func_8086DB4C = 0x809F04E4; // type:func +func_8086DB68 = 0x809F0504; // type:func +func_8086DC30 = 0x809F05CC; // type:func +func_8086DC48 = 0x809F05E8; // type:func +func_8086DCCC = 0x809F066C; // type:func +func_8086DCE8 = 0x809F068C; // type:func +func_8086DDA8 = 0x809F074C; // type:func +func_8086DDC0 = 0x809F0768; // type:func +BgBdanSwitch_Update = 0x809F07FC; // type:func +func_8086DF58 = 0x809F0900; // type:func +BgBdanSwitch_Draw = 0x809F0970; // type:func +EnMa1_GetTextId = 0x809F0E00; // type:func +EnMa1_UpdateTalkState = 0x809F0EE8; // type:func +EnMa1_ShouldSpawn = 0x809F1034; // type:func +EnMa1_UpdateEyes = 0x809F1180; // type:func +EnMa1_ChangeAnim = 0x809F11F8; // type:func +EnMa1_UpdateTracking = 0x809F1268; // type:func +EnMa1_UpdateSinging = 0x809F12E8; // type:func +EnMa1_Init = 0x809F1360; // type:func +EnMa1_Destroy = 0x809F14C8; // type:func +EnMa1_Idle = 0x809F1508; // type:func +EnMa1_GiveWeirdEgg = 0x809F1620; // type:func +EnMa1_FinishGivingWeirdEgg = 0x809F1680; // type:func +EnMa1_IdleTeachSong = 0x809F16C8; // type:func +EnMa1_StartTeachSong = 0x809F17F4; // type:func +EnMa1_TeachSong = 0x809F1878; // type:func +EnMa1_WaitForPlayback = 0x809F18E0; // type:func +EnMa1_DoNothing = 0x809F1958; // type:func +EnMa1_Update = 0x809F1968; // type:func +EnMa1_OverrideLimbDraw = 0x809F1A54; // type:func +EnMa1_PostLimbDraw = 0x809F1BE4; // type:func +EnMa1_Draw = 0x809F1C40; // type:func +BossGanonEff_SpawnWindowShard = 0x809F20E0; // type:func +BossGanonEff_SpawnSparkle = 0x809F2220; // type:func +BossGanonEff_SpawnLightRay = 0x809F231C; // type:func +BossGanonEff_SpawnShock = 0x809F2460; // type:func +BossGanonEff_SpawnLightning = 0x809F252C; // type:func +BossGanonEff_SpawnDustDark = 0x809F25D0; // type:func +BossGanonEff_SpawnDustLight = 0x809F26C4; // type:func +BossGanonEff_SpawnShockwave = 0x809F27A8; // type:func +BossGanonEff_SpawnBlackDot = 0x809F28A0; // type:func +BossGanon_SetColliderPos = 0x809F295C; // type:func +BossGanon_SetAnimationObject = 0x809F29A0; // type:func +BossGanon_Init = 0x809F2A10; // type:func +BossGanon_Destroy = 0x809F2FB4; // type:func +BossGanon_SetupIntroCutscene = 0x809F3018; // type:func +BossGanon_SetIntroCsCamera = 0x809F30FC; // type:func +BossGanon_IntroCutscene = 0x809F319C; // type:func +BossGanon_SetupDeathCutscene = 0x809F489C; // type:func +BossGanon_SetupTowerCutscene = 0x809F4980; // type:func +BossGanon_ShatterWindows = 0x809F4A84; // type:func +BossGanon_DeathAndTowerCutscene = 0x809F4BC8; // type:func +BossGanon_SetupPoundFloor = 0x809F6570; // type:func +BossGanon_PoundFloor = 0x809F65AC; // type:func +BossGanon_SetupChargeBigMagic = 0x809F6B00; // type:func +BossGanon_ChargeBigMagic = 0x809F6B70; // type:func +BossGanon_SetupWait = 0x809F7378; // type:func +BossGanon_Wait = 0x809F7400; // type:func +BossGanon_SetupChargeLightBall = 0x809F774C; // type:func +BossGanon_ChargeLightBall = 0x809F77BC; // type:func +BossGanon_SetupPlayTennis = 0x809F7970; // type:func +BossGanon_PlayTennis = 0x809F79D8; // type:func +BossGanon_SetupBlock = 0x809F7CA8; // type:func +BossGanon_Block = 0x809F7D60; // type:func +BossGanon_SetupHitByLightBall = 0x809F7EF0; // type:func +BossGanon_HitByLightBall = 0x809F7FE4; // type:func +BossGanon_SetupVulnerable = 0x809F823C; // type:func +BossGanon_Vulnerable = 0x809F840C; // type:func +BossGanon_SetupDamaged = 0x809F8978; // type:func +BossGanon_Damaged = 0x809F89E0; // type:func +BossGanon_UpdateDamage = 0x809F8AA0; // type:func +BossGanon_Update = 0x809F8E68; // type:func +BossGanon_OverrideLimbDraw = 0x809F9FD0; // type:func +BossGanon_PostLimbDraw = 0x809FA210; // type:func +BossGanon_InitRand = 0x809FA568; // type:func +BossGanon_RandZeroOne = 0x809FA588; // type:func +BossGanon_DrawShock = 0x809FA6B0; // type:func +BossGanon_DrawHandLightBall = 0x809FAA48; // type:func +BossGanon_DrawBigMagicCharge = 0x809FAC94; // type:func +BossGanon_DrawTriforce = 0x809FB318; // type:func +BossGanon_DrawDarkVortex = 0x809FB6D8; // type:func +func_808E0254 = 0x809FB924; // type:func +BossGanon_GenShadowTexture = 0x809FBDCC; // type:func +BossGanon_DrawShadowTexture = 0x809FC10C; // type:func +BossGanon_Draw = 0x809FC36C; // type:func +BossGanon_CheckFallingPlatforms = 0x809FC5B4; // type:func +BossGanon_LightBall_Update = 0x809FC69C; // type:func +BossGanon_LightBall_Draw = 0x809FD1BC; // type:func +func_808E1EB4 = 0x809FD4D0; // type:func +func_808E229C = 0x809FD8C0; // type:func +func_808E2544 = 0x809FDB00; // type:func +func_808E324C = 0x809FE814; // type:func +BossGanon_UpdateEffects = 0x809FEAE8; // type:func +BossGanon_DrawEffects = 0x809FF310; // type:func +BossSst_Init = 0x80A17EC0; // type:func +BossSst_Destroy = 0x80A18348; // type:func +BossSst_HeadSetupLurk = 0x80A18394; // type:func +BossSst_HeadLurk = 0x80A183C8; // type:func +BossSst_HeadSetupIntro = 0x80A18404; // type:func +BossSst_HeadIntro = 0x80A18550; // type:func +BossSst_HeadSetupWait = 0x80A19368; // type:func +BossSst_HeadWait = 0x80A193B8; // type:func +BossSst_HeadSetupNeutral = 0x80A19434; // type:func +BossSst_HeadNeutral = 0x80A19454; // type:func +BossSst_HeadSetupDamagedHand = 0x80A195F8; // type:func +BossSst_HeadDamagedHand = 0x80A19660; // type:func +BossSst_HeadSetupReadyCharge = 0x80A19758; // type:func +BossSst_HeadReadyCharge = 0x80A197B0; // type:func +BossSst_HeadSetupCharge = 0x80A19854; // type:func +BossSst_HeadCharge = 0x80A19910; // type:func +BossSst_HeadSetupEndCharge = 0x80A19B70; // type:func +BossSst_HeadEndCharge = 0x80A19BF4; // type:func +BossSst_HeadSetupFrozenHand = 0x80A19C64; // type:func +BossSst_HeadFrozenHand = 0x80A19CB8; // type:func +BossSst_HeadSetupUnfreezeHand = 0x80A19D00; // type:func +BossSst_HeadUnfreezeHand = 0x80A19D4C; // type:func +BossSst_HeadSetupStunned = 0x80A19D88; // type:func +BossSst_HeadStunned = 0x80A19E28; // type:func +BossSst_HeadSetupVulnerable = 0x80A1A0AC; // type:func +BossSst_HeadVulnerable = 0x80A1A14C; // type:func +BossSst_HeadSetupDamage = 0x80A1A24C; // type:func +BossSst_HeadDamage = 0x80A1A31C; // type:func +BossSst_HeadSetupRecover = 0x80A1A36C; // type:func +BossSst_HeadRecover = 0x80A1A3F8; // type:func +BossSst_SetCameraTargets = 0x80A1A58C; // type:func +BossSst_UpdateDeathCamera = 0x80A1A6B8; // type:func +BossSst_HeadSetupDeath = 0x80A1A844; // type:func +BossSst_HeadDeath = 0x80A1A9D8; // type:func +BossSst_HeadSetupThrash = 0x80A1AC28; // type:func +BossSst_HeadThrash = 0x80A1AC90; // type:func +BossSst_HeadSetupDarken = 0x80A1AD0C; // type:func +BossSst_HeadDarken = 0x80A1AD54; // type:func +BossSst_HeadSetupFall = 0x80A1AF7C; // type:func +BossSst_HeadFall = 0x80A1B014; // type:func +BossSst_HeadSetupMelt = 0x80A1B0B0; // type:func +BossSst_HeadMelt = 0x80A1B100; // type:func +BossSst_HeadSetupFinish = 0x80A1B1B8; // type:func +BossSst_HeadFinish = 0x80A1B214; // type:func +BossSst_HandSetupWait = 0x80A1B50C; // type:func +BossSst_HandWait = 0x80A1B588; // type:func +BossSst_HandSetupDownbeat = 0x80A1B6F8; // type:func +BossSst_HandDownbeat = 0x80A1B76C; // type:func +BossSst_HandSetupDownbeatEnd = 0x80A1B8BC; // type:func +BossSst_HandDownbeatEnd = 0x80A1B918; // type:func +BossSst_HandSetupOffbeat = 0x80A1BA0C; // type:func +BossSst_HandOffbeat = 0x80A1BA80; // type:func +BossSst_HandSetupOffbeatEnd = 0x80A1BB60; // type:func +BossSst_HandOffbeatEnd = 0x80A1BBAC; // type:func +BossSst_HandSetupEndSlam = 0x80A1BCF0; // type:func +BossSst_HandEndSlam = 0x80A1BD64; // type:func +BossSst_HandSetupRetreat = 0x80A1BDA0; // type:func +BossSst_HandRetreat = 0x80A1BE48; // type:func +BossSst_HandSetupReadySlam = 0x80A1C074; // type:func +BossSst_HandReadySlam = 0x80A1C0E0; // type:func +BossSst_HandSetupSlam = 0x80A1C1D0; // type:func +BossSst_HandSlam = 0x80A1C260; // type:func +BossSst_HandSetupReadySweep = 0x80A1C444; // type:func +BossSst_HandReadySweep = 0x80A1C4EC; // type:func +BossSst_HandSetupSweep = 0x80A1C610; // type:func +BossSst_HandSweep = 0x80A1C69C; // type:func +BossSst_HandSetupReadyPunch = 0x80A1C8AC; // type:func +BossSst_HandReadyPunch = 0x80A1C914; // type:func +BossSst_HandSetupPunch = 0x80A1C970; // type:func +BossSst_HandPunch = 0x80A1C9F8; // type:func +BossSst_HandSetupReadyClap = 0x80A1CB3C; // type:func +BossSst_HandReadyClap = 0x80A1CC2C; // type:func +BossSst_HandSetupClap = 0x80A1CE1C; // type:func +BossSst_HandClap = 0x80A1CE8C; // type:func +BossSst_HandSetupEndClap = 0x80A1D0B8; // type:func +BossSst_HandEndClap = 0x80A1D124; // type:func +BossSst_HandSetupReadyGrab = 0x80A1D1C8; // type:func +BossSst_HandReadyGrab = 0x80A1D24C; // type:func +BossSst_HandSetupGrab = 0x80A1D2F4; // type:func +BossSst_HandGrab = 0x80A1D380; // type:func +BossSst_HandSetupCrush = 0x80A1D62C; // type:func +BossSst_HandCrush = 0x80A1D684; // type:func +BossSst_HandSetupEndCrush = 0x80A1D79C; // type:func +BossSst_HandEndCrush = 0x80A1D7EC; // type:func +BossSst_HandSetupSwing = 0x80A1D828; // type:func +BossSst_HandSwing = 0x80A1D8B0; // type:func +BossSst_HandSetupReel = 0x80A1DBE4; // type:func +BossSst_HandReel = 0x80A1DC7C; // type:func +BossSst_HandSetupReadyShake = 0x80A1DDD4; // type:func +BossSst_HandReadyShake = 0x80A1DE24; // type:func +BossSst_HandSetupShake = 0x80A1DF8C; // type:func +BossSst_HandShake = 0x80A1DFA8; // type:func +BossSst_HandSetupReadyCharge = 0x80A1E13C; // type:func +BossSst_HandReadyCharge = 0x80A1E190; // type:func +BossSst_HandSetupStunned = 0x80A1E308; // type:func +BossSst_HandStunned = 0x80A1E3B4; // type:func +BossSst_HandSetupDamage = 0x80A1E510; // type:func +BossSst_HandDamage = 0x80A1E56C; // type:func +BossSst_HandSetupThrash = 0x80A1E644; // type:func +BossSst_HandThrash = 0x80A1E6E0; // type:func +BossSst_HandSetupDarken = 0x80A1E8D4; // type:func +BossSst_HandDarken = 0x80A1E924; // type:func +BossSst_HandSetupFall = 0x80A1E998; // type:func +BossSst_HandFall = 0x80A1E9E8; // type:func +BossSst_HandSetupMelt = 0x80A1EA6C; // type:func +BossSst_HandMelt = 0x80A1EAA8; // type:func +BossSst_HandSetupFinish = 0x80A1EB20; // type:func +BossSst_HandFinish = 0x80A1EB4C; // type:func +BossSst_HandSetupRecover = 0x80A1EB78; // type:func +BossSst_HandRecover = 0x80A1EBCC; // type:func +BossSst_HandSetupFrozen = 0x80A1EC64; // type:func +BossSst_HandFrozen = 0x80A1ED30; // type:func +BossSst_HandSetupReadyBreakIce = 0x80A1EE90; // type:func +BossSst_HandReadyBreakIce = 0x80A1EF44; // type:func +BossSst_HandSetupBreakIce = 0x80A1F060; // type:func +BossSst_HandBreakIce = 0x80A1F088; // type:func +BossSst_HandGrabPlayer = 0x80A1F21C; // type:func +BossSst_HandReleasePlayer = 0x80A1F2BC; // type:func +BossSst_MoveAround = 0x80A1F340; // type:func +BossSst_HandSelectAttack = 0x80A1F4CC; // type:func +BossSst_HandSetDamage = 0x80A1F5C8; // type:func +BossSst_HandSetInvulnerable = 0x80A1F634; // type:func +BossSst_HeadSfx = 0x80A1F674; // type:func +BossSst_HandCollisionCheck = 0x80A1F6A0; // type:func +BossSst_HeadCollisionCheck = 0x80A1F82C; // type:func +BossSst_UpdateHand = 0x80A1F978; // type:func +BossSst_UpdateHead = 0x80A1FC88; // type:func +BossSst_OverrideHandDraw = 0x80A1FEF8; // type:func +BossSst_PostHandDraw = 0x80A1FF48; // type:func +BossSst_OverrideHandTrailDraw = 0x80A1FF84; // type:func +BossSst_DrawHand = 0x80A1FFC8; // type:func +BossSst_OverrideHeadDraw = 0x80A20374; // type:func +BossSst_PostHeadDraw = 0x80A20B78; // type:func +BossSst_DrawHead = 0x80A20C20; // type:func +BossSst_SpawnHeadShadow = 0x80A21070; // type:func +BossSst_SpawnHandShadow = 0x80A2119C; // type:func +BossSst_SpawnShockwave = 0x80A21250; // type:func +BossSst_SpawnIceCrystal = 0x80A2132C; // type:func +BossSst_SpawnIceShard = 0x80A215E8; // type:func +BossSst_IceShatter = 0x80A2183C; // type:func +BossSst_UpdateEffects = 0x80A21A08; // type:func +BossSst_DrawEffects = 0x80A21CAC; // type:func +EnNy_Init = 0x80A24480; // type:func +EnNy_Destroy = 0x80A245BC; // type:func +func_80ABCD40 = 0x80A245E8; // type:func +func_80ABCD84 = 0x80A24630; // type:func +func_80ABCD94 = 0x80A24644; // type:func +func_80ABCDAC = 0x80A24660; // type:func +func_80ABCDBC = 0x80A24674; // type:func +EnNy_SetupTurnToStone = 0x80A246B8; // type:func +func_80ABCE38 = 0x80A246F4; // type:func +func_80ABCE50 = 0x80A24710; // type:func +func_80ABCE90 = 0x80A24750; // type:func +func_80ABCEEC = 0x80A247AC; // type:func +EnNy_Move = 0x80A2480C; // type:func +EnNy_TurnToStone = 0x80A24920; // type:func +func_80ABD11C = 0x80A249E0; // type:func +EnNy_CollisionCheck = 0x80A24A54; // type:func +func_80ABD3B8 = 0x80A24C7C; // type:func +EnNy_Update = 0x80A24D64; // type:func +EnNy_SetupDie = 0x80A24FF0; // type:func +EnNy_Die = 0x80A25274; // type:func +EnNy_UpdateDeath = 0x80A25480; // type:func +EnNy_UpdateUnused = 0x80A254C0; // type:func +EnNy_Draw = 0x80A255F0; // type:func +EnNy_DrawDeathEffect = 0x80A258B8; // type:func +EnFr_OrientUnderwater = 0x80A25DB0; // type:func +EnFr_Init = 0x80A25EC4; // type:func +EnFr_DrawIdle = 0x80A25F7C; // type:func +EnFr_DrawActive = 0x80A25FA4; // type:func +EnFr_Update = 0x80A25FB8; // type:func +EnFr_Destroy = 0x80A262B0; // type:func +EnFr_IsDivingIntoWater = 0x80A262E4; // type:func +EnFr_DivingIntoWater = 0x80A26368; // type:func +EnFr_IsBelowLogSpot = 0x80A26414; // type:func +EnFr_IsAboveAndWithin30DistXZ = 0x80A26470; // type:func +EnFr_DecrementBlinkTimer = 0x80A264EC; // type:func +EnFr_DecrementBlinkTimerUpdate = 0x80A26514; // type:func +EnFr_SetupJumpingOutOfWater = 0x80A265A4; // type:func +EnFr_JumpingOutOfWater = 0x80A26644; // type:func +EnFr_OrientOnLogSpot = 0x80A267E4; // type:func +EnFr_ChooseJumpFromLogSpot = 0x80A268A4; // type:func +EnFr_JumpingUp = 0x80A269B8; // type:func +EnFr_JumpingBackIntoWater = 0x80A26AF8; // type:func +EnFr_SetScaleActive = 0x80A26C50; // type:func +EnFr_ButterflyPath = 0x80A26D58; // type:func +EnFr_UpdateActive = 0x80A26EB4; // type:func +EnFr_SetupJumpingUp = 0x80A26F98; // type:func +EnFr_Idle = 0x80A27038; // type:func +EnFr_Activate = 0x80A27118; // type:func +EnFr_ActivateCheckFrogSong = 0x80A27180; // type:func +func_80A1BE98 = 0x80A27224; // type:func +EnFr_ListeningToOcarinaNotes = 0x80A2729C; // type:func +EnFr_ChildSong = 0x80A273E8; // type:func +EnFr_ChildSongFirstTime = 0x80A27520; // type:func +EnFr_TalkBeforeFrogSong = 0x80A27578; // type:func +EnFr_CheckOcarinaInputFrogSong = 0x80A275E0; // type:func +EnFr_DeactivateButterfly = 0x80A276DC; // type:func +EnFr_GetNextNoteFrogSong = 0x80A27724; // type:func +EnFr_SetupFrogSong = 0x80A277A0; // type:func +EnFr_IsFrogSongComplete = 0x80A27814; // type:func +EnFr_OcarinaMistake = 0x80A278C4; // type:func +EnFr_ContinueFrogSong = 0x80A27920; // type:func +EnFr_SetupReward = 0x80A27AC4; // type:func +EnFr_PrintTextBox = 0x80A27B40; // type:func +EnFr_TalkBeforeReward = 0x80A27B80; // type:func +EnFr_SetReward = 0x80A27BE8; // type:func +EnFr_Deactivate = 0x80A27CFC; // type:func +EnFr_GiveReward = 0x80A27DFC; // type:func +EnFr_SetIdle = 0x80A27E5C; // type:func +EnFr_UpdateIdle = 0x80A27EB0; // type:func +EnFr_OverrideLimbDraw = 0x80A27EDC; // type:func +EnFr_PostLimbDraw = 0x80A27F08; // type:func +EnFr_Draw = 0x80A27FC0; // type:func +ItemShield_SetupAction = 0x80A28840; // type:func +ItemShield_Init = 0x80A2884C; // type:func +ItemShield_Destroy = 0x80A289B4; // type:func +func_80B86AC8 = 0x80A289E0; // type:func +func_80B86BC8 = 0x80A28AE4; // type:func +func_80B86CA8 = 0x80A28BCC; // type:func +func_80B86F68 = 0x80A28E90; // type:func +ItemShield_Update = 0x80A28F9C; // type:func +ItemShield_Draw = 0x80A28FC0; // type:func +BgIceShelter_InitColliders = 0x80A29250; // type:func +BgIceShelter_InitDynaPoly = 0x80A29384; // type:func +BgIceShelter_RotateY = 0x80A293DC; // type:func +BgIceShelter_Init = 0x80A2945C; // type:func +BgIceShelter_Destroy = 0x80A295D8; // type:func +BgIceShelter_SpawnSteamAround = 0x80A29664; // type:func +BgIceShelter_SpawnSteamAlong = 0x80A298D8; // type:func +BgIceShelter_SetupIdle = 0x80A29B3C; // type:func +BgIceShelter_Idle = 0x80A29B58; // type:func +BgIceShelter_SetupMelt = 0x80A29C98; // type:func +BgIceShelter_Melt = 0x80A29CB4; // type:func +BgIceShelter_Update = 0x80A29E78; // type:func +BgIceShelter_Draw = 0x80A29E9C; // type:func +EnIceHono_XZDistanceSquared = 0x80A2A480; // type:func +EnIceHono_InitCapturableFlame = 0x80A2A4B0; // type:func +EnIceHono_InitDroppedFlame = 0x80A2A554; // type:func +EnIceHono_InitSmallFlame = 0x80A2A65C; // type:func +EnIceHono_Init = 0x80A2A6C4; // type:func +EnIceHono_Destroy = 0x80A2A824; // type:func +EnIceHono_InBottleRange = 0x80A2A87C; // type:func +EnIceHono_SetupActionCapturableFlame = 0x80A2A96C; // type:func +EnIceHono_CapturableFlame = 0x80A2A994; // type:func +EnIceHono_SetupActionDroppedFlame = 0x80A2AA44; // type:func +EnIceHono_DropFlame = 0x80A2AA68; // type:func +EnIceHono_SetupActionSpreadFlames = 0x80A2AC28; // type:func +EnIceHono_SpreadFlames = 0x80A2AC4C; // type:func +EnIceHono_SetupActionSmallFlame = 0x80A2AEA8; // type:func +EnIceHono_SmallFlameMove = 0x80A2AF7C; // type:func +EnIceHono_Update = 0x80A2B0D4; // type:func +EnIceHono_Draw = 0x80A2B268; // type:func +ItemOcarina_SetupAction = 0x80A2B670; // type:func +ItemOcarina_Init = 0x80A2B67C; // type:func +ItemOcarina_Destroy = 0x80A2B804; // type:func +ItemOcarina_Fly = 0x80A2B814; // type:func +ItemOcarina_GetThrown = 0x80A2B9C0; // type:func +func_80B864EC = 0x80A2BA18; // type:func +func_80B865E0 = 0x80A2BB0C; // type:func +ItemOcarina_DoNothing = 0x80A2BB6C; // type:func +ItemOcarina_StartSoTCutscene = 0x80A2BB7C; // type:func +ItemOcarina_WaitInWater = 0x80A2BBF0; // type:func +ItemOcarina_Update = 0x80A2BCC4; // type:func +ItemOcarina_Draw = 0x80A2BCE8; // type:func +MagicDark_Init = 0x80A2BE40; // type:func +MagicDark_Destroy = 0x80A2BF24; // type:func +MagicDark_DiamondUpdate = 0x80A2BF5C; // type:func +MagicDark_DimLighting = 0x80A2C1A4; // type:func +MagicDark_OrbUpdate = 0x80A2C2F0; // type:func +MagicDark_DiamondDraw = 0x80A2C498; // type:func +MagicDark_OrbDraw = 0x80A2C700; // type:func +Demo6K_SetupAction = 0x80A2D690; // type:func +Demo6K_Init = 0x80A2D69C; // type:func +Demo6K_Destroy = 0x80A2DA84; // type:func +Demo6K_WaitForObject = 0x80A2DAB8; // type:func +func_80966E04 = 0x80A2DB10; // type:func +func_80966E98 = 0x80A2DBA8; // type:func +func_80966F84 = 0x80A2DC9C; // type:func +func_809670AC = 0x80A2DDC4; // type:func +func_8096712C = 0x80A2DE44; // type:func +func_80967244 = 0x80A2DF5C; // type:func +func_80967410 = 0x80A2E128; // type:func +func_809674E0 = 0x80A2E1F8; // type:func +func_809676A4 = 0x80A2E3BC; // type:func +func_8096784C = 0x80A2E564; // type:func +func_80967A04 = 0x80A2E720; // type:func +func_80967AD0 = 0x80A2E7EC; // type:func +func_80967BF8 = 0x80A2E918; // type:func +func_80967DBC = 0x80A2EADC; // type:func +func_80967F10 = 0x80A2EC28; // type:func +Demo6K_Update = 0x80A2ECF4; // type:func +func_80967FFC = 0x80A2ED18; // type:func +func_80968298 = 0x80A2EF64; // type:func +func_8096865C = 0x80A2F2C4; // type:func +func_809688C4 = 0x80A2F4D0; // type:func +func_80968B70 = 0x80A2F74C; // type:func +func_80968FB0 = 0x80A2FB4C; // type:func +func_809691BC = 0x80A2FD04; // type:func +EnAnubiceTag_Init = 0x80A303A0; // type:func +EnAnubiceTag_Destroy = 0x80A303F0; // type:func +EnAnubiceTag_SpawnAnubis = 0x80A30400; // type:func +EnAnubiceTag_ManageAnubis = 0x80A30478; // type:func +EnAnubiceTag_Update = 0x80A305DC; // type:func +EnAnubiceTag_Draw = 0x80A30600; // type:func +BgHakaGate_Init = 0x80A30670; // type:func +BgHakaGate_Destroy = 0x80A30940; // type:func +BgHakaGate_DoNothing = 0x80A3099C; // type:func +BgHakaGate_StatueInactive = 0x80A309AC; // type:func +BgHakaGate_StatueIdle = 0x80A309E8; // type:func +BgHakaGate_StatueTurn = 0x80A30B00; // type:func +BgHakaGate_FloorClosed = 0x80A30CE4; // type:func +BgHakaGate_FloorOpen = 0x80A30E6C; // type:func +BgHakaGate_GateWait = 0x80A30EF8; // type:func +BgHakaGate_GateOpen = 0x80A30F48; // type:func +BgHakaGate_SkullOfTruth = 0x80A30FD8; // type:func +BgHakaGate_FalseSkull = 0x80A31034; // type:func +BgHakaGate_Update = 0x80A310B4; // type:func +BgHakaGate_DrawFlame = 0x80A310FC; // type:func +BgHakaGate_Draw = 0x80A312C8; // type:func +BgSpot15Saku_Init = 0x80A31700; // type:func +BgSpot15Saku_Destroy = 0x80A317B4; // type:func +func_808B4930 = 0x80A317E8; // type:func +func_808B4978 = 0x80A31830; // type:func +func_808B4A04 = 0x80A318BC; // type:func +BgSpot15Saku_Update = 0x80A318EC; // type:func +BgSpot15Saku_Draw = 0x80A31920; // type:func +BgJyaGoroiwa_UpdateCollider = 0x80A31A40; // type:func +BgJyaGoroiwa_InitCollider = 0x80A31A98; // type:func +BgJyaGoroiwa_UpdateRotation = 0x80A31B00; // type:func +BgJyaGoroiwa_Init = 0x80A31B40; // type:func +BgJyaGoroiwa_Destroy = 0x80A31BD4; // type:func +BgJyaGoroiwa_SetupMove = 0x80A31C00; // type:func +BgJyaGoroiwa_Move = 0x80A31C30; // type:func +BgJyaGoroiwa_SetupWait = 0x80A31EC4; // type:func +BgJyaGoroiwa_Wait = 0x80A31EDC; // type:func +BgJyaGoroiwa_Update = 0x80A31F2C; // type:func +BgJyaGoroiwa_Draw = 0x80A32018; // type:func +BgJyaZurerukabe_InitDynaPoly = 0x80A321C0; // type:func +func_8089B4C8 = 0x80A32218; // type:func +BgJyaZurerukabe_Init = 0x80A323B4; // type:func +BgJyaZurerukabe_Destroy = 0x80A32474; // type:func +func_8089B7B4 = 0x80A324C0; // type:func +func_8089B7C4 = 0x80A324D4; // type:func +func_8089B80C = 0x80A32520; // type:func +func_8089B870 = 0x80A32588; // type:func +BgJyaZurerukabe_Update = 0x80A32650; // type:func +BgJyaZurerukabe_Draw = 0x80A326A8; // type:func +func_808958F0 = 0x80A32870; // type:func +BgJyaCobra_InitDynapoly = 0x80A328C4; // type:func +BgJyaCobra_SpawnRay = 0x80A3291C; // type:func +func_80895A70 = 0x80A32984; // type:func +func_80895BEC = 0x80A32B04; // type:func +func_80895C74 = 0x80A32B88; // type:func +BgJyaCobra_UpdateShadowFromSide = 0x80A32E08; // type:func +BgJyaCobra_UpdateShadowFromTop = 0x80A33430; // type:func +BgJyaCobra_Init = 0x80A336EC; // type:func +BgJyaCobra_Destroy = 0x80A337D8; // type:func +func_80896918 = 0x80A3380C; // type:func +func_80896950 = 0x80A33848; // type:func +func_808969F8 = 0x80A338F0; // type:func +func_80896ABC = 0x80A339B8; // type:func +BgJyaCobra_Update = 0x80A33B4C; // type:func +func_80896CB4 = 0x80A33BC0; // type:func +func_80896D78 = 0x80A33C44; // type:func +BgJyaCobra_DrawShadow = 0x80A33D70; // type:func +BgJyaCobra_Draw = 0x80A33FDC; // type:func +BgJyaKanaami_InitDynaPoly = 0x80A34590; // type:func +BgJyaKanaami_Init = 0x80A345E8; // type:func +BgJyaKanaami_Destroy = 0x80A34668; // type:func +func_80899880 = 0x80A3469C; // type:func +func_80899894 = 0x80A346B4; // type:func +func_8089993C = 0x80A3475C; // type:func +func_80899950 = 0x80A34774; // type:func +func_80899A08 = 0x80A3482C; // type:func +BgJyaKanaami_Update = 0x80A34840; // type:func +BgJyaKanaami_Draw = 0x80A34874; // type:func +Fishing_SetColliderElement = 0x80A34940; // type:func +Fishing_SeedRand = 0x80A349F0; // type:func +Fishing_RandZeroOne = 0x80A34A10; // type:func +Fishing_SmoothStepToS = 0x80A34B38; // type:func +Fishing_SpawnRipple = 0x80A34BE4; // type:func +Fishing_SpawnDustSplash = 0x80A34D3C; // type:func +Fishing_SpawnWaterDust = 0x80A34E84; // type:func +Fishing_SpawnBubble = 0x80A34FBC; // type:func +Fishing_SpawnRainDrop = 0x80A350EC; // type:func +Fishing_InitPondProps = 0x80A351E4; // type:func +Fishing_Init = 0x80A354F8; // type:func +Fishing_Destroy = 0x80A35DE0; // type:func +Fishing_UpdateEffects = 0x80A35E58; // type:func +Fishing_DrawEffects = 0x80A3659C; // type:func +Fishing_DrawStreamSplash = 0x80A36FFC; // type:func +Fishing_IsAboveCounter = 0x80A37180; // type:func +Fishing_UpdateLine = 0x80A37274; // type:func +Fishing_UpdateLinePos = 0x80A37800; // type:func +Fishing_DrawLureHook = 0x80A37998; // type:func +Fishing_UpdateSinkingLure = 0x80A37E7C; // type:func +Fishing_DrawSinkingLure = 0x80A38180; // type:func +Fishing_DrawLureAndLine = 0x80A3844C; // type:func +Fishing_DrawRod = 0x80A38C3C; // type:func +Fishing_UpdateLure = 0x80A39698; // type:func +Fishing_SplashBySize = 0x80A3B64C; // type:func +Fishing_SplashBySize2 = 0x80A3B914; // type:func +func_80B70ED4 = 0x80A3BAF8; // type:func +Fishing_FishLeapSfx = 0x80A3BE98; // type:func +Fishing_HandleAquariumDialog = 0x80A3C058; // type:func +Fishing_UpdateFish = 0x80A3C218; // type:func +Fishing_FishOverrideLimbDraw = 0x80A40650; // type:func +Fishing_FishPostLimbDraw = 0x80A40770; // type:func +Fishing_LoachOverrideLimbDraw = 0x80A407B0; // type:func +Fishing_LoachPostLimbDraw = 0x80A40830; // type:func +Fishing_DrawFish = 0x80A40870; // type:func +Fishing_HandleReedContact = 0x80A40AB8; // type:func +Fishing_HandleLilyPadContact = 0x80A40B64; // type:func +Fishing_UpdatePondProps = 0x80A40C4C; // type:func +Fishing_DrawPondProps = 0x80A40F08; // type:func +Fishing_UpdateGroupFishes = 0x80A4134C; // type:func +Fishing_DrawGroupFishes = 0x80A41C1C; // type:func +Fishing_HandleOwnerDialog = 0x80A41E0C; // type:func +Fishing_UpdateOwner = 0x80A42C90; // type:func +Fishing_OwnerOverrideLimbDraw = 0x80A44998; // type:func +Fishing_OwnerPostLimbDraw = 0x80A449D0; // type:func +Fishing_DrawOwner = 0x80A44AE0; // type:func +ObjOshihiki_InitDynapoly = 0x80A4F3F0; // type:func +ObjOshihiki_RotateXZ = 0x80A4F448; // type:func +ObjOshihiki_StrongEnough = 0x80A4F49C; // type:func +ObjOshihiki_ResetFloors = 0x80A4F520; // type:func +ObjOshihiki_GetBlockUnder = 0x80A4F54C; // type:func +ObjOshihiki_UpdateInitPos = 0x80A4F5DC; // type:func +ObjOshihiki_NoSwitchPress = 0x80A4F70C; // type:func +ObjOshihiki_CheckType = 0x80A4F7D8; // type:func +ObjOshihiki_SetScale = 0x80A4F828; // type:func +ObjOshihiki_SetTexture = 0x80A4F860; // type:func +ObjOshihiki_SetColor = 0x80A4F8C0; // type:func +ObjOshihiki_Init = 0x80A4F968; // type:func +ObjOshihiki_Destroy = 0x80A4FA90; // type:func +ObjOshihiki_SetFloors = 0x80A4FAC4; // type:func +ObjOshihiki_GetHighestFloor = 0x80A4FC24; // type:func +ObjOshihiki_SetGround = 0x80A4FD70; // type:func +ObjOshihiki_CheckFloor = 0x80A4FDC8; // type:func +ObjOshihiki_CheckGround = 0x80A4FE20; // type:func +ObjOshihiki_CheckWall = 0x80A4FE98; // type:func +ObjOshihiki_MoveWithBlockUnder = 0x80A500EC; // type:func +ObjOshihiki_SetupOnScene = 0x80A501E8; // type:func +ObjOshihiki_OnScene = 0x80A50220; // type:func +ObjOshihiki_SetupOnActor = 0x80A5030C; // type:func +ObjOshihiki_OnActor = 0x80A5034C; // type:func +ObjOshihiki_SetupPush = 0x80A50544; // type:func +ObjOshihiki_Push = 0x80A50570; // type:func +ObjOshihiki_SetupFall = 0x80A5078C; // type:func +ObjOshihiki_Fall = 0x80A507E4; // type:func +ObjOshihiki_Update = 0x80A508E8; // type:func +ObjOshihiki_Draw = 0x80A50970; // type:func +BgGateShutter_Init = 0x80A50EA0; // type:func +BgGateShutter_Destroy = 0x80A50F88; // type:func +func_8087828C = 0x80A50FBC; // type:func +func_80878300 = 0x80A51030; // type:func +func_808783AC = 0x80A510E0; // type:func +func_808783D4 = 0x80A51108; // type:func +BgGateShutter_Update = 0x80A511C4; // type:func +BgGateShutter_Draw = 0x80A511F8; // type:func +EffDust_SetupAction = 0x80A51320; // type:func +EffDust_SetupDraw = 0x80A5132C; // type:func +EffDust_InitPosAndDistance = 0x80A51338; // type:func +EffDust_Init = 0x80A513B0; // type:func +EffDust_Destroy = 0x80A51570; // type:func +EffDust_UpdateFunc_8099DB28 = 0x80A51580; // type:func +EffDust_UpdateFunc_8099DD74 = 0x80A517CC; // type:func +EffDust_UpdateFunc_8099DFC0 = 0x80A51A18; // type:func +EffDust_Update = 0x80A51F2C; // type:func +EffDust_DrawFunc_8099E4F4 = 0x80A51F50; // type:func +EffDust_DrawFunc_8099E784 = 0x80A521AC; // type:func +EffDust_Draw = 0x80A52510; // type:func +BgSpot01Fusya_SetupAction = 0x80A52700; // type:func +BgSpot01Fusya_Init = 0x80A5270C; // type:func +BgSpot01Fusya_Destroy = 0x80A52788; // type:func +func_808AAA50 = 0x80A52798; // type:func +BgSpot01Fusya_Update = 0x80A52858; // type:func +BgSpot01Fusya_Draw = 0x80A5287C; // type:func +BgSpot01Idohashira_PlayBreakSfx1 = 0x80A529A0; // type:func +BgSpot01Idohashira_PlayBreakSfx2 = 0x80A529C8; // type:func +func_808AAD3C = 0x80A52A00; // type:func +func_808AAE6C = 0x80A52B38; // type:func +func_808AAF34 = 0x80A52C04; // type:func +BgSpot01Idohashira_Destroy = 0x80A52DC8; // type:func +BgSpot01Idohashira_NotInCsMode = 0x80A52DFC; // type:func +BgSpot01Idohashira_GetCue = 0x80A52E1C; // type:func +func_808AB18C = 0x80A52E68; // type:func +func_808AB1DC = 0x80A52EBC; // type:func +func_808AB29C = 0x80A52F60; // type:func +func_808AB3E8 = 0x80A530AC; // type:func +func_808AB3F8 = 0x80A530C0; // type:func +func_808AB414 = 0x80A530E0; // type:func +func_808AB444 = 0x80A5310C; // type:func +func_808AB504 = 0x80A531B8; // type:func +func_808AB510 = 0x80A531C8; // type:func +func_808AB530 = 0x80A531E8; // type:func +func_808AB570 = 0x80A5322C; // type:func +BgSpot01Idohashira_Update = 0x80A5324C; // type:func +BgSpot01Idohashira_Init = 0x80A53294; // type:func +func_808AB700 = 0x80A533AC; // type:func +BgSpot01Idohashira_Draw = 0x80A5343C; // type:func +BgSpot01Idomizu_Init = 0x80A535A0; // type:func +BgSpot01Idomizu_Destroy = 0x80A53638; // type:func +func_808ABB84 = 0x80A53648; // type:func +BgSpot01Idomizu_Update = 0x80A536FC; // type:func +BgSpot01Idomizu_Draw = 0x80A53720; // type:func +BgPoSyokudai_Init = 0x80A538B0; // type:func +BgPoSyokudai_Destroy = 0x80A53B50; // type:func +BgPoSyokudai_Update = 0x80A53BC0; // type:func +BgPoSyokudai_Draw = 0x80A53C40; // type:func +BgGanonOtyuka_Init = 0x80A54200; // type:func +BgGanonOtyuka_Destroy = 0x80A5429C; // type:func +BgGanonOtyuka_WaitToFall = 0x80A542D0; // type:func +BgGanonOtyuka_Fall = 0x80A54520; // type:func +BgGanonOtyuka_DoNothing = 0x80A54960; // type:func +BgGanonOtyuka_Update = 0x80A54970; // type:func +BgGanonOtyuka_Draw = 0x80A549B8; // type:func +func_808B3960 = 0x80A56840; // type:func +BgSpot15Rrbox_RotatePoint = 0x80A56898; // type:func +func_808B3A34 = 0x80A568EC; // type:func +func_808B3A40 = 0x80A568FC; // type:func +func_808B3AAC = 0x80A5696C; // type:func +BgSpot15Rrbox_Init = 0x80A56A54; // type:func +BgSpot15Rrbox_Destroy = 0x80A56B24; // type:func +BgSpot15Rrbox_TrySnapToCheckedPoint = 0x80A56B60; // type:func +BgSpot15Rrbox_GetFloorHeight = 0x80A56CA0; // type:func +BgSpot15Rrbox_TrySnapToFloor = 0x80A56E20; // type:func +func_808B4010 = 0x80A56EE0; // type:func +func_808B4084 = 0x80A56F54; // type:func +func_808B40AC = 0x80A56F80; // type:func +func_808B4178 = 0x80A5704C; // type:func +func_808B4194 = 0x80A5706C; // type:func +func_808B4380 = 0x80A57258; // type:func +func_808B43D0 = 0x80A572A8; // type:func +func_808B44B8 = 0x80A57374; // type:func +func_808B44CC = 0x80A5738C; // type:func +BgSpot15Rrbox_Update = 0x80A573B0; // type:func +BgSpot15Rrbox_Draw = 0x80A5741C; // type:func +BgUmaJump_Init = 0x80A57620; // type:func +BgUmaJump_Destroy = 0x80A576DC; // type:func +BgUmaJump_Update = 0x80A57710; // type:func +BgUmaJump_Draw = 0x80A57720; // type:func +EnInsect_InitFlags = 0x80A577B0; // type:func +EnInsect_XZDistanceSquared = 0x80A577D4; // type:func +EnInsect_InBottleRange = 0x80A57804; // type:func +EnInsect_SetCrawlAnim = 0x80A578F4; // type:func +EnInsect_TryFindNearbySoil = 0x80A57940; // type:func +EnInsect_UpdateCrawlSfx = 0x80A579F8; // type:func +EnInsect_Init = 0x80A57A8C; // type:func +EnInsect_Destroy = 0x80A57CD8; // type:func +EnInsect_SetupSlowDown = 0x80A57D48; // type:func +EnInsect_SlowDown = 0x80A57D98; // type:func +EnInsect_SetupCrawl = 0x80A57F3C; // type:func +EnInsect_Crawl = 0x80A57F8C; // type:func +EnInsect_SetupRunFromPlayer = 0x80A581B8; // type:func +EnInsect_RunFromPlayer = 0x80A58208; // type:func +EnInsect_SetupCaught = 0x80A58400; // type:func +EnInsect_Caught = 0x80A5846C; // type:func +EnInsect_SetupDig = 0x80A58564; // type:func +EnInsect_Dig = 0x80A585DC; // type:func +EnInsect_SetupWalkOnWater = 0x80A58800; // type:func +EnInsect_WalkOnWater = 0x80A58860; // type:func +EnInsect_SetupDrown = 0x80A58B94; // type:func +EnInsect_Drown = 0x80A58C0C; // type:func +EnInsect_SetupDropped = 0x80A58D3C; // type:func +EnInsect_Dropped = 0x80A58E04; // type:func +EnInsect_Update = 0x80A59534; // type:func +EnInsect_Draw = 0x80A5977C; // type:func +EnButte_SelectFlightParams = 0x80A59CD0; // type:func +EnButte_ResetTransformationEffect = 0x80A59D54; // type:func +EnButte_UpdateTransformationEffect = 0x80A59D70; // type:func +EnButte_DrawTransformationEffect = 0x80A59DA8; // type:func +EnButte_Init = 0x80A59FE4; // type:func +EnButte_Destroy = 0x80A5A158; // type:func +func_809CD56C = 0x80A5A184; // type:func +func_809CD634 = 0x80A5A24C; // type:func +EnButte_Turn = 0x80A5A314; // type:func +EnButte_SetupFlyAround = 0x80A5A3B0; // type:func +EnButte_FlyAround = 0x80A5A3FC; // type:func +EnButte_SetupFollowLink = 0x80A5A7E0; // type:func +EnButte_FollowLink = 0x80A5A82C; // type:func +EnButte_SetupTransformIntoFairy = 0x80A5ABE0; // type:func +EnButte_TransformIntoFairy = 0x80A5AC30; // type:func +EnButte_SetupWaitToDie = 0x80A5ACEC; // type:func +EnButte_WaitToDie = 0x80A5AD0C; // type:func +EnButte_Update = 0x80A5AD3C; // type:func +EnButte_Draw = 0x80A5AE7C; // type:func +EnFish_XZDistanceSquared = 0x80A5B2A0; // type:func +EnFish_SetInWaterAnimation = 0x80A5B2D0; // type:func +EnFish_SetOutOfWaterAnimation = 0x80A5B334; // type:func +EnFish_BeginRespawn = 0x80A5B398; // type:func +EnFish_SetCutsceneData = 0x80A5B3CC; // type:func +EnFish_ClearCutsceneData = 0x80A5B464; // type:func +EnFish_Init = 0x80A5B48C; // type:func +EnFish_Destroy = 0x80A5B5D0; // type:func +EnFish_SetYOffset = 0x80A5B5FC; // type:func +EnFish_InBottleRange = 0x80A5B6B4; // type:func +EnFish_CheckXZDistanceToPlayer = 0x80A5B7A4; // type:func +EnFish_Respawning_SetupSlowDown = 0x80A5B7D4; // type:func +EnFish_Respawning_SlowDown = 0x80A5B82C; // type:func +EnFish_Respawning_SetupFollowChild = 0x80A5B920; // type:func +EnFish_Respawning_FollowChild = 0x80A5B978; // type:func +EnFish_Respawning_SetupFleePlayer = 0x80A5BB0C; // type:func +EnFish_Respawning_FleePlayer = 0x80A5BB64; // type:func +EnFish_Respawning_SetupApproachPlayer = 0x80A5BD54; // type:func +EnFish_Respawning_ApproachPlayer = 0x80A5BDAC; // type:func +EnFish_Dropped_SetupFall = 0x80A5BF70; // type:func +EnFish_Dropped_Fall = 0x80A5BFD0; // type:func +EnFish_Dropped_SetupFlopOnGround = 0x80A5C0D8; // type:func +EnFish_Dropped_FlopOnGround = 0x80A5C21C; // type:func +EnFish_Dropped_SetupSwimAway = 0x80A5C3F8; // type:func +EnFish_Dropped_SwimAway = 0x80A5C46C; // type:func +EnFish_Unique_SetupSwimIdle = 0x80A5C634; // type:func +EnFish_Unique_SwimIdle = 0x80A5C68C; // type:func +EnFish_Cutscene_FlopOnGround = 0x80A5C8B4; // type:func +EnFish_Cutscene_WiggleFlyingThroughAir = 0x80A5C9E4; // type:func +EnFish_UpdateCutscene = 0x80A5CA80; // type:func +EnFish_OrdinaryUpdate = 0x80A5CC40; // type:func +EnFish_RespawningUpdate = 0x80A5CDC4; // type:func +EnFish_Update = 0x80A5CED8; // type:func +EnFish_Draw = 0x80A5CF84; // type:func +BgSpot08Iceblock_SetupAction = 0x80A5D3B0; // type:func +BgSpot08Iceblock_InitDynaPoly = 0x80A5D3BC; // type:func +BgSpot08Iceblock_CheckParams = 0x80A5D414; // type:func +BgSpot08Iceblock_Bobbing = 0x80A5D474; // type:func +BgSpot08Iceblock_SinkUnderPlayer = 0x80A5D4D0; // type:func +BgSpot08Iceblock_SetWaterline = 0x80A5D580; // type:func +BgSpot08Iceblock_MultVectorScalar = 0x80A5D5A0; // type:func +BgSpot08Iceblock_CrossProduct = 0x80A5D5D4; // type:func +BgSpot08Iceblock_NormalizeVector = 0x80A5D648; // type:func +BgSpot08Iceblock_Roll = 0x80A5D6E4; // type:func +BgSpot08Iceblock_SpawnTwinFloe = 0x80A5DA58; // type:func +BgSpot08Iceblock_Init = 0x80A5DB58; // type:func +BgSpot08Iceblock_Destroy = 0x80A5DD4C; // type:func +BgSpot08Iceblock_SetupFloatNonrotating = 0x80A5DD80; // type:func +BgSpot08Iceblock_FloatNonrotating = 0x80A5DDA4; // type:func +BgSpot08Iceblock_SetupFloatRotating = 0x80A5DDF8; // type:func +BgSpot08Iceblock_FloatRotating = 0x80A5DE1C; // type:func +BgSpot08Iceblock_SetupFloatOrbitingTwins = 0x80A5DE7C; // type:func +BgSpot08Iceblock_FloatOrbitingTwins = 0x80A5DEA0; // type:func +BgSpot08Iceblock_SetupNoAction = 0x80A5DF78; // type:func +BgSpot08Iceblock_Update = 0x80A5DF98; // type:func +BgSpot08Iceblock_Draw = 0x80A5E034; // type:func +ItemEtcetera_SetupAction = 0x80A5E3F0; // type:func +ItemEtcetera_Init = 0x80A5E3FC; // type:func +ItemEtcetera_Destroy = 0x80A5E57C; // type:func +ItemEtcetera_WaitForObject = 0x80A5E58C; // type:func +func_80B85824 = 0x80A5E5E4; // type:func +func_80B858B4 = 0x80A5E67C; // type:func +ItemEtcetera_SpawnSparkles = 0x80A5E75C; // type:func +ItemEtcetera_MoveFireArrowDown = 0x80A5E86C; // type:func +func_80B85B28 = 0x80A5E8FC; // type:func +ItemEtcetera_UpdateFireArrow = 0x80A5E944; // type:func +ItemEtcetera_Update = 0x80A5E9C4; // type:func +ItemEtcetera_DrawThroughLens = 0x80A5E9E8; // type:func +ItemEtcetera_Draw = 0x80A5EA40; // type:func +ArrowFire_SetupAction = 0x80A5ECC0; // type:func +ArrowFire_Init = 0x80A5ECCC; // type:func +ArrowFire_Destroy = 0x80A5ED48; // type:func +ArrowFire_Charge = 0x80A5ED6C; // type:func +func_80865ECC = 0x80A5EE60; // type:func +ArrowFire_Hit = 0x80A5EEB8; // type:func +ArrowFire_Fly = 0x80A5F084; // type:func +ArrowFire_Update = 0x80A5F1D8; // type:func +ArrowFire_Draw = 0x80A5F22C; // type:func +ArrowIce_SetupAction = 0x80A60B80; // type:func +ArrowIce_Init = 0x80A60B8C; // type:func +ArrowIce_Destroy = 0x80A60C08; // type:func +ArrowIce_Charge = 0x80A60C2C; // type:func +func_80867E8C = 0x80A60D20; // type:func +ArrowIce_Hit = 0x80A60D78; // type:func +ArrowIce_Fly = 0x80A60F44; // type:func +ArrowIce_Update = 0x80A61098; // type:func +ArrowIce_Draw = 0x80A610EC; // type:func +ArrowLight_SetupAction = 0x80A62A60; // type:func +ArrowLight_Init = 0x80A62A6C; // type:func +ArrowLight_Destroy = 0x80A62AE8; // type:func +ArrowLight_Charge = 0x80A62B0C; // type:func +func_80869E6C = 0x80A62C00; // type:func +ArrowLight_Hit = 0x80A62C58; // type:func +ArrowLight_Fly = 0x80A62E24; // type:func +ArrowLight_Update = 0x80A62F78; // type:func +ArrowLight_Draw = 0x80A62FCC; // type:func +ObjKibako_SpawnCollectible = 0x80A64950; // type:func +ObjKibako_ApplyGravity = 0x80A649B0; // type:func +ObjKibako_InitCollider = 0x80A649E4; // type:func +ObjKibako_Init = 0x80A64A3C; // type:func +ObjKibako_Destroy = 0x80A64AB4; // type:func +ObjKibako_AirBreak = 0x80A64AE0; // type:func +ObjKibako_WaterBreak = 0x80A64D60; // type:func +ObjKibako_SetupIdle = 0x80A64FE0; // type:func +ObjKibako_Idle = 0x80A64FFC; // type:func +ObjKibako_SetupHeld = 0x80A651F8; // type:func +ObjKibako_Held = 0x80A6522C; // type:func +ObjKibako_SetupThrown = 0x80A652F8; // type:func +ObjKibako_Thrown = 0x80A65358; // type:func +ObjKibako_Update = 0x80A65494; // type:func +ObjKibako_Draw = 0x80A654B8; // type:func +ObjTsubo_SpawnCollectible = 0x80A65650; // type:func +ObjTsubo_ApplyGravity = 0x80A656B0; // type:func +ObjTsubo_SnapToFloor = 0x80A656E4; // type:func +ObjTsubo_InitCollider = 0x80A65780; // type:func +ObjTsubo_Init = 0x80A657D8; // type:func +ObjTsubo_Destroy = 0x80A658A8; // type:func +ObjTsubo_AirBreak = 0x80A658D4; // type:func +ObjTsubo_WaterBreak = 0x80A65B5C; // type:func +ObjTsubo_SetupWaitForObject = 0x80A65DF4; // type:func +ObjTsubo_WaitForObject = 0x80A65E08; // type:func +ObjTsubo_SetupIdle = 0x80A65E7C; // type:func +ObjTsubo_Idle = 0x80A65E90; // type:func +ObjTsubo_SetupLiftedUp = 0x80A660A0; // type:func +ObjTsubo_LiftedUp = 0x80A660E4; // type:func +ObjTsubo_SetupThrown = 0x80A6616C; // type:func +ObjTsubo_Thrown = 0x80A66234; // type:func +ObjTsubo_Update = 0x80A663C8; // type:func +ObjTsubo_Draw = 0x80A663EC; // type:func +EnWonderItem_Destroy = 0x80A66640; // type:func +EnWonderItem_DropCollectible = 0x80A66684; // type:func +EnWonderItem_Init = 0x80A667E0; // type:func +EnWonderItem_MultitagFree = 0x80A66B2C; // type:func +EnWonderItem_ProximityDrop = 0x80A66C74; // type:func +EnWonderItem_InteractSwitch = 0x80A66CDC; // type:func +EnWonderItem_ProximitySwitch = 0x80A66D10; // type:func +EnWonderItem_MultitagOrdered = 0x80A66D9C; // type:func +EnWonderItem_BombSoldier = 0x80A66EF8; // type:func +EnWonderItem_RollDrop = 0x80A66F88; // type:func +EnWonderItem_Update = 0x80A66FFC; // type:func +EnIk_Destroy = 0x80A67370; // type:func +EnIk_SetupAction = 0x80A673F0; // type:func +EnIk_InitImpl = 0x80A673FC; // type:func +EnIk_HandleBlocking = 0x80A67648; // type:func +EnIk_FindBreakableProp = 0x80A676D8; // type:func +EnIk_SetupStandUp = 0x80A67778; // type:func +EnIk_StandUp = 0x80A67824; // type:func +EnIk_SetupIdle = 0x80A67904; // type:func +EnIk_Idle = 0x80A67994; // type:func +EnIk_SetupWalkOrRun = 0x80A67B14; // type:func +EnIk_WalkOrRun = 0x80A67C0C; // type:func +EnIk_SetupVerticalAttack = 0x80A67E94; // type:func +EnIk_VerticalAttack = 0x80A67F24; // type:func +EnIk_SetupPullOutAxe = 0x80A680D8; // type:func +EnIk_PullOutAxe = 0x80A68178; // type:func +EnIk_SetupDoubleHorizontalAttack = 0x80A68234; // type:func +EnIk_DoubleHorizontalAttack = 0x80A682CC; // type:func +EnIk_SetupRecoverFromHorizontalAttack = 0x80A6843C; // type:func +EnIk_RecoverFromHorizontalAttack = 0x80A684C8; // type:func +EnIk_SetupSingleHorizontalAttack = 0x80A68510; // type:func +EnIk_SingleHorizontalAttack = 0x80A685A0; // type:func +EnIk_SetupStopAndBlock = 0x80A68660; // type:func +EnIk_StopAndBlock = 0x80A686EC; // type:func +EnIk_SetupReactToAttack = 0x80A68800; // type:func +EnIk_ReactToAttack = 0x80A68920; // type:func +EnIk_SetupDie = 0x80A689FC; // type:func +EnIk_Die = 0x80A68AA8; // type:func +EnIk_UpdateDamage = 0x80A68CA4; // type:func +EnIk_UpdateEnemy = 0x80A69010; // type:func +EnIk_SetPrimEnvColors = 0x80A69228; // type:func +EnIk_OverrideLimbDrawEnemy = 0x80A692CC; // type:func +EnIk_PostLimbDrawEnemy = 0x80A6938C; // type:func +EnIk_DrawEnemy = 0x80A6978C; // type:func +EnIk_StartMinibossBgm = 0x80A69BCC; // type:func +EnIk_UpdateAction2Sfx = 0x80A69BEC; // type:func +EnIk_PlayAxeSpawnSfx = 0x80A69DB8; // type:func +EnIk_SpawnAxeSmoke = 0x80A69E08; // type:func +EnIk_UpdateBgCheckInfo = 0x80A6A014; // type:func +EnIk_UpdateSkelAnime = 0x80A6A05C; // type:func +EnIk_GetCue = 0x80A6A080; // type:func +EnIk_SetStartPosRotFromCue = 0x80A6A0A8; // type:func +EnIk_GetAnimCurFrame = 0x80A6A128; // type:func +EnIk_SetupCsAction0 = 0x80A6A134; // type:func +EnIk_SetupCsAction1 = 0x80A6A148; // type:func +EnIk_SetupCsAction2 = 0x80A6A1D4; // type:func +EnIk_HandleEnemyChange = 0x80A6A254; // type:func +EnIk_PlayArmorFallSfx = 0x80A6A294; // type:func +EnIk_PlayDeathSfx = 0x80A6A2DC; // type:func +EnIk_SetupCsAction3 = 0x80A6A350; // type:func +EnIk_SetupCsAction4 = 0x80A6A428; // type:func +EnIk_SetupCsAction5 = 0x80A6A464; // type:func +EnIk_CsAction3 = 0x80A6A480; // type:func +EnIk_CsAction4 = 0x80A6A4B8; // type:func +EnIk_CsAction5 = 0x80A6A4F8; // type:func +EnIk_OverrideLimbDrawDefeat = 0x80A6A534; // type:func +EnIk_PostLimbDrawDefeat = 0x80A6A5A0; // type:func +EnIk_CsDrawDefeat = 0x80A6A7F0; // type:func +EnIk_HandleCsCues = 0x80A6A954; // type:func +EnIk_CsAction0 = 0x80A6AA50; // type:func +EnIk_CsAction1 = 0x80A6AA70; // type:func +EnIk_CsAction2 = 0x80A6AAA8; // type:func +EnIk_UpdateCutscene = 0x80A6AB0C; // type:func +EnIk_OverrideLimbDrawIntro = 0x80A6AB54; // type:func +EnIk_PostLimbDrawIntro = 0x80A6ABD8; // type:func +EnIk_CsDrawNothing = 0x80A6ADC8; // type:func +EnIk_CsDrawIntro = 0x80A6ADD8; // type:func +EnIk_DrawCutscene = 0x80A6AF3C; // type:func +EnIk_CsInit = 0x80A6AF84; // type:func +EnIk_ChangeToEnemy = 0x80A6AFF4; // type:func +EnIk_StartDefeatCutscene = 0x80A6B060; // type:func +EnIk_Init = 0x80A6B0F4; // type:func +DemoIk_Destroy = 0x80A6B9B0; // type:func +DemoIk_BgCheck = 0x80A6B9C0; // type:func +DemoIk_UpdateSkelAnime = 0x80A6BA08; // type:func +DemoIk_GetCue = 0x80A6BA2C; // type:func +DemoIk_CheckForCue = 0x80A6BA54; // type:func +DemoIk_SetMove = 0x80A6BA94; // type:func +DemoIk_EndMove = 0x80A6BAD4; // type:func +DemoIk_GetCurFrame = 0x80A6BAE8; // type:func +DemoIk_SetColors = 0x80A6BAF4; // type:func +DemoIk_GetCueChannel = 0x80A6BB8C; // type:func +DemoIk_Type1PlaySfx = 0x80A6BBB8; // type:func +DemoIk_SpawnDeadDb = 0x80A6BCB8; // type:func +DemoIk_MoveToStartPos = 0x80A6BE5C; // type:func +DemoIk_Type1Init = 0x80A6BEDC; // type:func +func_8098393C = 0x80A6BFF8; // type:func +func_8098394C = 0x80A6C00C; // type:func +func_809839AC = 0x80A6C070; // type:func +func_809839D0 = 0x80A6C098; // type:func +DemoIk_Type1Action0 = 0x80A6C158; // type:func +DemoIk_Type1Action1 = 0x80A6C178; // type:func +DemoIk_Type1Action2 = 0x80A6C1B0; // type:func +DemoIk_Type1PostLimbDraw = 0x80A6C218; // type:func +DemoIk_Type1Draw = 0x80A6C314; // type:func +DemoIk_Type2Init = 0x80A6C46C; // type:func +DemoIk_Type2PlaySfxOnFrame = 0x80A6C574; // type:func +DemoIk_Type2PlaySfx = 0x80A6C5D4; // type:func +func_80983FDC = 0x80A6C624; // type:func +func_80983FEC = 0x80A6C638; // type:func +func_8098402C = 0x80A6C678; // type:func +func_80984048 = 0x80A6C698; // type:func +DemoIk_Type2Action0 = 0x80A6C760; // type:func +DemoIk_Type2Action1 = 0x80A6C780; // type:func +DemoIk_Type2Action2 = 0x80A6C7A0; // type:func +DemoIk_Type2OverrideLimbDraw = 0x80A6C7DC; // type:func +DemoIk_Type2PostLimbDraw = 0x80A6C838; // type:func +DemoIk_Type2Draw = 0x80A6CA10; // type:func +DemoIk_Update = 0x80A6CB74; // type:func +DemoIk_DrawNothing = 0x80A6CBBC; // type:func +DemoIk_Draw = 0x80A6CBCC; // type:func +DemoIk_Init = 0x80A6CC14; // type:func +EnSkj_ChangeAnim = 0x80A6CEC0; // type:func +EnSkj_SetupAction = 0x80A6CF48; // type:func +EnSkj_CalculateCenter = 0x80A6CFA0; // type:func +EnSkj_SetNaviId = 0x80A6D038; // type:func +EnSkj_Init = 0x80A6D0BC; // type:func +EnSkj_Destroy = 0x80A6D408; // type:func +EnSkj_RangeCheck = 0x80A6D434; // type:func +EnSkj_GetItemXzRange = 0x80A6D4B0; // type:func +EnSkj_GetItemYRange = 0x80A6D4F8; // type:func +EnSkj_ShootNeedle = 0x80A6D524; // type:func +EnSkj_SpawnBlood = 0x80A6D63C; // type:func +EnSkj_CollisionCheck = 0x80A6D794; // type:func +func_80AFEDF8 = 0x80A6D950; // type:func +EnSkj_Backflip = 0x80A6D9DC; // type:func +EnSkj_Fade = 0x80A6DA24; // type:func +EnSkj_SetupWaitToShootNeedle = 0x80A6DAB4; // type:func +EnSkj_WaitToShootNeedle = 0x80A6DAF0; // type:func +EnSkj_SetupResetFight = 0x80A6DB90; // type:func +EnSkj_SariasSongKidIdle = 0x80A6DBD4; // type:func +EnSkj_SetupDie = 0x80A6DCCC; // type:func +EnSkj_WaitForDeathAnim = 0x80A6DD00; // type:func +func_80AFF1F0 = 0x80A6DD54; // type:func +EnSkj_PickNextFightAction = 0x80A6DD88; // type:func +func_80AFF2A0 = 0x80A6DE08; // type:func +EnSkj_WaitForLandAnim = 0x80A6DE4C; // type:func +func_80AFF334 = 0x80A6DEA0; // type:func +EnSkj_ResetFight = 0x80A6DEEC; // type:func +EnSkj_SetupStand = 0x80A6DF3C; // type:func +EnSkj_Fight = 0x80A6DF90; // type:func +EnSkj_SetupNeedleRecover = 0x80A6E15C; // type:func +EnSkj_NeedleRecover = 0x80A6E190; // type:func +EnSkj_SetupSpawnDeathEffect = 0x80A6E1CC; // type:func +EnSkj_SpawnDeathEffect = 0x80A6E1F4; // type:func +EnSkj_SetupWaitInRange = 0x80A6E30C; // type:func +EnSkj_WaitInRange = 0x80A6E344; // type:func +EnSkj_SetupWaitForSong = 0x80A6E558; // type:func +EnSkj_WaitForSong = 0x80A6E57C; // type:func +EnSkj_SetupAfterSong = 0x80A6E850; // type:func +EnSkj_AfterSong = 0x80A6E884; // type:func +EnSkj_SetupTalk = 0x80A6E8D8; // type:func +EnSkj_SariaSongTalk = 0x80A6E8F8; // type:func +func_80AFFE24 = 0x80A6E99C; // type:func +func_80AFFE44 = 0x80A6E9BC; // type:func +EnSkj_SetupPostSariasSong = 0x80A6EA34; // type:func +EnSkj_ChangeModeAfterSong = 0x80A6EA54; // type:func +EnSkj_SetupMaskTrade = 0x80A6EABC; // type:func +EnSkj_StartMaskTrade = 0x80A6EADC; // type:func +EnSkj_JumpFromStump = 0x80A6EB44; // type:func +EnSkj_WaitForLanding = 0x80A6EBA8; // type:func +EnSkj_SetupWaitForLandAnimFinish = 0x80A6EBF8; // type:func +EnSkj_WaitForLandAnimFinish = 0x80A6EC2C; // type:func +EnSkj_SetupWalkToPlayer = 0x80A6EC80; // type:func +EnSkj_WalkToPlayer = 0x80A6ECC4; // type:func +EnSkj_SetupAskForMask = 0x80A6ED60; // type:func +EnSkj_AskForMask = 0x80A6EDA8; // type:func +EnSkj_SetupTakeMask = 0x80A6EE40; // type:func +EnSkj_TakeMask = 0x80A6EE78; // type:func +EnSkj_SetupWaitForMaskTextClear = 0x80A6EF10; // type:func +EnSkj_WaitForMaskTextClear = 0x80A6EF30; // type:func +EnSkj_SetupWrongSong = 0x80A6EF98; // type:func +EnSkj_WrongSong = 0x80A6EFD0; // type:func +EnSkj_SetupWaitForTextClear = 0x80A6F024; // type:func +EnSkj_SariasSongWaitForTextClear = 0x80A6F044; // type:func +EnSkj_OcarinaGameSetupWaitForPlayer = 0x80A6F0BC; // type:func +EnSkj_OcarinaGameWaitForPlayer = 0x80A6F0FC; // type:func +EnSkj_IsLeavingGame = 0x80A6F138; // type:func +EnSkj_SetupIdle = 0x80A6F188; // type:func +EnSkj_Appear = 0x80A6F1BC; // type:func +EnSkj_OcarinaGameIdle = 0x80A6F1E4; // type:func +EnSkj_SetupPlayOcarinaGame = 0x80A6F230; // type:func +EnSkj_PlayOcarinaGame = 0x80A6F264; // type:func +EnSkj_SetupLeaveOcarinaGame = 0x80A6F2B0; // type:func +EnSkj_LeaveOcarinaGame = 0x80A6F2F8; // type:func +EnSkj_Update = 0x80A6F340; // type:func +EnSkj_SariasSongShortStumpUpdate = 0x80A6F524; // type:func +EnSkj_TurnPlayer = 0x80A6F54C; // type:func +EnSkj_SetupWaitForOcarina = 0x80A6F598; // type:func +EnSkj_WaitForOcarina = 0x80A6F654; // type:func +EnSkj_StartOcarinaMinigame = 0x80A6F6FC; // type:func +EnSkj_WaitForPlayback = 0x80A6F788; // type:func +EnSkj_FailedMiniGame = 0x80A6F9F8; // type:func +EnSkj_WaitForNextRound = 0x80A6FA38; // type:func +EnSkj_OfferNextRound = 0x80A6FA88; // type:func +EnSkj_WaitForOfferResponse = 0x80A6FAC4; // type:func +EnSkj_WonOcarinaMiniGame = 0x80A6FB6C; // type:func +EnSkj_WaitToGiveReward = 0x80A6FBAC; // type:func +EnSkj_GiveOcarinaGameReward = 0x80A6FC34; // type:func +EnSkj_FinishOcarinaGameRound = 0x80A6FCA8; // type:func +EnSkj_CleanupOcarinaGame = 0x80A6FD44; // type:func +EnSkj_OcarinaMinigameShortStumpUpdate = 0x80A6FDC0; // type:func +EnSkj_OverrideLimbDraw = 0x80A6FE44; // type:func +EnSkj_PostLimbDraw = 0x80A6FE60; // type:func +EnSkj_TranslucentDL = 0x80A6FF30; // type:func +EnSkj_OpaqueDL = 0x80A6FF7C; // type:func +EnSkj_Draw = 0x80A6FFB0; // type:func +EnSkjneedle_Init = 0x80A70800; // type:func +EnSkjneedle_Destroy = 0x80A70898; // type:func +EnSkjNeedle_CollisionCheck = 0x80A708C4; // type:func +EnSkjneedle_Update = 0x80A708F4; // type:func +EnSkjneedle_Draw = 0x80A709E4; // type:func +EnGSwitch_Init = 0x80A70B10; // type:func +EnGSwitch_Destroy = 0x80A70DA8; // type:func +EnGSwitch_Break = 0x80A70DD4; // type:func +EnGSwitch_WaitForObject = 0x80A70F7C; // type:func +EnGSwitch_SilverRupeeTracker = 0x80A71014; // type:func +EnGSwitch_SilverRupeeIdle = 0x80A710F8; // type:func +EnGSwitch_SilverRupeeCollected = 0x80A711E0; // type:func +EnGSwitch_GalleryRupee = 0x80A712C4; // type:func +EnGSwitch_ArcheryPot = 0x80A71664; // type:func +EnGSwitch_Kill = 0x80A7194C; // type:func +EnGSwitch_Update = 0x80A7197C; // type:func +EnGSwitch_DrawPot = 0x80A71AB0; // type:func +EnGSwitch_DrawRupee = 0x80A71B40; // type:func +EnGSwitch_SpawnEffects = 0x80A71C68; // type:func +EnGSwitch_UpdateEffects = 0x80A71D7C; // type:func +EnGSwitch_DrawEffects = 0x80A71F3C; // type:func +DemoExt_Destroy = 0x80A72340; // type:func +DemoExt_Init = 0x80A72350; // type:func +DemoExt_PlayVortexSFX = 0x80A72408; // type:func +DemoExt_GetCue = 0x80A72490; // type:func +DemoExt_SetupWait = 0x80A724B8; // type:func +DemoExt_SetupMaintainVortex = 0x80A724C8; // type:func +DemoExt_SetupDispellVortex = 0x80A72554; // type:func +DemoExt_FinishClosing = 0x80A7256C; // type:func +DemoExt_HandleCues = 0x80A725D8; // type:func +DemoExt_SetScrollAndRotation = 0x80A72684; // type:func +DemoExt_SetColorsAndScales = 0x80A726D4; // type:func +DemoExt_Wait = 0x80A72810; // type:func +DemoExt_MaintainVortex = 0x80A72830; // type:func +DemoExt_DispellVortex = 0x80A7286C; // type:func +DemoExt_Update = 0x80A728AC; // type:func +DemoExt_DrawNothing = 0x80A728F4; // type:func +DemoExt_DrawVortex = 0x80A72904; // type:func +DemoExt_Draw = 0x80A72B74; // type:func +DemoShd_SetupAction = 0x80A72C80; // type:func +DemoShd_Init = 0x80A72C8C; // type:func +DemoShd_Destroy = 0x80A72CDC; // type:func +func_80991298 = 0x80A72CEC; // type:func +DemoShd_Update = 0x80A72E44; // type:func +DemoShd_Draw = 0x80A72E68; // type:func +EnDns_Init = 0x80A75090; // type:func +EnDns_Destroy = 0x80A75204; // type:func +EnDns_ChangeAnim = 0x80A75230; // type:func +EnDns_CanBuyDekuNuts = 0x80A752B8; // type:func +EnDns_CanBuyDekuSticks = 0x80A75370; // type:func +EnDns_CanBuyPrice = 0x80A75428; // type:func +EnDns_CanBuyDekuSeeds = 0x80A75458; // type:func +EnDns_CanBuyDekuShield = 0x80A75520; // type:func +EnDns_CanBuyBombs = 0x80A75574; // type:func +EnDns_CanBuyArrows = 0x80A75614; // type:func +EnDns_CanBuyBottle = 0x80A756C4; // type:func +EnDns_PayPrice = 0x80A7571C; // type:func +EnDns_PayForDekuNuts = 0x80A75750; // type:func +EnDns_PayForHeartPiece = 0x80A75784; // type:func +EnDns_PayForBombs = 0x80A757CC; // type:func +EnDns_PayForArrows = 0x80A75800; // type:func +EnDns_PayForDekuStickUpgrade = 0x80A75834; // type:func +EnDns_PayForDekuNutUpgrade = 0x80A7587C; // type:func +EnDns_SetupIdle = 0x80A758C4; // type:func +EnDns_Idle = 0x80A75908; // type:func +EnDns_Talk = 0x80A759DC; // type:func +EnDns_OfferSaleItem = 0x80A75B14; // type:func +EnDns_SetupSale = 0x80A75C2C; // type:func +EnDns_Sale = 0x80A75C98; // type:func +EnDns_SetupBurrow = 0x80A75CE4; // type:func +EnDns_SetupNoSaleBurrow = 0x80A75DD8; // type:func +EnDns_Burrow = 0x80A75E50; // type:func +EnDns_PostBurrow = 0x80A75ECC; // type:func +EnDns_Update = 0x80A75FD0; // type:func +EnDns_Draw = 0x80A760C0; // type:func +ElfMsg_SetupAction = 0x80A76420; // type:func +ElfMsg_KillCheck = 0x80A7642C; // type:func +ElfMsg_Init = 0x80A76564; // type:func +ElfMsg_Destroy = 0x80A76658; // type:func +ElfMsg_GetMessageId = 0x80A76668; // type:func +ElfMsg_CallNaviCuboid = 0x80A76694; // type:func +ElfMsg_WithinXZDistance = 0x80A76764; // type:func +ElfMsg_CallNaviCylinder = 0x80A767B8; // type:func +ElfMsg_Update = 0x80A76880; // type:func +EnHonotrap_FlameCollisionCheck = 0x80A76A10; // type:func +EnHonotrap_GetNormal = 0x80A76AA4; // type:func +EnHonotrap_InitEye = 0x80A76B38; // type:func +EnHonotrap_InitFlame = 0x80A76CD4; // type:func +EnHonotrap_Init = 0x80A76E14; // type:func +EnHonotrap_Destroy = 0x80A76E6C; // type:func +EnHonotrap_SetupEyeIdle = 0x80A76EB8; // type:func +EnHonotrap_EyeIdle = 0x80A76ED4; // type:func +EnHonotrap_SetupEyeOpen = 0x80A76F8C; // type:func +EnHonotrap_EyeOpen = 0x80A76FE0; // type:func +EnHonotrap_SetupEyeAttack = 0x80A770B0; // type:func +EnHonotrap_EyeAttack = 0x80A770C8; // type:func +EnHonotrap_SetupEyeClose = 0x80A770F8; // type:func +EnHonotrap_EyeClose = 0x80A7710C; // type:func +EnHonotrap_SetupFlameGrow = 0x80A77158; // type:func +EnHonotrap_FlameGrow = 0x80A7716C; // type:func +EnHonotrap_SetupFlameDrop = 0x80A77200; // type:func +EnHonotrap_FlameDrop = 0x80A77268; // type:func +EnHonotrap_SetupFlameMove = 0x80A773AC; // type:func +EnHonotrap_FlameMove = 0x80A77438; // type:func +EnHonotrap_SetupFlameChase = 0x80A77604; // type:func +EnHonotrap_FlameChase = 0x80A77644; // type:func +EnHonotrap_SetupFlameVanish = 0x80A777F8; // type:func +EnHonotrap_FlameVanish = 0x80A7780C; // type:func +EnHonotrap_Update = 0x80A7789C; // type:func +EnHonotrap_DrawEye = 0x80A779E4; // type:func +EnHonotrap_DrawFlame = 0x80A77AD0; // type:func +EnHonotrap_Draw = 0x80A77C64; // type:func +EnTuboTrap_Init = 0x80A77F60; // type:func +EnTuboTrap_Destroy = 0x80A77FE4; // type:func +EnTuboTrap_DropCollectible = 0x80A78010; // type:func +EnTuboTrap_SpawnEffectsOnLand = 0x80A78070; // type:func +EnTuboTrap_SpawnEffectsInWater = 0x80A782E4; // type:func +EnTuboTrap_HandleImpact = 0x80A78564; // type:func +EnTuboTrap_WaitForProximity = 0x80A7878C; // type:func +EnTuboTrap_Levitate = 0x80A78898; // type:func +EnTuboTrap_Fly = 0x80A78924; // type:func +EnTuboTrap_Update = 0x80A789F4; // type:func +EnTuboTrap_Draw = 0x80A78AB4; // type:func +ObjIcePoly_Init = 0x80A78C00; // type:func +ObjIcePoly_Destroy = 0x80A78DC0; // type:func +ObjIcePoly_Idle = 0x80A78E10; // type:func +ObjIcePoly_Melt = 0x80A79040; // type:func +ObjIcePoly_Update = 0x80A792F8; // type:func +ObjIcePoly_Draw = 0x80A7931C; // type:func +BgSpot03Taki_ApplyOpeningAlpha = 0x80A795B0; // type:func +BgSpot03Taki_Init = 0x80A798EC; // type:func +BgSpot03Taki_Destroy = 0x80A7999C; // type:func +func_808ADEF0 = 0x80A799D0; // type:func +BgSpot03Taki_Update = 0x80A79BA4; // type:func +BgSpot03Taki_Draw = 0x80A79BC8; // type:func +BgSpot07Taki_Init = 0x80A79EA0; // type:func +BgSpot07Taki_Destroy = 0x80A79F4C; // type:func +BgSpot07Taki_DoNothing = 0x80A79F80; // type:func +BgSpot07Taki_Update = 0x80A79F90; // type:func +BgSpot07Taki_Draw = 0x80A79FB4; // type:func +EnFz_Init = 0x80A7A460; // type:func +EnFz_Destroy = 0x80A7A5E0; // type:func +EnFz_UpdateTargetPos = 0x80A7A630; // type:func +EnFz_ReachedTarget = 0x80A7A750; // type:func +EnFz_Damaged = 0x80A7A7A0; // type:func +EnFz_SpawnIceSmokeHiddenState = 0x80A7A994; // type:func +EnFz_SpawnIceSmokeGrowingState = 0x80A7A9A0; // type:func +EnFz_SpawnIceSmokeActiveState = 0x80A7AA80; // type:func +EnFz_ApplyDamage = 0x80A7AB44; // type:func +EnFz_SetYawTowardsPlayer = 0x80A7ADAC; // type:func +EnFz_SetupDisappear = 0x80A7ADEC; // type:func +EnFz_Disappear = 0x80A7AE1C; // type:func +EnFz_SetupWait = 0x80A7AE9C; // type:func +EnFz_Wait = 0x80A7AEDC; // type:func +EnFz_SetupAppear = 0x80A7AF2C; // type:func +EnFz_Appear = 0x80A7AF58; // type:func +EnFz_SetupAimForMove = 0x80A7AFE8; // type:func +EnFz_AimForMove = 0x80A7B02C; // type:func +EnFz_SetupMoveTowardsPlayer = 0x80A7B068; // type:func +EnFz_MoveTowardsPlayer = 0x80A7B09C; // type:func +EnFz_SetupAimForFreeze = 0x80A7B0D8; // type:func +EnFz_AimForFreeze = 0x80A7B108; // type:func +EnFz_SetupBlowSmoke = 0x80A7B144; // type:func +EnFz_BlowSmoke = 0x80A7B17C; // type:func +EnFz_SetupDespawn = 0x80A7B368; // type:func +EnFz_Despawn = 0x80A7B408; // type:func +EnFz_SetupMelt = 0x80A7B438; // type:func +EnFz_Melt = 0x80A7B47C; // type:func +EnFz_SetupBlowSmokeStationary = 0x80A7B544; // type:func +EnFz_BlowSmokeStationary = 0x80A7B588; // type:func +EnFz_Update = 0x80A7B780; // type:func +EnFz_Draw = 0x80A7B910; // type:func +EnFz_SpawnIceSmokeNoFreeze = 0x80A7BAD4; // type:func +EnFz_SpawnIceSmokeFreeze = 0x80A7BB78; // type:func +EnFz_UpdateIceSmoke = 0x80A7BC34; // type:func +EnFz_DrawEffects = 0x80A7BF20; // type:func +EnPoRelay_Init = 0x80A7C470; // type:func +EnPoRelay_Destroy = 0x80A7C5F8; // type:func +EnPoRelay_SetupIdle = 0x80A7C640; // type:func +EnPoRelay_Vec3sToVec3f = 0x80A7C67C; // type:func +EnPoRelay_SetupRace = 0x80A7C6C0; // type:func +EnPoRelay_SetupEndRace = 0x80A7C788; // type:func +EnPoRelay_CorrectY = 0x80A7C7C8; // type:func +EnPoRelay_Idle = 0x80A7C870; // type:func +EnPoRelay_Talk = 0x80A7C92C; // type:func +EnPoRelay_Race = 0x80A7C9A0; // type:func +EnPoRelay_EndRace = 0x80A7CEB4; // type:func +EnPoRelay_Talk2 = 0x80A7CF74; // type:func +EnPoRelay_DisappearAndReward = 0x80A7D04C; // type:func +EnPoRelay_Update = 0x80A7D518; // type:func +EnPoRelay_PostLimbDraw = 0x80A7D60C; // type:func +EnPoRelay_Draw = 0x80A7D800; // type:func +BgRelayObjects_Init = 0x80A7DB80; // type:func +BgRelayObjects_Destroy = 0x80A7DDC0; // type:func +func_808A90F4 = 0x80A7DE2C; // type:func +func_808A91AC = 0x80A7DEE8; // type:func +func_808A9234 = 0x80A7DF70; // type:func +BgRelayObjects_DoNothing = 0x80A7E05C; // type:func +func_808A932C = 0x80A7E06C; // type:func +func_808A939C = 0x80A7E0DC; // type:func +BgRelayObjects_Update = 0x80A7E1B0; // type:func +BgRelayObjects_Draw = 0x80A7E1D4; // type:func +EnDivingGame_Init = 0x80A7E330; // type:func +EnDivingGame_Destroy = 0x80A7E44C; // type:func +EnDivingGame_SpawnRuppy = 0x80A7E48C; // type:func +EnDivingGame_HasMinigameFinished = 0x80A7E5B8; // type:func +func_809EDCB0 = 0x80A7E764; // type:func +EnDivingGame_Talk = 0x80A7E800; // type:func +EnDivingGame_HandlePlayChoice = 0x80A7E990; // type:func +func_809EE048 = 0x80A7EAFC; // type:func +func_809EE0FC = 0x80A7EBB0; // type:func +func_809EE194 = 0x80A7EC48; // type:func +EnDivingGame_SetupRupeeThrow = 0x80A7ECA8; // type:func +EnDivingGame_RupeeThrow = 0x80A7EEBC; // type:func +EnDivingGame_SetupUnderwaterViewCs = 0x80A7F17C; // type:func +func_809EE780 = 0x80A7F234; // type:func +func_809EE800 = 0x80A7F2B4; // type:func +func_809EE8F0 = 0x80A7F3A4; // type:func +func_809EE96C = 0x80A7F424; // type:func +func_809EEA00 = 0x80A7F4B8; // type:func +func_809EEA90 = 0x80A7F548; // type:func +func_809EEAF8 = 0x80A7F5B4; // type:func +EnDivingGame_Update = 0x80A7F644; // type:func +EnDivingGame_EmptyDList = 0x80A7F870; // type:func +EnDivingGame_OverrideLimbDraw = 0x80A7F894; // type:func +EnDivingGame_Draw = 0x80A7F9F4; // type:func +EnKusa_SetupAction = 0x80A7FCE0; // type:func +EnKusa_SnapToFloor = 0x80A7FCF0; // type:func +EnKusa_DropCollectible = 0x80A7FD94; // type:func +EnKusa_UpdateVelY = 0x80A7FE60; // type:func +EnKusa_RandScaleVecToZero = 0x80A7FE94; // type:func +EnKusa_SetScaleSmall = 0x80A7FF18; // type:func +EnKusa_SpawnFragments = 0x80A7FF3C; // type:func +EnKusa_SpawnBugs = 0x80A80294; // type:func +EnKusa_InitCollider = 0x80A80350; // type:func +EnKusa_Init = 0x80A803A8; // type:func +EnKusa_Destroy = 0x80A804D0; // type:func +EnKusa_SetupWaitForObject = 0x80A804FC; // type:func +EnKusa_WaitForObject = 0x80A80520; // type:func +EnKusa_SetupMain = 0x80A805B0; // type:func +EnKusa_Main = 0x80A805E8; // type:func +EnKusa_SetupLiftedUp = 0x80A807B0; // type:func +EnKusa_LiftedUp = 0x80A807EC; // type:func +EnKusa_SetupFall = 0x80A808CC; // type:func +EnKusa_Fall = 0x80A80938; // type:func +EnKusa_SetupCut = 0x80A80BC8; // type:func +EnKusa_CutWaitRegrow = 0x80A80C18; // type:func +EnKusa_DoNothing = 0x80A80C4C; // type:func +EnKusa_SetupUprootedWaitRegrow = 0x80A80C5C; // type:func +EnKusa_UprootedWaitRegrow = 0x80A80CC8; // type:func +EnKusa_SetupRegrow = 0x80A80D2C; // type:func +EnKusa_Regrow = 0x80A80D84; // type:func +EnKusa_Update = 0x80A80E1C; // type:func +EnKusa_Draw = 0x80A80E80; // type:func +ObjBean_InitCollider = 0x80A811C0; // type:func +ObjBean_InitDynaPoly = 0x80A81218; // type:func +ObjBean_FindFloor = 0x80A81270; // type:func +func_80B8EBC8 = 0x80A812D8; // type:func +ObjBean_UpdatePosition = 0x80A812F8; // type:func +func_80B8EDF4 = 0x80A81508; // type:func +func_80B8EE24 = 0x80A81538; // type:func +ObjBean_Move = 0x80A81610; // type:func +ObjBean_SetDrawMode = 0x80A81640; // type:func +ObjBean_SetupPathCount = 0x80A81664; // type:func +ObjBean_SetupPath = 0x80A816A4; // type:func +ObjBean_FollowPath = 0x80A81720; // type:func +ObjBean_CheckForHorseTrample = 0x80A819C8; // type:func +ObjBean_Break = 0x80A81A58; // type:func +ObjBean_UpdateLeaves = 0x80A81CD0; // type:func +ObjBean_SetupLeavesStill = 0x80A81D8C; // type:func +ObjBean_LeavesStill = 0x80A81DFC; // type:func +ObjBean_SetupShakeLeaves = 0x80A81E40; // type:func +ObjBean_ShakeLeaves = 0x80A81EB8; // type:func +ObjBean_SetupShakeLeavesFast = 0x80A81F3C; // type:func +ObjBean_ShakeLeavesFast = 0x80A81F80; // type:func +ObjBean_SetupGrow = 0x80A82008; // type:func +ObjBean_Grow = 0x80A8201C; // type:func +ObjBean_SetupFlattenLeaves = 0x80A82080; // type:func +ObjBean_FlattenLeaves = 0x80A8209C; // type:func +ObjBean_SetupGrown = 0x80A82118; // type:func +ObjBean_Grown = 0x80A8215C; // type:func +ObjBean_Init = 0x80A821B8; // type:func +ObjBean_Destroy = 0x80A82374; // type:func +ObjBean_SetupWaitForBean = 0x80A823F0; // type:func +ObjBean_WaitForBean = 0x80A82428; // type:func +func_80B8FE00 = 0x80A824A4; // type:func +func_80B8FE3C = 0x80A824DC; // type:func +func_80B8FE6C = 0x80A8250C; // type:func +func_80B8FEAC = 0x80A8254C; // type:func +func_80B8FF50 = 0x80A825F0; // type:func +func_80B8FF8C = 0x80A82628; // type:func +func_80B90010 = 0x80A826AC; // type:func +func_80B90050 = 0x80A826E8; // type:func +ObjBean_SetupWaitForWater = 0x80A827A8; // type:func +ObjBean_WaitForWater = 0x80A827F0; // type:func +ObjBean_SetupGrowWaterPhase1 = 0x80A828E8; // type:func +ObjBean_GrowWaterPhase1 = 0x80A82928; // type:func +ObjBean_SetupGrowWaterPhase2 = 0x80A8296C; // type:func +ObjBean_GrowWaterPhase2 = 0x80A829A8; // type:func +ObjBean_SetupGrowWaterPhase3 = 0x80A82A58; // type:func +ObjBean_GrowWaterPhase3 = 0x80A82A90; // type:func +ObjBean_SetupGrowWaterPhase4 = 0x80A82BA4; // type:func +ObjBean_GrowWaterPhase4 = 0x80A82BDC; // type:func +ObjBean_SetupGrowWaterPhase5 = 0x80A82C78; // type:func +ObjBean_GrowWaterPhase5 = 0x80A82CB0; // type:func +ObjBean_SetupWaitForPlayer = 0x80A82D08; // type:func +ObjBean_WaitForPlayer = 0x80A82D34; // type:func +ObjBean_SetupFly = 0x80A82DA8; // type:func +ObjBean_Fly = 0x80A82DEC; // type:func +ObjBean_SetupWaitForStepOff = 0x80A82F1C; // type:func +ObjBean_WaitForStepOff = 0x80A82F48; // type:func +func_80B908EC = 0x80A82F88; // type:func +func_80B90918 = 0x80A82FB4; // type:func +func_80B90970 = 0x80A83010; // type:func +func_80B909B0 = 0x80A83050; // type:func +func_80B909F8 = 0x80A83098; // type:func +func_80B90A34 = 0x80A830D0; // type:func +ObjBean_Update = 0x80A83170; // type:func +ObjBean_DrawSoftSoilSpot = 0x80A83300; // type:func +ObjBean_DrawBeanstalk = 0x80A83388; // type:func +ObjBean_Draw = 0x80A83414; // type:func +ObjBombiwa_InitCollision = 0x80A83950; // type:func +ObjBombiwa_Init = 0x80A839A8; // type:func +ObjBombiwa_Destroy = 0x80A83A74; // type:func +ObjBombiwa_Break = 0x80A83AA0; // type:func +ObjBombiwa_Update = 0x80A83CA0; // type:func +ObjBombiwa_Draw = 0x80A83DB0; // type:func +ObjSwitch_RotateY = 0x80A83EC0; // type:func +ObjSwitch_InitDynaPoly = 0x80A83F40; // type:func +ObjSwitch_InitJntSphCollider = 0x80A83F98; // type:func +ObjSwitch_InitTrisCollider = 0x80A84034; // type:func +ObjSwitch_SpawnIce = 0x80A84154; // type:func +ObjSwitch_SetOn = 0x80A841C8; // type:func +ObjSwitch_SetOff = 0x80A84274; // type:func +ObjSwitch_UpdateTwoTexScrollXY = 0x80A842FC; // type:func +ObjSwitch_Init = 0x80A84344; // type:func +ObjSwitch_Destroy = 0x80A845DC; // type:func +ObjSwitch_FloorUpInit = 0x80A84680; // type:func +ObjSwitch_FloorUp = 0x80A846A0; // type:func +ObjSwitch_FloorPressInit = 0x80A84810; // type:func +ObjSwitch_FloorPress = 0x80A8482C; // type:func +ObjSwitch_FloorDownInit = 0x80A848EC; // type:func +ObjSwitch_FloorDown = 0x80A84914; // type:func +ObjSwitch_FloorReleaseInit = 0x80A84A60; // type:func +ObjSwitch_FloorRelease = 0x80A84A7C; // type:func +ObjSwitch_EyeIsHit = 0x80A84B60; // type:func +ObjSwitch_EyeFrozenInit = 0x80A84BD0; // type:func +ObjSwitch_EyeInit = 0x80A84BE4; // type:func +ObjSwitch_EyeOpenInit = 0x80A84C3C; // type:func +ObjSwitch_EyeOpen = 0x80A84C54; // type:func +ObjSwitch_EyeClosingInit = 0x80A84CC0; // type:func +ObjSwitch_EyeClosing = 0x80A84CDC; // type:func +ObjSwitch_EyeClosedInit = 0x80A84D58; // type:func +ObjSwitch_EyeClosed = 0x80A84D74; // type:func +ObjSwitch_EyeOpeningInit = 0x80A84E34; // type:func +ObjSwitch_EyeOpening = 0x80A84E50; // type:func +ObjSwitch_CrystalOffInit = 0x80A84EE0; // type:func +ObjSwitch_CrystalOff = 0x80A84F0C; // type:func +ObjSwitch_CrystalTurnOnInit = 0x80A85044; // type:func +ObjSwitch_CrystalTurnOn = 0x80A85060; // type:func +ObjSwitch_CrystalOnInit = 0x80A850E8; // type:func +ObjSwitch_CrystalOn = 0x80A85118; // type:func +ObjSwitch_CrystalTurnOffInit = 0x80A851E0; // type:func +ObjSwitch_CrystalTurnOff = 0x80A851FC; // type:func +ObjSwitch_Update = 0x80A85284; // type:func +ObjSwitch_DrawFloor = 0x80A853C0; // type:func +ObjSwitch_DrawFloorRusty = 0x80A85404; // type:func +ObjSwitch_DrawEye = 0x80A85434; // type:func +ObjSwitch_DrawCrystal = 0x80A85544; // type:func +ObjSwitch_Draw = 0x80A8577C; // type:func +ObjElevator_SetupAction = 0x80A85C80; // type:func +func_80B92B08 = 0x80A85C8C; // type:func +ObjElevator_Init = 0x80A85CE4; // type:func +ObjElevator_Destroy = 0x80A85D74; // type:func +func_80B92C5C = 0x80A85DA8; // type:func +func_80B92C80 = 0x80A85DCC; // type:func +func_80B92D20 = 0x80A85E6C; // type:func +func_80B92D44 = 0x80A85E90; // type:func +ObjElevator_Update = 0x80A85F14; // type:func +ObjElevator_Draw = 0x80A85F48; // type:func +ObjLift_SetupAction = 0x80A86040; // type:func +ObjLift_InitDynaPoly = 0x80A8604C; // type:func +ObjLift_SpawnFragments = 0x80A860A4; // type:func +ObjLift_Init = 0x80A86328; // type:func +ObjLift_Destroy = 0x80A86428; // type:func +ObjLift_SetupWait = 0x80A8645C; // type:func +ObjLift_Wait = 0x80A864A0; // type:func +ObjLift_SetupShake = 0x80A86590; // type:func +ObjLift_Shake = 0x80A865BC; // type:func +ObjLift_SetupFall = 0x80A86704; // type:func +ObjLift_Fall = 0x80A86788; // type:func +ObjLift_Update = 0x80A8688C; // type:func +ObjLift_Draw = 0x80A868C0; // type:func +ObjHsblock_SetupAction = 0x80A86A60; // type:func +func_80B93B68 = 0x80A86A6C; // type:func +func_80B93BF0 = 0x80A86AC4; // type:func +ObjHsblock_Init = 0x80A86B48; // type:func +ObjHsblock_Destroy = 0x80A86C18; // type:func +func_80B93D90 = 0x80A86C4C; // type:func +func_80B93DB0 = 0x80A86C6C; // type:func +func_80B93DF4 = 0x80A86CB0; // type:func +func_80B93E38 = 0x80A86CF8; // type:func +func_80B93E5C = 0x80A86D1C; // type:func +ObjHsblock_Update = 0x80A86DC4; // type:func +ObjHsblock_Draw = 0x80A86E10; // type:func +EnOkarinaTag_Destroy = 0x80A87030; // type:func +EnOkarinaTag_Init = 0x80A87040; // type:func +func_80ABEF2C = 0x80A871A8; // type:func +func_80ABF0CC = 0x80A8730C; // type:func +func_80ABF28C = 0x80A874CC; // type:func +func_80ABF4C8 = 0x80A87714; // type:func +func_80ABF708 = 0x80A87954; // type:func +func_80ABF7CC = 0x80A87A1C; // type:func +EnOkarinaTag_Update = 0x80A87AE0; // type:func +EnYabusameMark_Destroy = 0x80A88530; // type:func +EnYabusameMark_Init = 0x80A8855C; // type:func +func_80B42F74 = 0x80A8869C; // type:func +EnYabusameMark_Update = 0x80A888E0; // type:func +EnGoroiwa_UpdateCollider = 0x80A88C00; // type:func +EnGoroiwa_InitCollider = 0x80A88C6C; // type:func +EnGoroiwa_UpdateFlags = 0x80A88CD4; // type:func +EnGoroiwa_Vec3fNormalize = 0x80A88CF8; // type:func +EnGoroiwa_SetSpeed = 0x80A88D7C; // type:func +EnGoroiwa_FaceNextWaypoint = 0x80A88DA4; // type:func +EnGoroiwa_GetPrevWaypointDiff = 0x80A88E7C; // type:func +EnGoroiw_CheckEndOfPath = 0x80A88FD8; // type:func +EnGoroiwa_SetNextWaypoint = 0x80A8908C; // type:func +EnGoroiwa_ReverseDirection = 0x80A890BC; // type:func +EnGoroiwa_InitPath = 0x80A890E4; // type:func +EnGoroiwa_TeleportToWaypoint = 0x80A89124; // type:func +EnGoroiwa_InitRotation = 0x80A891C8; // type:func +EnGoroiwa_GetAscendDirection = 0x80A891E4; // type:func +EnGoroiwa_SpawnDust = 0x80A892A8; // type:func +EnGoroiwa_SpawnWaterEffects = 0x80A89498; // type:func +EnGoroiwa_MoveAndFall = 0x80A895CC; // type:func +EnGoroiwa_Move = 0x80A89700; // type:func +EnGoroiwa_MoveUpToNextWaypoint = 0x80A8992C; // type:func +EnGoroiwa_MoveDownToNextWaypoint = 0x80A89A4C; // type:func +EnGoroiwa_UpdateRotation = 0x80A89DAC; // type:func +EnGoroiwa_NextWaypoint = 0x80A89F4C; // type:func +EnGoroiwa_SpawnFragments = 0x80A89FD4; // type:func +EnGoroiwa_Init = 0x80A8A2F0; // type:func +EnGoroiwa_Destroy = 0x80A8A420; // type:func +EnGoroiwa_SetupRoll = 0x80A8A44C; // type:func +EnGoroiwa_Roll = 0x80A8A48C; // type:func +EnGoroiwa_SetupMoveAndFallToGround = 0x80A8A710; // type:func +EnGoroiwa_MoveAndFallToGround = 0x80A8A784; // type:func +EnGoroiwa_SetupWait = 0x80A8A824; // type:func +EnGoroiwa_Wait = 0x80A8A880; // type:func +EnGoroiwa_SetupMoveUp = 0x80A8A8C0; // type:func +EnGoroiwa_MoveUp = 0x80A8A910; // type:func +EnGoroiwa_SetupMoveDown = 0x80A8A9D0; // type:func +EnGoroiwa_MoveDown = 0x80A8AA3C; // type:func +EnGoroiwa_Update = 0x80A8AB04; // type:func +EnGoroiwa_Draw = 0x80A8AC64; // type:func +EnExRuppy_Init = 0x80A8AFC0; // type:func +EnExRuppy_Destroy = 0x80A8B398; // type:func +EnExRuppy_SpawnSparkles = 0x80A8B3A8; // type:func +EnExRuppy_DropIntoWater = 0x80A8B5C4; // type:func +EnExRuppy_EnterWater = 0x80A8B6A4; // type:func +EnExRuppy_Sink = 0x80A8B810; // type:func +EnExRuppy_WaitInGame = 0x80A8B910; // type:func +EnExRuppy_Kill = 0x80A8BA68; // type:func +EnExRuppy_WaitToBlowUp = 0x80A8BAAC; // type:func +EnExRuppy_WaitAsCollectible = 0x80A8BBD8; // type:func +EnExRuppy_GalleryTarget = 0x80A8BC5C; // type:func +EnExRuppy_Update = 0x80A8BCBC; // type:func +EnExRuppy_Draw = 0x80A8BD48; // type:func +EnToryo_Init = 0x80A8C080; // type:func +EnToryo_Destroy = 0x80A8C2C4; // type:func +EnToryo_TalkRespond = 0x80A8C2F0; // type:func +EnToryo_DoneTalking = 0x80A8C4E4; // type:func +EnToryo_ReactToExchangeItem = 0x80A8C550; // type:func +EnToryo_GetTextId = 0x80A8C5BC; // type:func +EnToryo_HandleTalking = 0x80A8C688; // type:func +EnToryo_Idle = 0x80A8C838; // type:func +EnToryo_Update = 0x80A8C89C; // type:func +EnToryo_Draw = 0x80A8C9D4; // type:func +EnToryo_OverrideLimbDraw = 0x80A8CA34; // type:func +EnToryo_PostLimbDraw = 0x80A8CAC4; // type:func +EnDaiku_ChangeAnim = 0x80A8CD10; // type:func +EnDaiku_Init = 0x80A8CDC4; // type:func +EnDaiku_Destroy = 0x80A8D10C; // type:func +EnDaiku_UpdateTalking = 0x80A8D138; // type:func +EnDaiku_UpdateText = 0x80A8D254; // type:func +EnDaiku_TentIdle = 0x80A8D524; // type:func +EnDaiku_Jailed = 0x80A8D55C; // type:func +EnDaiku_WaitFreedom = 0x80A8D62C; // type:func +EnDaiku_InitEscape = 0x80A8D690; // type:func +EnDaiku_EscapeRotate = 0x80A8D898; // type:func +EnDaiku_InitSubCamera = 0x80A8D904; // type:func +EnDaiku_UpdateSubCamera = 0x80A8DA90; // type:func +EnDaiku_EscapeSuccess = 0x80A8DB48; // type:func +EnDaiku_EscapeRun = 0x80A8DC84; // type:func +EnDaiku_Update = 0x80A8DE90; // type:func +EnDaiku_Draw = 0x80A8DFA8; // type:func +EnDaiku_OverrideLimbDraw = 0x80A8E0D0; // type:func +EnDaiku_PostLimbDraw = 0x80A8E154; // type:func +EnNwc_SetUpdate = 0x80A8E450; // type:func +EnNwc_ChickNoop = 0x80A8E45C; // type:func +EnNwc_ChickBgCheck = 0x80A8E470; // type:func +EnNwc_ChickFall = 0x80A8E56C; // type:func +EnNwc_UpdateChicks = 0x80A8E5D8; // type:func +EnNwc_DrawChicks = 0x80A8E7D8; // type:func +EnNwc_Init = 0x80A8EB54; // type:func +EnNwc_Destroy = 0x80A8ECE0; // type:func +EnNwc_Idle = 0x80A8ED0C; // type:func +EnNwc_Update = 0x80A8ED2C; // type:func +EnNwc_Draw = 0x80A8ED80; // type:func +EnBlkobj_SetupAction = 0x80A8EE90; // type:func +EnBlkobj_Init = 0x80A8EEA0; // type:func +EnBlkobj_Destroy = 0x80A8EF50; // type:func +EnBlkobj_Wait = 0x80A8EF84; // type:func +EnBlkobj_SpawnDarkLink = 0x80A8EFD8; // type:func +EnBlkobj_DarkLinkFight = 0x80A8F050; // type:func +EnBlkobj_DoNothing = 0x80A8F12C; // type:func +EnBlkobj_Update = 0x80A8F13C; // type:func +EnBlkobj_DrawAlpha = 0x80A8F160; // type:func +EnBlkobj_Draw = 0x80A8F1E0; // type:func +ItemInbox_Init = 0x80A8F3F0; // type:func +ItemInbox_Destroy = 0x80A8F424; // type:func +ItemInbox_Wait = 0x80A8F434; // type:func +ItemInbox_Update = 0x80A8F47C; // type:func +ItemInbox_Draw = 0x80A8F4A0; // type:func +EnGe1_Init = 0x80A8F550; // type:func +EnGe1_Destroy = 0x80A8F814; // type:func +EnGe1_SetTalkAction = 0x80A8F840; // type:func +EnGe1_SetAnimationIdle = 0x80A8F920; // type:func +EnGe1_CheckCarpentersFreed = 0x80A8F9A4; // type:func +EnGe1_KickPlayer = 0x80A8F9E0; // type:func +EnGe1_SpotPlayer = 0x80A8FAC0; // type:func +EnGe1_WatchForPlayerFrontOnly = 0x80A8FB20; // type:func +EnGe1_ChooseActionFromTextId = 0x80A8FBD8; // type:func +EnGe1_SetNormalText = 0x80A8FC6C; // type:func +EnGe1_WatchForAndSensePlayer = 0x80A8FC9C; // type:func +EnGe1_GetReaction_ValleyFloor = 0x80A8FD68; // type:func +EnGe1_WaitTillOpened_GTGGuard = 0x80A8FDBC; // type:func +EnGe1_Open_GTGGuard = 0x80A8FE0C; // type:func +EnGe1_SetupOpen_GTGGuard = 0x80A8FEBC; // type:func +EnGe1_RefuseEntryTooPoor_GTGGuard = 0x80A8FF7C; // type:func +EnGe1_OfferOpen_GTGGuard = 0x80A8FFBC; // type:func +EnGe1_RefuseOpenNoCard_GTGGuard = 0x80A900AC; // type:func +EnGe1_CheckForCard_GTGGuard = 0x80A900F0; // type:func +EnGe1_WaitGateOpen_GateOp = 0x80A90158; // type:func +EnGe1_WaitUntilGateOpened_GateOp = 0x80A901CC; // type:func +EnGe1_OpenGate_GateOp = 0x80A9021C; // type:func +EnGe1_SetupOpenGate_GateOp = 0x80A902CC; // type:func +EnGe1_CheckGate_GateOp = 0x80A90398; // type:func +EnGe1_Talk_GateGuard = 0x80A90414; // type:func +EnGe1_GetReaction_GateGuard = 0x80A90458; // type:func +EnGe1_SetupWait_Archery = 0x80A9050C; // type:func +EnGe1_WaitTillItemGiven_Archery = 0x80A90544; // type:func +EnGe1_BeginGiveItem_Archery = 0x80A90638; // type:func +EnGe1_TalkWinPrize_Archery = 0x80A90700; // type:func +EnGe1_TalkTooPoor_Archery = 0x80A90760; // type:func +EnGe1_WaitDoNothing = 0x80A907C4; // type:func +EnGe1_BeginGame_Archery = 0x80A907D4; // type:func +EnGe1_TalkOfferPlay_Archery = 0x80A90974; // type:func +EnGe1_TalkNoPrize_Archery = 0x80A909D4; // type:func +EnGe1_TalkAfterGame_Archery = 0x80A90A20; // type:func +EnGe1_TalkNoHorse_Archery = 0x80A90B24; // type:func +EnGe1_Wait_Archery = 0x80A90B68; // type:func +EnGe1_TurnToFacePlayer = 0x80A90C00; // type:func +EnGe1_LookAtPlayer = 0x80A90D18; // type:func +EnGe1_Update = 0x80A90DF4; // type:func +EnGe1_CueUpAnimation = 0x80A90F3C; // type:func +EnGe1_StopFidget = 0x80A90F7C; // type:func +EnGe1_OverrideLimbDraw = 0x80A90FD4; // type:func +EnGe1_PostLimbDraw = 0x80A91128; // type:func +EnGe1_Draw = 0x80A91194; // type:func +ObjBlockstop_Init = 0x80A91580; // type:func +ObjBlockstop_Destroy = 0x80A915DC; // type:func +ObjBlockstop_Update = 0x80A915EC; // type:func +EnSda_Init = 0x80A91720; // type:func +EnSda_Destroy = 0x80A91730; // type:func +EnSda_Update = 0x80A91740; // type:func +EnSda_Draw = 0x80A9177C; // type:func +func_80AF8F60 = 0x80A91810; // type:func +func_80AF95C4 = 0x80A91E74; // type:func +func_80AF9C70 = 0x80A924F0; // type:func +EnClearTag_CreateDebrisEffect = 0x80A92E20; // type:func +EnClearTag_CreateFireEffect = 0x80A92F18; // type:func +EnClearTag_CreateSmokeEffect = 0x80A93008; // type:func +EnClearTag_CreateFlashEffect = 0x80A9312C; // type:func +EnClearTag_Destroy = 0x80A93204; // type:func +EnClearTag_Init = 0x80A93230; // type:func +EnClearTag_CalculateFloorTangent = 0x80A933F4; // type:func +EnClearTag_Update = 0x80A934B0; // type:func +EnClearTag_Draw = 0x80A94264; // type:func +EnClearTag_UpdateEffects = 0x80A947F8; // type:func +EnClearTag_DrawEffects = 0x80A94BC0; // type:func +EnNiwLady_Init = 0x80A9E3C0; // type:func +EnNiwLady_Destroy = 0x80A9E4A8; // type:func +EnNiwLady_ChoseAnimation = 0x80A9E4D4; // type:func +func_80AB9F24 = 0x80A9E69C; // type:func +func_80ABA21C = 0x80A9E998; // type:func +func_80ABA244 = 0x80A9E9C4; // type:func +func_80ABA654 = 0x80A9ED44; // type:func +func_80ABA778 = 0x80A9EE3C; // type:func +func_80ABA878 = 0x80A9EF10; // type:func +func_80ABA9B8 = 0x80A9F054; // type:func +func_80ABAA9C = 0x80A9F138; // type:func +func_80ABAB08 = 0x80A9F1A8; // type:func +func_80ABAC00 = 0x80A9F2A0; // type:func +func_80ABAC84 = 0x80A9F328; // type:func +func_80ABAD38 = 0x80A9F3D0; // type:func +func_80ABAD7C = 0x80A9F3F0; // type:func +EnNiwLady_Update = 0x80A9F4B4; // type:func +EnNiwLady_EmptyDList = 0x80A9F71C; // type:func +EnNiwLady_OverrideLimbDraw = 0x80A9F740; // type:func +EnNiwLady_Draw = 0x80A9F89C; // type:func +EnGm_Init = 0x80A9FCC0; // type:func +EnGm_Destroy = 0x80A9FD20; // type:func +func_80A3D7C8 = 0x80A9FD4C; // type:func +func_80A3D838 = 0x80A9FDBC; // type:func +EnGm_UpdateEye = 0x80A9FF5C; // type:func +EnGm_SetTextID = 0x80A9FFD4; // type:func +func_80A3DB04 = 0x80AA0088; // type:func +func_80A3DBF4 = 0x80AA0178; // type:func +func_80A3DC44 = 0x80AA01CC; // type:func +func_80A3DD7C = 0x80AA0308; // type:func +EnGm_ProcessChoiceIndex = 0x80AA03A0; // type:func +func_80A3DF00 = 0x80AA0490; // type:func +func_80A3DF60 = 0x80AA04F4; // type:func +func_80A3DFBC = 0x80AA0554; // type:func +EnGm_Update = 0x80AA0608; // type:func +func_80A3E090 = 0x80AA062C; // type:func +EnGm_Draw = 0x80AA078C; // type:func +EnMs_SetOfferText = 0x80AA09F0; // type:func +EnMs_Init = 0x80AA0A6C; // type:func +EnMs_Destroy = 0x80AA0B90; // type:func +EnMs_Wait = 0x80AA0BBC; // type:func +EnMs_Talk = 0x80AA0C68; // type:func +EnMs_Sell = 0x80AA0D84; // type:func +EnMs_TalkAfterPurchase = 0x80AA0E20; // type:func +EnMs_Update = 0x80AA0E80; // type:func +EnMs_Draw = 0x80AA0F78; // type:func +func_80A6E3A0 = 0x80AA10E0; // type:func +EnHs_Init = 0x80AA10EC; // type:func +EnHs_Destroy = 0x80AA1230; // type:func +func_80A6E53C = 0x80AA125C; // type:func +func_80A6E5EC = 0x80AA1310; // type:func +func_80A6E630 = 0x80AA1354; // type:func +func_80A6E6B0 = 0x80AA13D4; // type:func +func_80A6E6D8 = 0x80AA13FC; // type:func +func_80A6E70C = 0x80AA1434; // type:func +func_80A6E740 = 0x80AA146C; // type:func +func_80A6E7BC = 0x80AA14EC; // type:func +func_80A6E8CC = 0x80AA15FC; // type:func +func_80A6E9AC = 0x80AA16D8; // type:func +EnHs_Update = 0x80AA1820; // type:func +EnHs_OverrideLimbDraw = 0x80AA198C; // type:func +EnHs_PostLimbDraw = 0x80AA1A48; // type:func +EnHs_Draw = 0x80AA1A88; // type:func +BgInGate_SetupAction = 0x80AA1C80; // type:func +BgInGate_Init = 0x80AA1C8C; // type:func +BgInGate_Destroy = 0x80AA1DA8; // type:func +func_80892890 = 0x80AA1DDC; // type:func +BgInGate_DoNothing = 0x80AA1EDC; // type:func +BgInGate_Update = 0x80AA1EEC; // type:func +BgInGate_Draw = 0x80AA1F10; // type:func +EnKanban_SetFloorRot = 0x80AA2010; // type:func +EnKanban_Init = 0x80AA20CC; // type:func +EnKanban_Destroy = 0x80AA21F4; // type:func +EnKanban_Message = 0x80AA222C; // type:func +EnKanban_Update = 0x80AA22E4; // type:func +EnKanban_Draw = 0x80AA3B60; // type:func +EnHeishi3_Init = 0x80AA5160; // type:func +EnHeishi3_Destroy = 0x80AA528C; // type:func +EnHeishi3_SetupGuardType = 0x80AA52B8; // type:func +EnHeishi3_StandSentinelInGrounds = 0x80AA5368; // type:func +EnHeishi3_StandSentinelInCastle = 0x80AA54C4; // type:func +EnHeishi3_CatchStart = 0x80AA5634; // type:func +func_80A55BD4 = 0x80AA56DC; // type:func +EnHeishi3_ResetAnimationToIdle = 0x80AA5774; // type:func +func_80A55D00 = 0x80AA5808; // type:func +EnHeishi3_Update = 0x80AA58B8; // type:func +EnHeishi3_OverrideLimbDraw = 0x80AA5998; // type:func +EnHeishi3_Draw = 0x80AA5A00; // type:func +EnSyatekiNiw_Init = 0x80AA5B30; // type:func +EnSyatekiNiw_Destroy = 0x80AA5C78; // type:func +EnSyatekiNiw_UpdateRotations = 0x80AA5CA4; // type:func +EnSyatekiNiw_SetupDefault = 0x80AA6000; // type:func +EnSyatekiNiw_Default = 0x80AA608C; // type:func +EnSyatekiNiw_SetupArchery = 0x80AA65BC; // type:func +EnSyatekiNiw_Archery = 0x80AA6674; // type:func +EnSyatekiNiw_ExitArchery = 0x80AA6AF0; // type:func +EnSyatekiNiw_SetupRemove = 0x80AA6B10; // type:func +EnSyatekiNiw_Remove = 0x80AA6C08; // type:func +EnSyatekiNiw_CheckHit = 0x80AA6DC4; // type:func +EnSyatekiNiw_Update = 0x80AA6E94; // type:func +SyatekiNiw_OverrideLimbDraw = 0x80AA7204; // type:func +EnSyatekiNiw_Draw = 0x80AA7334; // type:func +EnSyatekiNiw_SpawnFeather = 0x80AA73E0; // type:func +EnSyatekiNiw_UpdateEffects = 0x80AA74D0; // type:func +EnSyatekiNiw_DrawEffects = 0x80AA768C; // type:func +EnAttackNiw_Init = 0x80AA7BC0; // type:func +EnAttackNiw_Destroy = 0x80AA7CF4; // type:func +func_809B5268 = 0x80AA7D28; // type:func +func_809B55EC = 0x80AA80B0; // type:func +func_809B5670 = 0x80AA8134; // type:func +func_809B59B0 = 0x80AA8474; // type:func +func_809B5C18 = 0x80AA86E4; // type:func +EnAttackNiw_Update = 0x80AA87A8; // type:func +func_809B5F98 = 0x80AA8A6C; // type:func +EnAttackNiw_Draw = 0x80AA8BC4; // type:func +BgSpot01Idosoko_SetupAction = 0x80AA8E20; // type:func +BgSpot01Idosoko_Init = 0x80AA8E2C; // type:func +BgSpot01Idosoko_Destroy = 0x80AA8ECC; // type:func +func_808ABF54 = 0x80AA8F00; // type:func +BgSpot01Idosoko_Update = 0x80AA8F10; // type:func +BgSpot01Idosoko_Draw = 0x80AA8F34; // type:func +func_80AF5560 = 0x80AA9030; // type:func +EnSa_GetTextId = 0x80AA90B0; // type:func +EnSa_UpdateTalkState = 0x80AA91C4; // type:func +func_80AF57D8 = 0x80AA92A8; // type:func +func_80AF5894 = 0x80AA9368; // type:func +func_80AF58B8 = 0x80AA9390; // type:func +func_80AF594C = 0x80AA9424; // type:func +func_80AF59E0 = 0x80AA94B8; // type:func +func_80AF5A74 = 0x80AA954C; // type:func +func_80AF5B10 = 0x80AA95E8; // type:func +func_80AF5BA4 = 0x80AA967C; // type:func +func_80AF5C40 = 0x80AA9718; // type:func +func_80AF5CD4 = 0x80AA97AC; // type:func +func_80AF5CE4 = 0x80AA97C4; // type:func +EnSa_ChangeAnim = 0x80AA986C; // type:func +func_80AF5DFC = 0x80AA98DC; // type:func +func_80AF5F34 = 0x80AA9A14; // type:func +func_80AF603C = 0x80AA9B1C; // type:func +func_80AF609C = 0x80AA9B7C; // type:func +func_80AF6130 = 0x80AA9C18; // type:func +func_80AF6170 = 0x80AA9C5C; // type:func +EnSa_Init = 0x80AA9CA0; // type:func +EnSa_Destroy = 0x80AA9F10; // type:func +func_80AF6448 = 0x80AA9F3C; // type:func +func_80AF67D0 = 0x80AAA2C8; // type:func +func_80AF683C = 0x80AAA33C; // type:func +func_80AF68E4 = 0x80AAA3E4; // type:func +func_80AF6B20 = 0x80AAA624; // type:func +EnSa_Update = 0x80AAA6E4; // type:func +EnSa_OverrideLimbDraw = 0x80AAA874; // type:func +EnSa_PostLimbDraw = 0x80AAAA1C; // type:func +EnSa_Draw = 0x80AAAA78; // type:func +EnWonderTalk_Destroy = 0x80AAB2A0; // type:func +EnWonderTalk_Init = 0x80AAB2B0; // type:func +func_80B391CC = 0x80AAB358; // type:func +func_80B3943C = 0x80AAB4E8; // type:func +func_80B395F0 = 0x80AAB63C; // type:func +EnWonderTalk_Update = 0x80AAB82C; // type:func +BgGjyoBridge_Init = 0x80AAB930; // type:func +BgGjyoBridge_Destroy = 0x80AAB9E8; // type:func +func_808787A4 = 0x80AABA1C; // type:func +BgGjyoBridge_TriggerCutscene = 0x80AABA2C; // type:func +BgGjyoBridge_SpawnBridge = 0x80AABB84; // type:func +BgGjyoBridge_Update = 0x80AABC00; // type:func +BgGjyoBridge_Draw = 0x80AABC24; // type:func +EnDs_Init = 0x80AABE30; // type:func +EnDs_Destroy = 0x80AABF00; // type:func +EnDs_Talk = 0x80AABF10; // type:func +EnDs_TalkNoEmptyBottle = 0x80AABF60; // type:func +EnDs_TalkAfterGiveOddPotion = 0x80AABFCC; // type:func +EnDs_DisplayOddPotionText = 0x80AAC028; // type:func +EnDs_GiveOddPotion = 0x80AAC088; // type:func +EnDs_TalkAfterBrewOddPotion = 0x80AAC0F4; // type:func +EnDs_BrewOddPotion3 = 0x80AAC174; // type:func +EnDs_BrewOddPotion2 = 0x80AAC218; // type:func +EnDs_BrewOddPotion1 = 0x80AAC26C; // type:func +EnDs_OfferOddPotion = 0x80AAC30C; // type:func +EnDs_CheckRupeesAndBottle = 0x80AAC3D8; // type:func +EnDs_GiveBluePotion = 0x80AAC428; // type:func +EnDs_OfferBluePotion = 0x80AAC48C; // type:func +EnDs_Wait = 0x80AAC5C4; // type:func +EnDs_Update = 0x80AAC748; // type:func +EnDs_OverrideLimbDraw = 0x80AAC850; // type:func +EnDs_PostLimbDraw = 0x80AAC898; // type:func +EnDs_Draw = 0x80AAC8D8; // type:func +EnMk_Init = 0x80AACA50; // type:func +EnMk_Destroy = 0x80AACB68; // type:func +func_80AACA40 = 0x80AACB94; // type:func +func_80AACA94 = 0x80AACBE4; // type:func +func_80AACB14 = 0x80AACC6C; // type:func +func_80AACB6C = 0x80AACCC8; // type:func +func_80AACBAC = 0x80AACD04; // type:func +func_80AACC04 = 0x80AACD5C; // type:func +func_80AACCA0 = 0x80AACDF8; // type:func +func_80AACD48 = 0x80AACEA0; // type:func +func_80AACE2C = 0x80AACF84; // type:func +func_80AACEE8 = 0x80AAD040; // type:func +func_80AACFA0 = 0x80AAD0F8; // type:func +func_80AAD014 = 0x80AAD170; // type:func +EnMk_Wait = 0x80AAD1DC; // type:func +EnMk_Update = 0x80AAD430; // type:func +EnMk_OverrideLimbDraw = 0x80AAD67C; // type:func +EnMk_PostLimbDraw = 0x80AAD6C4; // type:func +EnMk_Draw = 0x80AAD704; // type:func +EnBomBowlMan_Init = 0x80AAD8E0; // type:func +EnBomBowlMan_Destroy = 0x80AADAA0; // type:func +EnBomBowlMan_SetupWaitAsleep = 0x80AADAB0; // type:func +EnBomBowlMan_WaitAsleep = 0x80AADB38; // type:func +EnBomBowlMan_TalkAsleep = 0x80AADBEC; // type:func +EnBomBowlMan_WakeUp = 0x80AADC64; // type:func +EnBomBowlMan_BlinkAwake = 0x80AADCE8; // type:func +EnBomBowlMan_CheckBeatenDC = 0x80AADDE4; // type:func +EnBomBowlMan_WaitNotBeatenDC = 0x80AADF10; // type:func +EnBomBowlMan_TalkNotBeatenDC = 0x80AADF6C; // type:func +EnBomBowlMan_SetupRunGame = 0x80AADFDC; // type:func +EnBomBowlMan_RunGame = 0x80AAE060; // type:func +EnBomBowlMan_HandlePlayChoice = 0x80AAE270; // type:func +func_809C41FC = 0x80AAE42C; // type:func +EnBomBowlMan_SetupChooseShowPrize = 0x80AAE548; // type:func +EnBomBowlMan_ChooseShowPrize = 0x80AAE64C; // type:func +EnBomBowlMan_BeginPlayGame = 0x80AAE894; // type:func +EnBomBowlMan_Update = 0x80AAE950; // type:func +EnBomBowlMan_OverrideLimbDraw = 0x80AAEAC8; // type:func +EnBomBowlMan_Draw = 0x80AAEB10; // type:func +EnBomBowlPit_Init = 0x80AAEE20; // type:func +EnBomBowlPit_Destroy = 0x80AAEE38; // type:func +EnBomBowlPit_SetupDetectHit = 0x80AAEE48; // type:func +EnBomBowlPit_DetectHit = 0x80AAEE74; // type:func +EnBomBowlPit_CameraDollyIn = 0x80AAF16C; // type:func +EnBomBowlPit_SpawnPrize = 0x80AAF348; // type:func +EnBomBowlPit_SetupGivePrize = 0x80AAF3D8; // type:func +EnBomBowlPit_GivePrize = 0x80AAF490; // type:func +EnBomBowlPit_WaitTillPrizeGiven = 0x80AAF594; // type:func +EnBomBowlPit_Reset = 0x80AAF5F0; // type:func +EnBomBowlPit_Update = 0x80AAF670; // type:func +EnOwl_Init = 0x80AAF790; // type:func +EnOwl_Destroy = 0x80AAFB74; // type:func +EnOwl_LookAtLink = 0x80AAFBA0; // type:func +EnOwl_CheckInitTalk = 0x80AAFBDC; // type:func +func_80ACA558 = 0x80AAFD48; // type:func +func_80ACA5C8 = 0x80AAFDBC; // type:func +func_80ACA62C = 0x80AAFE1C; // type:func +func_80ACA690 = 0x80AAFE68; // type:func +func_80ACA6C0 = 0x80AAFE98; // type:func +func_80ACA71C = 0x80AAFEF4; // type:func +func_80ACA76C = 0x80AAFF40; // type:func +func_80ACA7E0 = 0x80AAFFB4; // type:func +EnOwl_ConfirmKokiriMessage = 0x80AB0060; // type:func +EnOwl_WaitOutsideKokiri = 0x80AB0100; // type:func +func_80ACA998 = 0x80AB0178; // type:func +func_80ACAA54 = 0x80AB0238; // type:func +func_80ACAAC0 = 0x80AB02A8; // type:func +EnOwl_WaitHyruleCastle = 0x80AB0318; // type:func +func_80ACAB88 = 0x80AB037C; // type:func +func_80ACAC6C = 0x80AB0464; // type:func +EnOwl_WaitKakariko = 0x80AB04D4; // type:func +func_80ACAD34 = 0x80AB0538; // type:func +func_80ACADF0 = 0x80AB05F8; // type:func +EnOwl_WaitGerudo = 0x80AB0668; // type:func +func_80ACAEB8 = 0x80AB06CC; // type:func +func_80ACAF74 = 0x80AB078C; // type:func +EnOwl_WaitLakeHylia = 0x80AB07FC; // type:func +func_80ACB03C = 0x80AB0860; // type:func +EnOwl_WaitZoraRiver = 0x80AB08D4; // type:func +func_80ACB148 = 0x80AB0974; // type:func +EnOwl_WaitHyliaShortcut = 0x80AB09D4; // type:func +func_80ACB22C = 0x80AB0A60; // type:func +func_80ACB274 = 0x80AB0AAC; // type:func +EnOwl_WaitDeathMountainShortcut = 0x80AB0AF0; // type:func +func_80ACB344 = 0x80AB0B84; // type:func +func_80ACB3E0 = 0x80AB0C24; // type:func +func_80ACB440 = 0x80AB0C8C; // type:func +func_80ACB4FC = 0x80AB0D4C; // type:func +EnOwl_WaitLWPreSaria = 0x80AB0DBC; // type:func +func_80ACB5C4 = 0x80AB0E20; // type:func +func_80ACB680 = 0x80AB0EE0; // type:func +EnOwl_WaitLWPostSaria = 0x80AB0F50; // type:func +func_80ACB748 = 0x80AB0FB4; // type:func +func_80ACB904 = 0x80AB1170; // type:func +func_80ACB994 = 0x80AB1208; // type:func +EnOwl_WaitDefault = 0x80AB12A0; // type:func +func_80ACBAB8 = 0x80AB1334; // type:func +func_80ACBC0C = 0x80AB1488; // type:func +func_80ACBD4C = 0x80AB15C4; // type:func +func_80ACBEA0 = 0x80AB1718; // type:func +func_80ACBF50 = 0x80AB17C8; // type:func +func_80ACC00C = 0x80AB1884; // type:func +func_80ACC23C = 0x80AB1A48; // type:func +func_80ACC30C = 0x80AB1B14; // type:func +func_80ACC390 = 0x80AB1B98; // type:func +func_80ACC460 = 0x80AB1C68; // type:func +func_80ACC540 = 0x80AB1D48; // type:func +func_80ACC5CC = 0x80AB1DD4; // type:func +func_80ACC624 = 0x80AB1E2C; // type:func +EnOwl_Update = 0x80AB1EA8; // type:func +EnOwl_OverrideLimbDraw = 0x80AB25F8; // type:func +EnOwl_PostLimbUpdate = 0x80AB2724; // type:func +EnOwl_Draw = 0x80AB27A8; // type:func +EnOwl_ChangeMode = 0x80AB2874; // type:func +func_80ACD130 = 0x80AB28EC; // type:func +func_80ACD1C4 = 0x80AB2980; // type:func +func_80ACD220 = 0x80AB29E0; // type:func +func_80ACD2CC = 0x80AB2A8C; // type:func +func_80ACD4D4 = 0x80AB2C94; // type:func +EnIshi_InitCollider = 0x80AB3330; // type:func +EnIshi_SnapToFloor = 0x80AB33A8; // type:func +EnIshi_SpawnFragmentsSmall = 0x80AB344C; // type:func +EnIshi_SpawnFragmentsLarge = 0x80AB36C8; // type:func +EnIshi_SpawnDustSmall = 0x80AB39B4; // type:func +EnIshi_SpawnDustLarge = 0x80AB3AA8; // type:func +EnIshi_DropCollectible = 0x80AB3B9C; // type:func +EnIshi_Fall = 0x80AB3C0C; // type:func +func_80A7ED94 = 0x80AB3C40; // type:func +EnIshi_SpawnBugs = 0x80AB3CC4; // type:func +EnIshi_Init = 0x80AB3D80; // type:func +EnIshi_Destroy = 0x80AB3F1C; // type:func +EnIshi_SetupWait = 0x80AB3F48; // type:func +EnIshi_Wait = 0x80AB3F5C; // type:func +EnIshi_SetupLiftedUp = 0x80AB41B4; // type:func +EnIshi_LiftedUp = 0x80AB41DC; // type:func +EnIshi_SetupFly = 0x80AB42B0; // type:func +EnIshi_Fly = 0x80AB43DC; // type:func +EnIshi_Update = 0x80AB4748; // type:func +EnIshi_DrawSmall = 0x80AB476C; // type:func +EnIshi_DrawLarge = 0x80AB479C; // type:func +EnIshi_Draw = 0x80AB4840; // type:func +ObjHana_Init = 0x80ABC480; // type:func +ObjHana_Destroy = 0x80ABC57C; // type:func +ObjHana_Update = 0x80ABC5C8; // type:func +ObjHana_Draw = 0x80ABC638; // type:func +ObjLightswitch_InitCollider = 0x80ABC790; // type:func +ObjLightswitch_SetSwitchFlag = 0x80ABC82C; // type:func +ObjLightswitch_ClearSwitchFlag = 0x80ABC8F0; // type:func +ObjLightswitch_SpawnDisappearEffects = 0x80ABC970; // type:func +ObjLightswitch_Init = 0x80ABCB98; // type:func +ObjLightswitch_Destroy = 0x80ABCD2C; // type:func +ObjLightswitch_SetupOff = 0x80ABCD58; // type:func +ObjLightswitch_Off = 0x80ABCD8C; // type:func +ObjLightswitch_SetupTurnOn = 0x80ABCE6C; // type:func +ObjLightswitch_TurnOn = 0x80ABCE90; // type:func +ObjLightswitch_SetupOn = 0x80ABCF84; // type:func +ObjLightswitch_On = 0x80ABCFC0; // type:func +ObjLightswitch_SetupTurnOff = 0x80ABD0D4; // type:func +ObjLightswitch_TurnOff = 0x80ABD100; // type:func +ObjLightswitch_SetupDisappearDelay = 0x80ABD1F0; // type:func +ObjLightswitch_DisappearDelay = 0x80ABD20C; // type:func +ObjLightswitch_SetupDisappear = 0x80ABD254; // type:func +ObjLightswitch_Disappear = 0x80ABD270; // type:func +ObjLightswitch_Update = 0x80ABD2B4; // type:func +ObjLightswitch_DrawOpa = 0x80ABD398; // type:func +ObjLightswitch_DrawXlu = 0x80ABD6C4; // type:func +ObjLightswitch_Draw = 0x80ABD978; // type:func +ObjMure2_SetPosShrubCircle = 0x80ABDBC0; // type:func +ObjMure2_SetPosShrubScattered = 0x80ABDCDC; // type:func +ObjMure2_SetPosRockCircle = 0x80ABDDDC; // type:func +ObjMure2_SetActorSpawnParams = 0x80ABDEE8; // type:func +ObjMure2_SpawnActors = 0x80ABDF3C; // type:func +ObjMure2_CleanupAndDie = 0x80ABE098; // type:func +func_80B9A534 = 0x80ABE198; // type:func +ObjMure2_Init = 0x80ABE22C; // type:func +ObjMure2_SetupWait = 0x80ABE28C; // type:func +ObjMure2_Wait = 0x80ABE2A0; // type:func +func_80B9A658 = 0x80ABE2C4; // type:func +func_80B9A668 = 0x80ABE2D8; // type:func +func_80B9A6E8 = 0x80ABE358; // type:func +func_80B9A6F8 = 0x80ABE36C; // type:func +ObjMure2_Update = 0x80ABE3FC; // type:func +EnGo_SetupAction = 0x80ABE5E0; // type:func +EnGo_GetTextID = 0x80ABE5EC; // type:func +EnGo_UpdateTalkState = 0x80ABE97C; // type:func +EnGo_UpdateTalking = 0x80ABED9C; // type:func +EnGo_ChangeAnim = 0x80ABEE5C; // type:func +EnGo_IsActorSpawned = 0x80ABEF0C; // type:func +EnGo_GetPlayerTrackingYOffset = 0x80ABF06C; // type:func +func_80A3F060 = 0x80ABF0E4; // type:func +func_80A3F0E4 = 0x80ABF168; // type:func +EnGo_IsCameraModified = 0x80ABF1E0; // type:func +EnGo_ReverseAnimation = 0x80ABF2E4; // type:func +EnGo_UpdateShadow = 0x80ABF2FC; // type:func +EnGo_FollowPath = 0x80ABF388; // type:func +EnGo_SetMovedPos = 0x80ABF544; // type:func +EnGo_SpawnDust = 0x80ABF61C; // type:func +EnGo_IsRollingOnGround = 0x80ABF848; // type:func +func_80A3F908 = 0x80ABF994; // type:func +EnGo_Init = 0x80ABFBC4; // type:func +EnGo_Destroy = 0x80ABFF14; // type:func +func_80A3FEB4 = 0x80ABFF54; // type:func +EnGo_StopRolling = 0x80ABFF98; // type:func +func_80A4008C = 0x80AC012C; // type:func +EnGo_GoronLinkRolling = 0x80AC01BC; // type:func +EnGo_FireGenericActionFunc = 0x80AC02B4; // type:func +EnGo_CurledUp = 0x80AC02C4; // type:func +EnGo_WakeUp = 0x80AC03C4; // type:func +func_80A40494 = 0x80AC0540; // type:func +func_80A405CC = 0x80AC0678; // type:func +EnGo_BiggoronActionFunc = 0x80AC078C; // type:func +func_80A408D8 = 0x80AC0984; // type:func +func_80A40A54 = 0x80AC0B00; // type:func +func_80A40B1C = 0x80AC0BC8; // type:func +EnGo_GetItem = 0x80AC0C20; // type:func +func_80A40C78 = 0x80AC0D28; // type:func +EnGo_Eyedrops = 0x80AC0E10; // type:func +func_80A40DCC = 0x80AC0E80; // type:func +EnGo_Update = 0x80AC0F04; // type:func +EnGo_DrawCurledUp = 0x80AC1014; // type:func +EnGo_DrawRolling = 0x80AC10E0; // type:func +EnGo_OverrideLimbDraw = 0x80AC120C; // type:func +EnGo_PostLimbDraw = 0x80AC1428; // type:func +EnGo_Draw = 0x80AC1484; // type:func +EnGo_SpawnEffectDust = 0x80AC1624; // type:func +EnGo_UpdateEffects = 0x80AC16C8; // type:func +EnGo_DrawEffects = 0x80AC17D4; // type:func +EnFu_Init = 0x80AC2C20; // type:func +EnFu_Destroy = 0x80AC2D34; // type:func +func_80A1D94C = 0x80AC2D60; // type:func +func_80A1DA04 = 0x80AC2E1C; // type:func +EnFu_WaitChild = 0x80AC2EB8; // type:func +func_80A1DB60 = 0x80AC2F7C; // type:func +func_80A1DBA0 = 0x80AC2FBC; // type:func +func_80A1DBD4 = 0x80AC2FF4; // type:func +EnFu_WaitForPlayback = 0x80AC3164; // type:func +EnFu_TeachSong = 0x80AC31CC; // type:func +EnFu_WaitAdult = 0x80AC3248; // type:func +EnFu_Update = 0x80AC3398; // type:func +EnFu_OverrideLimbDraw = 0x80AC3540; // type:func +EnFu_PostLimbDraw = 0x80AC369C; // type:func +EnFu_Draw = 0x80AC36DC; // type:func +EnChanger_Destroy = 0x80AC3970; // type:func +EnChanger_Init = 0x80AC3980; // type:func +EnChanger_Wait = 0x80AC3E9C; // type:func +EnChanger_OpenChests = 0x80AC3F40; // type:func +EnChanger_SetHeartPieceFlag = 0x80AC40F0; // type:func +EnChanger_Update = 0x80AC4140; // type:func +BgJyaMegami_InitDynaPoly = 0x80AC4350; // type:func +BgJyaMegami_InitCollider = 0x80AC43A8; // type:func +BgJyaMegami_SpawnEffect = 0x80AC43FC; // type:func +BgJyaMegami_SetupSpawnEffect = 0x80AC4640; // type:func +BgJyaMegami_Init = 0x80AC473C; // type:func +BgJyaMegami_Destroy = 0x80AC47D0; // type:func +BgJyaMegami_SetupDetectLight = 0x80AC4818; // type:func +BgJyaMegami_DetectLight = 0x80AC4834; // type:func +BgJyaMegami_SetupExplode = 0x80AC49C0; // type:func +BgJyaMegami_Explode = 0x80AC4A58; // type:func +BgJyaMegami_Update = 0x80AC4DE0; // type:func +BgJyaMegami_DrawFace = 0x80AC4E04; // type:func +BgJyaMegami_DrawExplode = 0x80AC4F44; // type:func +BgJyaMegami_Draw = 0x80AC510C; // type:func +BgJyaLift_InitDynapoly = 0x80AC5530; // type:func +BgJyaLift_Init = 0x80AC5588; // type:func +BgJyaLift_Destroy = 0x80AC5644; // type:func +BgJyaLift_SetInitPosY = 0x80AC5688; // type:func +BgJyaLift_DelayMove = 0x80AC56AC; // type:func +BgJyaLift_SetupMove = 0x80AC5730; // type:func +BgJyaLift_Move = 0x80AC5744; // type:func +BgJyaLift_SetFinalPosY = 0x80AC5868; // type:func +BgJyaLift_Update = 0x80AC5880; // type:func +BgJyaLift_Draw = 0x80AC5970; // type:func +BgJyaBigmirror_SetRoomFlag = 0x80AC5A80; // type:func +BgJyaBigmirror_HandleCobra = 0x80AC5AF0; // type:func +BgJyaBigmirror_SetBombiwaFlag = 0x80AC5C88; // type:func +BgJyaBigmirror_HandleMirRay = 0x80AC5CDC; // type:func +BgJyaBigmirror_Init = 0x80AC5E84; // type:func +BgJyaBigmirror_Destroy = 0x80AC5F08; // type:func +BgJyaBigmirror_Update = 0x80AC5F28; // type:func +BgJyaBigmirror_DrawLightBeam = 0x80AC5F78; // type:func +BgJyaBigmirror_Draw = 0x80AC60F4; // type:func +BgJyaBombchuiwa_SetupCollider = 0x80AC62C0; // type:func +BgJyaBombchuiwa_SetDrawFlags = 0x80AC6314; // type:func +BgJyaBombchuiwa_Init = 0x80AC6338; // type:func +BgJyaBombchuiwa_Destroy = 0x80AC63B8; // type:func +BgJyaBombchuiwa_Break = 0x80AC63E4; // type:func +BgJyaBombchuiwa_SetupWaitForExplosion = 0x80AC6670; // type:func +BgJyaBombchuiwa_WaitForExplosion = 0x80AC66A8; // type:func +BgJyaBombchuiwa_CleanUpAfterExplosion = 0x80AC678C; // type:func +func_808949B8 = 0x80AC67E4; // type:func +BgJyaBombchuiwa_SpawnLightRay = 0x80AC6870; // type:func +BgJyaBombchuiwa_Update = 0x80AC68E8; // type:func +BgJyaBombchuiwa_DrawRock = 0x80AC6914; // type:func +BgJyaBombchuiwa_DrawLight = 0x80AC6998; // type:func +BgJyaBombchuiwa_Draw = 0x80AC6BE8; // type:func +BgJyaAmishutter_InitDynaPoly = 0x80AC6DF0; // type:func +BgJyaAmishutter_Init = 0x80AC6E48; // type:func +BgJyaAmishutter_Destroy = 0x80AC6E90; // type:func +BgJyaAmishutter_SetupWaitForPlayer = 0x80AC6EC4; // type:func +BgJyaAmishutter_WaitForPlayer = 0x80AC6ED8; // type:func +func_80893428 = 0x80AC6F34; // type:func +func_80893438 = 0x80AC6F48; // type:func +func_808934B0 = 0x80AC6FC0; // type:func +func_808934C0 = 0x80AC6FD4; // type:func +func_808934FC = 0x80AC7010; // type:func +func_8089350C = 0x80AC7024; // type:func +BgJyaAmishutter_Update = 0x80AC7088; // type:func +BgJyaAmishutter_Draw = 0x80AC70B0; // type:func +BgJyaBombiwa_SetupDynaPoly = 0x80AC7180; // type:func +BgJyaBombiwa_InitCollider = 0x80AC71D8; // type:func +BgJyaBombiwa_Init = 0x80AC722C; // type:func +BgJyaBombiwa_Destroy = 0x80AC72AC; // type:func +BgJyaBombiwa_Break = 0x80AC72F4; // type:func +BgJyaBombiwa_Update = 0x80AC7588; // type:func +BgJyaBombiwa_Draw = 0x80AC7618; // type:func +func_808B7710 = 0x80AC7740; // type:func +func_808B7770 = 0x80AC779C; // type:func +BgSpot18Basket_Init = 0x80AC7958; // type:func +BgSpot18Basket_Destroy = 0x80AC7AA4; // type:func +func_808B7AEC = 0x80AC7AEC; // type:func +func_808B7AFC = 0x80AC7B00; // type:func +func_808B7B58 = 0x80AC7B5C; // type:func +func_808B7B6C = 0x80AC7B74; // type:func +func_808B7BB0 = 0x80AC7BB8; // type:func +func_808B7BCC = 0x80AC7BD8; // type:func +func_808B7D38 = 0x80AC7D44; // type:func +func_808B7D50 = 0x80AC7D60; // type:func +func_808B7F74 = 0x80AC7F84; // type:func +func_808B7FC0 = 0x80AC7FD4; // type:func +func_808B818C = 0x80AC81A0; // type:func +func_808B81A0 = 0x80AC81B8; // type:func +BgSpot18Basket_Update = 0x80AC8450; // type:func +BgSpot18Basket_Draw = 0x80AC8514; // type:func +EnGanonOrgan_Init = 0x80AC8730; // type:func +EnGanonOrgan_Destroy = 0x80AC874C; // type:func +EnGanonOrgan_Update = 0x80AC875C; // type:func +EnGanonOrgan_EmptyDList = 0x80AC87A0; // type:func +func_80A280BC = 0x80AC87C4; // type:func +func_80A28148 = 0x80AC8828; // type:func +EnGanonOrgan_Draw = 0x80AC8884; // type:func +EnSiofuki_Init = 0x80ACF730; // type:func +EnSiofuki_Destroy = 0x80ACF94C; // type:func +func_80AFBDC8 = 0x80ACF980; // type:func +func_80AFBE8C = 0x80ACFA40; // type:func +func_80AFC1D0 = 0x80ACFD8C; // type:func +func_80AFC218 = 0x80ACFDD4; // type:func +func_80AFC34C = 0x80ACFF10; // type:func +func_80AFC3C8 = 0x80ACFF94; // type:func +func_80AFC478 = 0x80AD004C; // type:func +func_80AFC544 = 0x80AD0120; // type:func +EnSiofuki_Update = 0x80AD0158; // type:func +EnSiofuki_Draw = 0x80AD017C; // type:func +EnStream_SetupAction = 0x80AD04E0; // type:func +EnStream_Init = 0x80AD04EC; // type:func +EnStream_Destroy = 0x80AD0554; // type:func +func_80B0B81C = 0x80AD0564; // type:func +EnStream_SuckPlayer = 0x80AD0684; // type:func +EnStream_WaitForPlayer = 0x80AD081C; // type:func +EnStream_Update = 0x80AD0870; // type:func +EnStream_Draw = 0x80AD08A4; // type:func +EnMm_ChangeAnim = 0x80AD0A70; // type:func +EnMm_Init = 0x80AD0B94; // type:func +EnMm_Destroy = 0x80AD0D50; // type:func +func_80AADA70 = 0x80AD0D7C; // type:func +func_80AADAA0 = 0x80AD0DB0; // type:func +EnMm_GetTextId = 0x80AD0F44; // type:func +func_80AADCD0 = 0x80AD0FE4; // type:func +EnMm_GetPointCount = 0x80AD1164; // type:func +func_80AADE60 = 0x80AD1178; // type:func +func_80AADEF0 = 0x80AD120C; // type:func +func_80AAE224 = 0x80AD151C; // type:func +func_80AAE294 = 0x80AD158C; // type:func +func_80AAE50C = 0x80AD1804; // type:func +func_80AAE598 = 0x80AD1890; // type:func +EnMm_Update = 0x80AD1938; // type:func +EnMm_Draw = 0x80AD19AC; // type:func +EnMm_OverrideLimbDraw = 0x80AD1C24; // type:func +EnMm_PostLimbDraw = 0x80AD1CB8; // type:func +EnKo_AreObjectsAvailable = 0x80AD2090; // type:func +EnKo_AreObjectsLoaded = 0x80AD21A8; // type:func +EnKo_IsOsAnimeAvailable = 0x80AD2230; // type:func +EnKo_IsOsAnimeLoaded = 0x80AD2280; // type:func +EnKo_GetTextIdChild = 0x80AD22C0; // type:func +EnKo_GetTextIdAdult = 0x80AD2628; // type:func +EnKo_GetTextId = 0x80AD2900; // type:func +EnKo_UpdateTalkState = 0x80AD2A2C; // type:func +EnKo_GetForestQuestState = 0x80AD2E2C; // type:func +func_80A97BC0 = 0x80AD2EB4; // type:func +func_80A97C7C = 0x80AD2F70; // type:func +EnKo_IsWithinTalkAngle = 0x80AD2FF4; // type:func +func_80A97D68 = 0x80AD3060; // type:func +func_80A97E18 = 0x80AD3110; // type:func +func_80A97EB0 = 0x80AD31AC; // type:func +func_80A97F20 = 0x80AD3220; // type:func +func_80A97F70 = 0x80AD3270; // type:func +func_80A98034 = 0x80AD3334; // type:func +func_80A98124 = 0x80AD3428; // type:func +func_80A98174 = 0x80AD3478; // type:func +EnKo_ChildStart = 0x80AD355C; // type:func +EnKo_ChildStone = 0x80AD3664; // type:func +EnKo_ChildSaria = 0x80AD376C; // type:func +EnKo_AdultEnemy = 0x80AD3874; // type:func +EnKo_AdultSaved = 0x80AD397C; // type:func +func_80A9877C = 0x80AD3A84; // type:func +EnKo_CanSpawn = 0x80AD3C40; // type:func +EnKo_Blink = 0x80AD3F24; // type:func +func_80A98CD8 = 0x80AD3FE4; // type:func +EnKo_GetForestQuestState2 = 0x80AD403C; // type:func +func_80A98DB4 = 0x80AD40C8; // type:func +func_80A98ECC = 0x80AD41E0; // type:func +EnKo_Init = 0x80AD42A8; // type:func +EnKo_Destroy = 0x80AD4338; // type:func +func_80A99048 = 0x80AD4364; // type:func +func_80A99384 = 0x80AD4694; // type:func +func_80A99438 = 0x80AD4748; // type:func +func_80A99504 = 0x80AD4814; // type:func +func_80A99560 = 0x80AD4874; // type:func +func_80A995CC = 0x80AD48E4; // type:func +EnKo_Update = 0x80AD4A20; // type:func +EnKo_OverrideLimbDraw = 0x80AD4B84; // type:func +EnKo_PostLimbDraw = 0x80AD4EEC; // type:func +EnKo_SetEnvColor = 0x80AD4FBC; // type:func +EnKo_Draw = 0x80AD5028; // type:func +EnKz_GetTextIdChild = 0x80AD61D0; // type:func +EnKz_GetTextIdAdult = 0x80AD622C; // type:func +EnKz_GetTextId = 0x80AD62DC; // type:func +EnKz_UpdateTalkState = 0x80AD6344; // type:func +EnKz_UpdateEyes = 0x80AD6568; // type:func +EnKz_UpdateTalking = 0x80AD65E0; // type:func +func_80A9CB18 = 0x80AD679C; // type:func +EnKz_FollowPath = 0x80AD695C; // type:func +EnKz_SetMovedPos = 0x80AD6AC8; // type:func +EnKz_Init = 0x80AD6B90; // type:func +EnKz_Destroy = 0x80AD6D1C; // type:func +EnKz_PreMweepWait = 0x80AD6D48; // type:func +EnKz_SetupMweep = 0x80AD6DB8; // type:func +EnKz_Mweep = 0x80AD6EE4; // type:func +EnKz_StopMweep = 0x80AD7050; // type:func +EnKz_Wait = 0x80AD70B4; // type:func +EnKz_SetupGetItem = 0x80AD711C; // type:func +EnKz_StartTimer = 0x80AD71B0; // type:func +EnKz_Update = 0x80AD7248; // type:func +EnKz_OverrideLimbDraw = 0x80AD7304; // type:func +EnKz_PostLimbDraw = 0x80AD73D4; // type:func +EnKz_Draw = 0x80AD7430; // type:func +EnWeatherTag_SetupAction = 0x80AD7770; // type:func +EnWeatherTag_Destroy = 0x80AD777C; // type:func +EnWeatherTag_Init = 0x80AD778C; // type:func +WeatherTag_CheckEnableWeatherEffect = 0x80AD7960; // type:func +WeatherTag_CheckRestoreWeather = 0x80AD7B38; // type:func +EnWeatherTag_DisabledCloudyHyruleMarket = 0x80AD7CF8; // type:func +EnWeatherTag_EnabledCloudyHyruleMarket = 0x80AD7D54; // type:func +EnWeatherTag_DisabledCloudyLonLonRanch = 0x80AD7DA8; // type:func +EnWeatherTag_EnabledCloudyLonLonRanch = 0x80AD7E04; // type:func +EnWeatherTag_DisabledCloudyDeathMountain = 0x80AD7E58; // type:func +EnWeatherTag_EnabledCloudyDeathMountain = 0x80AD7EB4; // type:func +EnWeatherTag_DisabledCloudySnow = 0x80AD7F08; // type:func +EnWeatherTag_EnabledCloudySnow = 0x80AD7F80; // type:func +EnWeatherTag_DisabledRainLakeHylia = 0x80AD7FEC; // type:func +EnWeatherTag_EnabledRainLakeHylia = 0x80AD8070; // type:func +EnWeatherTag_DisabledCloudyRainThunderKakariko = 0x80AD80E8; // type:func +EnWeatherTag_EnabledCloudyRainThunderKakariko = 0x80AD8180; // type:func +EnWeatherTag_SetSandstormIntensity = 0x80AD820C; // type:func +EnWeatherTag_DisabledRainThunder = 0x80AD8308; // type:func +EnWeatherTag_EnabledRainThunder = 0x80AD83AC; // type:func +EnWeatherTag_Update = 0x80AD8460; // type:func +BgSstFloor_Init = 0x80AD8660; // type:func +BgSstFloor_Destroy = 0x80AD86C8; // type:func +BgSstFloor_Update = 0x80AD86FC; // type:func +BgSstFloor_Draw = 0x80AD8A70; // type:func +EnAni_SetupAction = 0x80AD8BC0; // type:func +EnAni_Init = 0x80AD8BCC; // type:func +EnAni_Destroy = 0x80AD8CE4; // type:func +EnAni_SetText = 0x80AD8D10; // type:func +func_809B04F0 = 0x80AD8D4C; // type:func +func_809B0524 = 0x80AD8D84; // type:func +func_809B0558 = 0x80AD8DBC; // type:func +func_809B05F0 = 0x80AD8E58; // type:func +func_809B064C = 0x80AD8EBC; // type:func +func_809B07F8 = 0x80AD9068; // type:func +func_809B0988 = 0x80AD91F8; // type:func +func_809B0994 = 0x80AD9208; // type:func +func_809B0A28 = 0x80AD929C; // type:func +func_809B0A6C = 0x80AD92E0; // type:func +EnAni_Update = 0x80AD938C; // type:func +EnAni_OverrideLimbDraw = 0x80AD9608; // type:func +EnAni_PostLimbDraw = 0x80AD9650; // type:func +EnAni_Draw = 0x80AD9690; // type:func +EnExItem_Destroy = 0x80AD9930; // type:func +EnExItem_Init = 0x80AD9940; // type:func +EnExItem_WaitForObject = 0x80AD9A9C; // type:func +EnExItem_BowlPrize = 0x80AD9E18; // type:func +EnExItem_SetupBowlCounter = 0x80ADA004; // type:func +EnExItem_BowlCounter = 0x80ADA02C; // type:func +EnExItem_ExitChest = 0x80ADA064; // type:func +EnExItem_FairyMagic = 0x80ADA0CC; // type:func +EnExItem_TargetPrizeApproach = 0x80ADA0E4; // type:func +EnExItem_TargetPrizeGive = 0x80ADA338; // type:func +EnExItem_TargetPrizeFinish = 0x80ADA3C4; // type:func +EnExItem_Update = 0x80ADA424; // type:func +EnExItem_Draw = 0x80ADA478; // type:func +EnExItem_DrawItems = 0x80ADA528; // type:func +EnExItem_DrawHeartPiece = 0x80ADA58C; // type:func +EnExItem_DrawMagic = 0x80ADA5C0; // type:func +EnExItem_DrawKey = 0x80ADA608; // type:func +EnExItem_DrawRupee = 0x80ADA6F4; // type:func +BgJyaIronobj_InitCylinder = 0x80ADAAA0; // type:func +BgJyaIronobj_SpawnPillarParticles = 0x80ADAB20; // type:func +BgJyaIronobj_SpawnThroneParticles = 0x80ADAF9C; // type:func +BgJyaIronobj_Init = 0x80ADB3C8; // type:func +BgJyaIronobj_Destroy = 0x80ADB45C; // type:func +func_808992D8 = 0x80ADB4A4; // type:func +func_808992E8 = 0x80ADB4B8; // type:func +BgJyaIronobj_Update = 0x80ADB5F8; // type:func +BgJyaIronobj_Draw = 0x80ADB61C; // type:func +En_Js_SetupAction = 0x80ADB850; // type:func +EnJs_Init = 0x80ADB85C; // type:func +EnJs_Destroy = 0x80ADB980; // type:func +func_80A88F64 = 0x80ADB9AC; // type:func +func_80A89008 = 0x80ADBA54; // type:func +func_80A89078 = 0x80ADBAC8; // type:func +func_80A890C0 = 0x80ADBB14; // type:func +func_80A8910C = 0x80ADBB64; // type:func +func_80A89160 = 0x80ADBBB8; // type:func +func_80A891C4 = 0x80ADBC20; // type:func +func_80A89294 = 0x80ADBCF4; // type:func +func_80A89304 = 0x80ADBD68; // type:func +EnJs_Update = 0x80ADBDA0; // type:func +EnJs_OverrideLimbDraw = 0x80ADC02C; // type:func +EnJs_PostLimbDraw = 0x80ADC064; // type:func +EnJs_Draw = 0x80ADC0A4; // type:func +EnJsjutan_Init = 0x80ADC220; // type:func +EnJsjutan_Destroy = 0x80ADC2B4; // type:func +func_80A89860 = 0x80ADC2E8; // type:func +func_80A89A6C = 0x80ADC4F4; // type:func +EnJsjutan_Update = 0x80ADCFD4; // type:func +EnJsjutan_Draw = 0x80ADD0AC; // type:func +EnCs_ChangeAnim = 0x80AE1B40; // type:func +EnCs_Init = 0x80AE1C64; // type:func +EnCs_Destroy = 0x80AE1DF8; // type:func +EnCs_GetTalkState = 0x80AE1E24; // type:func +EnCs_GetTextId = 0x80AE1F58; // type:func +EnCs_HandleTalking = 0x80AE1FDC; // type:func +EnCs_GetwaypointCount = 0x80AE2128; // type:func +EnCs_GetPathPoint = 0x80AE213C; // type:func +EnCs_HandleWalking = 0x80AE21D0; // type:func +EnCs_Walk = 0x80AE23E8; // type:func +EnCs_Wait = 0x80AE2588; // type:func +EnCs_Talk = 0x80AE2614; // type:func +EnCs_Update = 0x80AE26D8; // type:func +EnCs_Draw = 0x80AE2848; // type:func +EnCs_OverrideLimbDraw = 0x80AE29FC; // type:func +EnCs_PostLimbDraw = 0x80AE2A8C; // type:func +func_80AAA250 = 0x80AE2D70; // type:func +func_80AAA274 = 0x80AE2D98; // type:func +func_80AAA308 = 0x80AE2E2C; // type:func +func_80AAA39C = 0x80AE2EC0; // type:func +func_80AAA474 = 0x80AE2F98; // type:func +func_80AAA508 = 0x80AE302C; // type:func +func_80AAA5A4 = 0x80AE30C8; // type:func +func_80AAA638 = 0x80AE315C; // type:func +func_80AAA6D4 = 0x80AE31F8; // type:func +func_80AAA768 = 0x80AE328C; // type:func +func_80AAA7FC = 0x80AE3320; // type:func +func_80AAA890 = 0x80AE33B4; // type:func +func_80AAA92C = 0x80AE3450; // type:func +func_80AAA93C = 0x80AE3468; // type:func +func_80AAAA24 = 0x80AE3550; // type:func +func_80AAAC78 = 0x80AE37A4; // type:func +EnMd_GetTextIdKokiriForest = 0x80AE3824; // type:func +EnMd_GetTextIdMidosHouse = 0x80AE390C; // type:func +EnMd_GetTextIdLostWoods = 0x80AE3940; // type:func +EnMd_GetTextId = 0x80AE39C0; // type:func +EnMd_UpdateTalkState = 0x80AE3A30; // type:func +EnMd_ShouldSpawn = 0x80AE3B68; // type:func +EnMd_UpdateEyes = 0x80AE3C0C; // type:func +func_80AAB158 = 0x80AE3C84; // type:func +EnMd_FollowPath = 0x80AE3EA0; // type:func +EnMd_SetMovedPos = 0x80AE400C; // type:func +func_80AAB5A4 = 0x80AE40D4; // type:func +EnMd_Init = 0x80AE4180; // type:func +EnMd_Destroy = 0x80AE437C; // type:func +func_80AAB874 = 0x80AE43A8; // type:func +func_80AAB8F8 = 0x80AE442C; // type:func +func_80AAB948 = 0x80AE447C; // type:func +func_80AABC10 = 0x80AE474C; // type:func +func_80AABD0C = 0x80AE4848; // type:func +EnMd_Update = 0x80AE4970; // type:func +EnMd_OverrideLimbDraw = 0x80AE4A30; // type:func +EnMd_PostLimbDraw = 0x80AE4C4C; // type:func +EnMd_Draw = 0x80AE4CA8; // type:func +EnHy_FindSkelAndHeadObjects = 0x80AE53E0; // type:func +EnHy_AreSkelAndHeadObjectsLoaded = 0x80AE54F4; // type:func +EnHy_FindOsAnimeObject = 0x80AE557C; // type:func +EnHy_IsOsAnimeObjectLoaded = 0x80AE55CC; // type:func +func_80A6F7CC = 0x80AE560C; // type:func +EnHy_GetTextId = 0x80AE5650; // type:func +EnHy_UpdateTalkState = 0x80AE5E98; // type:func +EnHy_UpdateEyes = 0x80AE63E4; // type:func +EnHy_InitCollider = 0x80AE64A0; // type:func +EnHy_InitSetProperties = 0x80AE64DC; // type:func +EnHy_UpdateCollider = 0x80AE6574; // type:func +func_80A70834 = 0x80AE6678; // type:func +func_80A70978 = 0x80AE67C0; // type:func +EnHy_ShouldSpawn = 0x80AE6930; // type:func +EnHy_Init = 0x80AE6BCC; // type:func +EnHy_Destroy = 0x80AE6C5C; // type:func +EnHy_InitImpl = 0x80AE6C88; // type:func +func_80A710F8 = 0x80AE6F54; // type:func +func_80A711B4 = 0x80AE7010; // type:func +func_80A7127C = 0x80AE70DC; // type:func +EnHy_DoNothing = 0x80AE7114; // type:func +func_80A712C0 = 0x80AE7124; // type:func +func_80A7134C = 0x80AE71B0; // type:func +func_80A714C4 = 0x80AE732C; // type:func +func_80A71530 = 0x80AE739C; // type:func +EnHy_Update = 0x80AE744C; // type:func +EnHy_OverrideLimbDraw = 0x80AE752C; // type:func +EnHy_PostLimbDraw = 0x80AE7898; // type:func +EnHy_SetEnvColor = 0x80AE79A4; // type:func +EnHy_Draw = 0x80AE7A10; // type:func +EnGanonMant_Init = 0x80AE8D20; // type:func +EnGanonMant_Destroy = 0x80AE8D3C; // type:func +EnGanonMant_Tear = 0x80AE8D4C; // type:func +EnGanonMant_UpdateStrand = 0x80AE8FA8; // type:func +EnGanonMant_UpdateVertices = 0x80AE956C; // type:func +EnGanonMant_Update = 0x80AE9790; // type:func +EnGanonMant_DrawCloak = 0x80AE984C; // type:func +EnGanonMant_Draw = 0x80AE9964; // type:func +EnOkarinaEffect_SetupAction = 0x80AECF40; // type:func +EnOkarinaEffect_Destroy = 0x80AECF4C; // type:func +EnOkarinaEffect_Init = 0x80AECFCC; // type:func +EnOkarinaEffect_TriggerStorm = 0x80AED014; // type:func +EnOkarinaEffect_ManageStorm = 0x80AED0A0; // type:func +EnOkarinaEffect_Update = 0x80AED270; // type:func +EnMag_ResetSram = 0x80AED300; // type:func +EnMag_Init = 0x80AED4C8; // type:func +EnMag_Destroy = 0x80AED750; // type:func +EnMag_CheckSramResetCode = 0x80AED760; // type:func +EnMag_Update = 0x80AED88C; // type:func +EnMag_DrawTextureI8 = 0x80AEDF68; // type:func +EnMag_DrawEffectTextures = 0x80AEE1A4; // type:func +EnMag_DrawImageRGBA32 = 0x80AEE608; // type:func +EnMag_DrawCharTexture = 0x80AEEC98; // type:func +EnMag_DrawInner = 0x80AEEE5C; // type:func +EnMag_Draw = 0x80AEFF98; // type:func +DoorGerudo_Init = 0x80AF2210; // type:func +DoorGerudo_Destroy = 0x80AF22C0; // type:func +func_809946BC = 0x80AF22F4; // type:func +func_80994750 = 0x80AF238C; // type:func +func_8099485C = 0x80AF2498; // type:func +func_8099496C = 0x80AF25A8; // type:func +func_809949C8 = 0x80AF2604; // type:func +DoorGerudo_Update = 0x80AF2660; // type:func +DoorGerudo_Draw = 0x80AF2684; // type:func +ElfMsg2_SetupAction = 0x80AF2800; // type:func +ElfMsg2_KillCheck = 0x80AF280C; // type:func +ElfMsg2_Init = 0x80AF2944; // type:func +ElfMsg2_Destroy = 0x80AF2A04; // type:func +ElfMsg2_GetMessageId = 0x80AF2A14; // type:func +ElfMsg2_WaitForTextClose = 0x80AF2A28; // type:func +ElfMsg2_WaitForTextRead = 0x80AF2AA8; // type:func +ElfMsg2_WaitUntilActivated = 0x80AF2AE0; // type:func +ElfMsg2_Update = 0x80AF2B5C; // type:func +DemoGt_Destroy = 0x80AF2C70; // type:func +DemoGt_PlayEarthquakeSfx = 0x80AF2CB8; // type:func +DemoGt_PlayExplosion1Sfx = 0x80AF2CD8; // type:func +DemoGt_PlayExplosion2Sfx = 0x80AF2CFC; // type:func +DemoGt_Rumble = 0x80AF2D20; // type:func +DemoGt_SpawnDust = 0x80AF2D50; // type:func +func_8097D7D8 = 0x80AF2DE0; // type:func +DemoGt_SpawnCloudRing = 0x80AF2F68; // type:func +DemoGt_SpawnExplosionWithSound = 0x80AF2FC8; // type:func +DemoGt_SpawnExplosionNoSound = 0x80AF307C; // type:func +func_8097DAC8 = 0x80AF30D0; // type:func +func_8097DD28 = 0x80AF3330; // type:func +func_8097DF70 = 0x80AF3578; // type:func +func_8097E1D4 = 0x80AF37DC; // type:func +func_8097E454 = 0x80AF3A5C; // type:func +DemoGt_IsCutsceneIdle = 0x80AF3CAC; // type:func +DemoGt_GetCue = 0x80AF3CCC; // type:func +func_8097E704 = 0x80AF3D18; // type:func +func_8097E744 = 0x80AF3D58; // type:func +func_8097E824 = 0x80AF3E38; // type:func +func_8097ED64 = 0x80AF4374; // type:func +DemoGt_IsCutsceneLayer = 0x80AF43AC; // type:func +func_8097EDD8 = 0x80AF43D4; // type:func +func_8097EE44 = 0x80AF444C; // type:func +func_8097EEA8_Init0 = 0x80AF44B0; // type:func +func_8097EF00 = 0x80AF4508; // type:func +func_8097EF34 = 0x80AF453C; // type:func +func_8097EF40 = 0x80AF454C; // type:func +func_8097F0AC = 0x80AF46A4; // type:func +func_8097F19C = 0x80AF4788; // type:func +func_8097F1D8 = 0x80AF47CC; // type:func +func_8097F280 = 0x80AF4874; // type:func +func_8097F3EC = 0x80AF49E8; // type:func +DemoGt_Update0 = 0x80AF4A28; // type:func +DemoGt_Update8 = 0x80AF4AA0; // type:func +DemoGt_Draw1 = 0x80AF4B18; // type:func +func_8097F904_Init1 = 0x80AF4EC8; // type:func +func_8097F960 = 0x80AF4F24; // type:func +func_8097F96C = 0x80AF4F34; // type:func +func_8097FA1C = 0x80AF4FC8; // type:func +func_8097FAFC = 0x80AF5090; // type:func +func_8097FC1C = 0x80AF5198; // type:func +func_8097FCE4 = 0x80AF524C; // type:func +func_8097FD70 = 0x80AF52C8; // type:func +func_8097FDDC = 0x80AF533C; // type:func +func_8097FED8 = 0x80AF543C; // type:func +DemoGt_Update1 = 0x80AF547C; // type:func +DemoGt_Update9 = 0x80AF54CC; // type:func +DemoGt_Draw2 = 0x80AF5514; // type:func +func_80980110_Init2 = 0x80AF5648; // type:func +func_8098016C = 0x80AF56A4; // type:func +func_80980178 = 0x80AF56B4; // type:func +func_80980184 = 0x80AF56C4; // type:func +func_80980218 = 0x80AF5758; // type:func +func_809802AC = 0x80AF57EC; // type:func +func_8098036C = 0x80AF58B0; // type:func +func_80980430 = 0x80AF5978; // type:func +func_80980504 = 0x80AF5A38; // type:func +func_809805D8 = 0x80AF5AF8; // type:func +func_809806B8 = 0x80AF5BC0; // type:func +func_8098078C = 0x80AF5C80; // type:func +func_8098085C = 0x80AF5D3C; // type:func +func_809809C0 = 0x80AF5E88; // type:func +func_80980AD4 = 0x80AF5F8C; // type:func +func_80980B68 = 0x80AF600C; // type:func +func_80980BFC = 0x80AF608C; // type:func +func_80980C90 = 0x80AF610C; // type:func +func_80980D74 = 0x80AF61F8; // type:func +DemoGt_Update2 = 0x80AF6238; // type:func +DemoGt_Update10 = 0x80AF627C; // type:func +DemoGt_Draw3 = 0x80AF62B8; // type:func +func_80980F00_Init5 = 0x80AF6350; // type:func +func_80980F58 = 0x80AF63A8; // type:func +func_80980F8C = 0x80AF63E0; // type:func +func_8098103C = 0x80AF6494; // type:func +DemoGt_Update3 = 0x80AF64F8; // type:func +DemoGt_Update11 = 0x80AF653C; // type:func +DemoGt_Update16 = 0x80AF6578; // type:func +DemoGt_Draw4 = 0x80AF6610; // type:func +func_809813CC_Init6 = 0x80AF67F8; // type:func +func_80981424 = 0x80AF6850; // type:func +func_80981458 = 0x80AF6888; // type:func +func_80981524 = 0x80AF6940; // type:func +DemoGt_Update4 = 0x80AF69A4; // type:func +DemoGt_Update12 = 0x80AF69E8; // type:func +DemoGt_Update17 = 0x80AF6A24; // type:func +DemoGt_Draw5 = 0x80AF6ABC; // type:func +func_809818A4_Init7 = 0x80AF6C98; // type:func +func_809818FC = 0x80AF6CF0; // type:func +func_80981930 = 0x80AF6D28; // type:func +DemoGt_Update5 = 0x80AF6D8C; // type:func +DemoGt_Update13 = 0x80AF6DD0; // type:func +DemoGt_Update18 = 0x80AF6E0C; // type:func +DemoGt_Draw6 = 0x80AF6EA4; // type:func +func_80981C94_Init23 = 0x80AF705C; // type:func +func_80981CEC = 0x80AF70B4; // type:func +func_80981D20 = 0x80AF70EC; // type:func +func_80981DC8 = 0x80AF7194; // type:func +DemoGt_Update6 = 0x80AF71D4; // type:func +DemoGt_Update14 = 0x80AF7218; // type:func +DemoGt_Draw7 = 0x80AF725C; // type:func +func_80982054_Init24 = 0x80AF73F4; // type:func +func_809820AC = 0x80AF744C; // type:func +func_809820E0 = 0x80AF7484; // type:func +func_80982188 = 0x80AF752C; // type:func +DemoGt_Update7 = 0x80AF756C; // type:func +DemoGt_Update15 = 0x80AF75B0; // type:func +DemoGt_Draw8 = 0x80AF75F4; // type:func +DemoGt_Update = 0x80AF7790; // type:func +DemoGt_Init = 0x80AF77D8; // type:func +DemoGt_Draw0 = 0x80AF789C; // type:func +DemoGt_Draw = 0x80AF78AC; // type:func +EnPoField_Init = 0x80AF8270; // type:func +EnPoField_Destroy = 0x80AF8478; // type:func +EnPoField_SetupWaitForSpawn = 0x80AF84D8; // type:func +EnPoField_SetupAppear = 0x80AF859C; // type:func +EnPoField_SetupCirclePlayer = 0x80AF86BC; // type:func +EnPoField_SetupFlee = 0x80AF8764; // type:func +EnPoField_SetupDamage = 0x80AF87F8; // type:func +EnPoField_SetupDeath = 0x80AF88B4; // type:func +EnPoField_SetupDisappear = 0x80AF8908; // type:func +EnPoField_SetupSoulIdle = 0x80AF8980; // type:func +func_80AD42B0 = 0x80AF8A30; // type:func +func_80AD4384 = 0x80AF8B04; // type:func +EnPoField_SetupSoulDisappear = 0x80AF8BBC; // type:func +EnPoField_SetupInteractWithSoul = 0x80AF8BD0; // type:func +EnPoField_CorrectYPos = 0x80AF8BF8; // type:func +EnPoField_SetFleeSpeed = 0x80AF8CDC; // type:func +EnPoField_WaitForSpawn = 0x80AF8DEC; // type:func +EnPoField_Appear = 0x80AF9054; // type:func +EnPoField_CirclePlayer = 0x80AF91F0; // type:func +EnPoField_Flee = 0x80AF9430; // type:func +EnPoField_Damage = 0x80AF95D4; // type:func +EnPoField_Death = 0x80AF9664; // type:func +EnPoField_Disappear = 0x80AF9A7C; // type:func +EnPoField_SoulIdle = 0x80AF9B7C; // type:func +EnPoField_SoulUpdateProperties = 0x80AF9C60; // type:func +func_80AD587C = 0x80AFA008; // type:func +func_80AD58D4 = 0x80AFA060; // type:func +EnPoField_SoulDisappear = 0x80AFA264; // type:func +EnPoField_SoulInteract = 0x80AFA2A4; // type:func +EnPoField_TestForDamage = 0x80AFA404; // type:func +EnPoField_SpawnFlame = 0x80AFA49C; // type:func +EnPoField_UpdateFlame = 0x80AFA4F0; // type:func +EnPoField_DrawFlame = 0x80AFA61C; // type:func +func_80AD619C = 0x80AFA8F4; // type:func +func_80AD6330 = 0x80AFAA88; // type:func +EnPoField_Update = 0x80AFABFC; // type:func +EnPoField_OverrideLimbDraw2 = 0x80AFAD28; // type:func +EnPoField_PostLimDraw2 = 0x80AFAE30; // type:func +EnPoField_Draw = 0x80AFB040; // type:func +EnPoField_UpdateDead = 0x80AFB31C; // type:func +EnPoField_DrawSoul = 0x80AFB378; // type:func +EfcErupc_SetupAction = 0x80AFBCE0; // type:func +EfcErupc_Init = 0x80AFBCEC; // type:func +EfcErupc_Destroy = 0x80AFBD58; // type:func +EfcErupc_UpdateAction = 0x80AFBD68; // type:func +EfcErupc_Update = 0x80AFBFB4; // type:func +EfcErupc_Draw = 0x80AFBFF0; // type:func +EfcErupc_DrawEffects = 0x80AFC330; // type:func +EfcErupc_UpdateEffects = 0x80AFC4E8; // type:func +EfcErupc_SpawnEffect = 0x80AFC60C; // type:func +EfcErupc_InitEffects = 0x80AFC6D8; // type:func +BgZg_Destroy = 0x80AFC7C0; // type:func +func_808C0C50 = 0x80AFC7F4; // type:func +func_808C0C98 = 0x80AFC83C; // type:func +func_808C0CC8 = 0x80AFC870; // type:func +func_808C0CD4 = 0x80AFC880; // type:func +func_808C0D08 = 0x80AFC8CC; // type:func +BgZg_Update = 0x80AFC970; // type:func +BgZg_Init = 0x80AFC9B8; // type:func +func_808C0EEC = 0x80AFCAA4; // type:func +BgZg_Draw = 0x80AFCB1C; // type:func +EnHeishi4_Init = 0x80AFCC30; // type:func +EnHeishi4_Destroy = 0x80AFCE10; // type:func +func_80A56328 = 0x80AFCE3C; // type:func +func_80A563BC = 0x80AFCED0; // type:func +func_80A56544 = 0x80AFD058; // type:func +func_80A56614 = 0x80AFD11C; // type:func +func_80A5673C = 0x80AFD244; // type:func +func_80A56874 = 0x80AFD358; // type:func +func_80A56900 = 0x80AFD3E4; // type:func +func_80A56994 = 0x80AFD478; // type:func +func_80A56A50 = 0x80AFD534; // type:func +func_80A56ACC = 0x80AFD5B0; // type:func +func_80A56B40 = 0x80AFD624; // type:func +EnHeishi4_Update = 0x80AFD798; // type:func +EnHeishi_OverrideLimbDraw = 0x80AFD8FC; // type:func +EnHeishi4_Draw = 0x80AFD964; // type:func +func_80B533B0 = 0x80AFDB30; // type:func +func_80B533FC = 0x80AFDB7C; // type:func +EnZl3_Destroy = 0x80AFDBC0; // type:func +func_80B53468 = 0x80AFDBEC; // type:func +func_80B53488 = 0x80AFDC0C; // type:func +EnZl3_UpdateEyes = 0x80AFDC58; // type:func +EnZl3_setEyeIndex = 0x80AFDCE0; // type:func +EnZl3_setMouthIndex = 0x80AFDCF8; // type:func +func_80B5357C = 0x80AFDD10; // type:func +func_80B53614 = 0x80AFDDAC; // type:func +func_80B5366C = 0x80AFDE04; // type:func +func_80B536B4 = 0x80AFDE4C; // type:func +func_80B536C4 = 0x80AFDE60; // type:func +func_80B53764 = 0x80AFDF04; // type:func +func_80B537E8 = 0x80AFDF8C; // type:func +func_80B538B0 = 0x80AFE054; // type:func +EnZl3_UpdateSkelAnime = 0x80AFE0F0; // type:func +func_80B5396C = 0x80AFE114; // type:func +func_80B53974 = 0x80AFE120; // type:func +func_80B53980 = 0x80AFE134; // type:func +func_80B53B64 = 0x80AFE31C; // type:func +func_80B54360 = 0x80AFEB2C; // type:func +func_80B5458C = 0x80AFED5C; // type:func +EnZl3_PostLimbDraw = 0x80AFF458; // type:func +func_80B54DB4 = 0x80AFF524; // type:func +func_80B54DC4 = 0x80AFF538; // type:func +func_80B54DD4 = 0x80AFF54C; // type:func +func_80B54DE0 = 0x80AFF55C; // type:func +func_80B54E14 = 0x80AFF594; // type:func +func_80B54EA4 = 0x80AFF624; // type:func +func_80B54EF4 = 0x80AFF678; // type:func +func_80B54F18 = 0x80AFF6A0; // type:func +func_80B54FB4 = 0x80AFF740; // type:func +func_80B55054 = 0x80AFF7C4; // type:func +func_80B550F0 = 0x80AFF864; // type:func +func_80B55144 = 0x80AFF8B8; // type:func +func_80B551E0 = 0x80AFF958; // type:func +func_80B55220 = 0x80AFF998; // type:func +func_80B55268 = 0x80AFF9E0; // type:func +func_80B552A8 = 0x80AFFA20; // type:func +func_80B552DC = 0x80AFFA54; // type:func +func_80B55334 = 0x80AFFAB0; // type:func +func_80B55368 = 0x80AFFAE4; // type:func +func_80B553B4 = 0x80AFFB30; // type:func +func_80B553E8 = 0x80AFFB64; // type:func +func_80B55408 = 0x80AFFB84; // type:func +func_80B55444 = 0x80AFFBC0; // type:func +func_80B55550 = 0x80AFFCC4; // type:func +func_80B555A4 = 0x80AFFD20; // type:func +func_80B55604 = 0x80AFFD88; // type:func +func_80B5566C = 0x80AFFDF8; // type:func +func_80B556CC = 0x80AFFE60; // type:func +func_80B5572C = 0x80AFFEC8; // type:func +func_80B55780 = 0x80AFFF24; // type:func +func_80B55808 = 0x80AFFF88; // type:func +func_80B5582C = 0x80AFFFB0; // type:func +func_80B5585C = 0x80AFFFE0; // type:func +func_80B558A8 = 0x80B0002C; // type:func +func_80B559C4 = 0x80B0014C; // type:func +func_80B55A58 = 0x80B001DC; // type:func +func_80B55A84 = 0x80B00208; // type:func +func_80B55AC4 = 0x80B00248; // type:func +func_80B55B04 = 0x80B00288; // type:func +func_80B55B38 = 0x80B002BC; // type:func +func_80B55B78 = 0x80B002FC; // type:func +func_80B55BAC = 0x80B00330; // type:func +func_80B55C0C = 0x80B00394; // type:func +func_80B55C4C = 0x80B003D4; // type:func +func_80B55C70 = 0x80B003FC; // type:func +func_80B55CCC = 0x80B00454; // type:func +func_80B55D00 = 0x80B00488; // type:func +func_80B55DB0 = 0x80B0053C; // type:func +func_80B55E08 = 0x80B00594; // type:func +func_80B55E48 = 0x80B005D4; // type:func +func_80B55E7C = 0x80B00608; // type:func +func_80B55EBC = 0x80B00648; // type:func +func_80B55EF0 = 0x80B0067C; // type:func +func_80B55F38 = 0x80B006C4; // type:func +func_80B55F6C = 0x80B006F8; // type:func +func_80B5604C = 0x80B007DC; // type:func +func_80B56090 = 0x80B00820; // type:func +func_80B56108 = 0x80B0089C; // type:func +func_80B56160 = 0x80B008F4; // type:func +func_80B561A0 = 0x80B00934; // type:func +func_80B561E0 = 0x80B00974; // type:func +func_80B56214 = 0x80B009A8; // type:func +func_80B562F4 = 0x80B00A8C; // type:func +func_80B5634C = 0x80B00AE4; // type:func +func_80B5638C = 0x80B00B24; // type:func +func_80B563C0 = 0x80B00B58; // type:func +func_80B56400 = 0x80B00B98; // type:func +func_80B56434 = 0x80B00BCC; // type:func +func_80B56474 = 0x80B00C0C; // type:func +func_80B564A8 = 0x80B00C40; // type:func +func_80B56658 = 0x80B00DE0; // type:func +func_80B566AC = 0x80B00E3C; // type:func +func_80B5670C = 0x80B00EA4; // type:func +func_80B5676C = 0x80B00F0C; // type:func +func_80B567CC = 0x80B00F74; // type:func +func_80B5682C = 0x80B00FDC; // type:func +func_80B568B4 = 0x80B0106C; // type:func +func_80B5691C = 0x80B010DC; // type:func +func_80B5697C = 0x80B01144; // type:func +func_80B569E4 = 0x80B011B4; // type:func +func_80B56A68 = 0x80B01240; // type:func +func_80B56AE0 = 0x80B012C0; // type:func +func_80B56B54 = 0x80B0133C; // type:func +func_80B56BA8 = 0x80B01398; // type:func +func_80B56C24 = 0x80B0141C; // type:func +func_80B56C84 = 0x80B01484; // type:func +func_80B56CE4 = 0x80B014EC; // type:func +func_80B56D44 = 0x80B01554; // type:func +func_80B56DA4 = 0x80B015BC; // type:func +func_80B56DC8 = 0x80B015E0; // type:func +func_80B56DEC = 0x80B01608; // type:func +func_80B56E38 = 0x80B01654; // type:func +func_80B56EB8 = 0x80B016D4; // type:func +func_80B56EE4 = 0x80B01704; // type:func +func_80B56F10 = 0x80B01734; // type:func +func_80B56F8C = 0x80B01788; // type:func +func_80B56FAC = 0x80B017A8; // type:func +func_80B57034 = 0x80B01834; // type:func +func_80B57104 = 0x80B01908; // type:func +func_80B571A8 = 0x80B019B0; // type:func +func_80B571FC = 0x80B01A04; // type:func +func_80B57240 = 0x80B01A48; // type:func +func_80B57298 = 0x80B01AA0; // type:func +func_80B572F0 = 0x80B01AF8; // type:func +func_80B57324 = 0x80B01B30; // type:func +func_80B57350 = 0x80B01B5C; // type:func +func_80B573C8 = 0x80B01BD4; // type:func +func_80B573FC = 0x80B01C08; // type:func +func_80B57458 = 0x80B01C64; // type:func +func_80B57564 = 0x80B01D74; // type:func +func_80B575B0 = 0x80B01DC8; // type:func +func_80B575D0 = 0x80B01DE8; // type:func +func_80B575F0 = 0x80B01E08; // type:func +func_80B5764C = 0x80B01E64; // type:func +func_80B576C8 = 0x80B01EE4; // type:func +func_80B57704 = 0x80B01F28; // type:func +func_80B5772C = 0x80B01F54; // type:func +func_80B57754 = 0x80B01F80; // type:func +func_80B577BC = 0x80B01FEC; // type:func +func_80B57858 = 0x80B0208C; // type:func +func_80B57890 = 0x80B020C8; // type:func +func_80B57A74 = 0x80B022B0; // type:func +func_80B57AAC = 0x80B022E8; // type:func +func_80B57AE0 = 0x80B0231C; // type:func +func_80B57C54 = 0x80B02494; // type:func +func_80B57C7C = 0x80B024BC; // type:func +func_80B57C8C = 0x80B024D0; // type:func +func_80B57CB4 = 0x80B024F8; // type:func +func_80B57D60 = 0x80B025A0; // type:func +func_80B57D80 = 0x80B025C4; // type:func +func_80B57EAC = 0x80B026FC; // type:func +func_80B57EEC = 0x80B02744; // type:func +func_80B57F1C = 0x80B02778; // type:func +func_80B57F84 = 0x80B027E4; // type:func +func_80B58014 = 0x80B0287C; // type:func +func_80B58214 = 0x80B02A88; // type:func +func_80B58268 = 0x80B02AE0; // type:func +func_80B582C8 = 0x80B02B40; // type:func +func_80B584B4 = 0x80B02D2C; // type:func +func_80B58624 = 0x80B02E9C; // type:func +func_80B5884C = 0x80B030CC; // type:func +func_80B58898 = 0x80B03118; // type:func +func_80B588E8 = 0x80B03168; // type:func +func_80B58938 = 0x80B031B8; // type:func +func_80B5899C = 0x80B03220; // type:func +func_80B58A1C = 0x80B032A0; // type:func +func_80B58A50 = 0x80B032DC; // type:func +func_80B58AAC = 0x80B0333C; // type:func +func_80B58C08 = 0x80B03498; // type:func +func_80B58D50 = 0x80B035E0; // type:func +func_80B58DB0 = 0x80B03648; // type:func +func_80B58E10 = 0x80B036B0; // type:func +func_80B58E7C = 0x80B03724; // type:func +func_80B58EF4 = 0x80B037A4; // type:func +func_80B58F6C = 0x80B03824; // type:func +func_80B58FDC = 0x80B0389C; // type:func +func_80B5904C = 0x80B03914; // type:func +func_80B590BC = 0x80B0398C; // type:func +func_80B5912C = 0x80B03A04; // type:func +func_80B591BC = 0x80B03A9C; // type:func +func_80B5922C = 0x80B03B14; // type:func +func_80B592A8 = 0x80B03B98; // type:func +func_80B59340 = 0x80B03C38; // type:func +func_80B593D0 = 0x80B03CD0; // type:func +func_80B5944C = 0x80B03D54; // type:func +func_80B59698 = 0x80B03F50; // type:func +func_80B59768 = 0x80B04020; // type:func +func_80B59828 = 0x80B040E0; // type:func +func_80B59A80 = 0x80B04340; // type:func +func_80B59AD0 = 0x80B04390; // type:func +func_80B59B6C = 0x80B0442C; // type:func +func_80B59DB8 = 0x80B04674; // type:func +EnZl3_Update = 0x80B046E4; // type:func +EnZl3_Init = 0x80B0472C; // type:func +EnZl3_OverrideLimbDraw = 0x80B047EC; // type:func +func_80B59FE8 = 0x80B04854; // type:func +func_80B59FF4 = 0x80B04864; // type:func +func_80B5A1D0 = 0x80B04A10; // type:func +EnZl3_Draw = 0x80B04BB8; // type:func +BossGanon2_InitRand = 0x80B05980; // type:func +BossGanon2_RandZeroOne = 0x80B059A0; // type:func +func_808FD080 = 0x80B05AC8; // type:func +BossGanon2_SetObjectSegment = 0x80B05B58; // type:func +func_808FD210 = 0x80B05C0C; // type:func +func_808FD27C = 0x80B05C7C; // type:func +BossGanon2_Init = 0x80B05D5C; // type:func +BossGanon2_Destroy = 0x80B05E8C; // type:func +func_808FD4D4 = 0x80B05EDC; // type:func +func_808FD5C4 = 0x80B05FCC; // type:func +func_808FD5F4 = 0x80B06000; // type:func +func_808FF898 = 0x80B082B0; // type:func +func_808FFA24 = 0x80B0843C; // type:func +func_808FFAC8 = 0x80B084E0; // type:func +func_808FFBBC = 0x80B085D8; // type:func +func_808FFC84 = 0x80B086A4; // type:func +func_808FFCFC = 0x80B0871C; // type:func +func_808FFDB0 = 0x80B087D0; // type:func +func_808FFEBC = 0x80B088E0; // type:func +func_808FFF90 = 0x80B089B4; // type:func +func_808FFFE0 = 0x80B08A04; // type:func +func_809000A0 = 0x80B08AC4; // type:func +func_80900104 = 0x80B08B24; // type:func +func_80900210 = 0x80B08C30; // type:func +func_8090026C = 0x80B08C8C; // type:func +func_809002CC = 0x80B08CF0; // type:func +func_80900344 = 0x80B08D64; // type:func +func_80900580 = 0x80B08FA0; // type:func +func_80900650 = 0x80B09070; // type:func +func_80900818 = 0x80B09238; // type:func +func_80900890 = 0x80B092B0; // type:func +func_80901020 = 0x80B09A44; // type:func +func_8090109C = 0x80B09AC0; // type:func +func_8090120C = 0x80B09C30; // type:func +func_80902348 = 0x80B0AD74; // type:func +BossGanon2_CollisionCheck = 0x80B0AF54; // type:func +BossGanon2_Update = 0x80B0B248; // type:func +func_809034E4 = 0x80B0BF14; // type:func +func_80903F38 = 0x80B0C968; // type:func +func_80904108 = 0x80B0CAF8; // type:func +func_80904340 = 0x80B0CCF8; // type:func +func_8090464C = 0x80B0CFEC; // type:func +BossGanon2_OverrideLimbDraw = 0x80B0D178; // type:func +BossGanon2_PostLimbDraw = 0x80B0D2B0; // type:func +func_80904D88 = 0x80B0D674; // type:func +func_80904FC8 = 0x80B0D878; // type:func +func_8090523C = 0x80B0DA90; // type:func +BossGanon2_PostLimbDraw2 = 0x80B0DD1C; // type:func +func_80905674 = 0x80B0DE44; // type:func +BossGanon2_Draw = 0x80B0E08C; // type:func +BossGanon2_UpdateEffects = 0x80B0E4F0; // type:func +BossGanon2_DrawEffects = 0x80B0E834; // type:func +func_80906538 = 0x80B0EC24; // type:func +BossGanon2_GenShadowTexture = 0x80B0F0E4; // type:func +BossGanon2_DrawShadowTexture = 0x80B0F19C; // type:func +EnKakasi_Destroy = 0x80B187A0; // type:func +EnKakasi_Init = 0x80B187CC; // type:func +func_80A8F28C = 0x80B18894; // type:func +func_80A8F320 = 0x80B18928; // type:func +func_80A8F660 = 0x80B18C68; // type:func +func_80A8F75C = 0x80B18D64; // type:func +func_80A8F8D0 = 0x80B18EE0; // type:func +func_80A8F9C8 = 0x80B18FCC; // type:func +func_80A8FAA4 = 0x80B190AC; // type:func +func_80A8FBB8 = 0x80B191B0; // type:func +EnKakasi_Update = 0x80B19248; // type:func +EnKakasi_Draw = 0x80B1934C; // type:func +EnTakaraMan_Destroy = 0x80B194E0; // type:func +EnTakaraMan_Init = 0x80B194F0; // type:func +func_80B176E0 = 0x80B1963C; // type:func +func_80B1778C = 0x80B196E8; // type:func +func_80B17934 = 0x80B19890; // type:func +func_80B17A6C = 0x80B199C8; // type:func +func_80B17AC4 = 0x80B19A24; // type:func +func_80B17B14 = 0x80B19A78; // type:func +EnTakaraMan_Update = 0x80B19ADC; // type:func +EnTakaraMan_OverrideLimbDraw = 0x80B19BB4; // type:func +EnTakaraMan_Draw = 0x80B19C1C; // type:func +ObjMakeoshihiki_Init = 0x80B19DA0; // type:func +ObjMakeoshihiki_Draw = 0x80B19F14; // type:func +OceffSpot_SetupAction = 0x80B1A230; // type:func +OceffSpot_Init = 0x80B1A23C; // type:func +OceffSpot_Destroy = 0x80B1A398; // type:func +OceffSpot_End = 0x80B1A428; // type:func +OceffSpot_Wait = 0x80B1A4F0; // type:func +OceffSpot_GrowCylinder = 0x80B1A52C; // type:func +OceffSpot_Update = 0x80B1A590; // type:func +OceffSpot_Draw = 0x80B1A868; // type:func +EndTitle_Init = 0x80B1B160; // type:func +EndTitle_Destroy = 0x80B1B190; // type:func +EndTitle_Update = 0x80B1B1A0; // type:func +EndTitle_DrawFull = 0x80B1B1B0; // type:func +EndTitle_DrawNintendoLogo = 0x80B1B78C; // type:func +EnTorch_Init = 0x80B1F290; // type:func +DemoEc_Destroy = 0x80B1F380; // type:func +DemoEc_Init = 0x80B1F3A4; // type:func +DemoEc_UpdateSkelAnime = 0x80B1F3EC; // type:func +DemoEc_UpdateBgFlags = 0x80B1F410; // type:func +func_8096D594 = 0x80B1F458; // type:func +func_8096D5D4 = 0x80B1F498; // type:func +func_8096D64C = 0x80B1F510; // type:func +DemoEc_UpdateEyes = 0x80B1F550; // type:func +DemoEc_SetEyeTexIndex = 0x80B1F5D8; // type:func +DemoEc_InitSkelAnime = 0x80B1F5F0; // type:func +DemoEc_ChangeAnimation = 0x80B1F668; // type:func +DemoEc_AllocColorDList = 0x80B1F724; // type:func +DemoEc_DrawSkeleton = 0x80B1F77C; // type:func +DemoEc_DrawSkeletonCustomColor = 0x80B1F90C; // type:func +DemoEc_UseDrawObject = 0x80B1FB6C; // type:func +DemoEc_UseAnimationObject = 0x80B1FBC8; // type:func +DemoEc_GetCue = 0x80B1FC00; // type:func +DemoEc_SetStartPosRotFromCue = 0x80B1FC28; // type:func +DemoEc_InitIngo = 0x80B1FCA8; // type:func +DemoEc_UpdateIngo = 0x80B1FD48; // type:func +DemoEc_DrawIngo = 0x80B1FD88; // type:func +DemoEc_InitTalon = 0x80B1FDBC; // type:func +DemoEc_UpdateTalon = 0x80B1FE5C; // type:func +DemoEc_DrawTalon = 0x80B1FE9C; // type:func +DemoEc_InitWindmillMan = 0x80B1FED0; // type:func +DemoEc_UpdateWindmillMan = 0x80B1FF70; // type:func +DemoEc_DrawWindmillMan = 0x80B1FFB0; // type:func +DemoEc_InitKokiriBoy = 0x80B1FFE4; // type:func +DemoEc_InitDancingKokiriBoy = 0x80B20084; // type:func +DemoEc_UpdateKokiriBoy = 0x80B20128; // type:func +DemoEc_UpdateDancingKokiriBoy = 0x80B20168; // type:func +DemoEc_DrawKokiriBoy = 0x80B20188; // type:func +DemoEc_InitKokiriGirl = 0x80B201CC; // type:func +DemoEc_InitDancingKokiriGirl = 0x80B2026C; // type:func +DemoEc_UpdateKokiriGirl = 0x80B20310; // type:func +DemoEc_UpdateDancingKokiriGirl = 0x80B20358; // type:func +DemoEc_DrawKokiriGirl = 0x80B20378; // type:func +DemoEc_InitOldMan = 0x80B203CC; // type:func +DemoEc_UpdateOldMan = 0x80B2046C; // type:func +DemoEc_DrawOldMan = 0x80B204B4; // type:func +DemoEc_InitBeardedMan = 0x80B20508; // type:func +DemoEc_UpdateBeardedMan = 0x80B205A8; // type:func +DemoEc_DrawBeardedMan = 0x80B205F0; // type:func +DemoEc_InitWoman = 0x80B20644; // type:func +DemoEc_UpdateWoman = 0x80B206E4; // type:func +DemoEc_DrawWoman = 0x80B2072C; // type:func +DemoEc_InitOldWoman = 0x80B20768; // type:func +DemoEc_UpdateOldWoman = 0x80B20808; // type:func +DemoEc_DrawOldWoman = 0x80B20848; // type:func +DemoEc_InitBossCarpenter = 0x80B20878; // type:func +DemoEc_UpdateBossCarpenter = 0x80B20918; // type:func +DemoEc_DrawBossCarpenter = 0x80B20958; // type:func +DemoEc_InitCarpenter = 0x80B20984; // type:func +DemoEc_UpdateCarpenter = 0x80B20A24; // type:func +DemoEc_CarpenterOverrideLimbDraw = 0x80B20A64; // type:func +DemoEc_GetCarpenterPostLimbDList = 0x80B20B68; // type:func +DemoEc_CarpenterPostLimbDraw = 0x80B20BD0; // type:func +DemoEc_DrawCarpenter = 0x80B20C54; // type:func +DemoEc_InitGerudo = 0x80B20C90; // type:func +DemoEc_UpdateGerudo = 0x80B20D34; // type:func +DemoEc_GetGerudoPostLimbDList = 0x80B20D7C; // type:func +DemoEc_GerudoPostLimbDraw = 0x80B20DD0; // type:func +DemoEc_DrawGerudo = 0x80B20E54; // type:func +DemoEc_InitDancingZora = 0x80B20E98; // type:func +DemoEc_UpdateDancingZora = 0x80B20F3C; // type:func +DemoEc_DrawDancingZora = 0x80B20F84; // type:func +DemoEc_InitKingZora = 0x80B20FC0; // type:func +func_8096F1D4 = 0x80B21070; // type:func +func_8096F224 = 0x80B210C0; // type:func +func_8096F26C = 0x80B21108; // type:func +func_8096F2B0 = 0x80B21150; // type:func +DemoEc_UpdateKingZora = 0x80B211B4; // type:func +func_8096F378 = 0x80B2121C; // type:func +func_8096F3D4 = 0x80B2127C; // type:func +DemoEc_DrawKingZora = 0x80B212C4; // type:func +DemoEc_InitMido = 0x80B21300; // type:func +func_8096F4FC = 0x80B213B0; // type:func +func_8096F544 = 0x80B213F8; // type:func +func_8096F578 = 0x80B2142C; // type:func +DemoEc_UpdateMido = 0x80B21490; // type:func +func_8096F640 = 0x80B214F8; // type:func +DemoEc_DrawMido = 0x80B21558; // type:func +DemoEc_InitCucco = 0x80B21594; // type:func +DemoEc_UpdateCucco = 0x80B21664; // type:func +DemoEc_DrawCucco = 0x80B216A4; // type:func +DemoEc_InitCuccoLady = 0x80B216D0; // type:func +DemoEc_UpdateCuccoLady = 0x80B21774; // type:func +DemoEc_DrawCuccoLady = 0x80B217BC; // type:func +DemoEc_InitPotionShopOwner = 0x80B217F8; // type:func +DemoEc_UpdatePotionShopOwner = 0x80B2189C; // type:func +DemoEc_DrawPotionShopOwner = 0x80B218E4; // type:func +DemoEc_InitMaskShopOwner = 0x80B21920; // type:func +DemoEc_UpdateMaskShopOwner = 0x80B219C4; // type:func +DemoEc_DrawMaskShopOwner = 0x80B21A04; // type:func +DemoEc_InitFishingOwner = 0x80B21A34; // type:func +DemoEc_UpdateFishingOwner = 0x80B21AD8; // type:func +DemoEc_FishingOwnerPostLimbDraw = 0x80B21B20; // type:func +DemoEc_DrawFishingOwner = 0x80B21BA0; // type:func +DemoEc_InitBombchuShopOwner = 0x80B21BE4; // type:func +DempEc_UpdateBombchuShopOwner = 0x80B21C88; // type:func +DemoEc_DrawBombchuShopOwner = 0x80B21CD0; // type:func +DemoEc_InitGorons = 0x80B21D0C; // type:func +DemoEc_UpdateGorons = 0x80B21E44; // type:func +DemoEc_DrawGorons = 0x80B21E8C; // type:func +DemoEc_InitMalon = 0x80B21ECC; // type:func +DemoEc_UpdateMalon = 0x80B21F70; // type:func +DemoEc_DrawMalon = 0x80B21FB8; // type:func +DemoEc_InitNpc = 0x80B21FF8; // type:func +DemoEc_InitCommon = 0x80B22044; // type:func +DemoEc_Update = 0x80B22118; // type:func +DemoEc_DrawCommon = 0x80B22190; // type:func +DemoEc_Draw = 0x80B221A0; // type:func +ShotSun_Init = 0x80B22BE0; // type:func +ShotSun_Destroy = 0x80B22C9C; // type:func +ShotSun_SpawnFairy = 0x80B22CE0; // type:func +ShotSun_TriggerFairy = 0x80B22D88; // type:func +ShotSun_UpdateFairySpawner = 0x80B22E24; // type:func +ShotSun_UpdateHyliaSun = 0x80B22F74; // type:func +ShotSun_Update = 0x80B231AC; // type:func +EnDyExtra_Destroy = 0x80B232A0; // type:func +EnDyExtra_Init = 0x80B232B0; // type:func +EnDyExtra_WaitForTrigger = 0x80B23324; // type:func +EnDyExtra_FallAndKill = 0x80B233B8; // type:func +EnDyExtra_Update = 0x80B23470; // type:func +EnDyExtra_Draw = 0x80B234DC; // type:func +EnWonderTalk2_Destroy = 0x80B23820; // type:func +EnWonderTalk2_Init = 0x80B23830; // type:func +func_80B3A10C = 0x80B239C0; // type:func +func_80B3A15C = 0x80B23A10; // type:func +func_80B3A3D4 = 0x80B23B90; // type:func +func_80B3A4F8 = 0x80B23C78; // type:func +EnWonderTalk2_DoNothing = 0x80B23DC8; // type:func +EnWonderTalk2_Update = 0x80B23DD8; // type:func +EnGe2_ChangeAction = 0x80B23EC0; // type:func +EnGe2_Init = 0x80B23F68; // type:func +EnGe2_Destroy = 0x80B24180; // type:func +Ge2_DetectPlayerInAction = 0x80B241AC; // type:func +Ge2_DetectPlayerInUpdate = 0x80B24258; // type:func +EnGe2_CheckCarpentersFreed = 0x80B24388; // type:func +EnGe2_CaptureClose = 0x80B243B4; // type:func +EnGe2_CaptureCharge = 0x80B24488; // type:func +EnGe2_CaptureTurn = 0x80B245BC; // type:func +EnGe2_KnockedOut = 0x80B24634; // type:func +EnGe2_TurnPlayerSpotted = 0x80B2472C; // type:func +EnGe2_AboutTurn = 0x80B24834; // type:func +EnGe2_Walk = 0x80B248EC; // type:func +EnGe2_Stand = 0x80B249B4; // type:func +EnGe2_TurnToFacePlayer = 0x80B249F4; // type:func +EnGe2_LookAtPlayer = 0x80B24B0C; // type:func +EnGe2_SetActionAfterTalk = 0x80B24C20; // type:func +EnGe2_WaitLookAtPlayer = 0x80B24CE4; // type:func +EnGe2_WaitTillCardGiven = 0x80B24D04; // type:func +EnGe2_GiveCard = 0x80B24D68; // type:func +EnGe2_ForceTalk = 0x80B24DFC; // type:func +EnGe2_SetupCapturePlayer = 0x80B24E80; // type:func +EnGe2_MaintainColliderAndSetAnimState = 0x80B24EF0; // type:func +EnGe2_MoveAndBlink = 0x80B24F98; // type:func +EnGe2_UpdateFriendly = 0x80B25024; // type:func +EnGe2_UpdateAfterTalk = 0x80B250FC; // type:func +EnGe2_Update = 0x80B25150; // type:func +EnGe2_UpdateStunned = 0x80B25338; // type:func +EnGe2_OverrideLimbDraw = 0x80B2546C; // type:func +EnGe2_PostLimbDraw = 0x80B254B4; // type:func +EnGe2_Draw = 0x80B254F4; // type:func +ObjRoomtimer_Init = 0x80B25860; // type:func +ObjRoomtimer_Destroy = 0x80B258B4; // type:func +func_80B9D054 = 0x80B258E8; // type:func +func_80B9D0B0 = 0x80B25948; // type:func +ObjRoomtimer_Update = 0x80B25A24; // type:func +EnSsh_SetupAction = 0x80B25AB0; // type:func +EnSsh_SpawnShockwave = 0x80B25ABC; // type:func +EnSsh_CreateBlureEffect = 0x80B25B44; // type:func +EnSsh_CheckCeilingPos = 0x80B25C40; // type:func +EnSsh_AddBlureVertex = 0x80B25CD8; // type:func +EnSsh_AddBlureSpace = 0x80B25DE0; // type:func +EnSsh_InitColliders = 0x80B25E0C; // type:func +EnSsh_SetAnimation = 0x80B25F4C; // type:func +EnSsh_SetWaitAnimation = 0x80B26080; // type:func +EnSsh_SetReturnAnimation = 0x80B260A0; // type:func +EnSsh_SetLandAnimation = 0x80B260D4; // type:func +EnSsh_SetDropAnimation = 0x80B26118; // type:func +EnSsh_SetStunned = 0x80B26168; // type:func +EnSsh_SetColliderScale = 0x80B26194; // type:func +EnSsh_Damaged = 0x80B26308; // type:func +EnSsh_Turn = 0x80B263E4; // type:func +EnSsh_Stunned = 0x80B264B8; // type:func +EnSsh_UpdateYaw = 0x80B26558; // type:func +EnSsh_Bob = 0x80B26594; // type:func +EnSsh_IsCloseToLink = 0x80B26600; // type:func +EnSsh_IsCloseToHome = 0x80B266E8; // type:func +EnSsh_IsCloseToGround = 0x80B26720; // type:func +EnSsh_Sway = 0x80B26760; // type:func +EnSsh_CheckBodyStickHit = 0x80B268A4; // type:func +EnSsh_CheckHitPlayer = 0x80B26918; // type:func +EnSsh_CheckHitFront = 0x80B26A20; // type:func +EnSsh_CheckHitBack = 0x80B26A7C; // type:func +EnSsh_CollisionCheck = 0x80B26B54; // type:func +EnSsh_SetBodyCylinderAC = 0x80B26C08; // type:func +EnSsh_SetLegsCylinderAC = 0x80B26C4C; // type:func +EnSsh_SetCylinderOC = 0x80B26D04; // type:func +EnSsh_SetColliders = 0x80B26EDC; // type:func +EnSsh_Init = 0x80B26FA4; // type:func +EnSsh_Destroy = 0x80B27138; // type:func +EnSsh_Wait = 0x80B271B8; // type:func +EnSsh_Talk = 0x80B27214; // type:func +EnSsh_Idle = 0x80B27260; // type:func +EnSsh_Land = 0x80B274F8; // type:func +EnSsh_Drop = 0x80B275E0; // type:func +EnSsh_Return = 0x80B276E0; // type:func +EnSsh_UpdateColliderScale = 0x80B277B4; // type:func +EnSsh_Start = 0x80B2785C; // type:func +EnSsh_Update = 0x80B278E4; // type:func +EnSsh_OverrideLimbDraw = 0x80B27A04; // type:func +EnSsh_PostLimbDraw = 0x80B27AF4; // type:func +EnSsh_Draw = 0x80B27B30; // type:func +EnSth_SetupAction = 0x80B280A0; // type:func +EnSth_Init = 0x80B280AC; // type:func +EnSth_SetupShapeColliderUpdate2AndDraw = 0x80B281A8; // type:func +EnSth_SetupAfterObjectLoaded = 0x80B2822C; // type:func +EnSth_Destroy = 0x80B28350; // type:func +EnSth_WaitForObject = 0x80B2837C; // type:func +EnSth_FacePlayer = 0x80B283D0; // type:func +EnSth_LookAtPlayer = 0x80B284E8; // type:func +EnSth_RewardObtainedTalk = 0x80B285FC; // type:func +EnSth_ParentRewardObtainedWait = 0x80B28678; // type:func +EnSth_GivePlayerItem = 0x80B28704; // type:func +EnSth_GiveReward = 0x80B287A0; // type:func +EnSth_RewardUnobtainedTalk = 0x80B28820; // type:func +EnSth_RewardUnobtainedWait = 0x80B2889C; // type:func +EnSth_ChildRewardObtainedWait = 0x80B28940; // type:func +EnSth_Update = 0x80B289EC; // type:func +EnSth_Update2 = 0x80B28A10; // type:func +EnSth_OverrideLimbDraw = 0x80B28B14; // type:func +EnSth_PostLimbDraw = 0x80B28C70; // type:func +EnSth_AllocColorDList = 0x80B28CE8; // type:func +EnSth_Draw = 0x80B28D54; // type:func +OceffWipe_Init = 0x80B2C150; // type:func +OceffWipe_Destroy = 0x80B2C1AC; // type:func +OceffWipe_Update = 0x80B2C1F8; // type:func +OceffWipe_Draw = 0x80B2C258; // type:func +EffectSsDust_Init = 0x80B2CEA0; // type:func +EffectSsDust_Draw = 0x80B2D054; // type:func +EffectSsDust_Update = 0x80B2D398; // type:func +EffectSsDust_UpdateFire = 0x80B2D490; // type:func +EffectSsKiraKira_Init = 0x80B2D6D0; // type:func +EffectSsKiraKira_Draw = 0x80B2D870; // type:func +func_809AABF0 = 0x80B2DA8C; // type:func +func_809AACAC = 0x80B2DB44; // type:func +func_809AAD6C = 0x80B2DC00; // type:func +EffectSsBomb_Init = 0x80B2DD40; // type:func +EffectSsBomb_Draw = 0x80B2DE08; // type:func +EffectSsBomb_Update = 0x80B2E034; // type:func +EffectSsBomb2_Init = 0x80B2E160; // type:func +EffectSsBomb2_DrawFade = 0x80B2E258; // type:func +EffectSsBomb2_DrawLayered = 0x80B2E448; // type:func +EffectSsBomb2_Update = 0x80B2E7A4; // type:func +EffectSsBlast_Init = 0x80B2EA90; // type:func +EffectSsBlast_Draw = 0x80B2EBEC; // type:func +EffectSsBlast_Update = 0x80B2ED58; // type:func +EffectSsGSpk_Init = 0x80B2EE20; // type:func +EffectSsGSpk_Draw = 0x80B2EF90; // type:func +EffectSsGSpk_Update = 0x80B2F184; // type:func +EffectSsGSpk_UpdateNoAccel = 0x80B2F28C; // type:func +EffectSsDFire_Init = 0x80B2F3D0; // type:func +EffectSsDFire_Draw = 0x80B2F51C; // type:func +EffectSsDFire_Update = 0x80B2F764; // type:func +EffectSsBubble_Init = 0x80B2F8C0; // type:func +EffectSsBubble_Draw = 0x80B2FA50; // type:func +EffectSsBubble_Update = 0x80B2FBA4; // type:func +EffectSsGRipple_Init = 0x80B2FD40; // type:func +EffectSsGRipple_DrawRipple = 0x80B2FEBC; // type:func +EffectSsGRipple_Draw = 0x80B300B8; // type:func +EffectSsGRipple_Update = 0x80B300F0; // type:func +EffectSsGSplash_Init = 0x80B302A0; // type:func +EffectSsGSplash_Draw = 0x80B304C0; // type:func +EffectSsGSplash_Update = 0x80B305C8; // type:func +EffectSsGMagma_Init = 0x80B30750; // type:func +EffectSsGMagma_Draw = 0x80B308A8; // type:func +EffectSsGMagma_Update = 0x80B30904; // type:func +EffectSsGFire_Init = 0x80B309B0; // type:func +EffectSsGFire_Draw = 0x80B30AF0; // type:func +EffectSsGFire_Update = 0x80B30B98; // type:func +EffectSsLightning_Init = 0x80B30C40; // type:func +EffectSsLightning_NewLightning = 0x80B30D28; // type:func +EffectSsLightning_Draw = 0x80B30DCC; // type:func +EffectSsLightning_Update = 0x80B31064; // type:func +EffectSsDtBubble_Init = 0x80B31310; // type:func +EffectSsDtBubble_Draw = 0x80B31564; // type:func +EffectSsDtBubble_Update = 0x80B317A4; // type:func +EffectSsHahen_CheckForObject = 0x80B318A0; // type:func +EffectSsHahen_Init = 0x80B31914; // type:func +EffectSsHahen_Draw = 0x80B31AB0; // type:func +EffectSsHahen_DrawGray = 0x80B31C10; // type:func +EffectSsHahen_Update = 0x80B31DB8; // type:func +EffectSsStick_Init = 0x80B31EE0; // type:func +EffectSsStick_Draw = 0x80B32040; // type:func +EffectSsStick_Update = 0x80B321E0; // type:func +EffectSsSibuki_Init = 0x80B32280; // type:func +EffectSsSibuki_Draw = 0x80B32438; // type:func +EffectSsSibuki_Update = 0x80B325E8; // type:func +EffectSsSibuki2_Init = 0x80B32950; // type:func +EffectSsSibuki2_Draw = 0x80B32A00; // type:func +EffectSsSibuki2_Update = 0x80B32BE4; // type:func +EffectSsGMagma2_Init = 0x80B32C80; // type:func +EffectSsGMagma2_Draw = 0x80B32E4C; // type:func +EffectSsGMagma2_Update = 0x80B33064; // type:func +EffectSsStone1_Init = 0x80B33190; // type:func +EffectSsStone1_Draw = 0x80B3321C; // type:func +EffectSsStone1_Update = 0x80B3341C; // type:func +EffectSsHitMark_Init = 0x80B33520; // type:func +EffectSsHitMark_Draw = 0x80B33620; // type:func +EffectSsHitMark_Update = 0x80B33830; // type:func +EffectSsFhgFlash_Init = 0x80B33A70; // type:func +EffectSsFhgFlash_DrawLightBall = 0x80B33DBC; // type:func +EffectSsFhgFlash_DrawShock = 0x80B33FB0; // type:func +EffectSsFhgFlash_UpdateLightBall = 0x80B341BC; // type:func +EffectSsFhgFlash_UpdateShock = 0x80B34254; // type:func +EffectSsKFire_Init = 0x80B349F0; // type:func +EffectSsKFire_Draw = 0x80B34AC0; // type:func +EffectSsKFire_Update = 0x80B34D1C; // type:func +EffectSsSolderSrchBall_Init = 0x80B34E20; // type:func +EffectSsSolderSrchBall_Update = 0x80B34EA0; // type:func +EffectSsKakera_Init = 0x80B34FD0; // type:func +func_809A9818 = 0x80B3515C; // type:func +EffectSsKakera_Draw = 0x80B35198; // type:func +func_809A9BA8 = 0x80B35484; // type:func +func_809A9C10 = 0x80B354F0; // type:func +func_809A9DC0 = 0x80B356A0; // type:func +func_809A9DD8 = 0x80B356BC; // type:func +func_809A9DEC = 0x80B356D8; // type:func +func_809A9E28 = 0x80B35714; // type:func +func_809A9E68 = 0x80B35754; // type:func +func_809A9E88 = 0x80B35774; // type:func +func_809A9F10 = 0x80B35804; // type:func +func_809A9F4C = 0x80B35844; // type:func +func_809A9FD8 = 0x80B358D8; // type:func +func_809AA0B8 = 0x80B359B4; // type:func +func_809AA0EC = 0x80B359EC; // type:func +func_809AA230 = 0x80B35B34; // type:func +EffectSsKakera_Update = 0x80B35D34; // type:func +EffectSsIcePiece_Init = 0x80B36060; // type:func +EffectSsIcePiece_Draw = 0x80B361AC; // type:func +EffectSsIcePiece_Update = 0x80B363D8; // type:func +EffectSsEnIce_Init = 0x80B364A0; // type:func +EffectSsEnIce_Draw = 0x80B36748; // type:func +EffectSsEnIce_UpdateFlying = 0x80B36AB4; // type:func +EffectSsEnIce_Update = 0x80B36C8C; // type:func +EffectSsFireTail_Init = 0x80B36D60; // type:func +EffectSsFireTail_Draw = 0x80B36E7C; // type:func +EffectSsFireTail_Update = 0x80B37384; // type:func +EffectSsEnFire_Init = 0x80B37460; // type:func +EffectSsEnFire_Draw = 0x80B37628; // type:func +EffectSsEnFire_Update = 0x80B37924; // type:func +EffectSsExtra_Init = 0x80B37BA0; // type:func +EffectSsExtra_Draw = 0x80B37CE4; // type:func +EffectSsExtra_Update = 0x80B37E98; // type:func +EffectSsFcircle_Init = 0x80B37F60; // type:func +EffectSsFcircle_Draw = 0x80B38020; // type:func +EffectSsFcircle_Update = 0x80B382EC; // type:func +EffectSsDeadDb_Init = 0x80B38410; // type:func +EffectSsDeadDb_Draw = 0x80B3852C; // type:func +EffectSsDeadDb_Update = 0x80B38700; // type:func +EffectSsDeadDd_Init = 0x80B388F0; // type:func +EffectSsDeadDd_Draw = 0x80B38BB8; // type:func +EffectSsDeadDd_Update = 0x80B38D88; // type:func +EffectSsDeadDs_Init = 0x80B38E80; // type:func +EffectSsDeadDs_Draw = 0x80B38F68; // type:func +EffectSsDeadDs_Update = 0x80B39238; // type:func +EffectSsDeadSound_Init = 0x80B39300; // type:func +EffectSsDeadSound_Update = 0x80B3938C; // type:func +OceffStorm_SetupAction = 0x80B39440; // type:func +OceffStorm_Init = 0x80B3944C; // type:func +OceffStorm_Destroy = 0x80B3951C; // type:func +OceffStorm_DefaultAction = 0x80B39568; // type:func +OceffStorm_UnkAction = 0x80B3972C; // type:func +OceffStorm_Update = 0x80B3974C; // type:func +OceffStorm_Draw2 = 0x80B397B8; // type:func +OceffStorm_Draw = 0x80B39960; // type:func +EnWeiyer_Init = 0x80B3AFE0; // type:func +EnWeiyer_Destroy = 0x80B3B0B0; // type:func +func_80B32384 = 0x80B3B0DC; // type:func +func_80B32434 = 0x80B3B190; // type:func +func_80B32494 = 0x80B3B1F0; // type:func +func_80B32508 = 0x80B3B264; // type:func +func_80B32538 = 0x80B3B298; // type:func +func_80B325A0 = 0x80B3B304; // type:func +func_80B32660 = 0x80B3B3C4; // type:func +func_80B32724 = 0x80B3B488; // type:func +func_80B327B0 = 0x80B3B514; // type:func +func_80B327D8 = 0x80B3B540; // type:func +func_80B32804 = 0x80B3B570; // type:func +func_80B328E8 = 0x80B3B654; // type:func +func_80B32C2C = 0x80B3B998; // type:func +func_80B32D30 = 0x80B3BA9C; // type:func +func_80B32DEC = 0x80B3BB58; // type:func +func_80B32E34 = 0x80B3BBA4; // type:func +func_80B33018 = 0x80B3BD8C; // type:func +func_80B331CC = 0x80B3BF40; // type:func +func_80B332B4 = 0x80B3C028; // type:func +func_80B33338 = 0x80B3C0AC; // type:func +func_80B333B8 = 0x80B3C12C; // type:func +func_80B3349C = 0x80B3C210; // type:func +func_80B3368C = 0x80B3C404; // type:func +EnWeiyer_Update = 0x80B3C4E4; // type:func +EnWeiyer_OverrideLimbDraw = 0x80B3C658; // type:func +EnWeiyer_Draw = 0x80B3C688; // type:func +BgSpot05Soko_Init = 0x80B3C9E0; // type:func +BgSpot05Soko_Destroy = 0x80B3CAEC; // type:func +func_808AE5A8 = 0x80B3CB20; // type:func +func_808AE5B4 = 0x80B3CB30; // type:func +func_808AE630 = 0x80B3CBAC; // type:func +BgSpot05Soko_Update = 0x80B3CC14; // type:func +BgSpot05Soko_Draw = 0x80B3CC38; // type:func +BgJya1flift_InitDynapoly = 0x80B3CD00; // type:func +BgJya1flift_InitCollision = 0x80B3CD58; // type:func +BgJya1flift_Init = 0x80B3CDAC; // type:func +BgJya1flift_Destroy = 0x80B3CEA4; // type:func +BgJya1flift_SetupWaitForSwitch = 0x80B3CEFC; // type:func +BgJya1flift_WaitForSwitch = 0x80B3CF1C; // type:func +BgJya1flift_SetupDoNothing = 0x80B3CF60; // type:func +BgJya1flift_DoNothing = 0x80B3CF80; // type:func +BgJya1flift_ChangeDirection = 0x80B3CF90; // type:func +BgJya1flift_Move = 0x80B3CFB8; // type:func +BgJya1flift_ResetMoveDelay = 0x80B3D09C; // type:func +BgJya1flift_DelayMove = 0x80B3D0B4; // type:func +BgJya1flift_Update = 0x80B3D0F4; // type:func +BgJya1flift_Draw = 0x80B3D210; // type:func +BgJyaHaheniron_ColliderInit = 0x80B3D390; // type:func +BgJyaHaheniron_SpawnFragments = 0x80B3D3E4; // type:func +BgJyaHaheniron_Init = 0x80B3D610; // type:func +BgJyaHaheniron_Destroy = 0x80B3D6DC; // type:func +BgJyaHaheniron_SetupChairCrumble = 0x80B3D714; // type:func +BgJyaHaheniron_ChairCrumble = 0x80B3D728; // type:func +BgJyaHaheniron_SetupPillarCrumble = 0x80B3D864; // type:func +BgJyaHaheniron_PillarCrumble = 0x80B3D878; // type:func +BgJyaHaheniron_SetupRubbleCollide = 0x80B3D8F8; // type:func +BgJyaHaheniron_RubbleCollide = 0x80B3D90C; // type:func +BgJyaHaheniron_Update = 0x80B3D970; // type:func +BgJyaHaheniron_Draw = 0x80B3D99C; // type:func +BgSpot12Gate_InitDynaPoly = 0x80B3DB80; // type:func +BgSpot12Gate_Init = 0x80B3DBD8; // type:func +BgSpot12Gate_Destroy = 0x80B3DC58; // type:func +func_808B30C0 = 0x80B3DC8C; // type:func +func_808B30D8 = 0x80B3DCA8; // type:func +func_808B3134 = 0x80B3DD04; // type:func +func_808B314C = 0x80B3DD20; // type:func +func_808B317C = 0x80B3DD50; // type:func +func_808B318C = 0x80B3DD64; // type:func +func_808B3274 = 0x80B3DE4C; // type:func +func_808B3298 = 0x80B3DE74; // type:func +BgSpot12Gate_Update = 0x80B3DE84; // type:func +BgSpot12Gate_Draw = 0x80B3DEB8; // type:func +func_808B3420 = 0x80B3DF90; // type:func +BgSpot12Saku_Init = 0x80B3DFE8; // type:func +BgSpot12Saku_Destroy = 0x80B3E068; // type:func +func_808B3550 = 0x80B3E09C; // type:func +func_808B357C = 0x80B3E0CC; // type:func +func_808B35E4 = 0x80B3E134; // type:func +func_808B3604 = 0x80B3E154; // type:func +func_808B3714 = 0x80B3E264; // type:func +func_808B37AC = 0x80B3E2F8; // type:func +BgSpot12Saku_Update = 0x80B3E308; // type:func +BgSpot12Saku_Draw = 0x80B3E33C; // type:func +EnHintnuts_Init = 0x80B3E450; // type:func +EnHintnuts_Destroy = 0x80B3E5F0; // type:func +EnHintnuts_HitByScrubProjectile1 = 0x80B3E62C; // type:func +EnHintnuts_SetupWait = 0x80B3E6B0; // type:func +EnHintnuts_SetupLookAround = 0x80B3E730; // type:func +EnHintnuts_SetupThrowScrubProjectile = 0x80B3E778; // type:func +EnHintnuts_SetupStand = 0x80B3E7B8; // type:func +EnHintnuts_SetupBurrow = 0x80B3E820; // type:func +EnHintnuts_HitByScrubProjectile2 = 0x80B3E870; // type:func +EnHintnuts_SetupRun = 0x80B3E960; // type:func +EnHintnuts_SetupTalk = 0x80B3E9A8; // type:func +EnHintnuts_SetupLeave = 0x80B3E9F4; // type:func +EnHintnuts_SetupFreeze = 0x80B3EAB4; // type:func +EnHintnuts_Wait = 0x80B3EB60; // type:func +EnHintnuts_LookAround = 0x80B3EDC4; // type:func +EnHintnuts_Stand = 0x80B3EE48; // type:func +EnHintnuts_ThrowNut = 0x80B3EF0C; // type:func +EnHintnuts_Burrow = 0x80B3F048; // type:func +EnHintnuts_BeginRun = 0x80B3F15C; // type:func +EnHintnuts_BeginFreeze = 0x80B3F1C0; // type:func +EnHintnuts_CheckProximity = 0x80B3F1FC; // type:func +EnHintnuts_Run = 0x80B3F290; // type:func +EnHintnuts_Talk = 0x80B3F520; // type:func +EnHintnuts_Leave = 0x80B3F58C; // type:func +EnHintnuts_Freeze = 0x80B3F748; // type:func +EnHintnuts_ColliderCheck = 0x80B3F874; // type:func +EnHintnuts_Update = 0x80B3F928; // type:func +EnHintnuts_OverrideLimbDraw = 0x80B3FAB0; // type:func +EnHintnuts_Draw = 0x80B3FBE4; // type:func +EnNutsball_Init = 0x80B3FE80; // type:func +EnNutsball_Destroy = 0x80B3FF3C; // type:func +func_80ABBB34 = 0x80B3FF68; // type:func +func_80ABBBA8 = 0x80B3FFE0; // type:func +EnNutsball_Update = 0x80B401B0; // type:func +EnNutsball_Draw = 0x80B402CC; // type:func +BgSpot00Break_Init = 0x80B404A0; // type:func +BgSpot00Break_Destroy = 0x80B4054C; // type:func +BgSpot00Break_Update = 0x80B40580; // type:func +BgSpot00Break_Draw = 0x80B40590; // type:func +EnShopnuts_Init = 0x80B40640; // type:func +EnShopnuts_Destroy = 0x80B4077C; // type:func +EnShopnuts_SetupIdle = 0x80B407A8; // type:func +EnShopnuts_SetupLookAround = 0x80B40810; // type:func +EnShopnuts_SetupThrowNut = 0x80B40858; // type:func +EnShopnuts_SetupPeek = 0x80B40898; // type:func +EnShopnuts_SetupBurrow = 0x80B40900; // type:func +EnShopnuts_SetupSpawnSalesman = 0x80B40950; // type:func +EnShopnuts_Idle = 0x80B409A8; // type:func +EnShopnuts_LookAround = 0x80B40C0C; // type:func +EnShopnuts_Peek = 0x80B40C90; // type:func +EnShopnuts_ThrowNut = 0x80B40D54; // type:func +EnShopnuts_Burrow = 0x80B40E90; // type:func +EnShopnuts_SpawnSalesman = 0x80B40F54; // type:func +EnShopnuts_ColliderCheck = 0x80B40FF0; // type:func +EnShopnuts_Update = 0x80B41050; // type:func +EnShopnuts_OverrideLimbDraw = 0x80B41190; // type:func +EnShopnuts_PostLimbDraw = 0x80B411C8; // type:func +EnShopnuts_Draw = 0x80B41364; // type:func +EnIt_Init = 0x80B41550; // type:func +EnIt_Destroy = 0x80B415BC; // type:func +EnIt_Update = 0x80B415E8; // type:func +EnGeldB_SetupAction = 0x80B416E0; // type:func +EnGeldB_Init = 0x80B416EC; // type:func +EnGeldB_Destroy = 0x80B41910; // type:func +EnGeldB_ReactToPlayer = 0x80B41978; // type:func +EnGeldB_SetupWait = 0x80B41D50; // type:func +EnGeldB_Wait = 0x80B41DE4; // type:func +EnGeldB_SetupFlee = 0x80B41F68; // type:func +EnGeldB_Flee = 0x80B42000; // type:func +EnGeldB_SetupReady = 0x80B42128; // type:func +EnGeldB_Ready = 0x80B421B0; // type:func +EnGeldB_SetupAdvance = 0x80B42494; // type:func +EnGeldB_Advance = 0x80B42514; // type:func +EnGeldB_SetupRollForward = 0x80B429C0; // type:func +EnGeldB_RollForward = 0x80B42A74; // type:func +EnGeldB_SetupPivot = 0x80B42BCC; // type:func +EnGeldB_Pivot = 0x80B42C18; // type:func +EnGeldB_SetupCircle = 0x80B42DF8; // type:func +EnGeldB_Circle = 0x80B42ECC; // type:func +EnGeldB_SetupSpinDodge = 0x80B434A8; // type:func +EnGeldB_SpinDodge = 0x80B43610; // type:func +EnGeldB_SetupSlash = 0x80B43A60; // type:func +EnGeldB_Slash = 0x80B43AD0; // type:func +EnGeldB_SetupSpinAttack = 0x80B43D20; // type:func +EnGeldB_SpinAttack = 0x80B43DB4; // type:func +EnGeldB_SetupRollBack = 0x80B44168; // type:func +EnGeldB_RollBack = 0x80B441E4; // type:func +EnGeldB_SetupStunned = 0x80B442E8; // type:func +EnGeldB_Stunned = 0x80B44394; // type:func +EnGeldB_SetupDamaged = 0x80B44450; // type:func +EnGeldB_Damaged = 0x80B444E8; // type:func +EnGeldB_SetupJump = 0x80B44690; // type:func +EnGeldB_Jump = 0x80B44748; // type:func +EnGeldB_SetupBlock = 0x80B44830; // type:func +EnGeldB_Block = 0x80B448E8; // type:func +EnGeldB_SetupSidestep = 0x80B44BD4; // type:func +EnGeldB_Sidestep = 0x80B44D64; // type:func +EnGeldB_SetupDefeated = 0x80B45484; // type:func +EnGeldB_Defeated = 0x80B45528; // type:func +EnGeldB_TurnHead = 0x80B455E4; // type:func +EnGeldB_CollisionCheck = 0x80B456E4; // type:func +EnGeldB_Update = 0x80B458B0; // type:func +EnGeldB_OverrideLimbDraw = 0x80B45A9C; // type:func +EnGeldB_PostLimbDraw = 0x80B45BE4; // type:func +EnGeldB_Draw = 0x80B45E5C; // type:func +EnGeldB_DodgeRanged = 0x80B461CC; // type:func +OceffWipe2_Init = 0x80B46A90; // type:func +OceffWipe2_Destroy = 0x80B46AEC; // type:func +OceffWipe2_Update = 0x80B46B38; // type:func +OceffWipe2_Draw = 0x80B46B98; // type:func +OceffWipe3_Init = 0x80B48200; // type:func +OceffWipe3_Destroy = 0x80B4825C; // type:func +OceffWipe3_Update = 0x80B482A8; // type:func +OceffWipe3_Draw = 0x80B48308; // type:func +EnNiwGirl_Init = 0x80B49950; // type:func +EnNiwGirl_Destroy = 0x80B49AF0; // type:func +EnNiwGirl_Jump = 0x80B49B00; // type:func +func_80AB9210 = 0x80B49B84; // type:func +EnNiwGirl_Talk = 0x80B49D38; // type:func +func_80AB94D0 = 0x80B49E48; // type:func +EnNiwGirl_Update = 0x80B49F3C; // type:func +EnNiwGirlOverrideLimbDraw = 0x80B4A164; // type:func +EnNiwGirl_Draw = 0x80B4A1CC; // type:func +EnDog_PlayWalkSFX = 0x80B4A420; // type:func +EnDog_PlayRunSFX = 0x80B4A488; // type:func +EnDog_PlayBarkSFX = 0x80B4A4F0; // type:func +EnDog_PlayAnimAndSFX = 0x80B4A558; // type:func +EnDog_CanFollow = 0x80B4A6F0; // type:func +EnDog_UpdateWaypoint = 0x80B4A774; // type:func +EnDog_Orient = 0x80B4A800; // type:func +EnDog_Init = 0x80B4A8A4; // type:func +EnDog_Destroy = 0x80B4AAF4; // type:func +EnDog_FollowPath = 0x80B4AB20; // type:func +EnDog_ChooseMovement = 0x80B4ACB8; // type:func +EnDog_FollowPlayer = 0x80B4ADA8; // type:func +EnDog_RunAway = 0x80B4AF28; // type:func +EnDog_FaceLink = 0x80B4AFCC; // type:func +EnDog_Wait = 0x80B4B0D4; // type:func +EnDog_Update = 0x80B4B12C; // type:func +EnDog_OverrideLimbDraw = 0x80B4B1F8; // type:func +EnDog_PostLimbDraw = 0x80B4B214; // type:func +EnDog_Draw = 0x80B4B22C; // type:func +EnSi_Init = 0x80B4B5D0; // type:func +EnSi_Destroy = 0x80B4B660; // type:func +func_80AFB748 = 0x80B4B68C; // type:func +func_80AFB768 = 0x80B4B6B0; // type:func +func_80AFB89C = 0x80B4B7E4; // type:func +func_80AFB950 = 0x80B4B89C; // type:func +EnSi_Update = 0x80B4B930; // type:func +EnSi_Draw = 0x80B4B9A4; // type:func +BgSpot01Objects2_Init = 0x80B4BAD0; // type:func +BgSpot01Objects2_Destroy = 0x80B4BBAC; // type:func +func_808AC22C = 0x80B4BBBC; // type:func +func_808AC2BC = 0x80B4BC50; // type:func +func_808AC474 = 0x80B4BE00; // type:func +BgSpot01Objects2_Update = 0x80B4BE10; // type:func +func_808AC4A4 = 0x80B4BE34; // type:func +ObjComb_Break = 0x80B4BF90; // type:func +ObjComb_ChooseItemDrop = 0x80B4C280; // type:func +ObjComb_Init = 0x80B4C350; // type:func +ObjComb_Destroy = 0x80B4C3C0; // type:func +ObjComb_SetupWait = 0x80B4C3EC; // type:func +ObjComb_Wait = 0x80B4C400; // type:func +ObjComb_Update = 0x80B4C4EC; // type:func +ObjComb_Draw = 0x80B4C564; // type:func +func_808B2180 = 0x80B4C7F0; // type:func +func_808B2218 = 0x80B4C884; // type:func +BgSpot11Bakudankabe_Init = 0x80B4CB9C; // type:func +BgSpot11Bakudankabe_Destroy = 0x80B4CC38; // type:func +BgSpot11Bakudankabe_Update = 0x80B4CC80; // type:func +BgSpot11Bakudankabe_Draw = 0x80B4CD1C; // type:func +ObjKibako2_InitCollider = 0x80B4CE30; // type:func +ObjKibako2_Break = 0x80B4CE88; // type:func +ObjKibako2_SpawnCollectible = 0x80B4D104; // type:func +ObjKibako2_Init = 0x80B4D154; // type:func +ObjKibako2_Destroy = 0x80B4D200; // type:func +ObjKibako2_Idle = 0x80B4D248; // type:func +ObjKibako2_Kill = 0x80B4D320; // type:func +ObjKibako2_Update = 0x80B4D3A4; // type:func +ObjKibako2_Draw = 0x80B4D3C8; // type:func +EnDntDemo_Destroy = 0x80B4D4F0; // type:func +EnDntDemo_Init = 0x80B4D500; // type:func +EnDntDemo_Judge = 0x80B4D670; // type:func +EnDntDemo_Results = 0x80B4DC90; // type:func +EnDntDemo_Prize = 0x80B4DF04; // type:func +EnDntDemo_Update = 0x80B4DFE0; // type:func +EnDntJiji_Init = 0x80B4E210; // type:func +EnDntJiji_Destroy = 0x80B4E2F0; // type:func +EnDntJiji_SetFlower = 0x80B4E31C; // type:func +EnDntJiji_SetupWait = 0x80B4E35C; // type:func +EnDntJiji_Wait = 0x80B4E40C; // type:func +EnDntJiji_SetupUp = 0x80B4E4C4; // type:func +EnDntJiji_Up = 0x80B4E5A8; // type:func +EnDntJiji_SetupUnburrow = 0x80B4E618; // type:func +EnDntJiji_Unburrow = 0x80B4E6FC; // type:func +EnDntJiji_SetupWalk = 0x80B4E784; // type:func +EnDntJiji_Walk = 0x80B4E834; // type:func +EnDntJiji_SetupBurrow = 0x80B4E970; // type:func +EnDntJiji_Burrow = 0x80B4EA60; // type:func +EnDntJiji_SetupCower = 0x80B4EA8C; // type:func +EnDntJiji_Cower = 0x80B4EBCC; // type:func +EnDntJiji_SetupTalk = 0x80B4EC70; // type:func +EnDntJiji_Talk = 0x80B4ED04; // type:func +EnDntJiji_SetupGivePrize = 0x80B4EDD0; // type:func +EnDntJiji_GivePrize = 0x80B4EE40; // type:func +EnDntJiji_SetupHide = 0x80B4EF50; // type:func +EnDntJiji_Hide = 0x80B4EFE8; // type:func +EnDntJiji_SetupReturn = 0x80B4F054; // type:func +EnDntJiji_Return = 0x80B4F104; // type:func +EnDntJiji_Update = 0x80B4F27C; // type:func +EnDntJiji_Draw = 0x80B4F454; // type:func +EnDntNomal_Init = 0x80B4F720; // type:func +EnDntNomal_Destroy = 0x80B4F848; // type:func +EnDntNomal_WaitForObject = 0x80B4F894; // type:func +EnDntNomal_SetFlower = 0x80B4F9E4; // type:func +EnDntNomal_SetupTargetWait = 0x80B4FA3C; // type:func +EnDntNomal_TargetWait = 0x80B4FAE4; // type:func +EnDntNomal_SetupTargetUnburrow = 0x80B4FDC0; // type:func +EnDntNomal_TargetUnburrow = 0x80B4FEDC; // type:func +EnDntNomal_SetupTargetWalk = 0x80B4FF48; // type:func +EnDntNomal_TargetWalk = 0x80B4FFEC; // type:func +EnDntNomal_TargetFacePlayer = 0x80B500D8; // type:func +EnDntNomal_SetupTargetTalk = 0x80B5018C; // type:func +EnDntNomal_TargetTalk = 0x80B50238; // type:func +EnDntNomal_SetupTargetGivePrize = 0x80B502E0; // type:func +EnDntNomal_TargetGivePrize = 0x80B50378; // type:func +EnDntNomal_TargetReturn = 0x80B504E0; // type:func +EnDntNomal_TargetBurrow = 0x80B506B0; // type:func +EnDntNomal_SetupStageWait = 0x80B5071C; // type:func +EnDntNomal_StageWait = 0x80B507D4; // type:func +EnDntNomal_SetupStageUp = 0x80B50800; // type:func +EnDntNomal_StageUp = 0x80B5090C; // type:func +EnDntNomal_SetupStageUnburrow = 0x80B50B40; // type:func +EnDntNomal_StageUnburrow = 0x80B50C34; // type:func +EnDntNomal_SetupStageCelebrate = 0x80B50D0C; // type:func +EnDntNomal_StageCelebrate = 0x80B50DB4; // type:func +EnDntNomal_SetupStageDance = 0x80B50FBC; // type:func +EnDntNomal_StageDance = 0x80B510CC; // type:func +EnDntNomal_SetupStageHide = 0x80B51230; // type:func +EnDntNomal_StageHide = 0x80B5130C; // type:func +EnDntNomal_StageAttackHide = 0x80B514D0; // type:func +EnDntNomal_SetupStageAttack = 0x80B51504; // type:func +EnDntNomal_StageAttack = 0x80B515D0; // type:func +EnDntNomal_StageSetupReturn = 0x80B51894; // type:func +EnDntNomal_StageReturn = 0x80B51938; // type:func +EnDntNomal_Update = 0x80B51A3C; // type:func +EnDntNomal_OverrideLimbDraw = 0x80B51D00; // type:func +EnDntNomal_PostLimbDraw = 0x80B51DB0; // type:func +EnDntNomal_DrawStageScrub = 0x80B51E38; // type:func +EnDntNomal_DrawTargetScrub = 0x80B52028; // type:func +EnGuest_Init = 0x80B52530; // type:func +EnGuest_Destroy = 0x80B52590; // type:func +EnGuest_Update = 0x80B525BC; // type:func +func_80A5046C = 0x80B5272C; // type:func +func_80A50518 = 0x80B527D8; // type:func +func_80A5057C = 0x80B52840; // type:func +func_80A505CC = 0x80B52894; // type:func +func_80A50708 = 0x80B529D4; // type:func +EnGuest_OverrideLimbDraw = 0x80B52A40; // type:func +EnGuest_Draw = 0x80B52C68; // type:func +BgBomGuard_SetupAction = 0x80B52ED0; // type:func +BgBomGuard_Init = 0x80B52EDC; // type:func +BgBomGuard_Destroy = 0x80B52F78; // type:func +func_8086E638 = 0x80B52FAC; // type:func +BgBomGuard_Update = 0x80B53078; // type:func +EnHs2_Init = 0x80B530F0; // type:func +EnHs2_Destroy = 0x80B531D0; // type:func +func_80A6F0B4 = 0x80B531FC; // type:func +func_80A6F164 = 0x80B532B0; // type:func +func_80A6F1A4 = 0x80B532EC; // type:func +EnHs2_Update = 0x80B53338; // type:func +EnHs2_OverrideLimbDraw = 0x80B534A4; // type:func +EnHs2_PostLimbDraw = 0x80B5352C; // type:func +EnHs2_Draw = 0x80B5356C; // type:func +DemoKekkai_CheckEventFlag = 0x80B536D0; // type:func +DemoKekkai_Init = 0x80B53714; // type:func +DemoKekkai_Destroy = 0x80B53944; // type:func +DemoKekkai_SpawnParticles = 0x80B53984; // type:func +DemoKekkai_TowerBarrier = 0x80B53BD8; // type:func +DemoKekkai_Update = 0x80B53CF4; // type:func +DemoKekkai_TrialBarrierDispel = 0x80B53E20; // type:func +DemoKekkai_TrialBarrierIdle = 0x80B53F80; // type:func +DemoKekkai_DrawTrialBarrier = 0x80B540A4; // type:func +DemoKekkai_DrawTowerBarrier = 0x80B545A0; // type:func +func_808B02D0 = 0x80B549B0; // type:func +func_808B0324 = 0x80B54A04; // type:func +BgSpot08Bakudankabe_Init = 0x80B54CFC; // type:func +BgSpot08Bakudankabe_Destroy = 0x80B54D9C; // type:func +BgSpot08Bakudankabe_Update = 0x80B54DE4; // type:func +BgSpot08Bakudankabe_Draw = 0x80B54E98; // type:func +func_808B6BC0 = 0x80B55050; // type:func +BgSpot17Bakudankabe_Init = 0x80B55380; // type:func +BgSpot17Bakudankabe_Destroy = 0x80B55414; // type:func +BgSpot17Bakudankabe_Update = 0x80B55448; // type:func +BgSpot17Bakudankabe_Draw = 0x80B554DC; // type:func +func_80B9A9D0 = 0x80B55730; // type:func +func_80B9AA90 = 0x80B557F0; // type:func +func_80B9ABA0 = 0x80B55900; // type:func +func_80B9ACE4 = 0x80B55A44; // type:func +func_80B9ADCC = 0x80B55B30; // type:func +ObjMure3_Init = 0x80B55C24; // type:func +ObjMure3_Destroy = 0x80B55C84; // type:func +func_80B9AF24 = 0x80B55C94; // type:func +func_80B9AF34 = 0x80B55CA8; // type:func +func_80B9AF54 = 0x80B55CCC; // type:func +func_80B9AF64 = 0x80B55CE0; // type:func +func_80B9AFEC = 0x80B55D68; // type:func +func_80B9AFFC = 0x80B55D7C; // type:func +ObjMure3_Update = 0x80B55DF8; // type:func +EnTg_GetTextId = 0x80B55F00; // type:func +EnTg_UpdateTalkState = 0x80B55F9C; // type:func +EnTg_Init = 0x80B56058; // type:func +EnTg_Destroy = 0x80B5612C; // type:func +EnTg_SpinIfNotTalking = 0x80B5616C; // type:func +EnTg_Update = 0x80B56190; // type:func +EnTg_OverrideLimbDraw = 0x80B562B0; // type:func +EnTg_PostLimbDraw = 0x80B562CC; // type:func +EnTg_SetColor = 0x80B56328; // type:func +EnTg_Draw = 0x80B56394; // type:func +EnMu_SetupAction = 0x80B565D0; // type:func +EnMu_Interact = 0x80B565DC; // type:func +EnMu_GetTextId = 0x80B5673C; // type:func +EnMu_UpdateTalkState = 0x80B56780; // type:func +EnMu_Init = 0x80B567EC; // type:func +EnMu_Destroy = 0x80B568C4; // type:func +EnMu_Pose = 0x80B568E8; // type:func +EnMu_Update = 0x80B56920; // type:func +EnMu_OverrideLimbDraw = 0x80B56A68; // type:func +EnMu_PostLimbDraw = 0x80B56B54; // type:func +EnMu_DisplayListSetColor = 0x80B56B6C; // type:func +EnMu_Draw = 0x80B56BD8; // type:func +EnGo2_SpawnEffectDust = 0x80B56EF0; // type:func +EnGo2_UpdateEffects = 0x80B56F94; // type:func +EnGo2_DrawEffects = 0x80B570A0; // type:func +EnGo2_SpawnDust = 0x80B57390; // type:func +EnGo2_GetItem = 0x80B575A8; // type:func +EnGo2_GetDialogState = 0x80B575EC; // type:func +EnGo2_GoronFireGenericGetTextId = 0x80B5766C; // type:func +EnGo2_GetTextIdGoronCityRollingBig = 0x80B576E8; // type:func +EnGo2_UpdateTalkStateGoronCityRollingBig = 0x80B57770; // type:func +EnGo2_GetTextIdGoronDmtBombFlower = 0x80B57868; // type:func +EnGo2_UpdateTalkStateGoronDmtBombFlower = 0x80B578A4; // type:func +EnGo2_GetTextIdGoronDmtRollingSmall = 0x80B579BC; // type:func +EnGo2_UpdateTalkStateGoronDmtRollingSmall = 0x80B57A14; // type:func +EnGo2_GetTextIdGoronDmtDcEntrance = 0x80B57A50; // type:func +EnGo2_UpdateTalkStateGoronDmtDcEntrance = 0x80B57AEC; // type:func +EnGo2_GetTextIdGoronCityEntrance = 0x80B57B4C; // type:func +EnGo2_UpdateTalkStateGoronCityEntrance = 0x80B57BCC; // type:func +EnGo2_GetTextIdGoronCityIsland = 0x80B57C2C; // type:func +EnGo2_UpdateTalkStateGoronCityIsland = 0x80B57CAC; // type:func +EnGo2_GetTextIdGoronCityLowestFloor = 0x80B57D0C; // type:func +EnGo2_UpdateTalkStateGoronCityLowestFloor = 0x80B57DE8; // type:func +EnGo2_GetTextIdGoronCityLink = 0x80B57E48; // type:func +EnGo2_UpdateTalkStateGoronCityLink = 0x80B57F24; // type:func +EnGo2_GetTextIdGoronDmtBiggoron = 0x80B5813C; // type:func +EnGo2_UpdateTalkStateGoronDmtBiggoron = 0x80B581BC; // type:func +EnGo2_GetTextIdGoronFireGeneric = 0x80B583D0; // type:func +EnGo2_UpdateTalkStateGoronFireGeneric = 0x80B58408; // type:func +EnGo2_GetTextIdGoronCityStairwell = 0x80B584A4; // type:func +EnGo2_UpdateTalkStateGoronCityStairwell = 0x80B584F4; // type:func +EnGo2_GetTextIdGoronMarketBazaar = 0x80B58554; // type:func +EnGo2_UpdateTalkStateGoronMarketBazaar = 0x80B58568; // type:func +EnGo2_GetTextIdGoronCityLostWoods = 0x80B585A4; // type:func +EnGo2_UpdateTalkStateGoronCityLostWoods = 0x80B58614; // type:func +EnGo2_GetTextIdGoronDmtFairyHint = 0x80B58674; // type:func +EnGo2_UpdateTalkStateGoronDmtFairyHint = 0x80B586CC; // type:func +EnGo2_GetTextId = 0x80B58708; // type:func +EnGo2_UpdateTalkState = 0x80B5884C; // type:func +func_80A44790 = 0x80B58964; // type:func +EnGo2_SetColliderDim = 0x80B58A60; // type:func +EnGo2_SetShape = 0x80B58A9C; // type:func +EnGo2_CheckCollision = 0x80B58B14; // type:func +EnGo2_SwapInitialFrameAnimFrameCount = 0x80B58C70; // type:func +func_80A44AB0 = 0x80B58C88; // type:func +EnGo2_UpdateWaypoint = 0x80B58E44; // type:func +EnGo2_Orient = 0x80B58EC0; // type:func +func_80A44D84 = 0x80B58F64; // type:func +EnGo2_IsWakingUp = 0x80B58F9C; // type:func +EnGo2_IsRollingOnGround = 0x80B590CC; // type:func +EnGo2_BiggoronSetTextId = 0x80B59268; // type:func +func_80A45288 = 0x80B59468; // type:func +func_80A45360 = 0x80B59544; // type:func +EnGo2_RollForward = 0x80B59650; // type:func +func_80A454CC = 0x80B596B0; // type:func +EnGo2_GetTargetXZSpeed = 0x80B5975C; // type:func +EnGo2_IsCameraModified = 0x80B59800; // type:func +EnGo2_DefaultWakingUp = 0x80B5991C; // type:func +EnGo2_WakingUp = 0x80B59974; // type:func +EnGo2_BiggoronWakingUp = 0x80B599E4; // type:func +EnGo2_SelectGoronWakingUp = 0x80B59A34; // type:func +EnGo2_EyeMouthTexState = 0x80B59B18; // type:func +EnGo2_SitDownAnimation = 0x80B59BEC; // type:func +EnGo2_GetDustData = 0x80B59D04; // type:func +EnGo2_RollingAnimation = 0x80B59D8C; // type:func +EnGo2_WakeUp = 0x80B59E40; // type:func +EnGo2_GetItemAnimation = 0x80B59F34; // type:func +EnGo2_SetupRolling = 0x80B59F98; // type:func +EnGo2_StopRolling = 0x80B5A040; // type:func +EnGo2_IsFreeingGoronInFire = 0x80B5A100; // type:func +EnGo2_IsGoronDmtBombFlower = 0x80B5A198; // type:func +EnGo2_IsGoronRollingBig = 0x80B5A218; // type:func +EnGo2_IsGoronFireGeneric = 0x80B5A278; // type:func +EnGo2_IsGoronLinkReversing = 0x80B5A2B4; // type:func +EnGo2_IsRolling = 0x80B5A310; // type:func +EnGo2_GoronLinkAnimation = 0x80B5A3A4; // type:func +EnGo2_GoronFireCamera = 0x80B5A4D8; // type:func +EnGo2_GoronFireClearCamera = 0x80B5A5D8; // type:func +EnGo2_BiggoronAnimation = 0x80B5A618; // type:func +EnGo2_Init = 0x80B5A6CC; // type:func +EnGo2_Destroy = 0x80B5AB4C; // type:func +EnGo2_CurledUp = 0x80B5AB5C; // type:func +func_80A46B40 = 0x80B5AD30; // type:func +EnGo2_GoronDmtBombFlowerAnimation = 0x80B5AEC8; // type:func +EnGo2_GoronRollingBigContinueRolling = 0x80B5AF4C; // type:func +EnGo2_ContinueRolling = 0x80B5AFAC; // type:func +EnGo2_SlowRolling = 0x80B5B044; // type:func +EnGo2_GroundRolling = 0x80B5B17C; // type:func +EnGo2_ReverseRolling = 0x80B5B218; // type:func +EnGo2_SetupGetItem = 0x80B5B2E0; // type:func +EnGo2_SetGetItem = 0x80B5B354; // type:func +EnGo2_BiggoronEyedrops = 0x80B5B45C; // type:func +EnGo2_GoronLinkStopRolling = 0x80B5B690; // type:func +EnGo2_GoronFireGenericAction = 0x80B5B780; // type:func +EnGo2_Update = 0x80B5BAAC; // type:func +EnGo2_DrawCurledUp = 0x80B5BBC0; // type:func +EnGo2_DrawRolling = 0x80B5BC80; // type:func +EnGo2_OverrideLimbDraw = 0x80B5BDBC; // type:func +EnGo2_PostLimbDraw = 0x80B5BFD8; // type:func +EnGo2_Draw = 0x80B5C034; // type:func +EnWf_SetupAction = 0x80B5CF10; // type:func +EnWf_Init = 0x80B5CF1C; // type:func +EnWf_Destroy = 0x80B5D150; // type:func +EnWf_ChangeAction = 0x80B5D1EC; // type:func +EnWf_SetupWaitToAppear = 0x80B5D5BC; // type:func +EnWf_WaitToAppear = 0x80B5D664; // type:func +EnWf_SetupWait = 0x80B5D798; // type:func +EnWf_Wait = 0x80B5D820; // type:func +EnWf_SetupRunAtPlayer = 0x80B5DA3C; // type:func +EnWf_RunAtPlayer = 0x80B5DABC; // type:func +EnWf_SetupSearchForPlayer = 0x80B5DF3C; // type:func +EnWf_SearchForPlayer = 0x80B5DF88; // type:func +EnWf_SetupRunAroundPlayer = 0x80B5E168; // type:func +EnWf_RunAroundPlayer = 0x80B5E264; // type:func +EnWf_SetupSlash = 0x80B5E784; // type:func +EnWf_Slash = 0x80B5E800; // type:func +EnWf_SetupRecoilFromBlockedSlash = 0x80B5EB54; // type:func +EnWf_RecoilFromBlockedSlash = 0x80B5EBF0; // type:func +EnWf_SetupBackflipAway = 0x80B5EDE8; // type:func +EnWf_BackflipAway = 0x80B5EE64; // type:func +EnWf_SetupStunned = 0x80B5EF6C; // type:func +EnWf_Stunned = 0x80B5EFE4; // type:func +EnWf_SetupDamaged = 0x80B5F0A0; // type:func +EnWf_Damaged = 0x80B5F138; // type:func +EnWf_SetupSomersaultAndAttack = 0x80B5F340; // type:func +EnWf_SomersaultAndAttack = 0x80B5F3F8; // type:func +EnWf_SetupBlocking = 0x80B5F4E0; // type:func +EnWf_Blocking = 0x80B5F580; // type:func +EnWf_SetupSidestep = 0x80B5F804; // type:func +EnWf_Sidestep = 0x80B5F99C; // type:func +EnWf_SetupDie = 0x80B5FEEC; // type:func +EnWf_Die = 0x80B5FF9C; // type:func +func_80B36F40 = 0x80B601A4; // type:func +EnWf_UpdateDamage = 0x80B6029C; // type:func +EnWf_Update = 0x80B6046C; // type:func +EnWf_OverrideLimbDraw = 0x80B606C0; // type:func +EnWf_PostLimbDraw = 0x80B60704; // type:func +EnWf_Draw = 0x80B608AC; // type:func +EnWf_DodgeRanged = 0x80B60A68; // type:func +EnSkb_SetupAction = 0x80B61220; // type:func +EnSkb_SpawnDebris = 0x80B6122C; // type:func +EnSkb_Init = 0x80B613DC; // type:func +EnSkb_Destroy = 0x80B61594; // type:func +EnSkb_DecideNextAction = 0x80B615EC; // type:func +EnSkb_SetupRiseFromGround = 0x80B61688; // type:func +EnSkb_RiseFromGround = 0x80B616EC; // type:func +EnSkb_SetupDespawn = 0x80B617D8; // type:func +EnSkb_Despawn = 0x80B61880; // type:func +EnSkb_SetupWalkForward = 0x80B61934; // type:func +EnSkb_WalkForward = 0x80B619CC; // type:func +EnSkb_SetupAttack = 0x80B61BCC; // type:func +EnSkb_Attack = 0x80B61C64; // type:func +EnSkb_SetupRecoil = 0x80B61D10; // type:func +EnSkb_Recoil = 0x80B61D9C; // type:func +EnSkb_SetupStunned = 0x80B61DD8; // type:func +EnSkb_Stunned = 0x80B61E34; // type:func +EnSkb_SetupTakeDamage = 0x80B61EDC; // type:func +EnSkb_TakeDamage = 0x80B61F64; // type:func +EnSkb_SetupDeath = 0x80B62050; // type:func +EnSkb_Death = 0x80B6211C; // type:func +EnSkb_CheckDamage = 0x80B62208; // type:func +EnSkb_Update = 0x80B624B8; // type:func +EnSkb_OverrideLimbDraw = 0x80B625E0; // type:func +EnSkb_PostLimbDraw = 0x80B627B0; // type:func +EnSkb_Draw = 0x80B62858; // type:func +DemoGj_GetCollectibleType = 0x80B62B10; // type:func +DemoGj_GetCollectibleAmount = 0x80B62B24; // type:func +DemoGj_GetType = 0x80B62B38; // type:func +DemoGj_InitCylinder = 0x80B62B48; // type:func +DemoGj_HitByExplosion = 0x80B62B90; // type:func +DemoGj_DestroyCylinder = 0x80B62BC8; // type:func +DemoGj_Destroy = 0x80B62C80; // type:func +DemoGj_PlayExplosionSfx = 0x80B62CC4; // type:func +DemoGj_SpawnSmoke = 0x80B62CFC; // type:func +DemoGj_DropCollectible = 0x80B62D90; // type:func +DemoGj_Explode = 0x80B62E24; // type:func +DemoGj_IsCutsceneLayer = 0x80B630C0; // type:func +DemoGj_FindGanon = 0x80B630E8; // type:func +DemoGj_InitCommon = 0x80B63134; // type:func +DemoGj_InitSetIndices = 0x80B631AC; // type:func +DemoGj_DrawCommon = 0x80B63210; // type:func +DemoGj_DrawRotated = 0x80B632A8; // type:func +DemoGj_SetupRotation = 0x80B63384; // type:func +func_809797E4 = 0x80B6391C; // type:func +DemoGj_IsGanondorfRisingFromRubble = 0x80B63950; // type:func +DemoGj_IsGanondorfFloatingInAir = 0x80B63974; // type:func +DemoGj_SetupMovement = 0x80B63998; // type:func +DemoGj_CheckIfTransformedIntoGanon = 0x80B640BC; // type:func +DemoGj_InitRubblePile1 = 0x80B640F4; // type:func +func_8097A000 = 0x80B64124; // type:func +DemoGj_SpawnSmokePreBattle1 = 0x80B641A0; // type:func +func_8097A0E4 = 0x80B6420C; // type:func +func_8097A130 = 0x80B64260; // type:func +DemoGj_Update01 = 0x80B64294; // type:func +DemoGj_Update08 = 0x80B642CC; // type:func +DemoGj_DrawRubble2 = 0x80B64304; // type:func +DemoGj_DrawRotatedRubble2 = 0x80B64328; // type:func +DemoGj_InitRubblePile2 = 0x80B6434C; // type:func +func_8097A238 = 0x80B6437C; // type:func +DemoGj_SpawnSmokePreBattle2 = 0x80B643F8; // type:func +func_8097A320 = 0x80B64468; // type:func +func_8097A36C = 0x80B644BC; // type:func +DemoGj_Update02 = 0x80B644F0; // type:func +DemoGj_Update09 = 0x80B64528; // type:func +DemoGj_DrawRubble3 = 0x80B64560; // type:func +DemoGj_DrawRotatedRubble3 = 0x80B64584; // type:func +DemoGj_InitRubblePile3 = 0x80B645A8; // type:func +func_8097A474 = 0x80B645D8; // type:func +func_8097A4F0 = 0x80B64654; // type:func +func_8097A53C = 0x80B646A8; // type:func +DemoGj_Update03 = 0x80B646DC; // type:func +DemoGj_Update10 = 0x80B64714; // type:func +DemoGj_DrawRubble4 = 0x80B6474C; // type:func +DemoGj_DrawRotatedRubble4 = 0x80B64770; // type:func +DemoGj_InitRubblePile4 = 0x80B64794; // type:func +func_8097A644 = 0x80B647C4; // type:func +func_8097A6C0 = 0x80B64840; // type:func +func_8097A70C = 0x80B64894; // type:func +DemoGj_Update04 = 0x80B648C8; // type:func +DemoGj_Update11 = 0x80B64900; // type:func +DemoGj_DrawRubble5 = 0x80B64938; // type:func +DemoGj_DrawRotatedRubble5 = 0x80B6495C; // type:func +DemoGj_InitRubblePile5 = 0x80B64980; // type:func +func_8097A814 = 0x80B649B0; // type:func +func_8097A890 = 0x80B64A2C; // type:func +func_8097A8DC = 0x80B64A80; // type:func +DemoGj_Update05 = 0x80B64AB4; // type:func +DemoGj_Update12 = 0x80B64AEC; // type:func +DemoGj_DrawRubble6 = 0x80B64B24; // type:func +DemoGj_DrawRotatedRubble6 = 0x80B64B48; // type:func +DemoGj_InitRubblePile6 = 0x80B64B6C; // type:func +func_8097A9E4 = 0x80B64B9C; // type:func +func_8097AA60 = 0x80B64C18; // type:func +func_8097AAAC = 0x80B64C6C; // type:func +DemoGj_Update06 = 0x80B64CA0; // type:func +DemoGj_Update13 = 0x80B64CD8; // type:func +DemoGj_DrawRubble7 = 0x80B64D10; // type:func +DemoGj_DrawRotatedRubble7 = 0x80B64D34; // type:func +DemoGj_InitRubblePile7 = 0x80B64D58; // type:func +func_8097ABB4 = 0x80B64D88; // type:func +DemoGj_SpawnSmokePreBattle3 = 0x80B64E04; // type:func +func_8097AC9C = 0x80B64E74; // type:func +func_8097ACE8 = 0x80B64EC8; // type:func +DemoGj_Update07 = 0x80B64EFC; // type:func +DemoGj_Update14 = 0x80B64F34; // type:func +DemoGj_DrawRubbleTall = 0x80B64F6C; // type:func +DemoGj_DrawRotatedRubbleTall = 0x80B64F90; // type:func +DemoGj_InitRubbleAroundArena = 0x80B64FB4; // type:func +DemoGj_UpdateRubbleAroundArena = 0x80B64FE4; // type:func +DemoGj_DrawRubbleAroundArena = 0x80B65034; // type:func +DemoGj_InitDestructableRubble1 = 0x80B65058; // type:func +func_8097AEE8 = 0x80B650E0; // type:func +DemoGj_SetCylindersAsAC = 0x80B65274; // type:func +DemoGj_DirectedExplosion = 0x80B652E0; // type:func +func_8097B128 = 0x80B6531C; // type:func +DemoGj_HasCylinderAnyExploded = 0x80B653AC; // type:func +func_8097B22C = 0x80B65428; // type:func +DemoGj_Update15 = 0x80B65540; // type:func +DemoGj_Update18 = 0x80B65578; // type:func +DemoGj_DrawDestructableRubble1 = 0x80B65598; // type:func +DemoGj_InitDestructableRubble2 = 0x80B655BC; // type:func +func_8097B450 = 0x80B65644; // type:func +DemoGj_SetCylindersAsAC2 = 0x80B65794; // type:func +DemoGj_HasCylinderAnyExploded2 = 0x80B65800; // type:func +DemoGj_DirectedExplosion2 = 0x80B6587C; // type:func +func_8097B6C4 = 0x80B658B8; // type:func +func_8097B750 = 0x80B65948; // type:func +DemoGj_Update16 = 0x80B65A60; // type:func +DemoGj_Update19 = 0x80B65A98; // type:func +DemoGj_DemoGj_InitDestructableRubble2 = 0x80B65AB8; // type:func +DemoGj_InitDestructableRubbleTall = 0x80B65ADC; // type:func +DemoGj_DirectedDoubleExplosion = 0x80B65B28; // type:func +func_8097B9BC = 0x80B65BAC; // type:func +func_8097BA48 = 0x80B65C3C; // type:func +DemoGj_Update17 = 0x80B65D70; // type:func +DemoGj_Update20 = 0x80B65DA8; // type:func +DemoGj_DemoGj_InitDestructableRubbleTall = 0x80B65DC8; // type:func +DemoGj_Update = 0x80B65DEC; // type:func +DemoGj_Init = 0x80B65E34; // type:func +DemoGj_DrawNothing = 0x80B65F3C; // type:func +DemoGj_Draw = 0x80B65F4C; // type:func +DemoGeff_Destroy = 0x80B667C0; // type:func +DemoGeff_Init = 0x80B667D0; // type:func +func_80977EA8 = 0x80B66818; // type:func +func_80977F80 = 0x80B668B0; // type:func +func_80978030 = 0x80B6690C; // type:func +func_809781FC = 0x80B66AD8; // type:func +func_809782A0 = 0x80B66B7C; // type:func +func_80978308 = 0x80B66BE4; // type:func +func_80978344 = 0x80B66C1C; // type:func +func_80978370 = 0x80B66C4C; // type:func +func_809783D4 = 0x80B66C98; // type:func +DemoGeff_Update = 0x80B66D34; // type:func +func_809784D4 = 0x80B66D7C; // type:func +DemoGeff_Draw = 0x80B66D8C; // type:func +BgGndFiremeiro_Init = 0x80B66FE0; // type:func +BgGndFiremeiro_Destroy = 0x80B67094; // type:func +BgGndFiremeiro_Sink = 0x80B670D4; // type:func +BgGndFiremeiro_Shake = 0x80B67190; // type:func +BgGndFiremeiro_Rise = 0x80B67334; // type:func +BgGndFiremeiro_Update = 0x80B673F4; // type:func +BgGndFiremeiro_Draw = 0x80B67418; // type:func +BgGndDarkmeiro_ToggleBlock = 0x80B67520; // type:func +BgGndDarkmeiro_Init = 0x80B675AC; // type:func +BgGndDarkmeiro_Destroy = 0x80B677D8; // type:func +BgGndDarkmeiro_Noop = 0x80B67820; // type:func +BgGndDarkmeiro_UpdateBlockTimer = 0x80B67830; // type:func +BgGndDarkmeiro_UpdateStaticBlock = 0x80B67A24; // type:func +BgGndDarkmeiro_UpdateSwitchBlock = 0x80B67A34; // type:func +BgGndDarkmeiro_Update = 0x80B67A98; // type:func +BgGndDarkmeiro_DrawInvisiblePath = 0x80B67ABC; // type:func +BgGndDarkmeiro_DrawSwitchBlock = 0x80B67AEC; // type:func +BgGndDarkmeiro_DrawStaticBlock = 0x80B67C04; // type:func +BgGndSoulmeiro_Init = 0x80B67CE0; // type:func +BgGndSoulmeiro_Destroy = 0x80B67E24; // type:func +func_8087AF38 = 0x80B67E60; // type:func +func_8087B284 = 0x80B681AC; // type:func +func_8087B350 = 0x80B68278; // type:func +BgGndSoulmeiro_Update = 0x80B682CC; // type:func +BgGndSoulmeiro_Draw = 0x80B682F8; // type:func +BgGndNisekabe_Init = 0x80B68540; // type:func +BgGndNisekabe_Destroy = 0x80B6857C; // type:func +BgGndNisekabe_Update = 0x80B6858C; // type:func +BgGndNisekabe_Draw = 0x80B685C0; // type:func +BgGndIceblock_Init = 0x80B686B0; // type:func +BgGndIceblock_Destroy = 0x80B6879C; // type:func +BgGndIceblock_SetPosition = 0x80B687D0; // type:func +BgGndIceblock_CheckForBlock = 0x80B688DC; // type:func +BgGndIceblock_NextAction = 0x80B68918; // type:func +BgGndIceblock_SetNextPosition = 0x80B68964; // type:func +BgGndIceblock_Idle = 0x80B68C94; // type:func +BgGndIceblock_Reset = 0x80B68D50; // type:func +BgGndIceblock_Fall = 0x80B68E14; // type:func +BgGndIceblock_Hole = 0x80B68ECC; // type:func +BgGndIceblock_Slide = 0x80B68F68; // type:func +BgGndIceblock_Update = 0x80B69298; // type:func +BgGndIceblock_Draw = 0x80B692BC; // type:func +BgYdanSp_Init = 0x80B697B0; // type:func +BgYdanSp_Destroy = 0x80B69B98; // type:func +BgYdanSp_UpdateFloorWebCollision = 0x80B69BE0; // type:func +BgYdanSp_BurnWeb = 0x80B69CB4; // type:func +BgYdanSp_BurnFloorWeb = 0x80B69D24; // type:func +BgYdanSp_FloorWebBroken = 0x80B69FF8; // type:func +BgYdanSp_FloorWebBreaking = 0x80B6A038; // type:func +BgYdanSp_FloorWebIdle = 0x80B6A1F8; // type:func +BgYdanSp_BurnWallWeb = 0x80B6A4D4; // type:func +BgYdanSp_WallWebIdle = 0x80B6A80C; // type:func +BgYdanSp_Update = 0x80B6A94C; // type:func +BgYdanSp_Draw = 0x80B6A970; // type:func +func_80A2F180 = 0x80B6AF20; // type:func +EnGb_Init = 0x80B6AF50; // type:func +EnGb_Destroy = 0x80B6B350; // type:func +func_80A2F608 = 0x80B6B3AC; // type:func +func_80A2F760 = 0x80B6B504; // type:func +func_80A2F7C0 = 0x80B6B564; // type:func +func_80A2F83C = 0x80B6B5E0; // type:func +func_80A2F94C = 0x80B6B6FC; // type:func +func_80A2F9C0 = 0x80B6B774; // type:func +func_80A2FA50 = 0x80B6B808; // type:func +func_80A2FB40 = 0x80B6B8F8; // type:func +func_80A2FBB0 = 0x80B6B96C; // type:func +func_80A2FC0C = 0x80B6B9CC; // type:func +func_80A2FC70 = 0x80B6BA34; // type:func +EnGb_Update = 0x80B6BB38; // type:func +EnGb_Draw = 0x80B6BC70; // type:func +EnGb_UpdateCagedSouls = 0x80B6BD90; // type:func +EnGb_DrawCagedSouls = 0x80B6C0E8; // type:func +EnGs_Init = 0x80B6C650; // type:func +EnGs_Destroy = 0x80B6C714; // type:func +func_80A4E3EC = 0x80B6C724; // type:func +func_80A4E470 = 0x80B6C7AC; // type:func +func_80A4E648 = 0x80B6C96C; // type:func +func_80A4E754 = 0x80B6CA7C; // type:func +func_80A4E910 = 0x80B6CC3C; // type:func +func_80A4EA08 = 0x80B6CD38; // type:func +func_80A4EB3C = 0x80B6CE6C; // type:func +func_80A4ED34 = 0x80B6D064; // type:func +func_80A4F13C = 0x80B6D470; // type:func +func_80A4F700 = 0x80B6DA64; // type:func +func_80A4F734 = 0x80B6DA98; // type:func +func_80A4F77C = 0x80B6DAE0; // type:func +EnGs_Update = 0x80B6DB5C; // type:func +EnGs_Draw = 0x80B6DCF4; // type:func +BgMizuBwall_RotateVec3f = 0x80B6E4F0; // type:func +BgMizuBwall_Init = 0x80B6E544; // type:func +BgMizuBwall_Destroy = 0x80B6EDC0; // type:func +BgMizuBwall_SetAlpha = 0x80B6EE08; // type:func +BgMizuBwall_SpawnDebris = 0x80B6EF8C; // type:func +BgMizuBwall_Idle = 0x80B6F260; // type:func +BgMizuBwall_Break = 0x80B6F360; // type:func +BgMizuBwall_DoNothing = 0x80B6F38C; // type:func +BgMizuBwall_Update = 0x80B6F39C; // type:func +BgMizuBwall_Draw = 0x80B6F3C0; // type:func +BgMizuShutter_Init = 0x80B6F9C0; // type:func +BgMizuShutter_Destroy = 0x80B6FC20; // type:func +BgMizuShutter_WaitForSwitch = 0x80B6FC54; // type:func +BgMizuShutter_WaitForCutscene = 0x80B6FCE8; // type:func +BgMizuShutter_Move = 0x80B6FD34; // type:func +BgMizuShutter_WaitForTimer = 0x80B6FF20; // type:func +BgMizuShutter_Update = 0x80B6FFA0; // type:func +BgMizuShutter_Draw = 0x80B6FFC4; // type:func +EnDaikuKakariko_ChangeAnim = 0x80B701C0; // type:func +EnDaikuKakariko_Init = 0x80B70274; // type:func +EnDaikuKakariko_Destroy = 0x80B705CC; // type:func +EnDaikuKakariko_GetTalkState = 0x80B705F8; // type:func +EnDaikuKakariko_HandleTalking = 0x80B7069C; // type:func +EnDaikuKakariko_Talk = 0x80B70858; // type:func +EnDaikuKakariko_Wait = 0x80B7092C; // type:func +EnDaikuKakariko_StopRunning = 0x80B709C8; // type:func +EnDaikuKakariko_Run = 0x80B70A78; // type:func +EnDaikuKakariko_Update = 0x80B70DF8; // type:func +EnDaikuKakariko_OverrideLimbDraw = 0x80B70F70; // type:func +EnDaikuKakariko_PostLimbDraw = 0x80B71130; // type:func +EnDaikuKakariko_Draw = 0x80B711AC; // type:func +BgBowlWall_Init = 0x80B71580; // type:func +BgBowlWall_Destroy = 0x80B71638; // type:func +BgBowlWall_SpawnBullseyes = 0x80B7166C; // type:func +BgBowlWall_WaitForHit = 0x80B7183C; // type:func +BgBowlWall_FallDoEffects = 0x80B71860; // type:func +BgBowlWall_FinishFall = 0x80B71B14; // type:func +BgBowlWall_Reset = 0x80B71BF4; // type:func +BgBowlWall_Update = 0x80B71C8C; // type:func +BgBowlWall_Draw = 0x80B71CC0; // type:func +EnWallTubo_Init = 0x80B71F00; // type:func +EnWallTubo_Destroy = 0x80B71F30; // type:func +EnWallTubo_FindGirl = 0x80B71F40; // type:func +EnWallTubo_DetectChu = 0x80B71F84; // type:func +EnWallTubo_SetWallFall = 0x80B721A0; // type:func +EnWallTubo_Update = 0x80B7230C; // type:func +EnPoDesert_Init = 0x80B723F0; // type:func +EnPoDesert_Destroy = 0x80B72560; // type:func +EnPoDesert_SetNextPathPoint = 0x80B725A8; // type:func +EnPoDesert_SetupMoveToNextPoint = 0x80B72704; // type:func +EnPoDesert_SetupDisappear = 0x80B72748; // type:func +EnPoDesert_UpdateSpeedModifier = 0x80B727A8; // type:func +EnPoDesert_WaitForPlayer = 0x80B72818; // type:func +EnPoDesert_MoveToNextPoint = 0x80B728E4; // type:func +EnPoDesert_Disappear = 0x80B72A78; // type:func +EnPoDesert_Update = 0x80B72B60; // type:func +EnPoDesert_OverrideLimbDraw = 0x80B72C54; // type:func +EnPoDesert_PostLimbDraw = 0x80B72CE0; // type:func +EnPoDesert_Draw = 0x80B72F34; // type:func +EnCrow_Init = 0x80B731B0; // type:func +EnCrow_Destroy = 0x80B732A0; // type:func +EnCrow_SetupFlyIdle = 0x80B732CC; // type:func +EnCrow_SetupDiveAttack = 0x80B73300; // type:func +EnCrow_SetupDamaged = 0x80B73334; // type:func +EnCrow_SetupDie = 0x80B73654; // type:func +EnCrow_SetupTurnAway = 0x80B7366C; // type:func +EnCrow_SetupRespawn = 0x80B736F4; // type:func +EnCrow_FlyIdle = 0x80B737E8; // type:func +EnCrow_DiveAttack = 0x80B73C14; // type:func +EnCrow_Damaged = 0x80B73DB8; // type:func +EnCrow_Die = 0x80B73EE0; // type:func +EnCrow_TurnAway = 0x80B73F90; // type:func +EnCrow_Respawn = 0x80B74034; // type:func +EnCrow_UpdateDamage = 0x80B74100; // type:func +EnCrow_Update = 0x80B741B0; // type:func +EnCrow_OverrideLimbDraw = 0x80B743CC; // type:func +EnCrow_PostLimbDraw = 0x80B744B8; // type:func +EnCrow_Draw = 0x80B74578; // type:func +DoorKiller_Init = 0x80B74850; // type:func +DoorKiller_Destroy = 0x80B74BA8; // type:func +DoorKiller_SpawnRubble = 0x80B74BF8; // type:func +DoorKiller_FallAsRubble = 0x80B74DA0; // type:func +DoorKiller_IsHit = 0x80B74E60; // type:func +DoorKiller_SetAC = 0x80B74E94; // type:func +DoorKiller_Die = 0x80B74EF4; // type:func +DoorKiller_RiseBackUp = 0x80B74F44; // type:func +DoorKiller_FallOver = 0x80B750F4; // type:func +DoorKiller_Wobble = 0x80B754C0; // type:func +DoorKiller_WaitBeforeWobble = 0x80B75630; // type:func +DoorKiller_Wait = 0x80B75664; // type:func +DoorKiller_UpdateTexture = 0x80B758C4; // type:func +DoorKiller_WaitForObject = 0x80B75958; // type:func +DoorKiller_Update = 0x80B75A0C; // type:func +DoorKiller_SetTexture = 0x80B75A30; // type:func +DoorKiller_DrawDoor = 0x80B75A5C; // type:func +DoorKiller_DrawRubble = 0x80B75AB8; // type:func +func_808B27F0 = 0x80B75DC0; // type:func +func_808B280C = 0x80B75DE0; // type:func +BgSpot11Oasis_Init = 0x80B75EF4; // type:func +func_808B2970 = 0x80B75F48; // type:func +func_808B2980 = 0x80B75F5C; // type:func +func_808B29E0 = 0x80B75FBC; // type:func +func_808B29F0 = 0x80B75FD0; // type:func +func_808B2AA8 = 0x80B76088; // type:func +func_808B2AB8 = 0x80B7609C; // type:func +BgSpot11Oasis_Update = 0x80B760AC; // type:func +BgSpot11Oasis_Draw = 0x80B762A0; // type:func +BgSpot18Futa_Init = 0x80B764F0; // type:func +BgSpot18Futa_Destroy = 0x80B7655C; // type:func +BgSpot18Futa_Update = 0x80B76590; // type:func +BgSpot18Futa_Draw = 0x80B765F4; // type:func +BgSpot18Shutter_Init = 0x80B76690; // type:func +BgSpot18Shutter_Destroy = 0x80B76840; // type:func +func_808B95AC = 0x80B76874; // type:func +func_808B95B8 = 0x80B76884; // type:func +func_808B9618 = 0x80B768E4; // type:func +func_808B9698 = 0x80B7696C; // type:func +func_808B971C = 0x80B769F0; // type:func +BgSpot18Shutter_Update = 0x80B76ACC; // type:func +BgSpot18Shutter_Draw = 0x80B76AF0; // type:func +EnMa3_GetTextId = 0x80B76BE0; // type:func +EnMa3_UpdateTalkState = 0x80B76D18; // type:func +func_80AA2E54 = 0x80B76F98; // type:func +func_80AA2EC8 = 0x80B7700C; // type:func +func_80AA2F28 = 0x80B77070; // type:func +EnMa3_UpdateEyes = 0x80B770C8; // type:func +EnMa3_ChangeAnim = 0x80B77154; // type:func +EnMa3_Init = 0x80B771C4; // type:func +EnMa3_Destroy = 0x80B77318; // type:func +func_80AA3200 = 0x80B77358; // type:func +EnMa3_Update = 0x80B7738C; // type:func +EnMa3_OverrideLimbDraw = 0x80B774A0; // type:func +EnMa3_PostLimbDraw = 0x80B776E0; // type:func +EnMa3_Draw = 0x80B77794; // type:func +EnCow_RotateY = 0x80B77B90; // type:func +EnCow_SetColliderPos = 0x80B77C28; // type:func +EnCow_SetTailPos = 0x80B77D1C; // type:func +EnCow_Init = 0x80B77D98; // type:func +EnCow_Destroy = 0x80B781D0; // type:func +EnCow_UpdateAnimation = 0x80B7821C; // type:func +EnCow_TalkEnd = 0x80B78444; // type:func +EnCow_GiveMilkEnd = 0x80B784BC; // type:func +EnCow_GiveMilkWait = 0x80B78504; // type:func +EnCow_GiveMilk = 0x80B78568; // type:func +EnCow_CheckForEmptyBottle = 0x80B78604; // type:func +EnCow_Talk = 0x80B78694; // type:func +EnCow_Idle = 0x80B78708; // type:func +EnCow_IdleTail = 0x80B78824; // type:func +EnCow_Update = 0x80B789BC; // type:func +EnCow_UpdateTail = 0x80B78C38; // type:func +EnCow_OverrideLimbDraw = 0x80B78D24; // type:func +EnCow_PostLimbDraw = 0x80B78D74; // type:func +EnCow_Draw = 0x80B78DB4; // type:func +EnCow_DrawTail = 0x80B78E14; // type:func +BgIceTurara_Init = 0x80B78FF0; // type:func +BgIceTurara_Destroy = 0x80B790CC; // type:func +BgIceTurara_Break = 0x80B79114; // type:func +BgIceTurara_Stalagmite = 0x80B792F4; // type:func +BgIceTurara_Wait = 0x80B7935C; // type:func +BgIceTurara_Shiver = 0x80B79394; // type:func +BgIceTurara_Fall = 0x80B79500; // type:func +BgIceTurara_Regrow = 0x80B79658; // type:func +BgIceTurara_Update = 0x80B796A8; // type:func +BgIceTurara_Draw = 0x80B796CC; // type:func +func_80891AC0 = 0x80B79820; // type:func +BgIceShutter_Init = 0x80B798A8; // type:func +BgIceShutter_Destroy = 0x80B79A28; // type:func +func_80891CF4 = 0x80B79A5C; // type:func +func_80891D6C = 0x80B79AD4; // type:func +func_80891DD4 = 0x80B79B3C; // type:func +BgIceShutter_Update = 0x80B79BA4; // type:func +BgIceShutter_Draw = 0x80B79BC8; // type:func +EnKakasi2_Init = 0x80B79C90; // type:func +EnKakasi2_Destroy = 0x80B79DEC; // type:func +func_80A90264 = 0x80B79E18; // type:func +func_80A904D8 = 0x80B79F70; // type:func +func_80A90578 = 0x80B7A010; // type:func +func_80A9062C = 0x80B7A0C4; // type:func +func_80A906C4 = 0x80B7A15C; // type:func +EnKakasi2_Update = 0x80B7A1CC; // type:func +func_80A90948 = 0x80B7A28C; // type:func +EnKakasi3_Destroy = 0x80B7A3B0; // type:func +EnKakasi3_Init = 0x80B7A3DC; // type:func +func_80A90E28 = 0x80B7A4A4; // type:func +func_80A90EBC = 0x80B7A538; // type:func +func_80A911F0 = 0x80B7A86C; // type:func +func_80A91284 = 0x80B7A900; // type:func +func_80A91348 = 0x80B7A9C4; // type:func +func_80A915B8 = 0x80B7AC3C; // type:func +func_80A91620 = 0x80B7ACA8; // type:func +func_80A91760 = 0x80B7ADE8; // type:func +func_80A917FC = 0x80B7AE88; // type:func +func_80A9187C = 0x80B7AF10; // type:func +func_80A918E4 = 0x80B7AF7C; // type:func +func_80A91A90 = 0x80B7B0C0; // type:func +EnKakasi3_Update = 0x80B7B1C0; // type:func +EnKakasi3_Draw = 0x80B7B2B8; // type:func +OceffWipe4_Init = 0x80B7B490; // type:func +OceffWipe4_Destroy = 0x80B7B4EC; // type:func +OceffWipe4_Update = 0x80B7B510; // type:func +OceffWipe4_Draw = 0x80B7B570; // type:func +EnEg_PlayVoidOutSFX = 0x80B7C470; // type:func +EnEg_Destroy = 0x80B7C490; // type:func +EnEg_Init = 0x80B7C4A0; // type:func +func_809FFDC8 = 0x80B7C4B0; // type:func +EnEg_Update = 0x80B7C548; // type:func +EnEg_Draw = 0x80B7C590; // type:func +BgMenkuriNisekabe_Init = 0x80B7C620; // type:func +BgMenkuriNisekabe_Destroy = 0x80B7C648; // type:func +BgMenkuriNisekabe_Update = 0x80B7C658; // type:func +BgMenkuriNisekabe_Draw = 0x80B7C68C; // type:func +EnZo_SpawnRipple = 0x80B7C770; // type:func +EnZo_SpawnBubble = 0x80B7C804; // type:func +EnZo_SpawnSplash = 0x80B7C934; // type:func +EnZo_UpdateEffectsRipples = 0x80B7CAA0; // type:func +EnZo_UpdateEffectsBubbles = 0x80B7CB5C; // type:func +EnZo_UpdateEffectsSplashes = 0x80B7CC8C; // type:func +EnZo_DrawEffectsRipples = 0x80B7CDC4; // type:func +EnZo_DrawEffectsBubbles = 0x80B7CF74; // type:func +EnZo_DrawEffectsSplashes = 0x80B7D11C; // type:func +EnZo_TreadWaterRipples = 0x80B7D2D0; // type:func +EnZo_SpawnSplashes = 0x80B7D34C; // type:func +EnZo_GetTextId = 0x80B7D4C0; // type:func +EnZo_UpdateTalkState = 0x80B7D734; // type:func +EnZo_Blink = 0x80B7D898; // type:func +EnZo_Dialog = 0x80B7D910; // type:func +EnZo_PlayerInProximity = 0x80B7D9F0; // type:func +EnZo_SetAnimation = 0x80B7DA90; // type:func +EnZo_Init = 0x80B7DB88; // type:func +EnZo_Destroy = 0x80B7DD90; // type:func +EnZo_Standing = 0x80B7DDA0; // type:func +EnZo_Submerged = 0x80B7DE84; // type:func +EnZo_Surface = 0x80B7DEC4; // type:func +EnZo_TreadWater = 0x80B7DFA8; // type:func +EnZo_Dive = 0x80B7E158; // type:func +EnZo_Update = 0x80B7E2A0; // type:func +EnZo_OverrideLimbDraw = 0x80B7E480; // type:func +EnZo_PostLimbDraw = 0x80B7E6A0; // type:func +EnZo_Draw = 0x80B7E6FC; // type:func +EffectSsIceSmoke_Init = 0x80B7ED20; // type:func +EffectSsIceSmoke_Draw = 0x80B7EE40; // type:func +EffectSsIceSmoke_Update = 0x80B7F100; // type:func +ObjMakekinsuta_Init = 0x80B7F1E0; // type:func +func_80B98320 = 0x80B7F1F8; // type:func +ObjMakekinsuta_DoNothing = 0x80B7F2AC; // type:func +ObjMakekinsuta_Update = 0x80B7F2BC; // type:func +EnGe3_ChangeAction = 0x80B7F330; // type:func +EnGe3_Init = 0x80B7F3D8; // type:func +EnGe3_Destroy = 0x80B7F4E0; // type:func +EnGe3_TurnToFacePlayer = 0x80B7F50C; // type:func +EnGe3_LookAtPlayer = 0x80B7F624; // type:func +EnGe3_Wait = 0x80B7F738; // type:func +EnGe3_WaitLookAtPlayer = 0x80B7F79C; // type:func +EnGe3_WaitTillCardGiven = 0x80B7F7BC; // type:func +EnGe3_GiveCard = 0x80B7F820; // type:func +EnGe3_ForceTalk = 0x80B7F8B4; // type:func +EnGe3_UpdateCollision = 0x80B7F96C; // type:func +EnGe3_MoveAndBlink = 0x80B7FA14; // type:func +EnGe3_UpdateWhenNotTalking = 0x80B7FAA0; // type:func +EnGe3_Update = 0x80B7FB54; // type:func +EnGe3_OverrideLimbDraw = 0x80B7FBA0; // type:func +EnGe3_PostLimbDraw = 0x80B7FBFC; // type:func +EnGe3_Draw = 0x80B7FC58; // type:func +ObjTimeblock_CalculateIsVisible = 0x80B7FE80; // type:func +ObjTimeblock_SpawnDemoEffect = 0x80B7FF40; // type:func +ObjTimeblock_ToggleSwitchFlag = 0x80B7FFB4; // type:func +ObjTimeblock_Init = 0x80B7FFFC; // type:func +ObjTimeblock_Destroy = 0x80B801B0; // type:func +ObjTimeblock_PlayerIsInRange = 0x80B801E4; // type:func +ObjTimeblock_WaitForOcarina = 0x80B802C4; // type:func +ObjTimeblock_WaitForSong = 0x80B80344; // type:func +ObjTimeblock_SetupDoNothing = 0x80B803BC; // type:func +ObjTimeblock_DoNothing = 0x80B803D0; // type:func +ObjTimeblock_SetupNormal = 0x80B803E0; // type:func +ObjTimeblock_Normal = 0x80B803F4; // type:func +func_80BA06AC = 0x80B80570; // type:func +ObjTimeblock_SetupAltBehaviorVisible = 0x80B80620; // type:func +ObjTimeblock_AltBehaviorVisible = 0x80B80634; // type:func +ObjTimeblock_SetupAltBehaviourNotVisible = 0x80B80700; // type:func +ObjTimeblock_AltBehaviourNotVisible = 0x80B80714; // type:func +ObjTimeblock_Update = 0x80B807E4; // type:func +ObjTimeblock_Draw = 0x80B8086C; // type:func +ObjHamishi_InitCollision = 0x80B80AC0; // type:func +ObjHamishi_Shake = 0x80B80B18; // type:func +ObjHamishi_Break = 0x80B80C94; // type:func +ObjHamishi_Init = 0x80B80F40; // type:func +ObjHamishi_Destroy = 0x80B81028; // type:func +ObjHamishi_Update = 0x80B81054; // type:func +ObjHamishi_Draw = 0x80B81184; // type:func +EnZl4_SetActiveCamDir = 0x80B81310; // type:func +EnZl4_SetActiveCamMove = 0x80B813E8; // type:func +EnZl4_GetTextId = 0x80B8146C; // type:func +EnZl4_UpdateTalkState = 0x80B81510; // type:func +EnZl4_UpdateFace = 0x80B8154C; // type:func +EnZl4_SetMove = 0x80B8169C; // type:func +func_80B5BB78 = 0x80B816DC; // type:func +EnZl4_GetCueStartPos = 0x80B81728; // type:func +EnZl4_SetupFromLegendCs = 0x80B8176C; // type:func +EnZl4_InMovingAnim = 0x80B81844; // type:func +EnZl4_Init = 0x80B81914; // type:func +EnZl4_Destroy = 0x80B81AD0; // type:func +EnZl4_SetNextAnim = 0x80B81AFC; // type:func +EnZl4_ReverseAnimation = 0x80B81B50; // type:func +EnZl4_CsWaitForPlayer = 0x80B81B78; // type:func +EnZl4_CsMeetPlayer = 0x80B81CD8; // type:func +EnZl4_CsAskStone = 0x80B81FD0; // type:func +EnZl4_CsAskName = 0x80B824FC; // type:func +EnZl4_CsTellLegend = 0x80B82AE8; // type:func +EnZl4_CsLookWindow = 0x80B82F44; // type:func +EnZl4_CsWarnAboutGanon = 0x80B83188; // type:func +EnZl4_CsMakePlan = 0x80B83650; // type:func +EnZl4_Cutscene = 0x80B83994; // type:func +EnZl4_Idle = 0x80B83C0C; // type:func +EnZl4_TheEnd = 0x80B83C84; // type:func +EnZl4_Update = 0x80B83E34; // type:func +EnZl4_OverrideLimbDraw = 0x80B83EE4; // type:func +EnZl4_PostLimbDraw = 0x80B84074; // type:func +EnZl4_Draw = 0x80B840D0; // type:func +EnMm2_ChangeAnim = 0x80B85D40; // type:func +func_80AAEF70 = 0x80B85E64; // type:func +EnMm2_Init = 0x80B85F34; // type:func +EnMm2_Destroy = 0x80B860EC; // type:func +func_80AAF224 = 0x80B86118; // type:func +func_80AAF2BC = 0x80B861B4; // type:func +func_80AAF330 = 0x80B86228; // type:func +func_80AAF3C0 = 0x80B862B8; // type:func +func_80AAF57C = 0x80B86474; // type:func +func_80AAF5EC = 0x80B864E8; // type:func +func_80AAF668 = 0x80B86564; // type:func +EnMm2_Update = 0x80B86658; // type:func +EnMm2_Draw = 0x80B867A0; // type:func +EnMm2_OverrideLimbDraw = 0x80B8686C; // type:func +EnMm2_PostLimbDraw = 0x80B868F4; // type:func +BgJyaBlock_Init = 0x80B86B00; // type:func +BgJyaBlock_Destroy = 0x80B86BB8; // type:func +BgJyaBlock_Update = 0x80B86BEC; // type:func +BgJyaBlock_Draw = 0x80B86C10; // type:func +ObjWarp2block_Spawn = 0x80B86D70; // type:func +func_80BA1ECC = 0x80B86E4C; // type:func +ObjWarp2block_SwapWithChild = 0x80B86FCC; // type:func +func_80BA2218 = 0x80B8719C; // type:func +func_80BA228C = 0x80B8721C; // type:func +func_80BA2304 = 0x80B87294; // type:func +ObjWarp2block_Init = 0x80B872D8; // type:func +ObjWarp2block_Destroy = 0x80B873F8; // type:func +ObjWarp2block_SetInactive = 0x80B87438; // type:func +ObjWarp2block_DoNothing = 0x80B87450; // type:func +func_80BA24E8 = 0x80B87460; // type:func +func_80BA24F8 = 0x80B87474; // type:func +func_80BA2600 = 0x80B87558; // type:func +func_80BA2610 = 0x80B8756C; // type:func +ObjWarp2block_Update = 0x80B8761C; // type:func +ObjWarp2block_Draw = 0x80B87658; // type:func diff --git a/tools/disasm/ntsc-1.2/variables.txt b/tools/disasm/ntsc-1.2/variables.txt new file mode 100644 index 0000000000..29faa9c929 --- /dev/null +++ b/tools/disasm/ntsc-1.2/variables.txt @@ -0,0 +1,14 @@ +njpgdspMainDataStart = 0x08011542; // +gActorOverlayTable = 0x800E8B70; // size:0x3AE0 +gMaxActorId = 0x800EC650; // size:0x4 +sJpegTask = 0x800F1BB0; // size:0x40 type:OSTask +gSramSlotOffsets = 0x800FC550; // size:0xC type:u16 +Player_InitVars = 0x800FCB80; // size:0x20 +gKaleidoMgrOverlayTable = 0x800FEAD0; // size:0x38 type:KaleidoMgrOverlay +gScreenWidth = 0x800FEB50; // size:0x4 type:s32 +gScreenHeight = 0x800FEB54; // size:0x4 type:s32 +gSystemHeapSize = 0x800FEB58; // size:0x4 type:u32 +gSaveContext = 0x8011AC80; // size:0x1428 type:SaveContext +gRegEditor = 0x8011C0B0; // size:0x4 type:RegEditor* +gSegments = 0x80121508; // size:0x40 +_string_n64dd_c = 0x801D9680; // size:0x1 type:char diff --git a/tools/fix_bss.py b/tools/fix_bss.py new file mode 100755 index 0000000000..49c1962d86 --- /dev/null +++ b/tools/fix_bss.py @@ -0,0 +1,776 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: 2024 zeldaret +# SPDX-License-Identifier: CC0-1.0 + + +from __future__ import annotations + +import argparse +from collections import Counter +import colorama +from dataclasses import dataclass +import io +import multiprocessing +import multiprocessing.pool +from pathlib import Path +import re +import shlex +import sys +import time +import traceback +from typing import BinaryIO, Iterator + +from ido_block_numbers import ( + generate_make_log, + find_compiler_command_line, + run_cfe, + SymbolTableEntry, + UcodeOp, +) + +import elftools.elf.elffile +import mapfile_parser.mapfile + + +def read_u32(f: BinaryIO, offset: int) -> int: + f.seek(offset) + return int.from_bytes(f.read(4), "big") + + +def read_u16(f: BinaryIO, offset: int) -> int: + f.seek(offset) + return int.from_bytes(f.read(2), "big") + + +def read_s16(f: BinaryIO, offset: int) -> int: + f.seek(offset) + return int.from_bytes(f.read(2), "big", signed=True) + + +class FixBssException(Exception): + pass + + +@dataclass +class Reloc: + name: str + offset_32: int | None + offset_hi16: int | None + offset_lo16: int | None + addend: int + + +@dataclass +class Pointer: + name: str + addend: int + base_value: int + build_value: int + + +# Read relocations from an ELF file section +def read_relocs(object_path: Path, section_name: str) -> list[Reloc]: + with open(object_path, "rb") as f: + elffile = elftools.elf.elffile.ELFFile(f) + symtab = elffile.get_section_by_name(".symtab") + data = elffile.get_section_by_name(section_name).data() + + reloc_section = elffile.get_section_by_name(f".rel{section_name}") + if reloc_section is None: + return [] + + relocs = [] + offset_hi16 = 0 + for reloc in reloc_section.iter_relocations(): + reloc_offset = reloc.entry["r_offset"] + reloc_type = reloc.entry["r_info_type"] + reloc_name = symtab.get_symbol(reloc.entry["r_info_sym"]).name + + if reloc_type == 2: # R_MIPS_32 + offset_32 = reloc_offset + addend = int.from_bytes( + data[reloc_offset : reloc_offset + 4], "big", signed=True + ) + relocs.append(Reloc(reloc_name, offset_32, None, None, addend)) + elif reloc_type == 4: # R_MIPS_26 + pass + elif reloc_type == 5: # R_MIPS_HI16 + offset_hi16 = reloc_offset + elif reloc_type == 6: # R_MIPS_LO16 + offset_lo16 = reloc_offset + addend_hi16 = int.from_bytes( + data[offset_hi16 + 2 : offset_hi16 + 4], "big", signed=False + ) + addend_lo16 = int.from_bytes( + data[offset_lo16 + 2 : offset_lo16 + 4], "big", signed=True + ) + addend = (addend_hi16 << 16) + addend_lo16 + relocs.append(Reloc(reloc_name, None, offset_hi16, offset_lo16, addend)) + else: + raise NotImplementedError(f"Unsupported relocation type: {reloc_type}") + + return relocs + + +def get_file_pointers( + file: mapfile_parser.mapfile.File, + base: BinaryIO, + build: BinaryIO, +) -> list[Pointer]: + pointers = [] + # TODO: open each ELF file only once instead of once per section? + for reloc in read_relocs(file.filepath, file.sectionType): + if reloc.offset_32 is not None: + base_value = read_u32(base, file.vrom + reloc.offset_32) + build_value = read_u32(build, file.vrom + reloc.offset_32) + elif reloc.offset_hi16 is not None and reloc.offset_lo16 is not None: + if ( + read_u16(base, file.vrom + reloc.offset_hi16) + != read_u16(build, file.vrom + reloc.offset_hi16) + ) or ( + read_u16(base, file.vrom + reloc.offset_lo16) + != read_u16(build, file.vrom + reloc.offset_lo16) + ): + raise FixBssException( + f"Reference to {reloc.name} in {file.filepath} is in a shifted or non-matching portion of the ROM.\n" + "Please ensure that the only differences between the baserom and the current build are due to BSS ordering." + ) + + base_value = ( + read_u16(base, file.vrom + reloc.offset_hi16 + 2) << 16 + ) + read_s16(base, file.vrom + reloc.offset_lo16 + 2) + build_value = ( + read_u16(build, file.vrom + reloc.offset_hi16 + 2) << 16 + ) + read_s16(build, file.vrom + reloc.offset_lo16 + 2) + else: + assert False, "Invalid relocation" + + pointers.append(Pointer(reloc.name, reloc.addend, base_value, build_value)) + return pointers + + +base = None +build = None + + +def get_file_pointers_worker_init(version: str): + global base + global build + base = open(f"baseroms/{version}/baserom-decompressed.z64", "rb") + build = open(f"build/{version}/oot-{version}.z64", "rb") + + +def get_file_pointers_worker(file: mapfile_parser.mapfile.File) -> list[Pointer]: + assert base is not None + assert build is not None + return get_file_pointers(file, base, build) + + +# Compare pointers between the baserom and the current build, returning a dictionary from +# C files to a list of pointers into their BSS sections +def compare_pointers(version: str) -> dict[Path, list[Pointer]]: + mapfile_path = Path(f"build/{version}/oot-{version}.map") + if not mapfile_path.exists(): + raise FixBssException(f"Could not open {mapfile_path}") + + mapfile = mapfile_parser.mapfile.MapFile() + mapfile.readMapFile(mapfile_path) + + # Segments built from source code (filtering out assets) + source_code_segments = [] + for mapfile_segment in mapfile: + if not ( + mapfile_segment.name.startswith("..boot") + or mapfile_segment.name.startswith("..code") + or mapfile_segment.name.startswith("..buffers") + or mapfile_segment.name.startswith("..ovl_") + ): + continue + source_code_segments.append(mapfile_segment) + + # Find all pointers with different values + if not sys.stdout.isatty(): + print(f"Comparing pointers between baserom and build ...") + pointers = [] + file_results = [] + with multiprocessing.Pool( + initializer=get_file_pointers_worker_init, + initargs=(version,), + ) as p: + for mapfile_segment in source_code_segments: + for file in mapfile_segment: + if not str(file.filepath).endswith(".o"): + continue + if file.sectionType == ".bss": + continue + file_result = p.apply_async(get_file_pointers_worker, (file,)) + file_results.append(file_result) + + # Report progress and wait until all files are done + num_files = len(file_results) + while True: + time.sleep(0.010) + num_files_done = sum(file_result.ready() for file_result in file_results) + if sys.stdout.isatty(): + print( + f"Comparing pointers between baserom and build ... {num_files_done:>{len(f'{num_files}')}}/{num_files}", + end="\r", + ) + if num_files_done == num_files: + break + if sys.stdout.isatty(): + print("") + + # Collect results and check for errors + for file_result in file_results: + try: + pointers.extend(file_result.get()) + except FixBssException as e: + print(f"{colorama.Fore.RED}Error: {str(e)}{colorama.Fore.RESET}") + sys.exit(1) + + # Remove duplicates and sort by baserom address + pointers = list({p.base_value: p for p in pointers}.values()) + pointers.sort(key=lambda p: p.base_value) + + # Go through sections and collect differences + pointers_by_file = {} + for mapfile_segment in source_code_segments: + for file in mapfile_segment: + if not file.sectionType == ".bss": + continue + + pointers_in_section = [ + p + for p in pointers + if file.vram <= p.build_value < file.vram + file.size + ] + if not pointers_in_section: + continue + + c_file = file.filepath.relative_to(f"build/{version}").with_suffix(".c") + pointers_by_file[c_file] = pointers_in_section + + return pointers_by_file + + +@dataclass +class Pragma: + line_number: int + block_number: int + amount: int + + +# A BSS variable in the source code +@dataclass +class BssVariable: + block_number: int + name: str + size: int + align: int + + +# A BSS variable with its offset in the compiled .bss section +@dataclass +class BssSymbol: + name: str + offset: int + size: int + align: int + + +INCREMENT_BLOCK_NUMBER_RE = re.compile(r"increment_block_number_(\d+)_(\d+)") + + +# Find increment_block_number pragmas by parsing the symbol names generated by preprocess.py. +# This is pretty ugly but it seems more reliable than trying to determine the line numbers of +# BSS variables in the C file. +def find_pragmas(symbol_table: list[SymbolTableEntry]) -> list[Pragma]: + # Keep track of first block number and count for each line number + first_block_number = {} + amounts: Counter[int] = Counter() + for block_number, entry in enumerate(symbol_table): + if match := INCREMENT_BLOCK_NUMBER_RE.match(entry.name): + line_number = int(match.group(1)) + if line_number not in first_block_number: + first_block_number[line_number] = block_number + amounts[line_number] += 1 + + pragmas = [] + for line_number, block_number in sorted(first_block_number.items()): + pragmas.append(Pragma(line_number, block_number, amounts[line_number])) + return pragmas + + +# Find all BSS variables from IDO's symbol table and U-Code output. +def find_bss_variables( + symbol_table: list[SymbolTableEntry], ucode: list[UcodeOp] +) -> list[BssVariable]: + bss_variables = [] + init_block_numbers = set(op.i1 for op in ucode if op.opcode_name == "init") + last_function_name = None + + for op in ucode: + # gsym: file-level global symbol + # lsym: file-level static symbol + # fsym: function-level static symbol + if op.opcode_name in ("gsym", "lsym", "fsym"): + block_number = op.i1 + if block_number in init_block_numbers: + continue # not BSS + + name = symbol_table[block_number].name + if op.opcode_name == "fsym": + name = f"{last_function_name}::{name}" + + size = op.args[0] + align = 1 << op.lexlev + # TODO: IDO seems to automatically align anything with size 8 or more to + # an 8-byte boundary in BSS. Is this correct? + if size >= 8: + align = 8 + + bss_variables.append(BssVariable(block_number, name, size, align)) + elif op.opcode_name == "ent": + last_function_name = symbol_table[op.i1].name + + bss_variables.sort(key=lambda var: var.block_number) + return bss_variables + + +# Predict offsets of BSS variables in the build. +def predict_bss_ordering(variables: list[BssVariable]) -> list[BssSymbol]: + bss_symbols = [] + offset = 0 + # Sort by block number mod 256 (for ties, the original order is preserved) + for var in sorted(variables, key=lambda var: var.block_number % 256): + size = var.size + align = var.align + offset = (offset + align - 1) & ~(align - 1) + bss_symbols.append(BssSymbol(var.name, offset, size, align)) + offset += size + return bss_symbols + + +# Match up BSS variables between the baserom and the build using the pointers from relocations. +# Note that we may not be able to match all variables if a variable is not referenced by any pointer. +def determine_base_bss_ordering( + build_bss_symbols: list[BssSymbol], pointers: list[Pointer] +) -> list[BssSymbol]: + # Assume that the lowest address is the start of the BSS section + base_section_start = min(p.base_value for p in pointers) + build_section_start = min(p.build_value for p in pointers) + + found_symbols: dict[str, BssSymbol] = {} + for p in pointers: + base_offset = p.base_value - base_section_start + build_offset = p.build_value - build_section_start + + new_symbol = None + new_offset = 0 + for symbol in build_bss_symbols: + if ( + symbol.offset <= build_offset + and build_offset < symbol.offset + symbol.size + ): + new_symbol = symbol + new_offset = base_offset - (build_offset - symbol.offset) + break + + if new_symbol is None: + if p.addend > 0: + addend_str = f"+0x{p.addend:X}" + elif p.addend < 0: + addend_str = f"-0x{-p.addend:X}" + else: + addend_str = "" + raise FixBssException( + f"Could not find BSS symbol for pointer {p.name}{addend_str} " + f"(base address 0x{p.base_value:08X}, build address 0x{p.build_value:08X})" + ) + + if new_symbol.name in found_symbols: + # Sanity check that offsets agree + existing_offset = found_symbols[new_symbol.name].offset + if new_offset != existing_offset: + raise FixBssException( + f"BSS symbol {new_symbol.name} found at conflicting offsets in this baserom " + f"(0x{existing_offset:04X} and 0x{new_offset:04X}). Is the build up-to-date?" + ) + else: + found_symbols[new_symbol.name] = BssSymbol( + new_symbol.name, new_offset, new_symbol.size, new_symbol.align + ) + + return list(sorted(found_symbols.values(), key=lambda symbol: symbol.offset)) + + +# Generate a sequence of integers in the range [0, 256) with a 2-adic valuation of exactly `nu`. +# The 2-adic valuation of an integer n is the largest k such that 2^k divides n +# (see https://en.wikipedia.org/wiki/P-adic_valuation), and for convenience we define +# the 2-adic valuation of 0 to be 8. Here's what the sequences look like for nu = 0..8: +# 8: 0 +# 7: 128 +# 6: 64, 192 +# 5: 32, 96, 160, 224 +# 4: 16, 48, 80, 112, ... +# 3: 8, 24, 40, 56, ... +# 2: 4, 12, 20, 28, ... +# 1: 2, 6, 10, 14, ... +# 0: 1, 3, 5, 7, ... +def gen_seq(nu: int) -> Iterator[int]: + if nu == 8: + yield 0 + else: + for i in range(1 << (7 - nu)): + yield (2 * i + 1) * (1 << nu) + + +# Yields all n-tuples of integers in the range [0, 256) with minimum 2-adic valuation +# of exactly `min_nu`. +def gen_candidates_impl(n: int, min_nu: int) -> Iterator[tuple[int, ...]]: + if n == 1: + for n in gen_seq(min_nu): + yield (n,) + else: + # (a, *b) has min 2-adic valuation = min_nu if and only if either: + # a has 2-adic valuation > min_nu and b has min 2-adic valuation == min_nu + # a has 2-adic valuation == min_nu and b has min 2-adic valuation >= min_nu + for min_nu_a in reversed(range(min_nu + 1, 9)): + for a in gen_seq(min_nu_a): + for b in gen_candidates_impl(n - 1, min_nu): + yield (a, *b) + for a in gen_seq(min_nu): + for min_nu_b in reversed(range(min_nu, 9)): + for b in gen_candidates_impl(n - 1, min_nu_b): + yield (a, *b) + + +# Yields all n-tuples of integers in the range [0, 256), ordered by descending minimum +# 2-adic valuation of the elements in the tuple. For example, for n = 2 the sequence is: +# (0, 0), (0, 128), (128, 0), (128, 128), (0, 64), (0, 192), (128, 64), (128, 192), ... +def gen_candidates(n: int) -> Iterator[tuple[int, ...]]: + for nu in reversed(range(9)): + yield from gen_candidates_impl(n, nu) + + +# Determine a new set of increment_block_number pragmas that will fix the BSS ordering. +def solve_bss_ordering( + pragmas: list[Pragma], + bss_variables: list[BssVariable], + base_bss_symbols: list[BssSymbol], +) -> list[Pragma]: + base_symbols_by_name = {symbol.name: symbol for symbol in base_bss_symbols} + + # Our "algorithm" just tries all possible combinations of increment_block_number amounts, + # which can get very slow with more than a few pragmas. But, we order the candidates in a + # binary-search-esque way to try to find a solution faster. + for new_amounts in gen_candidates(len(pragmas)): + # Generate new block numbers + new_bss_variables = [] + for var in bss_variables: + new_block_number = var.block_number + for pragma, new_amount in zip(pragmas, new_amounts): + if var.block_number >= pragma.block_number: + new_block_number += new_amount - pragma.amount + new_bss_variables.append( + BssVariable(new_block_number, var.name, var.size, var.align) + ) + + # Predict new BSS and check if new ordering matches + new_bss_symbols = predict_bss_ordering(new_bss_variables) + + bss_ordering_matches = True + for symbol in new_bss_symbols: + base_symbol = base_symbols_by_name.get(symbol.name) + if base_symbol is None: + continue + if symbol.offset != base_symbol.offset: + bss_ordering_matches = False + break + + if bss_ordering_matches: + new_pragmas = [] + for pragma, new_amount in zip(pragmas, new_amounts): + new_pragmas.append( + Pragma(pragma.line_number, pragma.block_number, new_amount) + ) + return new_pragmas + + raise FixBssException("Could not find any solutions") + + +# Parses #pragma increment_block_number (with line continuations already removed) +def parse_pragma(pragma_string: str) -> dict[str, int]: + amounts = {} + for part in pragma_string.replace('"', "").split()[2:]: + kv = part.split(":") + if len(kv) != 2: + raise FixBssException( + "#pragma increment_block_number" + f' arguments must be version:amount pairs, not "{part}"' + ) + try: + amount = int(kv[1]) + except ValueError: + raise FixBssException( + "#pragma increment_block_number" + f' amount must be an integer, not "{kv[1]}" (in "{part}")' + ) + amounts[kv[0]] = amount + return amounts + + +# Formats #pragma increment_block_number as a list of lines +def format_pragma(amounts: dict[str, int], max_line_length: int) -> list[str]: + lines = [] + pragma_start = "#pragma increment_block_number " + current_line = pragma_start + '"' + first = True + for version, amount in sorted(amounts.items()): + part = f"{version}:{amount}" + if len(current_line) + len(part) + len('" \\') > max_line_length: + lines.append(current_line + '" ') + current_line = " " * len(pragma_start) + '"' + first = True + if not first: + current_line += " " + current_line += part + first = False + lines.append(current_line + '"\n') + + if len(lines) >= 2: + # add and align vertically all continuation \ characters + n_align = max(map(len, lines[:-1])) + for i in range(len(lines) - 1): + lines[i] = f"{lines[i]:{n_align}}\\\n" + + return lines + + +def update_source_file(version_to_update: str, file: Path, new_pragmas: list[Pragma]): + with open(file, "r", encoding="utf-8") as f: + lines = f.readlines() + + replace_lines: list[tuple[int, int, list[str]]] = [] + + for pragma in new_pragmas: + i = pragma.line_number - 1 + if not lines[i].startswith("#pragma increment_block_number"): + raise FixBssException( + f"Expected #pragma increment_block_number on line {pragma.line_number}" + ) + + # list the pragma line and any continuation line + pragma_lines = [lines[i]] + while pragma_lines[-1].endswith("\\\n"): + i += 1 + pragma_lines.append(lines[i]) + + # concatenate all lines into one + pragma_string = "".join(s.replace("\\\n", "") for s in pragma_lines) + + amounts = parse_pragma(pragma_string) + + amounts[version_to_update] = pragma.amount + + column_limit = 120 # matches .clang-format's ColumnLimit + new_pragma_lines = format_pragma(amounts, column_limit) + + replace_lines.append( + ( + pragma.line_number - 1, + pragma.line_number - 1 + len(pragma_lines), + new_pragma_lines, + ) + ) + + # Replace the pragma lines starting from the end of the file, so the line numbers + # for pragmas earlier in the file stay accurate. + replace_lines.sort(key=lambda it: it[0], reverse=True) + for start, end, new_pragma_lines in replace_lines: + del lines[start:end] + lines[start:start] = new_pragma_lines + + with open(file, "w", encoding="utf-8") as f: + f.writelines(lines) + + +def process_file( + file: Path, + pointers: list[Pointer], + make_log: list[str], + dry_run: bool, + version: str, +): + print(f"{colorama.Fore.CYAN}Processing {file} ...{colorama.Fore.RESET}") + + command_line = find_compiler_command_line(make_log, file) + if command_line is None: + raise FixBssException(f"Could not determine compiler command line for {file}") + + print(f"Compiler command: {shlex.join(command_line)}") + symbol_table, ucode = run_cfe(command_line, keep_files=False) + + bss_variables = find_bss_variables(symbol_table, ucode) + print("BSS variables:") + for var in bss_variables: + i = var.block_number + print( + f" {i:>6} [{i%256:>3}]: size=0x{var.size:04X} align=0x{var.align:X} {var.name}" + ) + + build_bss_symbols = predict_bss_ordering(bss_variables) + print("Current build BSS ordering:") + for symbol in build_bss_symbols: + print( + f" offset=0x{symbol.offset:04X} size=0x{symbol.size:04X} align=0x{symbol.align:X} {symbol.name}" + ) + + if not pointers: + raise FixBssException(f"No pointers to BSS found in ROM for {file}") + + base_bss_symbols = determine_base_bss_ordering(build_bss_symbols, pointers) + print("Baserom BSS ordering:") + for symbol in base_bss_symbols: + print( + f" offset=0x{symbol.offset:04X} size=0x{symbol.size:04X} align=0x{symbol.align:X} {symbol.name}" + ) + + pragmas = find_pragmas(symbol_table) + max_pragmas = 3 + if not pragmas: + raise FixBssException(f"No increment_block_number pragmas found in {file}") + elif len(pragmas) > max_pragmas: + raise FixBssException( + f"Too many increment_block_number pragmas found in {file} (found {len(pragmas)}, max {max_pragmas})" + ) + + print("Solving BSS ordering ...") + new_pragmas = solve_bss_ordering(pragmas, bss_variables, base_bss_symbols) + print("New increment_block_number amounts:") + for pragma in new_pragmas: + print(f" line {pragma.line_number}: {pragma.amount}") + + if not dry_run: + update_source_file(version, file, new_pragmas) + print(f"{colorama.Fore.GREEN}Updated {file}{colorama.Fore.RESET}") + + +def process_file_worker(*x): + # Collect output in a buffer to avoid interleaving output when processing multiple files + old_stdout = sys.stdout + fake_stdout = io.StringIO() + try: + sys.stdout = fake_stdout + process_file(*x) + except FixBssException as e: + # exception with a message for the user + print(f"{colorama.Fore.RED}Error: {str(e)}{colorama.Fore.RESET}") + raise + except Exception as e: + # "unexpected" exception, also print a trace for devs + print(f"{colorama.Fore.RED}Error: {str(e)}{colorama.Fore.RESET}") + traceback.print_exc(file=sys.stdout) + raise + finally: + sys.stdout = old_stdout + print() + print(fake_stdout.getvalue(), end="") + + +def main(): + parser = argparse.ArgumentParser( + description="Automatically fix BSS ordering by editing increment_block_number pragmas. " + "Assumes that the build is up-to-date and that only differences between the baserom and " + "the current build are due to BSS ordering." + ) + parser.add_argument( + "--oot-version", + "-v", + type=str, + required=True, + help="OOT version", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Print changes instead of editing source files", + ) + parser.add_argument( + "files", + metavar="FILE", + nargs="*", + type=Path, + help="Fix BSS ordering for a particular C file (default: all files with BSS differences)", + ) + + args = parser.parse_args() + version = args.oot_version + + pointers_by_file = compare_pointers(version) + + files_with_reordering = [] + for file, pointers in pointers_by_file.items(): + # Try to detect if the section is shifted by comparing the lowest + # address among any pointer into the section between base and build + base_min_address = min(p.base_value for p in pointers) + build_min_address = min(p.build_value for p in pointers) + if not all( + p.build_value - build_min_address == p.base_value - base_min_address + for p in pointers + ): + files_with_reordering.append(file) + + if files_with_reordering: + print("Files with BSS reordering:") + for file in files_with_reordering: + print(f" {file}") + else: + print("No BSS reordering found.") + + if args.files: + files_to_fix = args.files + else: + files_to_fix = files_with_reordering + if not files_to_fix: + return + + print(f"Running make to find compiler command line ...") + make_log = generate_make_log(version) + + with multiprocessing.Pool() as p: + file_results = [] + for file in files_to_fix: + file_result = p.apply_async( + process_file_worker, + ( + file, + pointers_by_file.get(file, []), + make_log, + args.dry_run, + version, + ), + ) + file_results.append(file_result) + + # Wait until all files are done + while not all(file_result.ready() for file_result in file_results): + time.sleep(0.010) + + # Collect results and check for errors + num_successes = sum(file_result.successful() for file_result in file_results) + if num_successes == len(file_results): + print() + print(f"Updated {num_successes}/{len(file_results)} files.") + else: + print() + print( + f"{colorama.Fore.RED}Updated {num_successes}/{len(file_results)} files.{colorama.Fore.RESET}" + ) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/tools/ido_block_numbers.py b/tools/ido_block_numbers.py index 2deb64c79c..f45bb9745d 100755 --- a/tools/ido_block_numbers.py +++ b/tools/ido_block_numbers.py @@ -14,14 +14,20 @@ # https://github.com/decompals/ultralib/blob/main/tools/mdebug.py # https://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf # https://github.com/decompals/IDO/blob/main/IDO_7.1/dist/compiler_eoe/usr/include/sym.h +# https://github.com/Synray/ido-ucode-utils + +from __future__ import annotations import argparse +from dataclasses import dataclass import itertools from pathlib import Path import platform import struct import subprocess +import shlex import sys +from typing import Optional, Tuple class Header: @@ -157,10 +163,15 @@ def read_string(data, start): return data[start : start + size].decode("ascii") -def print_symbol_table(data): - header = Header(data[0 : Header.SIZE]) +@dataclass +class SymbolTableEntry: + symbol: Optional[Symbol] + name: str + extern: bool - print(f"block [mod 256]: linkage type class name") + +def parse_symbol_table(data: bytes) -> list[SymbolTableEntry]: + header = Header(data[0 : Header.SIZE]) # File descriptors fds = [] @@ -170,15 +181,14 @@ def print_symbol_table(data): ) # Symbol identifiers ("dense numbers") + entries = [] for i in range(header.idnMax): ifd, isym = struct.unpack(">II", read_entry(data, header.cbDnOffset, i, 8)) if isym == 0xFFFFF: - # TODO: is this always a string? - extern = False + sym = None sym_name = "" - st = "string" - sc = "" + extern = False else: extern = ifd == 0x7FFFFFFF if extern: @@ -195,15 +205,251 @@ def print_symbol_table(data): ) ) sym_name = read_string(data, header.cbSsOffset + fd.issBase + sym.iss) - st = sym.symbol_type() - sc = sym.symbol_storage_class() + entries.append(SymbolTableEntry(sym, sym_name, extern)) + + return entries + + +def print_symbol_table(symbol_table: list[SymbolTableEntry]): + print(f"block [mod 256]: linkage type class name") + for i, entry in enumerate(symbol_table): + if not entry.symbol: + # TODO: is this always a string? + st = "string" + sc = "" + else: + st = entry.symbol.symbol_type() + sc = entry.symbol.symbol_storage_class() print( - f'{i:>9} [{i%256:>3}]: {"extern" if extern else "":<7} {st:<10} {sc:<9} {sym_name:<40}' + f'{i:>9} [{i%256:>3}]: {"extern" if entry.extern else "":<7} {st:<10} {sc:<9} {entry.name:<40}' ) -def find_compiler_command_line(filename, oot_version): +@dataclass +class UcodeOp: + opcode: int + opcode_name: str + mtype: int + dtype: int + lexlev: int + i1: int + args: list[int] + string: Optional[bytes] + + +@dataclass +class UcodeOpInfo: + opcode: int + name: str + length: int + has_const: bool + + +UCODE_OP_INFO = [ + UcodeOpInfo(0x00, "abs", 2, False), + UcodeOpInfo(0x01, "add", 2, False), + UcodeOpInfo(0x02, "adj", 4, False), + UcodeOpInfo(0x03, "aent", 4, False), + UcodeOpInfo(0x04, "and", 2, False), + UcodeOpInfo(0x05, "aos", 2, False), + UcodeOpInfo(0x06, "asym", 4, False), + UcodeOpInfo(0x07, "bgn", 4, False), + UcodeOpInfo(0x08, "bgnb", 2, False), + UcodeOpInfo(0x09, "bsub", 2, False), + UcodeOpInfo(0x0A, "cg1", 2, False), + UcodeOpInfo(0x0B, "cg2", 2, False), + UcodeOpInfo(0x0C, "chkh", 2, False), + UcodeOpInfo(0x0D, "chkl", 2, False), + UcodeOpInfo(0x0E, "chkn", 2, False), + UcodeOpInfo(0x0F, "chkt", 2, False), + UcodeOpInfo(0x10, "cia", 4, True), + UcodeOpInfo(0x11, "clab", 4, False), + UcodeOpInfo(0x12, "clbd", 2, False), + UcodeOpInfo(0x13, "comm", 4, True), + UcodeOpInfo(0x14, "csym", 4, False), + UcodeOpInfo(0x15, "ctrl", 4, False), + UcodeOpInfo(0x16, "cubd", 2, False), + UcodeOpInfo(0x17, "cup", 4, False), + UcodeOpInfo(0x18, "cvt", 4, False), + UcodeOpInfo(0x19, "cvtl", 2, False), + UcodeOpInfo(0x1A, "dec", 2, False), + UcodeOpInfo(0x1B, "def", 4, False), + UcodeOpInfo(0x1C, "dif", 4, False), + UcodeOpInfo(0x1D, "div", 2, False), + UcodeOpInfo(0x1E, "dup", 2, False), + UcodeOpInfo(0x1F, "end", 2, False), + UcodeOpInfo(0x20, "endb", 2, False), + UcodeOpInfo(0x21, "ent", 4, False), + UcodeOpInfo(0x22, "ueof", 2, False), + UcodeOpInfo(0x23, "equ", 2, False), + UcodeOpInfo(0x24, "esym", 4, False), + UcodeOpInfo(0x25, "fill", 4, False), + UcodeOpInfo(0x26, "fjp", 2, False), + UcodeOpInfo(0x27, "fsym", 4, False), + UcodeOpInfo(0x28, "geq", 2, False), + UcodeOpInfo(0x29, "grt", 2, False), + UcodeOpInfo(0x2A, "gsym", 4, False), + UcodeOpInfo(0x2B, "hsym", 4, False), + UcodeOpInfo(0x2C, "icuf", 4, False), + UcodeOpInfo(0x2D, "idx", 2, False), + UcodeOpInfo(0x2E, "iequ", 4, False), + UcodeOpInfo(0x2F, "igeq", 4, False), + UcodeOpInfo(0x30, "igrt", 4, False), + UcodeOpInfo(0x31, "ijp", 2, False), + UcodeOpInfo(0x32, "ilda", 6, False), + UcodeOpInfo(0x33, "ildv", 4, False), + UcodeOpInfo(0x34, "ileq", 4, False), + UcodeOpInfo(0x35, "iles", 4, False), + UcodeOpInfo(0x36, "ilod", 4, False), + UcodeOpInfo(0x37, "inc", 2, False), + UcodeOpInfo(0x38, "ineq", 4, False), + UcodeOpInfo(0x39, "init", 6, True), + UcodeOpInfo(0x3A, "inn", 4, False), + UcodeOpInfo(0x3B, "int", 4, False), + UcodeOpInfo(0x3C, "ior", 2, False), + UcodeOpInfo(0x3D, "isld", 4, False), + UcodeOpInfo(0x3E, "isst", 4, False), + UcodeOpInfo(0x3F, "istr", 4, False), + UcodeOpInfo(0x40, "istv", 4, False), + UcodeOpInfo(0x41, "ixa", 2, False), + UcodeOpInfo(0x42, "lab", 4, False), + UcodeOpInfo(0x43, "lbd", 2, False), + UcodeOpInfo(0x44, "lbdy", 2, False), + UcodeOpInfo(0x45, "lbgn", 2, False), + UcodeOpInfo(0x46, "lca", 4, True), + UcodeOpInfo(0x47, "lda", 6, False), + UcodeOpInfo(0x48, "ldap", 2, False), + UcodeOpInfo(0x49, "ldc", 4, True), + UcodeOpInfo(0x4A, "ldef", 4, False), + UcodeOpInfo(0x4B, "ldsp", 2, False), + UcodeOpInfo(0x4C, "lend", 2, False), + UcodeOpInfo(0x4D, "leq", 2, False), + UcodeOpInfo(0x4E, "les", 2, False), + UcodeOpInfo(0x4F, "lex", 2, False), + UcodeOpInfo(0x50, "lnot", 2, False), + UcodeOpInfo(0x51, "loc", 2, False), + UcodeOpInfo(0x52, "lod", 4, False), + UcodeOpInfo(0x53, "lsym", 4, False), + UcodeOpInfo(0x54, "ltrm", 2, False), + UcodeOpInfo(0x55, "max", 2, False), + UcodeOpInfo(0x56, "min", 2, False), + UcodeOpInfo(0x57, "mod", 2, False), + UcodeOpInfo(0x58, "mov", 4, False), + UcodeOpInfo(0x59, "movv", 2, False), + UcodeOpInfo(0x5A, "mpmv", 4, False), + UcodeOpInfo(0x5B, "mpy", 2, False), + UcodeOpInfo(0x5C, "mst", 2, False), + UcodeOpInfo(0x5D, "mus", 4, False), + UcodeOpInfo(0x5E, "neg", 2, False), + UcodeOpInfo(0x5F, "neq", 2, False), + UcodeOpInfo(0x60, "nop", 2, False), + UcodeOpInfo(0x61, "not", 2, False), + UcodeOpInfo(0x62, "odd", 2, False), + UcodeOpInfo(0x63, "optn", 4, False), + UcodeOpInfo(0x64, "par", 4, False), + UcodeOpInfo(0x65, "pdef", 4, False), + UcodeOpInfo(0x66, "pmov", 4, False), + UcodeOpInfo(0x67, "pop", 2, False), + UcodeOpInfo(0x68, "regs", 4, False), + UcodeOpInfo(0x69, "rem", 2, False), + UcodeOpInfo(0x6A, "ret", 2, False), + UcodeOpInfo(0x6B, "rlda", 4, False), + UcodeOpInfo(0x6C, "rldc", 4, True), + UcodeOpInfo(0x6D, "rlod", 4, False), + UcodeOpInfo(0x6E, "rnd", 4, False), + UcodeOpInfo(0x6F, "rpar", 4, False), + UcodeOpInfo(0x70, "rstr", 4, False), + UcodeOpInfo(0x71, "sdef", 4, False), + UcodeOpInfo(0x72, "sgs", 4, False), + UcodeOpInfo(0x73, "shl", 2, False), + UcodeOpInfo(0x74, "shr", 2, False), + UcodeOpInfo(0x75, "sign", 2, False), + UcodeOpInfo(0x76, "sqr", 2, False), + UcodeOpInfo(0x77, "sqrt", 2, False), + UcodeOpInfo(0x78, "ssym", 4, True), + UcodeOpInfo(0x79, "step", 2, False), + UcodeOpInfo(0x7A, "stp", 2, False), + UcodeOpInfo(0x7B, "str", 4, False), + UcodeOpInfo(0x7C, "stsp", 2, False), + UcodeOpInfo(0x7D, "sub", 2, False), + UcodeOpInfo(0x7E, "swp", 4, False), + UcodeOpInfo(0x7F, "tjp", 2, False), + UcodeOpInfo(0x80, "tpeq", 2, False), + UcodeOpInfo(0x81, "tpge", 2, False), + UcodeOpInfo(0x82, "tpgt", 2, False), + UcodeOpInfo(0x83, "tple", 2, False), + UcodeOpInfo(0x84, "tplt", 2, False), + UcodeOpInfo(0x85, "tpne", 2, False), + UcodeOpInfo(0x86, "typ", 4, False), + UcodeOpInfo(0x87, "ubd", 2, False), + UcodeOpInfo(0x88, "ujp", 2, False), + UcodeOpInfo(0x89, "unal", 2, False), + UcodeOpInfo(0x8A, "uni", 4, False), + UcodeOpInfo(0x8B, "vreg", 4, False), + UcodeOpInfo(0x8C, "xjp", 8, False), + UcodeOpInfo(0x8D, "xor", 2, False), + UcodeOpInfo(0x8E, "xpar", 2, False), + UcodeOpInfo(0x8F, "mtag", 2, False), + UcodeOpInfo(0x90, "alia", 2, False), + UcodeOpInfo(0x91, "ildi", 4, False), + UcodeOpInfo(0x92, "isti", 4, False), + UcodeOpInfo(0x93, "irld", 4, False), + UcodeOpInfo(0x94, "irst", 4, False), + UcodeOpInfo(0x95, "ldrc", 4, False), + UcodeOpInfo(0x96, "msym", 4, False), + UcodeOpInfo(0x97, "rcuf", 4, False), + UcodeOpInfo(0x98, "ksym", 4, False), + UcodeOpInfo(0x99, "osym", 4, False), + UcodeOpInfo(0x9A, "irlv", 2, False), + UcodeOpInfo(0x9B, "irsv", 2, False), +] + + +def parse_ucode(ucode: bytes) -> list[UcodeOp]: + ops = [] + pos = 0 + while pos < len(ucode): + opcode = ucode[pos] + mtype = ucode[pos + 1] >> 5 + dtype = ucode[pos + 1] & 0x1F + lexlev = int.from_bytes(ucode[pos + 2 : pos + 4], "big") + i1 = int.from_bytes(ucode[pos + 4 : pos + 8], "big") + pos += 8 + + info = UCODE_OP_INFO[opcode] + size = 4 * info.length + + args = [] + for _ in range(info.length - 2): + args.append(int.from_bytes(ucode[pos : pos + 4], "big")) + pos += 4 + + string = None + if info.has_const: + string_length = int.from_bytes(ucode[pos : pos + 4], "big") + pos += 8 + if dtype in (9, 12, 13, 14, 16) or info.name == "comm": + string = ucode[pos : pos + string_length] + pos += (string_length + 7) & ~7 + + ops.append(UcodeOp(opcode, info.name, mtype, dtype, lexlev, i1, args, string)) + return ops + + +def print_ucode(ucode: list[UcodeOp]): + for op in ucode: + args = " ".join(f"0x{arg:X}" for arg in op.args) + print( + f"{op.opcode_name:<4} mtype={op.mtype:X} dtype={op.dtype:X} lexlev={op.lexlev} i1={op.i1} args={args}", + end="", + ) + if op.string is not None: + print(f" string={op.string!r}", end="") + print() + + +def generate_make_log(oot_version: str) -> list[str]: is_macos = platform.system() == "Darwin" make = "gmake" if is_macos else "make" make_command_line = [ @@ -212,30 +458,28 @@ def find_compiler_command_line(filename, oot_version): "--dry-run", f"VERSION={oot_version}", ] + return subprocess.check_output(make_command_line).decode("utf-8").splitlines() - print(f"Running {make} to find compiler command line ...", file=sys.stderr) - make_output = ( - subprocess.check_output(make_command_line).decode("utf-8").splitlines() - ) +def find_compiler_command_line( + make_log: list[str], filename: Path +) -> Optional[list[str]]: found = 0 - for line in make_output: + for line in make_log: parts = line.split() if "-o" in parts and str(filename) in parts: compiler_command_line = parts found += 1 if found != 1: - print( - f"Could not determine compiler command line for {filename}", file=sys.stderr - ) - sys.exit(1) + return None - print(f'Command line: {" ".join(compiler_command_line)}', file=sys.stderr) return compiler_command_line -def generate_symbol_table(command_line): +def run_cfe( + command_line: list[str], keep_files: bool +) -> Tuple[list[SymbolTableEntry], list[UcodeOp]]: # Assume command line is of the form: # python3 tools/preprocess.py [COMPILER] [COMPILER_ARGS] [INPUT_FILE] input_file = Path(command_line[-1]) @@ -251,11 +495,14 @@ def generate_symbol_table(command_line): subprocess.run(rest + ["-Hf", input_file], check=True) # Read symbol table - return symbol_table_file.read_bytes() + symbol_table = parse_symbol_table(symbol_table_file.read_bytes()) + ucode = parse_ucode(ucode_file.read_bytes()) + return (symbol_table, ucode) finally: # Cleanup - symbol_table_file.unlink(missing_ok=True) - ucode_file.unlink(missing_ok=True) + if not keep_files: + symbol_table_file.unlink(missing_ok=True) + ucode_file.unlink(missing_ok=True) def main(): @@ -270,12 +517,33 @@ def main(): default="gc-eu-mq-dbg", help="OOT version (default: gc-eu-mq-dbg)", ) + parser.add_argument( + "--print-ucode", action="store_true", help="Print cfe ucode output" + ) + parser.add_argument( + "--keep-files", + action="store_true", + help="Keep temporary files (symbol table and ucode)", + ) args = parser.parse_args() - command_line = find_compiler_command_line(args.filename, args.oot_version) - data = generate_symbol_table(command_line) - print_symbol_table(data) + print(f"Running make to find compiler command line ...", file=sys.stderr) + make_log = generate_make_log(args.oot_version) + + command_line = find_compiler_command_line(make_log, args.filename) + if command_line is None: + print( + f"Error: could not determine compiler command line for {filename}", + file=sys.stderr, + ) + sys.exit(1) + print(f"Compiler command: {shlex.join(compiler_command_line)}", file=sys.stderr) + + symbol_table, ucode = run_cfe(command_line, args.keep_files) + print_symbol_table(symbol_table) + if args.print_ucode: + print_ucode(ucode) if __name__ == "__main__": diff --git a/tools/preprocess.py b/tools/preprocess.py index d84c3eef21..c39bf835c8 100755 --- a/tools/preprocess.py +++ b/tools/preprocess.py @@ -3,18 +3,19 @@ # SPDX-FileCopyrightText: © 2024 ZeldaRET # SPDX-License-Identifier: CC0-1.0 -# Usage: preprocess.py [compile command minus input file...] [single input file] +# Usage: preprocess.py [flags] -- [compile command minus input file...] [single input file] # Preprocess a C file to: # * Re-encode from UTF-8 to EUC-JP (the repo uses UTF-8 for text encoding, but # the strings in the ROM are encoded in EUC-JP) -# * Replace `#pragma increment_block_number N` with `N` fake structs for -# controlling BSS ordering +# * Replace `#pragma increment_block_number` with fake structs for controlling BSS ordering +import argparse from pathlib import Path -import os +import re import tempfile import subprocess import sys +import typing def fail(message): @@ -22,39 +23,82 @@ def fail(message): sys.exit(1) -def process_file(filename, input, output): +def process_file( + version: str, + filename: str, + input: typing.TextIO, + output: typing.TextIO, +): output.write(f'#line 1 "{filename}"\n') + # whether the current line follows a #pragma increment_block_number, + # including continuation lines (lines after a \-ending line) + in_pragma_incblocknum = False + # the line where the #pragma increment_block_number is + pragma_incblocknum_first_line_num = None + # all the lines from the #pragma increment_block_number line to the last + # continuation line, as a list[str] + pragma_incblocknum_lines = None for i, line in enumerate(input, start=1): - if line.startswith("#pragma increment_block_number"): - parts = line.split() - if len(parts) != 3: - fail( - f"{filename}:{i}: increment_block_number must be followed by an integer" - ) - try: - amount = int(parts[2]) - except ValueError: - fail( - f"{filename}:{i}: increment_block_number must be followed by an integer" - ) - # Write fake structs for BSS ordering - for j in range(amount): - output.write(f"struct DummyStruct_{i:05}_{j:03};\n") - output.write(f'#line {i + 1} "{filename}"\n') + if not in_pragma_incblocknum and line.startswith( + "#pragma increment_block_number" + ): + in_pragma_incblocknum = True + pragma_incblocknum_first_line_num = i + pragma_incblocknum_lines = [] + + if in_pragma_incblocknum: + if line.endswith("\\\n"): + pragma_incblocknum_lines.append(line) + else: + in_pragma_incblocknum = False + pragma_incblocknum_lines.append(line) + amount = 0 + for s in pragma_incblocknum_lines: + # Note if we had two versions like "abc-def-version" and "def-version" + # then this code would find either given "def-version", but + # thankfully we don't have such nested version names. + m = re.search(rf"{version}:(\d+)\b", s) + if m: + amount = int(m.group(1)) + break + + # Always generate at least one struct, + # so that fix_bss.py can know where the increment_block_number pragmas are + if amount == 0: + amount = 256 + + # Write fake structs for BSS ordering + # pragma_incblocknum_first_line_num is used for symbol uniqueness, and + # also by fix_bss.py to locate the pragma these symbols originate from. + for j in range(amount): + output.write( + "struct increment_block_number_" + f"{pragma_incblocknum_first_line_num:05}_{j:03};\n" + ) + output.write(f'#line {i + 1} "{filename}"\n') else: output.write(line) def main(): - filename = Path(sys.argv[-1]) + parser = argparse.ArgumentParser() + parser.add_argument("-v", "--oot-version", help="Which version should be processed") + parser.add_argument( + "args", + nargs="+", + ) + + args = parser.parse_args() + + filename = Path(args.args[-1]) with tempfile.TemporaryDirectory(prefix="oot_") as tmpdir: tmpfile = Path(tmpdir) / filename.name with open(filename, mode="r", encoding="utf-8") as input: with open(tmpfile, mode="w", encoding="euc-jp") as output: - process_file(filename, input, output) + process_file(args.oot_version, filename, input, output) - compile_command = sys.argv[1:-1] + ["-I", filename.parent, tmpfile] + compile_command = args.args[:-1] + ["-I", filename.parent, tmpfile] process = subprocess.run(compile_command) return process.returncode