diff --git a/.gitignore b/.gitignore
index bff09b91e..04639851e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,33 +7,18 @@ __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/
-build/*/cache/
-*.elf
-*.ram
-*.sav
-*.sra
-*.srm
*.z64
*.n64
*.v64
-*.map
-*.dump
*.wad
*.iso
-out.txt
-*.ram
*.bin
*.blend1
F3DEX3/*.code
@@ -41,33 +26,14 @@ F3DEX3/*.data
wadextract/
isoextract/
-# 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/
-!mod_assets/*
-
-# Docs
-!docs/tutorial/
+tools/Flips/**/CMakeLists.txt
# 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 f05c0808c..2566f13e3 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 da1627c46..bb5fa687b 100644
--- a/Makefile
+++ b/Makefile
@@ -5,24 +5,9 @@ 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'.
-# currently, GCC is the only supported compiler
-COMPILER := gcc
-
-# Target game version. Currently only the following version is supported:
-# gc-eu GameCube Europe/PAL
-# gc-eu-mq GameCube Europe/PAL Master Quest
-# gc-eu-mq-dbg GameCube Europe/PAL Master Quest Debug
-# hackeroot-mq HackerOoT, based on gc-eu-mq-dbg (default)
-#
-# The following versions are work-in-progress and not yet matching:
-# gc-us GameCube US
-#
-# Note: choosing hackeroot-mq will enable HackerOoT features,
-# if another version is chosen, this repo will be like
-# zeldaret/main decomp but without the disassembly, decompilation
-# and matching tools, including the IDO compiler
-VERSION := hackeroot-mq
+-include .make_options.mk
# Enable optimization flags to use GDB on Ares
ARES_GDB := 1
@@ -35,10 +20,34 @@ RELEASE := 0
COMPRESSION ?= yaz
COMPRESSION_TYPE ?= $(shell echo $(COMPRESSION) | tr '[:lower:]' '[:upper:]')
+# If COMPILER is "gcc", compile with GCC instead of IDO.
+COMPILER ?= gcc
+# Target game version. Currently the following versions are supported:
+# gc-us 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
+# hackeroot-mq HackerOoT, based on gc-eu-mq-dbg (default)
+#
+# The following versions are work-in-progress and not yet matching:
+# (none currently)
+#
+# Note: choosing hackeroot-mq will enable HackerOoT features,
+# if another version is chosen, this repo will be like
+# zeldaret/main decomp but without the disassembly, decompilation
+# and matching tools, including the IDO compiler
+VERSION ?= hackeroot-mq
# 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 ?=
@@ -55,69 +64,48 @@ CFLAGS := -DCONSOLE_GC -fno-reorder-blocks -fno-optimize-sibling-calls
CPPFLAGS := -DCONSOLE_GC
endif
-ifeq ($(COMPILER),gcc)
- CPP_DEFINES += -DCOMPILER_GCC -DNON_MATCHING -DAVOID_UB -std=gnu11
-else
- $(error Unsupported compiler. Please use gcc as the COMPILER variable.)
-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
-
-# Returns the path to the command $(1) if exists. Otherwise returns an empty string.
-find-command = $(shell which $(1) 2>/dev/null)
-
-ifneq ($(call find-command,mips-n64-ld),)
- MIPS_BINUTILS_PREFIX := mips-n64-
-else ifneq ($(call find-command,mips64-ld),)
- MIPS_BINUTILS_PREFIX := mips64-
-else ifneq ($(call find-command,mips-linux-gnu-ld),)
- MIPS_BINUTILS_PREFIX := mips-linux-gnu-
-else ifneq ($(call find-command,mips64-linux-gnu-ld),)
- MIPS_BINUTILS_PREFIX := mips64-linux-gnu-
-else ifneq ($(call find-command,mips-ld),)
- MIPS_BINUTILS_PREFIX := mips-
-else ifneq ($(call find-command,mips64-elf-ld),)
- MIPS_BINUTILS_PREFIX := mips64-elf-
-else
- $(error Unable to detect a suitable MIPS toolchain installed)
-endif
-
# Version-specific settings
ifeq ($(VERSION),gc-us)
- REGION := US
+ REGION ?= US
PAL := 0
MQ := 0
DEBUG := 0
- HACKEROOT := 0
else ifeq ($(VERSION),gc-eu)
- REGION := EU
+ REGION ?= EU
PAL := 1
MQ := 0
DEBUG := 0
- HACKEROOT := 0
else ifeq ($(VERSION),gc-eu-mq)
- REGION := EU
+ REGION ?= EU
PAL := 1
MQ := 1
DEBUG := 0
- HACKEROOT := 0
else ifeq ($(VERSION),gc-eu-mq-dbg)
- REGION := EU
+ REGION ?= EU
PAL := 1
MQ := 1
DEBUG := 1
- HACKEROOT := 0
else ifeq ($(VERSION),hackeroot-mq)
REGION := NULL
PAL := 1
MQ := 1
DEBUG := 1
- HACKEROOT := 1
else
$(error Unsupported version $(VERSION))
endif
+ifeq ($(VERSION),hackeroot-mq)
+ HACKEROOT := 1
+else
+ HACKEROOT := 0
+endif
+
+ifeq ($(COMPILER),gcc)
+ CPP_DEFINES += -DCOMPILER_GCC -DNON_MATCHING -DAVOID_UB -std=gnu11
+else
+ $(error Unsupported compiler. Please use gcc as the COMPILER variable.)
+endif
+
PROJECT_DIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
BUILD_DIR := build/$(VERSION)
EXPECTED_DIR := expected/$(BUILD_DIR)
@@ -246,8 +234,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
@@ -271,6 +257,9 @@ CC_IDO := tools/ido_recomp/linux/5.3/cc
# 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
+
CFLAGS += $(CPP_DEFINES)
CPPFLAGS += $(CPP_DEFINES)
CFLAGS_IDO += $(CPP_DEFINES)
@@ -485,6 +474,10 @@ venv:
$(V)$(PYTHON) -m pip install -U -r requirements.txt
$(call print,Success!)
+# TODO this is a temporary rule for testing audio, to be removed
+setup-audio:
+ $(AUDIO_EXTRACT) -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml
+
setup: venv
$(call print,Setup in progress...)
$(V)$(MAKE) -C tools
@@ -495,11 +488,8 @@ setup: venv
$(V)$(PYTHON) tools/extract_incbins.py $(EXTRACTED_DIR)/baserom --oot-version $(VERSION) -o $(EXTRACTED_DIR)/incbin
$(V)$(PYTHON) tools/msgdis.py $(VERSION)
$(V)$(PYTHON) extract_assets.py -v $(VERSION) -j$(N_THREADS)
+ $(V)$(AUDIO_EXTRACT) -o $(EXTRACTED_DIR) -v $(VERSION) --read-xml
$(call print,Extracting files: Done!)
-ifeq ($(VERSION),hackeroot-mq)
-# TODO: proper fix (for .s files)
- cp baseroms/hackeroot-mq/baserom-decompressed.z64 baseroms/gc-eu-mq-dbg/baserom-decompressed.z64
-endif
run: rom
ifeq ($(N64_EMULATOR),)
diff --git a/assets/xml/audio/samplebanks/SampleBank_0.xml b/assets/xml/audio/samplebanks/SampleBank_0.xml
new file mode 100644
index 000000000..336d17028
--- /dev/null
+++ b/assets/xml/audio/samplebanks/SampleBank_0.xml
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/audio/samplebanks/SampleBank_2.xml b/assets/xml/audio/samplebanks/SampleBank_2.xml
new file mode 100644
index 000000000..21e76424e
--- /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 000000000..e6738f8b3
--- /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 000000000..8d68e285f
--- /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 000000000..6eb735693
--- /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 000000000..e6971659b
--- /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 000000000..02f75704f
--- /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 000000000..6376f6d11
--- /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 000000000..578101fd4
--- /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 000000000..72b4f77fd
--- /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 000000000..4800feced
--- /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 000000000..b399905de
--- /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 000000000..2345061c9
--- /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 000000000..bf32ecd43
--- /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 000000000..c1c6d1d2b
--- /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 000000000..a16e9752f
--- /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 000000000..76807539a
--- /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 000000000..9f2ba9286
--- /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 000000000..a297ce850
--- /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 000000000..5ce632d47
--- /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 000000000..a1bc07be8
--- /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 000000000..fe0099beb
--- /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 000000000..582c638a2
--- /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 000000000..aee3907f9
--- /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 000000000..5ad7d22f2
--- /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 000000000..ec20f4f56
--- /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 000000000..1bc1c9d88
--- /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 000000000..c0292b0d7
--- /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 000000000..39e03a9a2
--- /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 000000000..bb510aaef
--- /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 000000000..e9a1d093e
--- /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 000000000..d246fff00
--- /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 000000000..7508ee8b5
--- /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 000000000..93116ad1c
--- /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 000000000..20437b048
--- /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 000000000..fa9209a72
--- /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 000000000..fe49eda57
--- /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 000000000..67fa255b2
--- /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 000000000..4e023974e
--- /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 000000000..465b554ee
--- /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 000000000..f4c239da8
--- /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 000000000..aa61f7d25
--- /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 000000000..06cc14a1c
--- /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 000000000..97384ba3c
--- /dev/null
+++ b/assets/xml/audio/soundfonts/Soundfont_9.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml
index aa9dcbb84..a97188b44 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 000000000..9721f7e0d
--- /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 95e1ea055..f2fe854b8 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/baseroms/gc-eu-mq-dbg/config.yml b/baseroms/gc-eu-mq-dbg/config.yml
index c5e301afa..9d6db2827 100644
--- a/baseroms/gc-eu-mq-dbg/config.yml
+++ b/baseroms/gc-eu-mq-dbg/config.yml
@@ -72,6 +72,10 @@ variables:
sFraMessageEntryTable: 0x80151658
sStaffMessageEntryTable: 0x80153768
sShadowTex: 0x80A8E610
+ gSoundFontTable: 0x801550D0
+ gSequenceFontTable: 0x80155340
+ gSequenceTable: 0x80155500
+ gSampleBankTable: 0x80155BF0
assets:
- name: code/fbdemo_circle
xml_path: assets/xml/code/fbdemo_circle.xml
@@ -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
diff --git a/baseroms/gc-eu-mq/config.yml b/baseroms/gc-eu-mq/config.yml
index 34c5cbe9c..e803b25ea 100644
--- a/baseroms/gc-eu-mq/config.yml
+++ b/baseroms/gc-eu-mq/config.yml
@@ -64,6 +64,10 @@ variables:
sFraMessageEntryTable: 0x8010DB28
sStaffMessageEntryTable: 0x8010FC38
sShadowTex: 0x80A72FA0
+ gSoundFontTable: 0x80110470
+ gSequenceFontTable: 0x801106E0
+ gSequenceTable: 0x801108A0
+ gSampleBankTable: 0x80110F90
assets:
- name: code/fbdemo_circle
xml_path: assets/xml/code/fbdemo_circle.xml
@@ -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
diff --git a/baseroms/gc-eu/config.yml b/baseroms/gc-eu/config.yml
index 90712dc3f..690c8b8ce 100644
--- a/baseroms/gc-eu/config.yml
+++ b/baseroms/gc-eu/config.yml
@@ -64,6 +64,10 @@ variables:
sFraMessageEntryTable: 0x8010DB48
sStaffMessageEntryTable: 0x8010FC58
sShadowTex: 0x80A73020
+ gSoundFontTable: 0x80110490
+ gSequenceFontTable: 0x80110700
+ gSequenceTable: 0x801108C0
+ gSampleBankTable: 0x80110FB0
assets:
- name: code/fbdemo_circle
xml_path: assets/xml/code/fbdemo_circle.xml
@@ -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
diff --git a/baseroms/gc-us/config.yml b/baseroms/gc-us/config.yml
index 54498f9a2..eb3aca9bf 100644
--- a/baseroms/gc-us/config.yml
+++ b/baseroms/gc-us/config.yml
@@ -63,6 +63,10 @@ variables:
sNesMessageEntryTable: 0x8010DFCC
sStaffMessageEntryTable: 0x801121EC
sShadowTex: 0x80A74130
+ gSoundFontTable: 0x80112C80
+ gSequenceFontTable: 0x80112EF0
+ gSequenceTable: 0x801130B0
+ gSampleBankTable: 0x801137A0
assets:
- name: code/fbdemo_circle
xml_path: assets/xml/code/fbdemo_circle.xml
@@ -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
diff --git a/baseroms/hackeroot-mq/config.yml b/baseroms/hackeroot-mq/config.yml
index c5e301afa..9d6db2827 100644
--- a/baseroms/hackeroot-mq/config.yml
+++ b/baseroms/hackeroot-mq/config.yml
@@ -72,6 +72,10 @@ variables:
sFraMessageEntryTable: 0x80151658
sStaffMessageEntryTable: 0x80153768
sShadowTex: 0x80A8E610
+ gSoundFontTable: 0x801550D0
+ gSequenceFontTable: 0x80155340
+ gSequenceTable: 0x80155500
+ gSampleBankTable: 0x80155BF0
assets:
- name: code/fbdemo_circle
xml_path: assets/xml/code/fbdemo_circle.xml
@@ -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
diff --git a/docs/decompiling_tutorial.md b/docs/decompiling_tutorial.md
new file mode 100644
index 000000000..a77fb1bb8
--- /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/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md
deleted file mode 100644
index 149753d43..000000000
--- 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:
-
-
-
-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:
-
-
-
-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
-
-
-
-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*.
-
-
-
-**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.
-
-
-
-Now, open the file containing the assembly for `EnJj_Init`.
-
-
-
-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.
-
-
-
-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.
-
-
-
-
-
-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.
-
-
-
-
-
-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:
-
-
-(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 c3279a437..000000000
--- 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 bc3bf0765..000000000
--- 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:
-
-
-
-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,
-
-
-
-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 6724b4281..000000000
--- 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 74c580904..000000000
--- 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/...`.
-
-
-
-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 7e3088b0f..000000000
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 4dd8c8744..000000000
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 8ad9686aa..000000000
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 3ab88dff2..000000000
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 f43182024..000000000
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 e43a96ce7..000000000
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 53649250e..000000000
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 4c2c6c234..000000000
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 8f1ae4183..000000000
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 a44354fc6..000000000
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 204eb8b4a..000000000
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 d73d46fc5..000000000
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 ebd47fde9..000000000
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 8f92523e4..000000000
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 cc128d754..000000000
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 38d3a5b89..000000000
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 cd427a9dc..000000000
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 5f04b6b6e..000000000
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 97d8a0fea..000000000
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 b9a658d53..000000000
--- 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 fb51b8d58..000000000
--- 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 325239313..000000000
--- 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 f7317bbdd..000000000
--- 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 9c1916ee6..000000000
--- 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:
-
-
-
-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.
-
-
-
-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);
- }
- }
-}
-```
-
-
-
-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:
-
-
-
-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_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 4ad66b76f..000000000
--- 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 30c691a0c..000000000
--- 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/extract_assets.py b/extract_assets.py
index 815b1af49..a3f915c24 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/include/macros.h b/include/macros.h
index 026cfdfb6..24e142233 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -250,9 +250,9 @@ extern struct GraphicsContext* __gfxCtx;
#endif /* IS_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 19aa94061..2c59032e6 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -103,6 +103,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)
@@ -190,6 +198,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/z64.h b/include/z64.h
index 8a4eb30d6..af08ca7f3 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -234,7 +234,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];
@@ -253,7 +255,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 d65178686..7241e93de 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 e90ff85af..4e34ec0f7 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/src/boot/idle.c b/src/boot/idle.c
index 10af3d3a0..dff9833d9 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-us:64"
OSThread sMainThread;
STACK(sMainStack, 0x900);
diff --git a/src/code/fault.c b/src/code/fault.c
index c0c669241..33a42fb0f 100644
--- a/src/code/fault.c
+++ b/src/code/fault.c
@@ -44,14 +44,7 @@
#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-us:64"
void FaultDrawer_Init(void);
void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled);
diff --git a/src/code/main.c b/src/code/main.c
index 61756b842..2598f37d6 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-us:0"
PreNmiBuff* gAppNmiBufferPtr;
Scheduler gScheduler;
diff --git a/src/code/sys_math3d.c b/src/code/sys_math3d.c
index 8778594ef..278585332 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-us: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 89246e6e1..f5e3ccdde 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -7,8 +7,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-us:0"
static CollisionPoly* sCurCeilingPoly;
static s32 sCurCeilingBgId;
@@ -1906,7 +1905,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-us:22"
// Local data used for Farore's Wind light (stored in BSS)
LightInfo D_8015BC00;
@@ -2836,7 +2835,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;
@@ -2864,7 +2863,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"
@@ -2907,30 +2906,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;
}
@@ -2944,32 +2943,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 c697ddb4c..332d907d3 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 30ff751bb..78d31dc99 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-us:0"
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
@@ -3626,7 +3624,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-us: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 46a9a3ba5..d8cb8a02e 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-us:64"
#if IS_DEBUG
/**
@@ -2703,7 +2701,7 @@ typedef enum {
/* 2 */ MASSTYPE_NORMAL
} ColChkMassType;
-#pragma increment_block_number 253
+#pragma increment_block_number "gc-eu:252 gc-eu-mq:252 gc-us: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 159ed4c18..720918c3d 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -1,9 +1,6 @@
#include "global.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-us:128"
ALIGNED(16) SaveContext gSaveContext;
u32 D_8015FA88;
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index 8dcf5f759..da38f85ad 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -260,6 +260,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;
@@ -272,6 +288,8 @@ void Regs_InitDataImpl(void) {
YREG(57) = -42;
YREG(58) = -33;
YREG(59) = -37;
+#endif
+
YREG(60) = 14;
YREG(61) = -2;
YREG(62) = -2;
@@ -546,24 +564,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_demo.c b/src/code/z_demo.c
index 6f0db6211..3452c7375 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -121,9 +121,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-us:0"
// Cam ID to return to when a scripted cutscene is finished
s16 sReturnToCamId;
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index 32570ce43..aa4b2b725 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 3fb498b33..cb24257c8 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 21c5ebd75..57799c22e 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 c01a538d2..aacded15f 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_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index bd15f5742..ddad64339 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-us:128"
void (*sKaleidoScopeUpdateFunc)(PlayState* play);
void (*sKaleidoScopeDrawFunc)(PlayState* play);
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 91128f274..a6d9b54ed 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-us: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-us:128"
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index 1eb12319c..38812cb0f 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 c3ab55a13..fe83bdb3a 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -209,7 +209,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_sram.c b/src/code/z_sram.c
index bf202e0e4..c7a250c2d 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 IS_DEBUG
if (CHECK_BTN_ANY(gameState->input[2].cur.button, BTN_DRIGHT)) {
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 9552c4546..b1ec6987a 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 afc9cc19c..2dde5c416 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 ff8e88896..da5e1bc00 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 fb96f1124..87546c713 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 bd1270ab2..0786f214d 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 d4a4a6fc0..dfe3819e3 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 44950a46c..729dd8155 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 ff7ebd99c..17622037f 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 3fdafb144..1278f8c56 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 ef92c82ee..b7ca1a731 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 cf0746a99..469aaa75a 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 f5396acc2..1909b801e 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 d1ccf08fc..ac5460a29 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 09e444365..36e4f04c9 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 7cf14989c..88eae8d91 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 af2704272..27b71b28d 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 e8bcca20b..090076a43 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 287cd60ea..fc0bc51bf 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 809158c8a..8773496bb 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 2f347fada..7ac595bc1 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 a6766c62a..e7e243e9e 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 05cf7cde5..0007e5434 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 43e2d8c90..e283244e5 100644
--- a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
+++ b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
@@ -20,7 +20,7 @@ void func_8087B938(BgHaka* this, PlayState* play);
void func_8087BAAC(BgHaka* this, PlayState* play);
void func_8087BAE4(BgHaka* this, PlayState* play);
-ActorInit Bg_Haka_InitVars = {
+ActorProfile Bg_Haka_Profile = {
/**/ ACTOR_BG_HAKA,
/**/ ACTORCAT_BG,
/**/ FLAGS,
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 ed45e2cfc..759c3ce0f 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,
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 b1d38adc9..4b2abe663 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 39082dcb6..3d6de9f41 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 6c8e3bf11..275317dc0 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 c96055ac4..9a83cbfca 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 19e7e18a7..d462920c6 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 c65a1a2f0..49f4898de 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,
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 c499e3191..bd3c65642 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,
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 e40af6493..588fddb5e 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 781dd579b..dd4b28148 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 85549a63d..683bf85b7 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 3ac82ceb5..995163b59 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 16e1d8042..7e7732883 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 fcf260aee..3d94d13f6 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,
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 846903cfb..202eea424 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 170f0677b..512d9337c 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,
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 2e6bf978f..4e1a41e03 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 d2f5a4f8c..99440ae97 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 df811c7c4..48b36b85c 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 d9ce7e6ab..e8fb098b3 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 ef6bb4386..307f6f260 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 330303696..3ab49c003 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 5cfaa8ce9..ffa633daf 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 860557a76..b61d64e08 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 e69cca84a..0714a51c6 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 56b3d62ad..fc8bc3192 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 644efc385..859d2e785 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 0d8f5a34d..1e99bbaf1 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 30a2c281c..59eeb3190 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 81e75edbd..47a008c9f 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 d6efc13ea..9049793b6 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 e021ed63a..cabba40e9 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 bb7284b9a..c3237875b 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,
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 e4155e4f8..c6923c662 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 b4c2d6158..1fa70be0d 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 9f64b58fe..3eb1fe8b2 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 2de2264bd..7071573b3 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 7ab065bd3..5a4898763 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 93e972e2e..670bbef00 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 7526ae9a1..7dc8d93af 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 e46feba38..5f322095b 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 5462ee6dc..4d5a3367e 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 f4bd5ebcf..b51804cb1 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 1da563d86..ae4a34cba 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 a39b2e8ae..da6e9c60c 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 b7fa437b8..7b3e0b5b4 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 0d3c4635e..0bd95411b 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 2eaf22b9e..558931bc9 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,
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 9e78921ae..92c9389ce 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,
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 a547fde73..8af0447f2 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 8d9ebd855..1810d0bd2 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 b9495198a..a60a1c960 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 4463a4f79..a615c5598 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 dab97a76a..79d8b6170 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 fb3ddac69..cbd6ff421 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 69eed856f..3aad48be4 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 9d3dcbae8..fb93b598f 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 b6c0d9c9b..7e94e0cbe 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 0af410e5f..d16ebaa95 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 41a12366b..fc3fcd636 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 3c2474c41..c444c56c7 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 f5fb613ba..9111d5e0e 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 5c379a538..6def1043f 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 ef5e59d66..78104fa50 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 680f6e12e..038890ee8 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 a16c96b91..2ad49f6e7 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 1fafea47c..95d9f361b 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 f2306ac6b..d01ec3a34 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 a8e6ce655..3542b7714 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 4b1ec00ad..994a2d2bb 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 0acc4f207..8623e2dd7 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 63697a0a8..921cc601e 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 1f1f9da16..18dd4eae4 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 78d1e3d37..cbeb926fa 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,
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 681a512d8..4eed72210 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 acba75f76..4d28d392c 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 c88235dbf..a40daf01f 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 3015e9015..4174abb0b 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 ab98d0d20..c77f0f81e 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 6df0a2657..8c25f125e 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 68f723fce..b8ce8ddae 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 ff7c8e28b..e5d37c33a 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 cd5f89b84..2835a85a4 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 a242940b8..070912c62 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 77a31675d..6eae6de17 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 3432321a9..e414a3e51 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 46fbcc207..4838ff381 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 8f60a3398..4dceef1ed 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,
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 fe22885a6..7c59bfe39 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,
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 b8c93658c..75900983a 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,
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 92d1f9671..8f9d890b6 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 158856409..c321d5c55 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 4c284b9b1..6c65828e8 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 c4ce8ce19..eabb54154 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 c9c30b37a..b0bdaa854 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 eafa885cb..a421d428d 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 3f8968a84..2a689189c 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 cdbbba7ef..e6a4f1cae 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 4df2aa218..822a9ddd5 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 638134365..fa566bb37 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 0b32afe5e..885abc5da 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 9d141c297..142960fea 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 1a5d2e366..6c3594de1 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,
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 18f026c33..06ff7dbff 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 a502fb6f2..dbdc0a370 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 cfd845a84..d488aafd5 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 7a0895bdc..86e22e909 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 5a040f3aa..70e876d91 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-us: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-us: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-us:192"
static BossGanon* sGanondorf;
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 ced201f7b..8d812e072 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,
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 dae6502be..5424ee703 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,
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 bdbf0fcf0..3e217b295 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 94021d0ee..7e9555ac5 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,
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 dd2136039..2e83d357f 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,
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 2f9c32a68..be2c9c21a 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,
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 dc1d521c5..501cb5d7b 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,
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 c2b949c27..fcd116ffe 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 83955865d..f5f8b9c19 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 c3d0e6327..27cac8856 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 e5db2e88a..e6ec54a62 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 b80f41997..384398cba 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 e3f0565eb..4afe3c845 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 b19eed0f2..3631ef523 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 432b8ce63..2a6ac15c5 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 9fb56c1d6..6f14a691d 100644
--- a/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c
+++ b/src/overlays/actors/ovl_Demo_Gt/z_demo_gt.c
@@ -1783,7 +1783,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 fcb7817e6..05ef28a1b 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 00db512d3..33dcc4423 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 f2f194175..2c5e6ccef 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,
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 9568574a4..a51816bee 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 5107668b8..fce99421f 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 19272d504..980bdd800 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,
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 cd6966eb0..8966ec40b 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 5487a20b4..948b1b8a2 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 160a15959..2b2a16bb7 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,
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 26630ef77..ebacac702 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,
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 4926bdc7b..11baa1f38 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,
@@ -979,14 +979,14 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) {
//! @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 726f0f5d1..e2e6ada56 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 dbddf1799..f6aa53916 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 cd2dbef96..33e718a05 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 289fee6a8..de97ec844 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 bb00233e9..7c620cbc3 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 e449fd3cf..dfc948e79 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 bed0a0be6..8dfe3fbb2 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 1e9dbb933..aca464624 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 a370e6b36..501c25182 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 19851e173..480dc1580 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 b76b38f06..00e84f097 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 84bed0a06..60b212100 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 75aa432f7..573b15d83 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 a045dd41b..3025df7f5 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 133cffe45..0f927d635 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 2c05b0997..a8131ea37 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 ad807fc42..4c44709b8 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 54248862c..9cb4514e4 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,
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 b7b4d5d76..312d6172c 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 77db59284..3229f5af8 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 59a2e76bf..d2c008fec 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 2a9d34de6..c30f7304f 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,
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 3907b579f..0373fac49 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 a1fa88b63..3e8ff3945 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 a0b95d220..7abad332b 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 36860ca1c..093aefd71 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,
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 e5697f91c..d64acac79 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,
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 c8077659e..573762c08 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,
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 58bd6d52e..32a7a3b36 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 902520173..faaaaa293 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,
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 e91e59d47..e7a39c17c 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 538055540..a93135cd4 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,
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 c0c9fb703..4ce0d62c9 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 5a7ec629c..c23b1d97c 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 a47186b62..e1450c0c8 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 a9e667089..d47ec80ab 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 fc6f9474e..5cdcd6bd7 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 d99e29120..89b3e859d 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 c99af3995..bd1856284 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,
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 f5e31493c..4475138a2 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,
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 265e58cc0..3060562f3 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,
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 6e14eba6c..583c09705 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 ccf7f4af2..8b973ff59 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 17ec0b85e..7a7eca1bc 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 d0ba25207..da5e7dbf2 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 315f6d50c..07b87aabf 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 87e667374..40344a355 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 eb354cf91..b898dfaa9 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 ff9f9cc71..eb215b32c 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 f5f594088..0a882fe0c 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 6ae9701d5..8f30f194a 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 be4c04dd9..6735211ce 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 7a087c0b9..a445b1b0a 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,
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 3d8e0e57c..5cfabd683 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 65f4b90bf..4181108b7 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 0f9fb333e..591eb82c7 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 252eb3c00..20751b94b 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 ebfa1c6e1..5c0921755 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 70f9ccd12..b7f08797f 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 8e1029ba2..69684b5f1 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 cab41eec9..4ad684fa8 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 060f97435..bf6028d8e 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 e01eb9985..e0d23acbf 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 ad2698b3d..79bb57284 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 d15f8c58a..83da31b51 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,
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 8d0a8f2a6..55fc46789 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 cc5a1ff01..495141d4f 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 760140aed..344943544 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 e008be1d2..757eddd05 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 41dd2cfdc..6da11b6f5 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 0046c8224..b2533130e 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 9f1008485..40457c98d 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 dcd3abc64..d4cc9eb6a 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 3e4b6ec49..aef519677 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,
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 dfb9f989e..5902fb652 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 2ccb862d6..b76e89ece 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 a4c93dea9..8d81044e8 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 bbad43c83..7007112d3 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 405cfc066..de56141d4 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 40b2b9df5..3b5b8bea7 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 df33dc59e..184e2a836 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 8ef486c42..575623fdd 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,
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 1b1d4f541..e0c2fe44d 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 46f0a2ec0..3e80b4e03 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 abed41329..790dbed6d 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 c7e1f0e96..f3cd49099 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 1734511c5..50dbe53d5 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 a60d6e4e1..d7fdaf58c 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 64e7dbfef..58f26f0f2 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 a122de078..df604c728 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 dcf9aca99..0151dc787 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 fb4fbd167..62b1931ef 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 762fa5d6c..f8fad950d 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 c38744ea2..072d5d71a 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 c02946ac2..5298317f0 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 08468d132..8a9400eeb 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 403f92d92..f08031533 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,
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 8e3a20b26..d9a689a88 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 43937fd02..37df3828a 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 53c09dc47..155227b1f 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 0b324c308..49c366142 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 698a02630..ff33ecbe3 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 443dcf15c..2ba604eba 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 e3da728e8..09ffab69b 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 09b1da8dd..ba6f7e55b 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 d84e35c4e..c10f85b66 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 37e0666f3..a36946bec 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,
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 a03d2cfd0..934ae0ad3 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 da82e0725..7357a5d1a 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 5e63760b2..20e87a210 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 9140aef7b..4cb346977 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 52fc52378..d263bfcde 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 39c0a913d..8445812f7 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 9162737dc..eaf47d8f9 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 667ebf740..aec212f0f 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 f6fcd43c6..607ccb17a 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 0d7cd9d83..f586a408f 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 a3dd8a23a..4e09b0697 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 669596dd8..478e5d666 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 d86ae429a..0ca298c45 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 53fb55984..297427230 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 6436d55c0..79eaecdde 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 c5924df2b..7bfa8183d 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 ce431636a..6aaab9955 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 3eeba7521..f235d0fcd 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 f89e7dc76..d7bb502f9 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 5de655778..74bc53af1 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 2bc483153..7fce32533 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 26795a516..0206c09dd 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 d840a4b53..6b727f28f 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 2bbc18563..3feb7cc33 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 df0c4ff33..00a350ddf 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,
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 92f3aac85..60c2cff72 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 7d33ed89e..f15acab17 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 5b8e26d91..b98cda4e4 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 2375b5e6c..6813a3fcb 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,
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 74636b9e2..43df398a8 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 9feb9d43b..18a8c723e 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 d6a8f2af0..eeaf652b1 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 7d219eae6..7a840652b 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 e24f78be8..e2c44b79d 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 33c98d4f8..d318e9f05 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 72c581218..3b6c8e50e 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 1d05b78c3..151b4e746 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 b6942de60..0a38ca95c 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 38e717dd6..5d6eb3338 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 641f47d0f..cfd4f7377 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 9c15c270a..5d985ad0f 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 ae781817e..e17ead0ef 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 3b4bbb26f..21dc7500d 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 aa931effe..e1528f22a 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 b67d863e3..df9101484 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 63219d2f0..8ff94c65b 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 8fa9e1a49..b0120cf4a 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 3f814e796..6adf35d68 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 f67ce8d4e..56d53d4dd 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,
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 4106c8f0c..da5bfd4b6 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,
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 1315e00b9..17fc773e9 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 10af76099..a95fb1fe3 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 b141965c3..90eba0cde 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 cae3ead4e..2280d6ee1 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,
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 b89ed2e9c..76bd1f347 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 19b867eb8..09517dd34 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,
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 ba8cf7dc0..b30b967ef 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 850ea93d5..db33d2cbd 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,
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 46ff8a3e5..62371dc60 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 98e705ce7..978798b8a 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 d60aa4e40..d6296987e 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 df531b2b7..ef608988e 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 0bc1a1187..26d322f9b 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 7a3b1c81f..6e90040a5 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 b351d6888..679a00f8a 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 33c7ce2f2..050e3333e 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 0d28bea18..08cb1a998 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,
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 c484ee206..1853e7b75 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 46b7798b8..46cee5e1e 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 df3f584f9..b27a05a48 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 e7b9d3ee0..1cf4f71ad 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 b7983ad59..1011149b3 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 66416baba..ac1ead5ac 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 cc6cf457d..afd36981f 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 6ffffd208..91d65ef9b 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 7bc74fe59..f5c317737 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 4afe18684..131eb25e1 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 9da826cd6..2e85c4d53 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 b9575cf6e..63e0005eb 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 b0c4c9249..f243fc13f 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 d0fe9cc39..ebb70feaa 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 96a2a2e87..6434aa2c1 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 403ea500f..b95ebe951 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 f9ab17127..0c2dc38f4 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 5d6ae8c75..840f45a68 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 95623b0de..e60e16c0d 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 8c3c1c90a..93d2643bc 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 38e5f46d5..74c25006c 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 cf99f6eca..d71f1d617 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 fa9a5fca8..8908dad6c 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 6c21a07c2..44ab7726d 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 9d40aa022..45da6ae14 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 b48c0e3e2..a8f7574e6 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 c411371c2..065013bb5 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 695b88014..e4b89045d 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 1c459b1e5..ef8df0119 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 25f13383c..4ea733cc2 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 d34602624..39708d3be 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 645b077de..e6083208e 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,
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 01a300070..63583134d 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 ecf2ffb55..d7e1a835d 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 a0088fc69..00351e785 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 293b7f6ab..82289f2e5 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-us: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 56fdd5b04..4ccc77e8c 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 b70a8cf18..bc0a21e9d 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 6845d3983..c61f2f1aa 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 17ca71474..aa1a506de 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-us: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-us: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 7f05638f0..6e2956990 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 c133bde62..fc1541d8c 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 05ef602b3..a10d0321d 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 1780cc1c9..f63480381 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 18fa97b71..b4af09077 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 fc6eaab90..e53771d8b 100644
--- a/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
+++ b/src/overlays/actors/ovl_En_Zl3/z_en_zl3.c
@@ -2802,7 +2802,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 fb6cbd9ec..f133f51c2 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 8b6b59123..c54842fec 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 de1bc675f..6cfd3dd92 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 9c71f7e81..349f13c36 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 34cacc0f3..8b4ef3491 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 206
+#pragma increment_block_number "gc-eu:206 gc-eu-mq:206 gc-us:208"
#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,
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 f6d21ef41..52545ba6a 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 a1d99a01a..3efe62cc2 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 3935fa1ea..b93b680a2 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 c7394227e..00d7eab43 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 cf51ce3d2..7622dd41e 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 2d3053bfc..d1605484c 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 e861cc84e..34accd755 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 38458db6b..f8a9e829e 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 8c200e3da..6828028ab 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 b99e05c11..63e37bc48 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 c908d7c3f..615793c90 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 dc7cd70d9..d2e2aa5eb 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 1c071363c..37ed2432f 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 3d24be095..e698b55d3 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 6cea4d407..5c5a6feeb 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 3eb9e3347..245325d25 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 6dea87f6b..303373ea7 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 d1367a4b4..56fc41521 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 736ba66f7..5aa41d15e 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 63b9fb117..c6c503a80 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 bfcc4bbf2..231b504b0 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 0112cc09c..e107c7808 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 bb3bb5633..0ed3b5550 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 2e4abf070..aebbdc3d2 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 98f5d45fb..234c012c3 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 0ecf75fcd..182a202d9 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 21c3ca6eb..9cb8cac7d 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 a53531460..ad4801d1f 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 d6916c415..6f482b03d 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 1f52d5c88..3b33a5ac9 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 7fe417d62..b863c4726 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 7ea6b73d3..70f473ec7 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,
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 a081e363c..13a99f779 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,
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 7c05c22fa..d19818c24 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 73919d7d3..979287b6b 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,
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 83bdcea4f..5cbb0fbb2 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,
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 4220f879e..671325b5b 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 0df7ced42..8babfbf40 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 b4a696fec..600a41414 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,
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 1f659aa1d..6b1419f36 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 f9fdd00cb..cded21fce 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 954992a60..2d05d06bf 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 a6afa9baa..c1082be5b 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 ac11ce05c..82deb26ae 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -357,22 +357,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-us: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-us: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-us:192"
// .data
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 dc5eae3c5..de5b09452 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 007e20c56..dcd74cbf1 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 217e2cf8d..9dda41d15 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,
};
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 1602ee67b..3b1a80dc4 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 b1b7c713a..b1e1190ef 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 132871aae..ef93269a9 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 dff7cea06..ac0df1b43 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 002cda253..780a729c6 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 dae17d0ff..b1c92ec97 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 49f3e66a0..6c14b5d97 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 155b3e802..56d2d27d4 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 302941ca4..0845e34af 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 16ea95d8d..a1c117bc3 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 afce7ba01..04758c7ce 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 c3e7088f1..296c2f73b 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 c427ddca6..c637e1a9b 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 a08d8af13..1fab3c757 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 d82c9cb41..351fadab7 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 4e9dc378a..f93bb0e7d 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 220c76d9d..6190570e0 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 c629cecba..48a2eec4f 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 ca7fda527..4a5bab6c7 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,
};
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 fe65984f5..4e7c26308 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 2085eff57..dac031106 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 34d85deee..86813b794 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 3a1387276..6c0546258 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 3e8c54d8a..b8cd83197 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 5a613a2f8..00371cf3c 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 7a2684f48..96174a463 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 09f9e7917..5973ca9e1 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 3fdef111d..a204eb72f 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 5ee3a70cb..f22efbbfe 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 f5b5135da..8c237d98f 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 1667ac898..ed1d5edcc 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 5a5362bb4..b3dc6e8a4 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 b80f25a43..2d1c8e459 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 b4d0db5b2..15f78f143 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 d0a3aef92..b3ac86681 100644
--- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
+++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c
@@ -193,7 +193,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;
@@ -228,7 +237,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;
@@ -802,6 +811,11 @@ static s16 sQuestItemRed[] = { 255, 255, 255, 0, 255, 0, 255, 200, 200 };
static s16 sQuestItemGreen[] = { 255, 255, 255, 255, 60, 100, 130, 50, 200 };
static s16 sQuestItemBlue[] = { 255, 255, 255, 0, 0, 255, 0, 255, 0 };
static s16 sQuestItemFlags[] = { 0x0012, 0x0013, 0x0014, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005 };
+
+#if OOT_NTSC
+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 } };
@@ -1733,9 +1747,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;
@@ -1892,6 +1908,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];
@@ -1899,6 +1916,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 b6f452546..f369ce7f3 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 d6bc09c28..2fc9670b8 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/misc/ovl_kaleido_scope/z_kaleido_scope.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
index e8d704d3c..edca900ee 100644
--- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
+++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.c
@@ -132,18 +132,49 @@ static void* sGameOverTexs[] = {
gPauseSave20Tex, gPauseSave21Tex, gPauseSave22Tex, gPauseSave23Tex, gPauseSave24Tex,
};
-static void* sEquipmentTexs[] =
- LANGUAGE_ARRAY(sEquipmentJPNTexs, sEquipmentENGTexs, sEquipmentGERTexs, sEquipmentFRATexs);
+#if OOT_NTSC
+#define EQUIPMENT_TEXS(language) ((language) != LANGUAGE_JPN ? sEquipmentENGTexs : sEquipmentJPNTexs)
+#define SELECT_ITEM_TEXS(language) ((language) != LANGUAGE_JPN ? sSelectItemENGTexs : sSelectItemJPNTexs)
+#define MAP_TEXS(language) ((language) != LANGUAGE_JPN ? sMapENGTexs : sMapJPNTexs)
+#define QUEST_STATUS_TEXS(language) ((language) != LANGUAGE_JPN ? sQuestStatusENGTexs : sQuestStatusJPNTexs)
+#define SAVE_TEXS(language) ((language) != LANGUAGE_JPN ? sSaveENGTexs : sSaveJPNTexs)
+#else
+static void* sEquipmentTexs[] = {
+ sEquipmentENGTexs,
+ sEquipmentGERTexs,
+ sEquipmentFRATexs,
+};
-static void* sSelectItemTexs[] =
- LANGUAGE_ARRAY(sSelectItemJPNTexs, sSelectItemENGTexs, sSelectItemGERTexs, sSelectItemFRATexs);
+static void* sSelectItemTexs[] = {
+ sSelectItemENGTexs,
+ sSelectItemGERTexs,
+ sSelectItemFRATexs,
+};
-static void* sMapTexs[] = LANGUAGE_ARRAY(sMapJPNTexs, sMapENGTexs, sMapGERTexs, sMapFRATexs);
+static void* sMapTexs[] = {
+ sMapENGTexs,
+ sMapGERTexs,
+ sMapFRATexs,
+};
-static void* sQuestStatusTexs[] =
- LANGUAGE_ARRAY(sQuestStatusJPNTexs, sQuestStatusENGTexs, sQuestStatusGERTexs, sQuestStatusFRATexs);
+static void* sQuestStatusTexs[] = {
+ sQuestStatusENGTexs,
+ sQuestStatusGERTexs,
+ sQuestStatusFRATexs,
+};
-static void* sSaveTexs[] = LANGUAGE_ARRAY(sSaveJPNTexs, sSaveENGTexs, sSaveGERTexs, sSaveFRATexs);
+static void* sSaveTexs[] = {
+ sSaveENGTexs,
+ sSaveGERTexs,
+ sSaveFRATexs,
+};
+
+#define EQUIPMENT_TEXS(language) (sEquipmentTexs[(language)])
+#define SELECT_ITEM_TEXS(language) (sSelectItemTexs[(language)])
+#define MAP_TEXS(language) (sMapTexs[(language)])
+#define QUEST_STATUS_TEXS(language) (sQuestStatusTexs[(language)])
+#define SAVE_TEXS(language) (sSaveTexs[(language)])
+#endif
s16 D_8082AAEC[] = {
32, 112, 32, 48, 32, 32, 32, 48, 32, 64, 32, 48, 48, 48, 48, 64, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 80, 64,
@@ -594,6 +625,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];
@@ -849,7 +883,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,
- sSelectItemTexs[gSaveContext.language]);
+ SELECT_ITEM_TEXS(gSaveContext.language));
KaleidoScope_DrawItemSelect(play);
}
@@ -867,7 +901,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,
- sEquipmentTexs[gSaveContext.language]);
+ EQUIPMENT_TEXS(gSaveContext.language));
KaleidoScope_DrawEquipment(play);
}
@@ -886,7 +920,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,
- sQuestStatusTexs[gSaveContext.language]);
+ QUEST_STATUS_TEXS(gSaveContext.language));
KaleidoScope_DrawQuestStatus(play, gfxCtx);
}
@@ -905,7 +939,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->mapPageVtx, sMapTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language));
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play, gfxCtx);
@@ -934,7 +968,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,
- sSelectItemTexs[gSaveContext.language]);
+ SELECT_ITEM_TEXS(gSaveContext.language));
KaleidoScope_DrawItemSelect(play);
break;
@@ -949,7 +983,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->mapPageVtx, sMapTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, MAP_TEXS(gSaveContext.language));
if (sInDungeonScene) {
KaleidoScope_DrawDungeonMap(play, gfxCtx);
@@ -981,7 +1015,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,
- sQuestStatusTexs[gSaveContext.language]);
+ QUEST_STATUS_TEXS(gSaveContext.language));
KaleidoScope_DrawQuestStatus(play, gfxCtx);
@@ -1000,7 +1034,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,
- sEquipmentTexs[gSaveContext.language]);
+ EQUIPMENT_TEXS(gSaveContext.language));
KaleidoScope_DrawEquipment(play);
@@ -1054,7 +1088,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) {
POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs);
} else { // PAUSE_STATE_SAVE_PROMPT
POLY_OPA_DISP =
- KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]);
+ KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, SAVE_TEXS(gSaveContext.language));
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->saveVtx[60], 32, 0);
@@ -1149,9 +1183,9 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
LANGUAGE_ARRAY(gPauseToSelectItemJPNTex, gPauseToSelectItemENGTex, gPauseToSelectItemGERTex,
gPauseToSelectItemFRATex),
};
- static u16 D_8082ADD8[3] = { 56, 88, 80 };
- static u16 D_8082ADE0[3] = { 64, 88, 72 };
- static u16 D_8082ADE8[3] = { 80, 104, 112 };
+ static u16 D_8082ADD8[] = LANGUAGE_ARRAY(56, 56, 88, 80);
+ static u16 D_8082ADE0[] = LANGUAGE_ARRAY(48, 64, 88, 72);
+ static u16 D_8082ADE8[] = LANGUAGE_ARRAY(96, 80, 104, 112);
static s16 D_8082ADF0[][4] = {
{ 180, 210, 255, 220 },
{ 100, 100, 150, 220 },
@@ -1432,13 +1466,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[gSaveContext.language];
@@ -1478,13 +1513,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[gSaveContext.language];
@@ -1507,13 +1542,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
(pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11)) {
if (pauseCtx->namedItem != PAUSE_ITEM_NONE) {
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) {
@@ -1540,13 +1575,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[gSaveContext.language];
@@ -2699,7 +2734,9 @@ void KaleidoScope_UpdateCursorSize(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),
@@ -3214,6 +3251,9 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->state = PAUSE_STATE_CLOSING;
WREG(2) = -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;
@@ -3359,6 +3399,9 @@ void KaleidoScope_Update(PlayState* play) {
WREG(2) = -6240;
YREG(8) = pauseCtx->unk_204;
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,
@@ -3380,6 +3423,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/audio/extraction/audio_extract.py b/tools/audio/extraction/audio_extract.py
new file mode 100644
index 000000000..ac51d2e0e
--- /dev/null
+++ b/tools/audio/extraction/audio_extract.py
@@ -0,0 +1,269 @@
+# SPDX-FileCopyrightText: © 2024 ZeldaRET
+# SPDX-License-Identifier: CC0-1.0
+#
+# Extract audio files
+#
+
+import os
+from dataclasses import dataclass
+from enum import auto, Enum
+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 AudioTableFile
+from .audiobank_file import AudiobankFile
+from .util import align, debugm, error, incbin
+
+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 extract_samplebank(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()
+
+ # 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")
+
+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...")
+
+ os.makedirs(f"{extracted_dir}/assets/audio/samplebanks", exist_ok=True)
+ if write_xml:
+ os.makedirs(f"assets/xml/audio/samplebanks", exist_ok=True)
+
+ for bank in sample_banks:
+ if isinstance(bank, AudioTableFile):
+ extract_samplebank(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 000000000..d288b9262
--- /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 000000000..8c6bd58b9
--- /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:X}({unref_start_type.__name__}) " + \
+ f"to 0x{unref_end_offset:X}({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 000000000..fa6afa37d
--- /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 000000000..e02a6f285
--- /dev/null
+++ b/tools/audio/extraction/audiotable.py
@@ -0,0 +1,690 @@
+# SPDX-FileCopyrightText: © 2024 ZeldaRET
+# SPDX-License-Identifier: CC0-1.0
+#
+#
+#
+
+import 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}")
+ return f"Sample{index}{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 000000000..0dab8c8d9
--- /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 000000000..b538c68e8
--- /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 000000000..20891810c
--- /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_extraction.py b/tools/audio_extraction.py
new file mode 100644
index 000000000..da30273b7
--- /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 0af2d9a94..000000000
--- 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/gc-us/file_addresses.csv b/tools/disasm/gc-us/file_addresses.csv
deleted file mode 100644
index d0d5f562e..000000000
--- 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 8e0d572b1..000000000
--- 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 aded105dd..000000000
--- 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 27333f248..000000000
--- 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 5300b4ed5..000000000
--- 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 7be1569ab..000000000
--- a/tools/disasm/gc-us/variables.txt
+++ /dev/null
@@ -1 +0,0 @@
-gSaveContext = 0x8011B148; // size:0x1428 type:SaveContext
diff --git a/tools/fix_bss.py b/tools/fix_bss.py
new file mode 100755
index 000000000..91ddd07ba
--- /dev/null
+++ b/tools/fix_bss.py
@@ -0,0 +1,705 @@
+#!/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 itertools
+import multiprocessing
+import multiprocessing.pool
+from pathlib import Path
+import re
+import shlex
+import sys
+import time
+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")
+
+
+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()
+
+ for pragma in new_pragmas:
+ line = lines[pragma.line_number - 1]
+ if not line.startswith("#pragma increment_block_number "):
+ raise FixBssException(
+ f"Expected #pragma increment_block_number on line {pragma.line_number}"
+ )
+
+ # Grab pragma argument and remove quotes
+ arg = line.strip()[len("#pragma increment_block_number ") + 1 : -1]
+
+ amounts_by_version = {}
+ for part in arg.split():
+ version, amount_str = part.split(":")
+ amounts_by_version[version] = int(amount_str)
+
+ amounts_by_version[version_to_update] = pragma.amount
+ new_arg = " ".join(
+ f"{version}:{amount}" for version, amount in amounts_by_version.items()
+ )
+ new_line = f'#pragma increment_block_number "{new_arg}"\n'
+
+ lines[pragma.line_number - 1] = new_line
+
+ 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 Exception as e:
+ print(f"{colorama.Fore.RED}Error: {str(e)}{colorama.Fore.RESET}")
+ 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 2deb64c79..f45bb9745 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 d84c3eef2..df30827f4 100755
--- a/tools/preprocess.py
+++ b/tools/preprocess.py
@@ -3,13 +3,13 @@
# 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 tempfile
@@ -22,39 +22,59 @@ def fail(message):
sys.exit(1)
-def process_file(filename, input, output):
+def process_file(version, filename, input, output):
output.write(f'#line 1 "{filename}"\n')
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"
- )
+ if line.startswith("#pragma increment_block_number "):
+ # Grab pragma argument and remove quotes
+ arg = line.strip()[len("#pragma increment_block_number ") + 1 : -1]
+ amount = 0
+ for part in arg.split():
+ kv = part.split(":")
+ if len(kv) != 2:
+ fail(
+ f"{filename}:{i}: increment_block_number must be followed by a list of version:amount pairs"
+ )
+ if kv[0] != version:
+ continue
+ try:
+ amount = int(kv[1])
+ except ValueError:
+ fail(
+ f"{filename}:{i}: increment_block_number amount must be an integer"
+ )
+
+ # 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
for j in range(amount):
- output.write(f"struct DummyStruct_{i:05}_{j:03};\n")
+ output.write(f"struct increment_block_number_{i: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