diff --git a/Makefile b/Makefile
index 56134bd7fc..5103d58691 100644
--- a/Makefile
+++ b/Makefile
@@ -366,8 +366,8 @@ CPPFLAGS += -P -xc -fno-dollars-in-identifiers $(CPP_DEFINES)
ASFLAGS += -march=vr4300 -32 -no-pad-sections -Iinclude -I$(EXTRACTED_DIR)
ifeq ($(COMPILER),gcc)
- CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc -MD $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -funsigned-char -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS)
- CCASFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc -MD $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -fno-PIC -fno-common -Wa,-no-pad-sections
+ CFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc -MD -MP $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -mdivide-breaks -fno-PIC -fno-common -ffreestanding -funsigned-char -fbuiltin -fno-builtin-sinf -fno-builtin-cosf $(CHECK_WARNINGS)
+ CCASFLAGS += $(CPP_DEFINES) $(GBI_DEFINES) -G 0 -nostdinc -MD -MP $(INC) -march=vr4300 -mfix4300 -mabi=32 -mno-abicalls -fno-PIC -fno-common -Wa,-no-pad-sections
MIPS_VERSION := -mips3
else
# Suppress warnings for wrong number of macro arguments (to fake variadic
@@ -385,7 +385,7 @@ endif
ifeq ($(COMPILER),ido)
# Have CC_CHECK pretend to be a MIPS compiler
MIPS_BUILTIN_DEFS := -D_MIPS_ISA_MIPS2=2 -D_MIPS_ISA=_MIPS_ISA_MIPS2 -D_ABIO32=1 -D_MIPS_SIM=_ABIO32 -D_MIPS_SZINT=32 -D_MIPS_SZLONG=32 -D_MIPS_SZPTR=32
- CC_CHECK = gcc -nostdinc -MD -fno-builtin -fsyntax-only -funsigned-char -std=gnu90 -D_LANGUAGE_C $(CPP_DEFINES) $(MIPS_BUILTIN_DEFS) $(GBI_DEFINES) $(INC) $(CHECK_WARNINGS)
+ CC_CHECK = gcc -nostdinc -MD -MP -fno-builtin -fsyntax-only -funsigned-char -std=gnu90 -D_LANGUAGE_C $(CPP_DEFINES) $(MIPS_BUILTIN_DEFS) $(GBI_DEFINES) $(INC) $(CHECK_WARNINGS)
ifeq ($(shell getconf LONG_BIT), 32)
# Work around memory allocation bug in QEMU
export QEMU_GUEST_BASE := 1
@@ -858,7 +858,7 @@ $(O_FILES): | asset_files
.PHONY: o_files asset_files
$(BUILD_DIR)/spec: $(SPEC) $(SPEC_INCLUDES)
- $(CPP) $(CPPFLAGS) -MD -MF $@.d -MT $@ -I. $< | $(BUILD_DIR_REPLACE) > $@
+ $(CPP) $(CPPFLAGS) -MD -MP -MF $@.d -MT $@ -I. $< | $(BUILD_DIR_REPLACE) > $@
$(LDSCRIPT): $(BUILD_DIR)/spec
$(MKLDSCRIPT) $< $@
@@ -870,7 +870,7 @@ $(BUILD_DIR)/baserom/%.o: $(EXTRACTED_DIR)/baserom/%
$(OBJCOPY) -I binary -O elf32-big $< $@
$(BUILD_DIR)/data/%.o: data/%.s
- $(CPP) $(CPPFLAGS) -MD -MF $(@:.o=.d) -MT $@ -Iinclude $< | $(AS) $(ASFLAGS) -o $@
+ $(CPP) $(CPPFLAGS) -MD -MP -MF $(@:.o=.d) -MT $@ -Iinclude $< | $(AS) $(ASFLAGS) -o $@
ifeq ($(PLATFORM),IQUE)
NES_CHARMAP := assets/text/charmap.chn.txt
@@ -879,10 +879,10 @@ else
endif
$(BUILD_DIR)/assets/text/%.enc.nes.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h $(NES_CHARMAP)
- $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) -MD -MF $(@:.o=.d) -MT $@ $< | $(PYTHON) tools/msgenc.py --encoding utf-8 --charmap $(NES_CHARMAP) - $@
+ $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) -MD -MP -MF $(@:.o=.d) -MT $@ $< | $(PYTHON) tools/msgenc.py --encoding utf-8 --charmap $(NES_CHARMAP) - $@
$(BUILD_DIR)/assets/text/%.enc.jpn.h: assets/text/%.h $(EXTRACTED_DIR)/text/%.h assets/text/charmap.jpn.txt
- $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) -MD -MF $(@:.o=.d) -MT $@ $< | $(PYTHON) tools/msgenc.py --encoding SHIFT-JIS --wchar --charmap assets/text/charmap.jpn.txt - $@
+ $(CPP) $(CPPFLAGS) -I$(EXTRACTED_DIR) -MD -MP -MF $(@:.o=.d) -MT $@ $< | $(PYTHON) tools/msgenc.py --encoding SHIFT-JIS --wchar --charmap assets/text/charmap.jpn.txt - $@
# Dependencies for encoded message headers. These dependencies are not automatic as these headers are generated
# as part of the build. A clean build must know to generate them before the relevant .d files are created.
@@ -895,7 +895,7 @@ $(BUILD_DIR)/assets/text/staff_message_data_static.o: $(BUILD_DIR)/assets/text/m
$(BUILD_DIR)/assets/text/%.o: assets/text/%.c
ifneq ($(COMPILER),gcc)
# Preprocess text with modern cpp for varargs macros
- $(CPP) -undef -D_LANGUAGE_C -D__sgi $(CPPFLAGS) -MD -MT $@ $(INC) $< -o $(@:.o=.c)
+ $(CPP) -undef -D_LANGUAGE_C -D__sgi $(CPPFLAGS) -MD -MP -MT $@ $(INC) $< -o $(@:.o=.c)
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $(@:.o=.c)
else
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -o $@ $<
@@ -915,7 +915,7 @@ $(BUILD_DIR)/assets/%.o: $(EXTRACTED_DIR)/assets/%.c
# Assemble the ROM header with GNU AS always
$(BUILD_DIR)/src/makerom/rom_header.o: src/makerom/rom_header.s
ifeq ($(COMPILER),ido)
- $(CPP) $(CPPFLAGS) $(MIPS_BUILTIN_DEFS) $(INC) -MD -MF $(@:.o=.d) -MT $@ $< | $(AS) $(ASFLAGS) -o $@
+ $(CPP) $(CPPFLAGS) $(MIPS_BUILTIN_DEFS) $(INC) -MD -MP -MF $(@:.o=.d) -MT $@ $< | $(AS) $(ASFLAGS) -o $@
else
$(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $@ $<
endif
@@ -927,7 +927,7 @@ $(BUILD_DIR)/src/makerom/ipl3.o: $(EXTRACTED_DIR)/incbin/ipl3
$(BUILD_DIR)/src/%.o: src/%.s
ifeq ($(COMPILER),ido)
# For header dependencies
- $(CPP) $(MIPS_BUILTIN_DEFS) $(CPPFLAGS) -x assembler-with-cpp $(INC) -MD -MF $(@:.o=.d) -MT $@ $< -o /dev/null
+ $(CPP) $(MIPS_BUILTIN_DEFS) $(CPPFLAGS) -x assembler-with-cpp $(INC) -MD -MP -MF $(@:.o=.d) -MT $@ $< -o /dev/null
$(CCAS) -c $(CCASFLAGS) $(MIPS_VERSION) $(ASOPTFLAGS) -o $(@:.o=.tmp.o) $<
# IDO generates bad symbol tables, fix the symbol table with strip..
$(STRIP) $(@:.o=.tmp.o) -N dummy-symbol-name
@@ -1072,7 +1072,7 @@ $(BUILD_DIR)/assets/audio/soundfonts/%.c $(BUILD_DIR)/assets/audio/soundfonts/%.
-include $(SOUNDFONT_DEP_FILES)
$(BUILD_DIR)/assets/audio/soundfonts/%.o: $(BUILD_DIR)/assets/audio/soundfonts/%.c $(BUILD_DIR)/assets/audio/soundfonts/%.name
- $(CPP) $(MIPS_BUILTIN_DEFS) $(CPPFLAGS) -x assembler-with-cpp $(INC) -I include/audio -MD -MF $(@:.o=.d) -MT $@ $< -o /dev/null
+ $(CPP) $(MIPS_BUILTIN_DEFS) $(CPPFLAGS) -x assembler-with-cpp $(INC) -I include/audio -MD -MP -MF $(@:.o=.d) -MT $@ $< -o /dev/null
# compile c to unlinked object
$(CC) -c $(CFLAGS) $(MIPS_VERSION) $(OPTFLAGS) -I include/audio -o $(@:.o=.tmp) $<
# partial link
@@ -1093,11 +1093,11 @@ endif
# then assemble the sequences...
$(BUILD_DIR)/assets/audio/sequences/%.o: assets/audio/sequences/%.seq include/audio/aseq.h $(SEQUENCE_TABLE) | $(SOUNDFONT_HEADERS)
- $(SEQ_CPP) $(SEQ_CPPFLAGS) -MD -MT $@ $< -o $(@:.o=.s)
+ $(SEQ_CPP) $(SEQ_CPPFLAGS) -MD -MP -MT $@ $< -o $(@:.o=.s)
$(AS) $(ASFLAGS) -I $(BUILD_DIR)/assets/audio/soundfonts -I include/audio -I $(dir $<) $(@:.o=.s) -o $@
$(BUILD_DIR)/assets/audio/sequences/%.o: $(EXTRACTED_DIR)/assets/audio/sequences/%.seq include/audio/aseq.h $(SEQUENCE_TABLE) | $(SOUNDFONT_HEADERS)
- $(SEQ_CPP) $(SEQ_CPPFLAGS) -MD -MT $@ $< -o $(@:.o=.s)
+ $(SEQ_CPP) $(SEQ_CPPFLAGS) -MD -MP -MT $@ $< -o $(@:.o=.s)
$(AS) $(ASFLAGS) -I $(BUILD_DIR)/assets/audio/soundfonts -I include/audio -I $(dir $<) $(@:.o=.s) -o $@
ifeq ($(AUDIO_BUILD_DEBUG),1)
$(OBJCOPY) -O binary -j.data $@ $(@:.o=.aseq)
diff --git a/assets/textures/do_action_static/do_action_static.c b/assets/textures/do_action_static/do_action_static.c
new file mode 100644
index 0000000000..646a3edb66
--- /dev/null
+++ b/assets/textures/do_action_static/do_action_static.c
@@ -0,0 +1,481 @@
+#include "do_action_static.h"
+
+#if OOT_NTSC
+
+// Japanese
+
+u64 gAttackDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gAttackDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gCheckDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gCheckDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gEnterDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gEnterDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gReturnDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReturnDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gOpenDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gOpenDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gJumpDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gJumpDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gDecideDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDecideDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gDiveDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDiveDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gFasterDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gFasterDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gThrowDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gThrowDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gUnusedNaviDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gUnusedNaviDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gClimbDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gClimbDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gDropDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDropDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gDownDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDownDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gSaveDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSaveDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gSpeakDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSpeakDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNextDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNextDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gGrabDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gGrabDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gStopDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gStopDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gPutAwayDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gPutAwayDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gReelDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReelDoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum1DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum1DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum2DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum2DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum3DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum3DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum4DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum4DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum5DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum5DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum6DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum6DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum7DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum7DoActionJPNTex.ia4.inc.c"
+};
+
+u64 gNum8DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum8DoActionJPNTex.ia4.inc.c"
+};
+
+#endif
+
+// English
+
+u64 gAttackDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gAttackDoActionENGTex.ia4.inc.c"
+};
+
+u64 gCheckDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gCheckDoActionENGTex.ia4.inc.c"
+};
+
+u64 gEnterDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gEnterDoActionENGTex.ia4.inc.c"
+};
+
+u64 gReturnDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReturnDoActionENGTex.ia4.inc.c"
+};
+
+u64 gOpenDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gOpenDoActionENGTex.ia4.inc.c"
+};
+
+u64 gJumpDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gJumpDoActionENGTex.ia4.inc.c"
+};
+
+u64 gDecideDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDecideDoActionENGTex.ia4.inc.c"
+};
+
+u64 gDiveDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDiveDoActionENGTex.ia4.inc.c"
+};
+
+u64 gFasterDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gFasterDoActionENGTex.ia4.inc.c"
+};
+
+u64 gThrowDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gThrowDoActionENGTex.ia4.inc.c"
+};
+
+u64 gUnusedNaviDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gUnusedNaviDoActionENGTex.ia4.inc.c"
+};
+
+u64 gClimbDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gClimbDoActionENGTex.ia4.inc.c"
+};
+
+u64 gDropDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDropDoActionENGTex.ia4.inc.c"
+};
+
+u64 gDownDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDownDoActionENGTex.ia4.inc.c"
+};
+
+u64 gSaveDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSaveDoActionENGTex.ia4.inc.c"
+};
+
+u64 gSpeakDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSpeakDoActionENGTex.ia4.inc.c"
+};
+
+u64 gNextDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNextDoActionENGTex.ia4.inc.c"
+};
+
+u64 gGrabDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gGrabDoActionENGTex.ia4.inc.c"
+};
+
+u64 gStopDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gStopDoActionENGTex.ia4.inc.c"
+};
+
+u64 gPutAwayDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gPutAwayDoActionENGTex.ia4.inc.c"
+};
+
+u64 gReelDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReelDoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum1DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum1DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum2DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum2DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum3DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum3DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum4DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum4DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum5DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum5DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum6DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum6DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum7DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum7DoActionENGTex.ia4.inc.c"
+};
+
+u64 gNum8DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum8DoActionENGTex.ia4.inc.c"
+};
+
+#if OOT_PAL
+
+// German
+
+u64 gAttackDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gAttackDoActionGERTex.ia4.inc.c"
+};
+
+u64 gCheckDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gCheckDoActionGERTex.ia4.inc.c"
+};
+
+u64 gEnterDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gEnterDoActionGERTex.ia4.inc.c"
+};
+
+u64 gReturnDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReturnDoActionGERTex.ia4.inc.c"
+};
+
+u64 gOpenDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gOpenDoActionGERTex.ia4.inc.c"
+};
+
+u64 gJumpDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gJumpDoActionGERTex.ia4.inc.c"
+};
+
+u64 gDecideDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDecideDoActionGERTex.ia4.inc.c"
+};
+
+u64 gDiveDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDiveDoActionGERTex.ia4.inc.c"
+};
+
+u64 gFasterDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gFasterDoActionGERTex.ia4.inc.c"
+};
+
+u64 gThrowDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gThrowDoActionGERTex.ia4.inc.c"
+};
+
+u64 gUnusedNaviDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gUnusedNaviDoActionGERTex.ia4.inc.c"
+};
+
+u64 gClimbDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gClimbDoActionGERTex.ia4.inc.c"
+};
+
+u64 gDropDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDropDoActionGERTex.ia4.inc.c"
+};
+
+u64 gDownDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDownDoActionGERTex.ia4.inc.c"
+};
+
+u64 gSaveDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSaveDoActionGERTex.ia4.inc.c"
+};
+
+u64 gSpeakDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSpeakDoActionGERTex.ia4.inc.c"
+};
+
+u64 gNextDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNextDoActionGERTex.ia4.inc.c"
+};
+
+u64 gGrabDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gGrabDoActionGERTex.ia4.inc.c"
+};
+
+u64 gStopDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gStopDoActionGERTex.ia4.inc.c"
+};
+
+u64 gPutAwayDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gPutAwayDoActionGERTex.ia4.inc.c"
+};
+
+u64 gReelDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReelDoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum1DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum1DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum2DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum2DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum3DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum3DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum4DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum4DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum5DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum5DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum6DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum6DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum7DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum7DoActionGERTex.ia4.inc.c"
+};
+
+u64 gNum8DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum8DoActionGERTex.ia4.inc.c"
+};
+
+// French
+
+u64 gAttackDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gAttackDoActionFRATex.ia4.inc.c"
+};
+
+u64 gCheckDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gCheckDoActionFRATex.ia4.inc.c"
+};
+
+u64 gEnterDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gEnterDoActionFRATex.ia4.inc.c"
+};
+
+u64 gReturnDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReturnDoActionFRATex.ia4.inc.c"
+};
+
+u64 gOpenDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gOpenDoActionFRATex.ia4.inc.c"
+};
+
+u64 gJumpDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gJumpDoActionFRATex.ia4.inc.c"
+};
+
+u64 gDecideDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDecideDoActionFRATex.ia4.inc.c"
+};
+
+u64 gDiveDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDiveDoActionFRATex.ia4.inc.c"
+};
+
+u64 gFasterDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gFasterDoActionFRATex.ia4.inc.c"
+};
+
+u64 gThrowDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gThrowDoActionFRATex.ia4.inc.c"
+};
+
+u64 gUnusedNaviDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gUnusedNaviDoActionFRATex.ia4.inc.c"
+};
+
+u64 gClimbDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gClimbDoActionFRATex.ia4.inc.c"
+};
+
+u64 gDropDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDropDoActionFRATex.ia4.inc.c"
+};
+
+u64 gDownDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gDownDoActionFRATex.ia4.inc.c"
+};
+
+u64 gSaveDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSaveDoActionFRATex.ia4.inc.c"
+};
+
+u64 gSpeakDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gSpeakDoActionFRATex.ia4.inc.c"
+};
+
+u64 gNextDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNextDoActionFRATex.ia4.inc.c"
+};
+
+u64 gGrabDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gGrabDoActionFRATex.ia4.inc.c"
+};
+
+u64 gStopDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gStopDoActionFRATex.ia4.inc.c"
+};
+
+u64 gPutAwayDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gPutAwayDoActionFRATex.ia4.inc.c"
+};
+
+u64 gReelDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gReelDoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum1DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum1DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum2DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum2DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum3DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum3DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum4DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum4DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum5DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum5DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum6DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum6DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum7DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum7DoActionFRATex.ia4.inc.c"
+};
+
+u64 gNum8DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)] = {
+#include "assets/textures/do_action_static/gNum8DoActionFRATex.ia4.inc.c"
+};
+
+#endif
diff --git a/assets/textures/do_action_static/do_action_static.h b/assets/textures/do_action_static/do_action_static.h
new file mode 100644
index 0000000000..dcbed37869
--- /dev/null
+++ b/assets/textures/do_action_static/do_action_static.h
@@ -0,0 +1,140 @@
+#ifndef DO_ACTION_STATIC_H
+#define DO_ACTION_STATIC_H
+
+#include "ultra64.h"
+#include "tex_len.h"
+#include "versions.h"
+
+#define DO_ACTION_TEX_WIDTH 48
+#define DO_ACTION_TEX_HEIGHT 16
+#define DO_ACTION_TEX_SIZE (DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT / 2)
+
+#if OOT_NTSC
+
+extern u64 gAttackDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gCheckDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gEnterDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReturnDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gOpenDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gJumpDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDecideDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDiveDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gFasterDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gThrowDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gUnusedNaviDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gClimbDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDropDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDownDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSaveDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSpeakDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNextDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gGrabDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gStopDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gPutAwayDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReelDoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum1DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum2DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum3DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum4DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum5DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum6DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum7DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum8DoActionJPNTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+
+#endif
+
+extern u64 gAttackDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gCheckDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gEnterDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReturnDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gOpenDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gJumpDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDecideDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDiveDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gFasterDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gThrowDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gUnusedNaviDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gClimbDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDropDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDownDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSaveDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSpeakDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNextDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gGrabDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gStopDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gPutAwayDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReelDoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum1DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum2DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum3DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum4DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum5DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum6DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum7DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum8DoActionENGTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+
+#if OOT_PAL
+
+extern u64 gAttackDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gCheckDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gEnterDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReturnDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gOpenDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gJumpDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDecideDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDiveDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gFasterDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gThrowDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gUnusedNaviDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gClimbDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDropDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDownDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSaveDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSpeakDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNextDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gGrabDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gStopDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gPutAwayDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReelDoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum1DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum2DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum3DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum4DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum5DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum6DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum7DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum8DoActionGERTex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+
+extern u64 gAttackDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gCheckDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gEnterDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReturnDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gOpenDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gJumpDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDecideDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDiveDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gFasterDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gThrowDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gUnusedNaviDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gClimbDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDropDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gDownDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSaveDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gSpeakDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNextDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gGrabDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gStopDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gPutAwayDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gReelDoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum1DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum2DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum3DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum4DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum5DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum6DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum7DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+extern u64 gNum8DoActionFRATex[TEX_LEN(u64, DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 4)];
+
+#endif
+
+#endif
diff --git a/assets/xml/objects/gameplay_field_keep.xml b/assets/xml/objects/gameplay_field_keep.xml
index 432a963c80..3642fe0a00 100644
--- a/assets/xml/objects/gameplay_field_keep.xml
+++ b/assets/xml/objects/gameplay_field_keep.xml
@@ -8,24 +8,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -36,18 +84,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_bombf.xml b/assets/xml/objects/object_bombf.xml
index 853e4b3385..3b69324cbf 100644
--- a/assets/xml/objects/object_bombf.xml
+++ b/assets/xml/objects/object_bombf.xml
@@ -10,5 +10,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_bubble.xml b/assets/xml/objects/object_bubble.xml
index a502b4480e..0777a87c1f 100644
--- a/assets/xml/objects/object_bubble.xml
+++ b/assets/xml/objects/object_bubble.xml
@@ -2,5 +2,8 @@
+
+
+
diff --git a/assets/xml/objects/object_bv.xml b/assets/xml/objects/object_bv.xml
index b7d6d01b89..a0486c8f7f 100644
--- a/assets/xml/objects/object_bv.xml
+++ b/assets/xml/objects/object_bv.xml
@@ -75,5 +75,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_bv_pal.xml b/assets/xml/objects/object_bv_pal.xml
index fa6b3a538f..f738c62d85 100644
--- a/assets/xml/objects/object_bv_pal.xml
+++ b/assets/xml/objects/object_bv_pal.xml
@@ -75,5 +75,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_du.xml b/assets/xml/objects/object_du.xml
index feeafc83f8..3535c98e97 100644
--- a/assets/xml/objects/object_du.xml
+++ b/assets/xml/objects/object_du.xml
@@ -77,5 +77,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_du_pal.xml b/assets/xml/objects/object_du_pal.xml
index 4e4ae09eb4..1ea1309b78 100644
--- a/assets/xml/objects/object_du_pal.xml
+++ b/assets/xml/objects/object_du_pal.xml
@@ -77,5 +77,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_fd.xml b/assets/xml/objects/object_fd.xml
index b18bfe25ce..750f80be4d 100644
--- a/assets/xml/objects/object_fd.xml
+++ b/assets/xml/objects/object_fd.xml
@@ -73,5 +73,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_fd_pal.xml b/assets/xml/objects/object_fd_pal.xml
index 23fd822c65..ff91e48e11 100644
--- a/assets/xml/objects/object_fd_pal.xml
+++ b/assets/xml/objects/object_fd_pal.xml
@@ -73,5 +73,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_goma.xml b/assets/xml/objects/object_goma.xml
index be843c7ea2..f2429cd2b9 100644
--- a/assets/xml/objects/object_goma.xml
+++ b/assets/xml/objects/object_goma.xml
@@ -90,6 +90,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -162,8 +266,13 @@
+
+
+
+
+
diff --git a/assets/xml/objects/object_goma_pal.xml b/assets/xml/objects/object_goma_pal.xml
index 95c7f6ce0b..dbee83f7ca 100644
--- a/assets/xml/objects/object_goma_pal.xml
+++ b/assets/xml/objects/object_goma_pal.xml
@@ -90,6 +90,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -162,6 +266,9 @@
+
+
+
diff --git a/assets/xml/objects/object_gr.xml b/assets/xml/objects/object_gr.xml
index 8f84870967..ad7a184772 100644
--- a/assets/xml/objects/object_gr.xml
+++ b/assets/xml/objects/object_gr.xml
@@ -13,6 +13,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_hintnuts.xml b/assets/xml/objects/object_hintnuts.xml
index fe02e8adbe..852ec1141a 100644
--- a/assets/xml/objects/object_hintnuts.xml
+++ b/assets/xml/objects/object_hintnuts.xml
@@ -15,11 +15,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ik.xml b/assets/xml/objects/object_ik.xml
index a3578f27f6..55b4a6ff76 100644
--- a/assets/xml/objects/object_ik.xml
+++ b/assets/xml/objects/object_ik.xml
@@ -53,6 +53,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -80,9 +140,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_jya_obj.xml b/assets/xml/objects/object_jya_obj.xml
index 1e203941f5..2c9c5a6fc8 100644
--- a/assets/xml/objects/object_jya_obj.xml
+++ b/assets/xml/objects/object_jya_obj.xml
@@ -1,28 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30,18 +75,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -74,6 +170,9 @@
+
+
+
diff --git a/assets/xml/objects/object_km1.xml b/assets/xml/objects/object_km1.xml
index 086666bf2d..25b1fae7f5 100644
--- a/assets/xml/objects/object_km1.xml
+++ b/assets/xml/objects/object_km1.xml
@@ -38,5 +38,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_kw1.xml b/assets/xml/objects/object_kw1.xml
index 39120b108e..5b39db9f31 100644
--- a/assets/xml/objects/object_kw1.xml
+++ b/assets/xml/objects/object_kw1.xml
@@ -59,5 +59,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mb.xml b/assets/xml/objects/object_mb.xml
index c3ec222706..f10e27d645 100644
--- a/assets/xml/objects/object_mb.xml
+++ b/assets/xml/objects/object_mb.xml
@@ -56,6 +56,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -98,6 +143,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mizu_objects.xml b/assets/xml/objects/object_mizu_objects.xml
index b0abf34ec5..641c0a40e2 100644
--- a/assets/xml/objects/object_mizu_objects.xml
+++ b/assets/xml/objects/object_mizu_objects.xml
@@ -1,38 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mm.xml b/assets/xml/objects/object_mm.xml
index 04963a6c6b..695333c65c 100644
--- a/assets/xml/objects/object_mm.xml
+++ b/assets/xml/objects/object_mm.xml
@@ -22,6 +22,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_mo.xml b/assets/xml/objects/object_mo.xml
index ad84a14026..9844361f58 100644
--- a/assets/xml/objects/object_mo.xml
+++ b/assets/xml/objects/object_mo.xml
@@ -3,10 +3,132 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53,19 +175,37 @@
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -74,5 +214,10 @@
+
+
+
+
+
diff --git a/assets/xml/objects/object_mo_pal.xml b/assets/xml/objects/object_mo_pal.xml
index 17cd4fc2f4..71078c6a95 100644
--- a/assets/xml/objects/object_mo_pal.xml
+++ b/assets/xml/objects/object_mo_pal.xml
@@ -3,10 +3,132 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -52,20 +174,38 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -74,5 +214,10 @@
+
+
+
+
+
diff --git a/assets/xml/objects/object_okuta.xml b/assets/xml/objects/object_okuta.xml
index 65d7dfd75c..72be4462de 100644
--- a/assets/xml/objects/object_okuta.xml
+++ b/assets/xml/objects/object_okuta.xml
@@ -24,9 +24,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_owl.xml b/assets/xml/objects/object_owl.xml
index 36011ecd29..666363030c 100644
--- a/assets/xml/objects/object_owl.xml
+++ b/assets/xml/objects/object_owl.xml
@@ -25,6 +25,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -76,6 +138,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_pu_box.xml b/assets/xml/objects/object_pu_box.xml
index 0535781401..a315bc38d8 100644
--- a/assets/xml/objects/object_pu_box.xml
+++ b/assets/xml/objects/object_pu_box.xml
@@ -1,12 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot01_matoyab.xml b/assets/xml/objects/object_spot01_matoyab.xml
index 3a4179dfa2..f6662b7100 100644
--- a/assets/xml/objects/object_spot01_matoyab.xml
+++ b/assets/xml/objects/object_spot01_matoyab.xml
@@ -3,11 +3,17 @@
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot01_objects.xml b/assets/xml/objects/object_spot01_objects.xml
index c976129d24..3ee06792f9 100644
--- a/assets/xml/objects/object_spot01_objects.xml
+++ b/assets/xml/objects/object_spot01_objects.xml
@@ -1,14 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot02_objects.xml b/assets/xml/objects/object_spot02_objects.xml
index 04ac2476c5..e819a9074f 100644
--- a/assets/xml/objects/object_spot02_objects.xml
+++ b/assets/xml/objects/object_spot02_objects.xml
@@ -2,14 +2,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot06_objects.xml b/assets/xml/objects/object_spot06_objects.xml
index 102772cd6c..3362cb42b9 100644
--- a/assets/xml/objects/object_spot06_objects.xml
+++ b/assets/xml/objects/object_spot06_objects.xml
@@ -1,23 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot08_obj.xml b/assets/xml/objects/object_spot08_obj.xml
index f0d76701e7..bb3c63a2af 100644
--- a/assets/xml/objects/object_spot08_obj.xml
+++ b/assets/xml/objects/object_spot08_obj.xml
@@ -1,6 +1,9 @@
+
+
+
@@ -10,6 +13,9 @@
+
+
+
@@ -19,6 +25,9 @@
+
+
+
diff --git a/assets/xml/objects/object_spot09_obj.xml b/assets/xml/objects/object_spot09_obj.xml
index d86cf59874..4ce5387441 100644
--- a/assets/xml/objects/object_spot09_obj.xml
+++ b/assets/xml/objects/object_spot09_obj.xml
@@ -1,10 +1,28 @@
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot12_obj.xml b/assets/xml/objects/object_spot12_obj.xml
index 4bdf8dce11..9a0779dff7 100644
--- a/assets/xml/objects/object_spot12_obj.xml
+++ b/assets/xml/objects/object_spot12_obj.xml
@@ -1,11 +1,17 @@
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot15_obj.xml b/assets/xml/objects/object_spot15_obj.xml
index e1544bebd9..fe82dae7c1 100644
--- a/assets/xml/objects/object_spot15_obj.xml
+++ b/assets/xml/objects/object_spot15_obj.xml
@@ -1,11 +1,17 @@
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot16_obj.xml b/assets/xml/objects/object_spot16_obj.xml
index 88af8eeb7b..0687c8fd88 100644
--- a/assets/xml/objects/object_spot16_obj.xml
+++ b/assets/xml/objects/object_spot16_obj.xml
@@ -1,8 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_spot18_obj.xml b/assets/xml/objects/object_spot18_obj.xml
index ca9d6ea485..388ef942cc 100644
--- a/assets/xml/objects/object_spot18_obj.xml
+++ b/assets/xml/objects/object_spot18_obj.xml
@@ -32,5 +32,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_sst.xml b/assets/xml/objects/object_sst.xml
index 12f27e4321..fff77ae400 100644
--- a/assets/xml/objects/object_sst.xml
+++ b/assets/xml/objects/object_sst.xml
@@ -52,5 +52,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_sst_pal.xml b/assets/xml/objects/object_sst_pal.xml
index fdbe2e799c..3ba9b09d57 100644
--- a/assets/xml/objects/object_sst_pal.xml
+++ b/assets/xml/objects/object_sst_pal.xml
@@ -52,5 +52,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_timeblock.xml b/assets/xml/objects/object_timeblock.xml
index cfc47d3fe1..18f07608e7 100644
--- a/assets/xml/objects/object_timeblock.xml
+++ b/assets/xml/objects/object_timeblock.xml
@@ -1,5 +1,8 @@
+
+
+
diff --git a/assets/xml/objects/object_torch2.xml b/assets/xml/objects/object_torch2.xml
index 09d9ff8a40..5ef419c510 100644
--- a/assets/xml/objects/object_torch2.xml
+++ b/assets/xml/objects/object_torch2.xml
@@ -8,6 +8,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_trap.xml b/assets/xml/objects/object_trap.xml
index d250939feb..0d8db0f9e8 100644
--- a/assets/xml/objects/object_trap.xml
+++ b/assets/xml/objects/object_trap.xml
@@ -5,8 +5,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_tw.xml b/assets/xml/objects/object_tw.xml
index e99bd2c2aa..922d28ac65 100644
--- a/assets/xml/objects/object_tw.xml
+++ b/assets/xml/objects/object_tw.xml
@@ -76,6 +76,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -159,34 +245,58 @@
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
@@ -199,50 +309,95 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -292,6 +447,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -334,6 +575,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -415,6 +709,9 @@
+
+
+
diff --git a/assets/xml/objects/object_tw_pal.xml b/assets/xml/objects/object_tw_pal.xml
index e77e3c247e..2b777f3d3a 100644
--- a/assets/xml/objects/object_tw_pal.xml
+++ b/assets/xml/objects/object_tw_pal.xml
@@ -76,6 +76,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -106,7 +192,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -132,6 +264,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -155,34 +334,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
@@ -195,50 +398,95 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -288,6 +536,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -330,6 +664,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -411,6 +798,9 @@
+
+
+
diff --git a/assets/xml/objects/object_vase.xml b/assets/xml/objects/object_vase.xml
index ddb61620c5..71809a864b 100644
--- a/assets/xml/objects/object_vase.xml
+++ b/assets/xml/objects/object_vase.xml
@@ -1,6 +1,9 @@
+
+
+
diff --git a/assets/xml/objects/object_wallmaster.xml b/assets/xml/objects/object_wallmaster.xml
index f6729fbe28..26ec631073 100644
--- a/assets/xml/objects/object_wallmaster.xml
+++ b/assets/xml/objects/object_wallmaster.xml
@@ -10,6 +10,9 @@
+
+
+
@@ -33,6 +36,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_wood02.xml b/assets/xml/objects/object_wood02.xml
index acb18fb57e..e282217d4a 100644
--- a/assets/xml/objects/object_wood02.xml
+++ b/assets/xml/objects/object_wood02.xml
@@ -76,5 +76,8 @@
+
+
+
diff --git a/assets/xml/objects/object_xc.xml b/assets/xml/objects/object_xc.xml
index fbc458058f..f6f30b2f44 100644
--- a/assets/xml/objects/object_xc.xml
+++ b/assets/xml/objects/object_xc.xml
@@ -26,8 +26,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_xc_pal.xml b/assets/xml/objects/object_xc_pal.xml
index 5576e4740d..7d20f23661 100644
--- a/assets/xml/objects/object_xc_pal.xml
+++ b/assets/xml/objects/object_xc_pal.xml
@@ -26,8 +26,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ydan_objects.xml b/assets/xml/objects/object_ydan_objects.xml
index b779e46661..a6ee5e614b 100644
--- a/assets/xml/objects/object_ydan_objects.xml
+++ b/assets/xml/objects/object_ydan_objects.xml
@@ -18,15 +18,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_yukabyun.xml b/assets/xml/objects/object_yukabyun.xml
index d03c960175..c1aeb83388 100644
--- a/assets/xml/objects/object_yukabyun.xml
+++ b/assets/xml/objects/object_yukabyun.xml
@@ -3,7 +3,13 @@
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_zl2.xml b/assets/xml/objects/object_zl2.xml
index 51e18228ea..46943d3650 100644
--- a/assets/xml/objects/object_zl2.xml
+++ b/assets/xml/objects/object_zl2.xml
@@ -24,6 +24,9 @@
+
+
+
@@ -64,6 +67,9 @@
+
+
+
@@ -73,7 +79,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_zl4.xml b/assets/xml/objects/object_zl4.xml
index 211c8339e2..8c48f4b69e 100644
--- a/assets/xml/objects/object_zl4.xml
+++ b/assets/xml/objects/object_zl4.xml
@@ -55,8 +55,14 @@
-
+
+
+
+
+
+
+
@@ -87,6 +93,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Boss_Ganon.xml b/assets/xml/overlays/ovl_Boss_Ganon.xml
index 229ab58e1b..9afa6d1251 100644
--- a/assets/xml/overlays/ovl_Boss_Ganon.xml
+++ b/assets/xml/overlays/ovl_Boss_Ganon.xml
@@ -16,6 +16,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -29,25 +65,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Boss_Ganon2.xml b/assets/xml/overlays/ovl_Boss_Ganon2.xml
index 6b92b19a09..75e7ee9fee 100644
--- a/assets/xml/overlays/ovl_Boss_Ganon2.xml
+++ b/assets/xml/overlays/ovl_Boss_Ganon2.xml
@@ -2,8 +2,14 @@
+
+
+
+
+
+
@@ -13,17 +19,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Boss_Sst.xml b/assets/xml/overlays/ovl_Boss_Sst.xml
index 35584224de..93f66c6756 100644
--- a/assets/xml/overlays/ovl_Boss_Sst.xml
+++ b/assets/xml/overlays/ovl_Boss_Sst.xml
@@ -1,8 +1,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Demo_Shd.xml b/assets/xml/overlays/ovl_Demo_Shd.xml
index 967f383ec3..49e5e30114 100644
--- a/assets/xml/overlays/ovl_Demo_Shd.xml
+++ b/assets/xml/overlays/ovl_Demo_Shd.xml
@@ -1,8 +1,13 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Elf_Msg.xml b/assets/xml/overlays/ovl_Elf_Msg.xml
index 61e28d31b7..a6b07b2e37 100644
--- a/assets/xml/overlays/ovl_Elf_Msg.xml
+++ b/assets/xml/overlays/ovl_Elf_Msg.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/overlays/ovl_Elf_Msg2.xml b/assets/xml/overlays/ovl_Elf_Msg2.xml
index a0ea055e26..c4f10e8cd3 100644
--- a/assets/xml/overlays/ovl_Elf_Msg2.xml
+++ b/assets/xml/overlays/ovl_Elf_Msg2.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/overlays/ovl_En_Clear_Tag.xml b/assets/xml/overlays/ovl_En_Clear_Tag.xml
index 05c9c29865..cfdb5fb764 100644
--- a/assets/xml/overlays/ovl_En_Clear_Tag.xml
+++ b/assets/xml/overlays/ovl_En_Clear_Tag.xml
@@ -1,14 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Ganon_Organ.xml b/assets/xml/overlays/ovl_En_Ganon_Organ.xml
index 639d68ad38..6668b85fd0 100644
--- a/assets/xml/overlays/ovl_En_Ganon_Organ.xml
+++ b/assets/xml/overlays/ovl_En_Ganon_Organ.xml
@@ -13,7 +13,13 @@
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Sth.xml b/assets/xml/overlays/ovl_En_Sth.xml
index 93d211cb99..2c4671e468 100644
--- a/assets/xml/overlays/ovl_En_Sth.xml
+++ b/assets/xml/overlays/ovl_En_Sth.xml
@@ -7,6 +7,12 @@
+
+
+
+
+
+
diff --git a/assets/xml/scenes/shops/shop1.xml b/assets/xml/scenes/shops/shop1.xml
index 525a06d633..f14ed9a76b 100644
--- a/assets/xml/scenes/shops/shop1.xml
+++ b/assets/xml/scenes/shops/shop1.xml
@@ -4,5 +4,13 @@
+
+
+
+
+
+
+
+
diff --git a/assets/xml/textures/nintendo_rogo_static.xml b/assets/xml/textures/nintendo_rogo_static.xml
index c5e555fb18..229ccf2eb5 100644
--- a/assets/xml/textures/nintendo_rogo_static.xml
+++ b/assets/xml/textures/nintendo_rogo_static.xml
@@ -1,8 +1,10 @@
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/xml/textures/nintendo_rogo_static_v2.xml b/assets/xml/textures/nintendo_rogo_static_v2.xml
index 56792cf47f..f4df8cff3c 100644
--- a/assets/xml/textures/nintendo_rogo_static_v2.xml
+++ b/assets/xml/textures/nintendo_rogo_static_v2.xml
@@ -1,8 +1,10 @@
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/Documenting.md b/docs/Documenting.md
index 03a12ebbd4..72bb5e1fa9 100644
--- a/docs/Documenting.md
+++ b/docs/Documenting.md
@@ -2,44 +2,57 @@
# Documentation Style Guide
This project uses [Doxygen](https://www.doxygen.nl/index.html) to generate documentation pages from comments found in the source files. This guide focuses on writing compatible comments and ensuring consistency across the codebase.
-```diff
-- Note -
-As the codebase is constantly changing, only document what is complete, well-understood and not
-already covered by good naming. This is especially true for function parameters and return values.
-Also note that there is no obligation to completing the documentation steps for functions you
-work on if you do not want to at the time.
-```
+
+However to keep the documentation readable in text and favor consistency, the Doxygen commands that should be used are restricted to what this document mentions.
+
To generate a doxygen manual for the project, ensure you have doxygen installed and then cd into the project root directory and run `doxygen Doxyfile`.
-## Documenting Functions
-For functions, a description of the function's purpose should go above the function:
-```c
-/**
- * My description of this function
- */
-void foo(void);
-```
-Further considerations:
-- Any comments inside the function should follow the usual `//` or `/**/` comment styles.
-- For documenting return values, place a `@return` at the bottom of the function comment followed by the description of the return value. This should only be done if the name of the function is not self-explanatory and is well-understood.
-- For documenting parameters, place a `@param` between the comment and the @return (if applicable) followed by the name of the parameter and a brief description. This should only be done if the name of the parameter is not self-explanatory and is well-understood.
-- All `@param`s should come before `@return` and be in the same order the parameters appear in the function declaration. Note that this does not mean you should add empty `@params` for parameters deemed self-explanatory.
+The documentation can then be browsed by opening `docs/doxygen/html/index.html` in a web browser.
+
+## Documenting Functions
+
+Any comments inside functions, except bugs ([see below](#documenting-bugs)), should use `//`-style comments, even if spanning over multiple lines.
+
+A simple example of documenting a function with just a description (note the leading `/**`):
-A full example would be as follows: (however in practice functions such as this would be considered self-explanatory)
```c
/**
- * This is an example
- *
- * @param bar the input
- * @return bar multiplied by 2
+ * Update the crawl sound timer, and play the crawling sound when it reaches 0.
*/
-s32 foo(s32 bar) {
- return 2*bar;
-}
+void EnInsect_UpdateCrawlSfx(EnInsect* this) {
```
+A more complete example:
+
+```c
+/**
+ * Request to either increase or consume magic.
+ *
+ * @param amount the positive-valued amount to either increase or decrease magic by
+ * @param type how the magic is increased or consumed.
+ *
+ * @return false if the request failed
+ */
+s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
+```
+
+Note:
+
+- Documentation for self-explanatory arguments (`@param`) and return values (`@return`) may be omitted.
+- `@param` commands should not have empty lines in between.
+- Different commands (main description, `@param`, `@return`, ...) should be separated by empty lines.
+
+Other directives that may be used for documenting functions:
+
+- `@see` to reference something else ([see below](#linking-related-information)).
+- `@note` to bring attention to some of the function behavior.
+
## Documenting Variables
-Documentation of variables should include what this variable is used for if the name is not completely clear and if applicable whether a set of defines or enumerations should be used alongside it (which should be linked with `@see`, see below)
+
+In case the name of a variable isn't completely clear, documentation can provide a description.
+
+If applicable, it may refer to a set of defines or enumerations that should be used with it (those should be linked with `@see`, [see below](#linking-related-information)).
+
```c
/**
* My description of this variable
@@ -48,53 +61,59 @@ s32 foo;
```
## Documenting Files
-File documentation should go near the top of the file, below includes. It should only feature information that is general to the file.
+
+File documentation should be located at the top of the file, above `#include`s.
+
+File documentation should only feature information that is general to the file or the system it implements.
+
```c
/**
- * @file file_name.c
+ * @file z_fcurve_data_skelanime.c
+ * @brief Curve skeleton animation system
*
- * My description of this file
+ * A curve skeleton has a fixed number of limbs, ...
+...
*/
```
## Other
### Documenting Bugs:
-Bugs should be documented on the line above where the bug begins.
-```c
-//! @bug description
-```
-### Linking related information:
-`@see` should be used to provide links to related information where appropriate, for example:
-```c
-/**
- * Save File Data
- * @see SaveContext
- */
-SaveContext gSaveContext;
-```
-In the case of functions, `@see` should come before the first `@param`.
-### HTML
-You can include html tags in your doc comments, however it is strongly advised against doing this if it greatly reduces readability of the code comments.
-```c
-/**
- * My
- * Newline
- * Doc Comment
- */
-```
-### LaTeX
-You can embed [LaTeX](https://wikipedia.org/wiki/LaTeX) in your doc comments if useful to do so.
-For inline rendering:
+Bugs should be documented on the line above where the bug begins.
+
+```c
+//! @bug Missing early return
+```
+
+Bug described on multiple lines should still use the `//!` syntax, over multiple lines. For example:
+
+```c
+//! @bug this code was clearly meaning to print `abs(camera->camDataIdx)` as a
+//! one-or-two-digit number, instead of `i`.
+```
+
+### Linking related information:
+
+`@see` should be used to provide links to related information where appropriate, for example:
+
```c
/**
- * \f$ \textrm{Your LaTeX Here} \f$
- */
-```
-For centered rendering on a separate line:
-```c
-/**
- * \f[ \textrm{Your LaTeX Here} \f]
+ * Sets the next framebuffer to the framebuffer associated to `task`.
+ * If there is no current buffer or it is time to swap, this buffer will be swapped to
+ * immediately, otherwise it will be swapped to later in Sched_HandleRetrace.
+ *
+ * @see Sched_HandleRetrace
*/
+void Sched_SetNextFramebufferFromTask(Scheduler* sc, OSScTask* task) {
```
+
+In the case of functions, `@see` should come before the first `@param`.
+
+`@see` may also be used for documenting files or variables.
+
+### HTML and LaTeX
+
+It is possible to include HTML and LaTeX in documentation comments.
+
+However it is prefered not to do so, so that the raw text stays readable when looked at as plain text, for example when browsing the source code.
diff --git a/include/interface.h b/include/interface.h
index 84834b3df6..5b300068bd 100644
--- a/include/interface.h
+++ b/include/interface.h
@@ -68,11 +68,6 @@ typedef enum DoAction {
/* 0x1D */ DO_ACTION_MAX
} DoAction;
-// TODO extract this information from the texture definitions themselves
-#define DO_ACTION_TEX_WIDTH 48
-#define DO_ACTION_TEX_HEIGHT 16
-#define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex))
-
typedef struct InterfaceContext {
/* 0x0000 */ View view;
/* 0x0128 */ Vtx* actionVtx;
diff --git a/include/player.h b/include/player.h
index 74a129a254..10fcd490b7 100644
--- a/include/player.h
+++ b/include/player.h
@@ -694,10 +694,13 @@ typedef struct PlayerAgeProperties {
/* 0xCC */ LinkAnimationHeader* unk_CC[2];
} PlayerAgeProperties; // size = 0xD4
+#define MELEE_WEAPON_INFO_TIP(weaponInfo) (&(weaponInfo)->posA)
+#define MELEE_WEAPON_INFO_BASE(weaponInfo) (&(weaponInfo)->posB)
+
typedef struct WeaponInfo {
/* 0x00 */ s32 active;
- /* 0x04 */ Vec3f tip;
- /* 0x10 */ Vec3f base;
+ /* 0x04 */ Vec3f posA; // For melee weapons, this is the tip (furthest from the player hand)
+ /* 0x10 */ Vec3f posB; // For melee weapons, this is the base (near the player hand)
} WeaponInfo; // size = 0x1C
#define LEDGE_DIST_MAX 399.96002f
@@ -1033,7 +1036,7 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(struct PlayState* play, s32 limbI
Vec3s* rot, void* thisx);
s32 Player_OverrideLimbDrawGameplayCrawling(struct PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
void* thisx);
-u8 func_80090480(struct PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase);
+u8 Player_UpdateWeaponInfo(struct PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newPosA, Vec3f* newPosB);
void Player_DrawGetItem(struct PlayState* play, Player* this);
void Player_PostLimbDrawGameplay(struct PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx);
u32 Player_InitPauseDrawData(struct PlayState* play, u8* segment, SkelAnime* skelAnime);
diff --git a/include/save.h b/include/save.h
index a4e99546fb..f3d3397dce 100644
--- a/include/save.h
+++ b/include/save.h
@@ -782,9 +782,9 @@ typedef enum LinkAge {
#define INFTABLE_TALKED_TO_MALON_FIRST_TIME 0x84
#define INFTABLE_TOLD_EPONA_IS_SCARED 0x85
#define INFTABLE_MALON_SPAWNED_AT_HYRULE_CASTLE 0x8B
-#define INFTABLE_8C 0x8C
-#define INFTABLE_8D 0x8D
-#define INFTABLE_8E 0x8E
+#define INFTABLE_TALKED_TO_ADULT_MALON_AFTER_SONG 0x8C
+#define INFTABLE_8D 0x8D // unreachable flag in EnMa2
+#define INFTABLE_PLAYED_SONG_FOR_ADULT_MALON 0x8E
#define INFTABLE_94 0x94
#define INFTABLE_97 0x97
#define INFTABLE_9A 0x9A
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 5a0fe9b1c3..dfec9188f9 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -3854,7 +3854,7 @@ Actor* Actor_GetProjectileActor(PlayState* play, Actor* refActor, f32 radius) {
actor = actor->next;
} else {
//! @bug The projectile actor gets unsafely casted to a hookshot to check its timer, even though
- // it can also be an arrow.
+ //! it can also be an arrow.
// Luckily, the field at the same offset in the arrow actor is the x component of a vector
// which will rarely ever be 0. So it's very unlikely for this bug to cause an issue.
if ((Math_Vec3f_DistXYZ(&refActor->world.pos, &actor->world.pos) > radius) ||
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index 7093053787..1d794be813 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -7750,7 +7750,7 @@ void Camera_PrintSettings(Camera* camera) {
sp50[i++] = '-';
}
- //! @bug: this code was clearly meaning to print `abs(camera->bgCamIndex)` as a
+ //! @bug this code was clearly meaning to print `abs(camera->bgCamIndex)` as a
//! one-or-two-digit number, instead of `i`.
// "sp50[i++] = ..." matches here, but is undefined behavior due to conflicting
// reads/writes between sequence points, triggering warnings. Work around by
@@ -8624,7 +8624,7 @@ s32 Camera_RequestBgCam(Camera* camera, s32 requestedBgCamIndex) {
Camera_CopyDataToRegs(camera, camera->mode);
} else if (settingChangeSuccessful < -1) {
//! @bug: `settingChangeSuccessful` is a bool and is likely checking the wrong value. This can never pass.
- // The actual return of Camera_RequestSettingImpl or bgCamIndex would make more sense.
+ //! The actual return of Camera_RequestSettingImpl or bgCamIndex would make more sense.
PRINTF(VT_COL(RED, WHITE) "camera: error: illegal camera ID (%d) !! (%d|%d|%d)\n" VT_RST,
requestedBgCamIndex, camera->camId, BGCHECK_SCENE, requestedCamSetting);
}
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index fd34ce6733..0f737145e1 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -10,6 +10,8 @@
#include "play_state.h"
#include "save.h"
+#include "assets/textures/do_action_static/do_action_static.h"
+
void Interface_Destroy(PlayState* play) {
Map_Destroy(play);
}
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index bdb35093b2..83699c82f3 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -239,7 +239,7 @@ s16 sSunDepthTestX;
s16 sSunDepthTestY;
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:192 pal-1.1:192"
+ "ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
LightNode* sNGameOverLightNode;
LightInfo sNGameOverLightInfo;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 590680da25..679c5b7772 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -224,6 +224,10 @@ void func_800BC88C(PlayState* this) {
this->transitionCtx.transitionType = -1;
}
+/**
+ * Set the environment fog, from parameters controlled by the environment system.
+ * If a custom fog state is used at any point in drawing, the environment fog is expected to be restored afterwards.
+ */
Gfx* Play_SetFog(PlayState* this, Gfx* gfx) {
return Gfx_SetFog2(gfx, this->lightCtx.fogColor[0], this->lightCtx.fogColor[1], this->lightCtx.fogColor[2], 0,
this->lightCtx.fogNear, 1000);
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 7358db96d5..d56eb84102 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -803,7 +803,7 @@ int Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y
s32 pad;
if ((this->heldItemAction == PLAYER_IA_DEKU_STICK) && (this->unk_860 != 0)) {
- Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff);
+ Math_Vec3f_Diff(MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0]), pos, &diff);
return ((SQ(diff.x) + SQ(diff.z)) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
} else {
return false;
@@ -1444,30 +1444,42 @@ s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx*
return false;
}
-u8 func_80090480(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase) {
- if (weaponInfo->active == 0) {
+/**
+ * Handles colliders for player weapons, by creating a quad collider each frame between the weapon's previous position
+ * and its new position.
+ * This position is given as a pair, `newPosA` and `newPosB`, representing two ends of a line that can be thought of as
+ * the active part of the weapon. Note that this line is not necessarily following the weapon's shape: for example
+ * arrows use a line perpendicular to the shaft.
+ * @param collider The quad collider to use for the weapon.
+ * @param newPosA One end of the line. For melee weapons, this is the tip.
+ * @param newPosB One end of the line. For melee weapons, this is the base.
+ * @return true if the weapon is active at a new position.
+ */
+u8 Player_UpdateWeaponInfo(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newPosA,
+ Vec3f* newPosB) {
+ if (!weaponInfo->active) {
if (collider != NULL) {
Collider_ResetQuadAT(play, &collider->base);
}
- Math_Vec3f_Copy(&weaponInfo->tip, newTip);
- Math_Vec3f_Copy(&weaponInfo->base, newBase);
- weaponInfo->active = 1;
+ Math_Vec3f_Copy(&weaponInfo->posA, newPosA);
+ Math_Vec3f_Copy(&weaponInfo->posB, newPosB);
+ weaponInfo->active = true;
return true;
- } else if ((weaponInfo->tip.x == newTip->x) && (weaponInfo->tip.y == newTip->y) &&
- (weaponInfo->tip.z == newTip->z) && (weaponInfo->base.x == newBase->x) &&
- (weaponInfo->base.y == newBase->y) && (weaponInfo->base.z == newBase->z)) {
+ } else if ((weaponInfo->posA.x == newPosA->x) && (weaponInfo->posA.y == newPosA->y) &&
+ (weaponInfo->posA.z == newPosA->z) && (weaponInfo->posB.x == newPosB->x) &&
+ (weaponInfo->posB.y == newPosB->y) && (weaponInfo->posB.z == newPosB->z)) {
if (collider != NULL) {
Collider_ResetQuadAT(play, &collider->base);
}
return false;
} else {
if (collider != NULL) {
- Collider_SetQuadVertices(collider, newBase, newTip, &weaponInfo->base, &weaponInfo->tip);
+ Collider_SetQuadVertices(collider, newPosB, newPosA, &weaponInfo->posB, &weaponInfo->posA);
CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base);
}
- Math_Vec3f_Copy(&weaponInfo->base, newBase);
- Math_Vec3f_Copy(&weaponInfo->tip, newTip);
- weaponInfo->active = 1;
+ Math_Vec3f_Copy(&weaponInfo->posB, newPosB);
+ Math_Vec3f_Copy(&weaponInfo->posA, newPosA);
+ weaponInfo->active = true;
return true;
}
}
@@ -1496,33 +1508,35 @@ void Player_UpdateShieldCollider(PlayState* play, Player* this, ColliderQuad* co
}
}
-Vec3f D_80126080 = { 5000.0f, 400.0f, 0.0f };
-Vec3f D_8012608C = { 5000.0f, -400.0f, 1000.0f };
-Vec3f D_80126098 = { 5000.0f, 1400.0f, -1000.0f };
+// Positions for the tip of melee weapons, in the left hand limb's own model space.
+Vec3f sMeleeWeaponTipOffsetFromLeftHand0 = { 5000.0f, 400.0f, 0.0f };
+Vec3f sMeleeWeaponTipOffsetFromLeftHand1 = { 5000.0f, -400.0f, 1000.0f };
+Vec3f sMeleeWeaponTipOffsetFromLeftHand2 = { 5000.0f, 1400.0f, -1000.0f };
-Vec3f D_801260A4[3] = {
- { 0.0f, 400.0f, 0.0f },
- { 0.0f, 1400.0f, -1000.0f },
- { 0.0f, -400.0f, 1000.0f },
-};
+// Positions for the base of melee weapons, in the left hand limb's own model space.
+Vec3f sMeleeWeaponBaseOffsetFromLeftHand0 = { 0.0f, 400.0f, 0.0f };
+Vec3f sMeleeWeaponBaseOffsetFromLeftHand1 = { 0.0f, 1400.0f, -1000.0f };
+Vec3f sMeleeWeaponBaseOffsetFromLeftHand2 = { 0.0f, -400.0f, 1000.0f };
-void func_800906D4(PlayState* play, Player* this, Vec3f* newTipPos) {
- Vec3f newBasePos[3];
+void Player_UpdateMeleeWeaponInfo(PlayState* play, Player* this, Vec3f* newTipPositions) {
+ Vec3f newBasePositions[3];
- Matrix_MultVec3f(&D_801260A4[0], &newBasePos[0]);
- Matrix_MultVec3f(&D_801260A4[1], &newBasePos[1]);
- Matrix_MultVec3f(&D_801260A4[2], &newBasePos[2]);
+ Matrix_MultVec3f(&sMeleeWeaponBaseOffsetFromLeftHand0, &newBasePositions[0]);
+ Matrix_MultVec3f(&sMeleeWeaponBaseOffsetFromLeftHand1, &newBasePositions[1]);
+ Matrix_MultVec3f(&sMeleeWeaponBaseOffsetFromLeftHand2, &newBasePositions[2]);
- if (func_80090480(play, NULL, &this->meleeWeaponInfo[0], &newTipPos[0], &newBasePos[0]) &&
+ if (Player_UpdateWeaponInfo(play, NULL, &this->meleeWeaponInfo[0], &newTipPositions[0], &newBasePositions[0]) &&
!(this->stateFlags1 & PLAYER_STATE1_SHIELDING)) {
- EffectBlure_AddVertex(Effect_GetByIndex(this->meleeWeaponEffectIndex), &this->meleeWeaponInfo[0].tip,
- &this->meleeWeaponInfo[0].base);
+ EffectBlure_AddVertex(Effect_GetByIndex(this->meleeWeaponEffectIndex), &this->meleeWeaponInfo[0].posA,
+ &this->meleeWeaponInfo[0].posB);
}
if ((this->meleeWeaponState > 0) &&
((this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || (this->stateFlags2 & PLAYER_STATE2_17))) {
- func_80090480(play, &this->meleeWeaponQuads[0], &this->meleeWeaponInfo[1], &newTipPos[1], &newBasePos[1]);
- func_80090480(play, &this->meleeWeaponQuads[1], &this->meleeWeaponInfo[2], &newTipPos[2], &newBasePos[2]);
+ Player_UpdateWeaponInfo(play, &this->meleeWeaponQuads[0], &this->meleeWeaponInfo[1], &newTipPositions[1],
+ &newBasePositions[1]);
+ Player_UpdateWeaponInfo(play, &this->meleeWeaponQuads[1], &this->meleeWeaponInfo[2], &newTipPositions[2],
+ &newBasePositions[2]);
}
}
@@ -1553,20 +1567,20 @@ void Player_DrawGetItem(PlayState* play, Player* this) {
}
}
-void func_80090A28(Player* this, Vec3f* vecs) {
- D_8012608C.x = D_80126080.x;
+void Player_CalcMeleeWeaponTipPositions(Player* this, Vec3f* tipPositions) {
+ sMeleeWeaponTipOffsetFromLeftHand1.x = sMeleeWeaponTipOffsetFromLeftHand0.x;
if (this->unk_845 >= 3) {
this->unk_845++;
- D_8012608C.x *= 1.0f + ((9 - this->unk_845) * 0.1f);
+ sMeleeWeaponTipOffsetFromLeftHand1.x *= 1.0f + ((9 - this->unk_845) * 0.1f);
}
- D_8012608C.x += 1200.0f;
- D_80126098.x = D_8012608C.x;
+ sMeleeWeaponTipOffsetFromLeftHand1.x += 1200.0f;
+ sMeleeWeaponTipOffsetFromLeftHand2.x = sMeleeWeaponTipOffsetFromLeftHand1.x;
- Matrix_MultVec3f(&D_80126080, &vecs[0]);
- Matrix_MultVec3f(&D_8012608C, &vecs[1]);
- Matrix_MultVec3f(&D_80126098, &vecs[2]);
+ Matrix_MultVec3f(&sMeleeWeaponTipOffsetFromLeftHand0, &tipPositions[0]);
+ Matrix_MultVec3f(&sMeleeWeaponTipOffsetFromLeftHand1, &tipPositions[1]);
+ Matrix_MultVec3f(&sMeleeWeaponTipOffsetFromLeftHand2, &tipPositions[2]);
}
void Player_DrawHookshotReticle(PlayState* play, Player* this, f32 arg2) {
@@ -1608,7 +1622,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* this, f32 arg2) {
}
// Coordinates of the player focus position, in the head limb's own model space.
-Vec3f sPlayerFocusHeadLimbModelPos = { 1100.0f, -700.0f, 0.0f };
+Vec3f sPlayerFocusOffsetFromHead = { 1100.0f, -700.0f, 0.0f };
f32 sMeleeWeaponLengths[] = {
0.0f, // not a melee weapon
@@ -1651,17 +1665,17 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Math_Vec3f_Copy(&this->leftHandPos, sCurBodyPartPos);
if (this->itemAction == PLAYER_IA_DEKU_STICK) {
- Vec3f sp124[3];
+ Vec3f tipPositions[3];
OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2633);
if (this->actor.scale.y >= 0.0f) {
- D_80126080.x = this->unk_85C * 5000.0f;
- func_80090A28(this, sp124);
+ sMeleeWeaponTipOffsetFromLeftHand0.x = this->unk_85C * 5000.0f;
+ Player_CalcMeleeWeaponTipPositions(this, tipPositions);
if (this->meleeWeaponState != 0) {
- func_800906D4(play, this, sp124);
+ Player_UpdateMeleeWeaponInfo(play, this, tipPositions);
} else {
- Math_Vec3f_Copy(&this->meleeWeaponInfo[0].tip, &sp124[0]);
+ Math_Vec3f_Copy(MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0]), &tipPositions[0]);
}
}
@@ -1674,16 +1688,16 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
CLOSE_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2656);
} else if ((this->actor.scale.y >= 0.0f) && (this->meleeWeaponState != 0)) {
- Vec3f spE4[3];
+ Vec3f tipPositions[3];
if (Player_HoldsBrokenKnife(this)) {
- D_80126080.x = 1500.0f;
+ sMeleeWeaponTipOffsetFromLeftHand0.x = 1500.0f;
} else {
- D_80126080.x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(this)];
+ sMeleeWeaponTipOffsetFromLeftHand0.x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(this)];
}
- func_80090A28(this, spE4);
- func_800906D4(play, this, spE4);
+ Player_CalcMeleeWeaponTipPositions(this, tipPositions);
+ Player_UpdateMeleeWeaponInfo(play, this, tipPositions);
} else if ((*dList != NULL) && (this->leftHandType == PLAYER_MODELTYPE_LH_BOTTLE)) {
//! @bug When Player is actively using shield, the `itemAction` value will be set to -1.
//! If shield is used at the same time a bottle is in hand, `Player_ActionToBottle` will
@@ -1854,7 +1868,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_Get(&this->shieldMf);
}
} else if (limbIndex == PLAYER_LIMB_HEAD) {
- Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos);
+ Matrix_MultVec3f(&sPlayerFocusOffsetFromHead, &this->actor.focus.pos);
} else {
// Position of Link's foot, in the foot limb's own model space.
static Vec3f sLeftRightFootLimbModelFootPos[] = {
diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c
index 135ffa8876..657bd9e560 100644
--- a/src/code/z_rcp.c
+++ b/src/code/z_rcp.c
@@ -854,28 +854,50 @@ Gfx gEmptyDL[] = {
gsSPEndDisplayList(),
};
+/**
+ * Set fog color and range.
+ *
+ * At or prior to fog near, geometry is unaffected by fog. At or beyond fog far, geometry is fully fogged.
+ * Between near and far, rendered geometry will be blended between the unfogged color and the supplied fog color.
+ *
+ * Fog far should be in the range 0 to 1000 and greater than or equal to fog near. If fog near is negative everything
+ * will be fully fogged. If fog near is 1000 or greater there is no fog.
+ */
Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far) {
+ // Avoid 0 divisor in gSPFogPosition below
if (far == near) {
far++;
}
-
ASSERT(near != far, "n != f", "../z_rcp.c", 1155);
+ // Set the fog color, far away geometry will be rendered as this solid color.
gDPSetFogColor(gfx++, r, g, b, a);
if (near >= 1000) {
+ // Set a constant shade alpha of 0 for no fog
gSPFogFactor(gfx++, 0, 0);
- } else if (near >= 997) {
- gSPFogFactor(gfx++, 0x7FFF, 0x8100);
+ } else if (near > 996) {
+ // Avoid an overflow when near and far are close (see bug below), by effectively clamping near to ~996.
+ // This is almost SPFogPosition(996.0937f, 1000)
+ gSPFogFactor(gfx++, 0x7FFF, -0x7F00);
} else if (near < 0) {
+ // Set a constant shade alpha of 255 for fully fogged
gSPFogFactor(gfx++, 0, 255);
} else {
+ // Normal range. Shade alpha is 0 at z <= near and 255 at z >= far, linearly interpolated in between.
+ //! @bug If far - near < 4, the computed `fm` fog factor coefficient will overflow.
+ //! For example: 128000 / (983 - 980) > 32767
+ //! This is handled above in the case of near > 996, but the general case is not accounted for.
gSPFogPosition(gfx++, near, far);
}
-
return gfx;
}
+/**
+ * Like Gfx_SetFog but issues a pipesync before changing fog color.
+ *
+ * @see Gfx_SetFog
+ */
Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far) {
if (far == near) {
far++;
@@ -898,6 +920,11 @@ Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far)
return gfx;
}
+/**
+ * Wrapper for Gfx_SetFog
+ *
+ * @see Gfx_SetFog
+ */
Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far) {
return Gfx_SetFog(gfx, r, g, b, a, near, far);
}
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 62594850af..3e8127024b 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
@@ -337,8 +337,8 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) {
ArmsHook* this = (ArmsHook*)thisx;
Player* player = GET_PLAYER(play);
Vec3f sp78;
- Vec3f hookNewTip;
- Vec3f hookNewBase;
+ Vec3f posA;
+ Vec3f posB;
f32 sp5C;
f32 sp58;
@@ -349,16 +349,16 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) {
if ((ArmsHook_Shoot != this->actionFunc) || (this->timer <= 0)) {
Matrix_MultVec3f(&D_80865B70, &this->unk_1E8);
- Matrix_MultVec3f(&D_80865B88, &hookNewTip);
- Matrix_MultVec3f(&D_80865B94, &hookNewBase);
- this->hookInfo.active = 0;
+ Matrix_MultVec3f(&D_80865B88, &posA);
+ Matrix_MultVec3f(&D_80865B94, &posB);
+ this->weaponInfo.active = false;
} else {
Matrix_MultVec3f(&D_80865B7C, &this->unk_1E8);
- Matrix_MultVec3f(&D_80865BA0, &hookNewTip);
- Matrix_MultVec3f(&D_80865BAC, &hookNewBase);
+ Matrix_MultVec3f(&D_80865BA0, &posA);
+ Matrix_MultVec3f(&D_80865BAC, &posB);
}
- func_80090480(play, &this->collider, &this->hookInfo, &hookNewTip, &hookNewBase);
+ Player_UpdateWeaponInfo(play, &this->collider, &this->weaponInfo, &posA, &posB);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx, "../z_arms_hook.c", 895);
gSPDisplayList(POLY_OPA_DISP++, gLinkAdultHookshotTipDL);
diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
index d06019f040..fe85e5693a 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
@@ -12,7 +12,7 @@ typedef void (*ArmsHookActionFunc)(struct ArmsHook*, struct PlayState*);
typedef struct ArmsHook {
/* 0x0000 */ Actor actor;
/* 0x014C */ ColliderQuad collider;
- /* 0x01CC */ WeaponInfo hookInfo;
+ /* 0x01CC */ WeaponInfo weaponInfo;
/* 0x01E8 */ Vec3f unk_1E8;
/* 0x01F4 */ Vec3f unk_1F4;
/* 0x0200 */ Actor* attachedActor;
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 9e6fca4b52..723852f33b 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
@@ -294,9 +294,9 @@ void BgYdanSp_FloorWebIdle(BgYdanSp* this, PlayState* play) {
webPos.x = this->dyna.actor.world.pos.x;
webPos.y = this->dyna.actor.world.pos.y - 50.0f;
webPos.z = this->dyna.actor.world.pos.z;
- if (Player_IsBurningStickInRange(play, &webPos, 70.0f, 50.0f) != 0) {
- this->dyna.actor.home.pos.x = player->meleeWeaponInfo[0].tip.x;
- this->dyna.actor.home.pos.z = player->meleeWeaponInfo[0].tip.z;
+ if (Player_IsBurningStickInRange(play, &webPos, 70.0f, 50.0f)) {
+ this->dyna.actor.home.pos.x = MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->x;
+ this->dyna.actor.home.pos.z = MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->z;
BgYdanSp_BurnWeb(this, play);
return;
}
@@ -412,10 +412,10 @@ void BgYdanSp_WallWebIdle(BgYdanSp* this, PlayState* play) {
this->dyna.actor.home.pos.y = this->dyna.actor.world.pos.y + 80.0f;
BgYdanSp_BurnWeb(this, play);
} else if (player->heldItemAction == PLAYER_IA_DEKU_STICK && player->unk_860 != 0) {
- Actor_WorldToActorCoords(&this->dyna.actor, &sp30, &player->meleeWeaponInfo[0].tip);
+ Actor_WorldToActorCoords(&this->dyna.actor, &sp30, MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0]));
if (fabsf(sp30.x) < 100.0f && sp30.z < 1.0f && sp30.y < 200.0f) {
OnePointCutscene_Init(play, 3020, 40, &this->dyna.actor, CAM_ID_MAIN);
- Math_Vec3f_Copy(&this->dyna.actor.home.pos, &player->meleeWeaponInfo[0].tip);
+ Math_Vec3f_Copy(&this->dyna.actor.home.pos, MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0]));
BgYdanSp_BurnWeb(this, play);
}
}
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 efe3f9583f..3c19bf8eab 100644
--- a/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
+++ b/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
@@ -17,6 +17,7 @@
#include "sfx.h"
#include "sys_math.h"
#include "sys_matrix.h"
+#include "tex_len.h"
#include "versions.h"
#include "z_lib.h"
#include "effect.h"
@@ -28,7 +29,7 @@
#include "assets/objects/object_ganon2/object_ganon2.h"
#include "assets/objects/object_ganon_anime3/object_ganon_anime3.h"
#include "assets/objects/object_geff/object_geff.h"
-#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ique-cn:128 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
@@ -75,6 +76,19 @@ void BossGanon2_DrawEffects(PlayState* play);
void BossGanon2_GenShadowTexture(void* shadowTexture, BossGanon2* this, PlayState* play);
void BossGanon2_DrawShadowTexture(void* shadowTexture, BossGanon2* this, PlayState* play);
+static Gfx gGanonLightOrbMaterialDL[14];
+static Gfx gGanonLightOrbModelDL[3];
+static Gfx gGanonShadowMaterialDL[4];
+static Gfx gGanonShadowModelDL[6];
+static Vtx gGanonSwordTrailVtx[22];
+static Gfx gGanonSwordTrailDL[35];
+static Gfx gGanonTriforceDL[16];
+static Gfx gGanonLightningDL[17];
+static Gfx gGanonFireRingDL[36];
+static Gfx gGanonZeldaMagicDL[33];
+static Gfx gGanonMasterSwordShadowDL[16];
+static Gfx gGanonMasterSwordDL[122];
+
ActorProfile Boss_Ganon2_Profile = {
/**/ ACTOR_BOSS_GANON2,
/**/ ACTORCAT_BOSS,
@@ -3460,4 +3474,145 @@ void BossGanon2_DrawShadowTexture(void* shadowTexture, BossGanon2* this, PlaySta
// padding
static u32 D_809071FC[2] = { 0 };
-#include "assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.c"
+#define gGanonLightOrbTex_WIDTH 64
+#define gGanonLightOrbTex_HEIGHT 64
+static u64 gGanonLightOrbTex[TEX_LEN(u64, gGanonLightOrbTex_WIDTH, gGanonLightOrbTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightOrbTex.i8.inc.c"
+};
+
+static Vtx gGanonLightOrbModelVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightOrbModelVtx.inc.c"
+};
+
+static Gfx gGanonLightOrbMaterialDL[14] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightOrbMaterialDL.inc.c"
+};
+
+static Gfx gGanonLightOrbModelDL[3] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightOrbModelDL.inc.c"
+};
+
+static Vtx gGanonShadowModelVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonShadowModelVtx.inc.c"
+};
+
+static Gfx gGanonShadowMaterialDL[4] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonShadowMaterialDL.inc.c"
+};
+
+static Gfx gGanonShadowModelDL[6] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonShadowModelDL.inc.c"
+};
+
+#define gGanonSwordTrailTex_WIDTH 32
+#define gGanonSwordTrailTex_HEIGHT 32
+static u64 gGanonSwordTrailTex[TEX_LEN(u64, gGanonSwordTrailTex_WIDTH, gGanonSwordTrailTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonSwordTrailTex.i8.inc.c"
+};
+
+#define gGanonSwordTrailMaskTex_WIDTH 32
+#define gGanonSwordTrailMaskTex_HEIGHT 32
+static u64 gGanonSwordTrailMaskTex[TEX_LEN(u64, gGanonSwordTrailMaskTex_WIDTH, gGanonSwordTrailMaskTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonSwordTrailMaskTex.i4.inc.c"
+};
+
+static Vtx gGanonSwordTrailVtx[22] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonSwordTrailVtx.inc.c"
+};
+
+static Gfx gGanonSwordTrailDL[35] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonSwordTrailDL.inc.c"
+};
+
+#define gGanonTriforceTex_WIDTH 64
+#define gGanonTriforceTex_HEIGHT 64
+static u64 gGanonTriforceTex[TEX_LEN(u64, gGanonTriforceTex_WIDTH, gGanonTriforceTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonTriforceTex.i8.inc.c"
+};
+
+static Vtx gGanonTriforceVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonTriforceVtx.inc.c"
+};
+
+static Gfx gGanonTriforceDL[16] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonTriforceDL.inc.c"
+};
+
+#define gGanonLightningTex_WIDTH 32
+#define gGanonLightningTex_HEIGHT 160
+static u64 gGanonLightningTex[TEX_LEN(u64, gGanonLightningTex_WIDTH, gGanonLightningTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightningTex.i4.inc.c"
+};
+
+static Vtx gGanonLightningVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightningVtx.inc.c"
+};
+
+static Gfx gGanonLightningDL[17] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonLightningDL.inc.c"
+};
+
+#define gGanonFireRingTex_WIDTH 32
+#define gGanonFireRingTex_HEIGHT 64
+static u64 gGanonFireRingTex[TEX_LEN(u64, gGanonFireRingTex_WIDTH, gGanonFireRingTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonFireRingTex.i8.inc.c"
+};
+
+static Vtx gGanonFireRingVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonFireRingVtx.inc.c"
+};
+
+static Gfx gGanonFireRingDL[36] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonFireRingDL.inc.c"
+};
+
+#define gGanonZeldaMagicTex_WIDTH 32
+#define gGanonZeldaMagicTex_HEIGHT 64
+static u64 gGanonZeldaMagicTex[TEX_LEN(u64, gGanonZeldaMagicTex_WIDTH, gGanonZeldaMagicTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonZeldaMagicTex.i8.inc.c"
+};
+
+static Vtx gGanonZeldaMagicVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonZeldaMagicVtx.inc.c"
+};
+
+static Gfx gGanonZeldaMagicDL[33] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonZeldaMagicDL.inc.c"
+};
+
+#define gGanonMasterSwordShadowTex_WIDTH 32
+#define gGanonMasterSwordShadowTex_HEIGHT 32
+static u64
+ gGanonMasterSwordShadowTex[TEX_LEN(u64, gGanonMasterSwordShadowTex_WIDTH, gGanonMasterSwordShadowTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordShadowTex.i8.inc.c"
+ };
+
+static Vtx gGanonMasterSwordShadowVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordShadowVtx.inc.c"
+};
+
+static Gfx gGanonMasterSwordShadowDL[16] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordShadowDL.inc.c"
+};
+
+#define gGanonMasterSwordPommelTex_WIDTH 16
+#define gGanonMasterSwordPommelTex_HEIGHT 16
+static u64 gGanonMasterSwordPommelTex[TEX_LEN(u64, gGanonMasterSwordPommelTex_WIDTH, gGanonMasterSwordPommelTex_HEIGHT,
+ 16)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordPommelTex.rgba16.inc.c"
+};
+
+#define gGanonMasterSwordGuardTex_WIDTH 32
+#define gGanonMasterSwordGuardTex_HEIGHT 32
+static u64
+ gGanonMasterSwordGuardTex[TEX_LEN(u64, gGanonMasterSwordGuardTex_WIDTH, gGanonMasterSwordGuardTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordGuardTex.rgba16.inc.c"
+ };
+
+static Vtx gGanonMasterSwordVtx[] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordVtx.inc.c"
+};
+
+static Gfx gGanonMasterSwordDL[122] = {
+#include "assets/overlays/ovl_Boss_Ganon2/gGanonMasterSwordDL.inc.c"
+};
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 975125ae7c..23fccf40f3 100644
--- a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
+++ b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
@@ -2769,7 +2769,7 @@ void BossSst_DrawHand(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
} else {
gDPSetEnvColor(POLY_OPA_DISP++, sStaticColor.r, sStaticColor.g, sStaticColor.b, 0);
- gSPSegment(POLY_OPA_DISP++, 0x08, sBodyStaticDList);
+ gSPSegment(POLY_OPA_DISP++, 0x08, sBodyStaticDL);
}
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
@@ -2795,7 +2795,7 @@ void BossSst_DrawHand(Actor* thisx, PlayState* play) {
&trail->world.rot);
Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
- gSPSegment(POLY_XLU_DISP++, 0x08, sHandTrailDList);
+ gSPSegment(POLY_XLU_DISP++, 0x08, sHandTrailDL);
gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, ((3 - i) * 10) + 20, 0, ((3 - i) * 20) + 50,
((3 - i) * 30) + 70);
@@ -2904,7 +2904,7 @@ void BossSst_DrawHead(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
} else {
gDPSetEnvColor(POLY_OPA_DISP++, sStaticColor.r, sStaticColor.g, sStaticColor.b, 0);
- gSPSegment(POLY_OPA_DISP++, 0x08, sBodyStaticDList);
+ gSPSegment(POLY_OPA_DISP++, 0x08, sBodyStaticDL);
}
} else {
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
@@ -2956,7 +2956,7 @@ void BossSst_DrawHead(Actor* thisx, PlayState* play) {
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx, "../z_boss_sst.c", 6934);
- gSPDisplayList(POLY_XLU_DISP++, sIntroVanishDList);
+ gSPDisplayList(POLY_XLU_DISP++, sIntroVanishDL);
}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_sst.c", 6941);
@@ -3257,7 +3257,7 @@ void BossSst_DrawEffects(Actor* thisx, PlayState* play) {
Matrix_Scale(effect->scale * 0.001f, 1.0f, effect->scale * 0.001f, MTXMODE_APPLY);
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx, "../z_boss_sst.c", 7423);
- gSPDisplayList(POLY_XLU_DISP++, sShadowDList);
+ gSPDisplayList(POLY_XLU_DISP++, sShadowDL);
effect++;
}
}
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 fd54803e25..abfbb1d29b 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
@@ -181,7 +181,26 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) {
}
#if DEBUG_ASSETS
-#include "assets/overlays/ovl_Elf_Msg/ovl_Elf_Msg.c"
+
+static Gfx sMaterialDL[8] = {
+#include "assets/overlays/ovl_Elf_Msg/sMaterialDL.inc.c"
+};
+
+static Vtx sCylinderVtx[] = {
+#include "assets/overlays/ovl_Elf_Msg/sCylinderVtx.inc.c"
+};
+
+static Gfx sCylinderDL[16] = {
+#include "assets/overlays/ovl_Elf_Msg/sCylinderDL.inc.c"
+};
+
+static Vtx sCubeVtx[] = {
+#include "assets/overlays/ovl_Elf_Msg/sCubeVtx.inc.c"
+};
+
+static Gfx sCubeDL[8] = {
+#include "assets/overlays/ovl_Elf_Msg/sCubeDL.inc.c"
+};
void ElfMsg_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_elf_msg.c", 436);
@@ -198,7 +217,7 @@ void ElfMsg_Draw(Actor* thisx, PlayState* play) {
}
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx, "../z_elf_msg.c", 448);
- gSPDisplayList(POLY_XLU_DISP++, D_809AD278);
+ gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
if (PARAMS_GET_NOSHIFT(thisx->params, 14, 1)) {
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
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 11a01bc4b8..9a7401619e 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
@@ -163,7 +163,18 @@ void ElfMsg2_Update(Actor* thisx, PlayState* play) {
}
#if DEBUG_ASSETS
-#include "assets/overlays/ovl_Elf_Msg2/ovl_Elf_Msg2.c"
+
+static Gfx sMaterialDL[8] = {
+#include "assets/overlays/ovl_Elf_Msg2/sMaterialDL.inc.c"
+};
+
+static Vtx sCubeVtx[] = {
+#include "assets/overlays/ovl_Elf_Msg2/sCubeVtx.inc.c"
+};
+
+static Gfx sCubeDL[8] = {
+#include "assets/overlays/ovl_Elf_Msg2/sCubeDL.inc.c"
+};
void ElfMsg2_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_elf_msg2.c", 355);
@@ -175,7 +186,7 @@ void ElfMsg2_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 100, 100, 255, R_NAVI_MSG_REGION_ALPHA);
MATRIX_FINALIZE_AND_LOAD(POLY_XLU_DISP++, play->state.gfxCtx, "../z_elf_msg2.c", 362);
- gSPDisplayList(POLY_XLU_DISP++, D_809ADC38);
+ gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
CLOSE_DISPS(play->state.gfxCtx, "../z_elf_msg2.c", 367);
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 c4a90bec05..48517bfe41 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -429,36 +429,36 @@ void EnArrow_Update(Actor* thisx, PlayState* play) {
}
void func_809B4800(EnArrow* this, PlayState* play) {
- static Vec3f D_809B4E88 = { 0.0f, 400.0f, 1500.0f };
- static Vec3f D_809B4E94 = { 0.0f, -400.0f, 1500.0f };
+ static Vec3f sPosAOffset = { 0.0f, 400.0f, 1500.0f };
+ static Vec3f sPosBOffset = { 0.0f, -400.0f, 1500.0f };
static Vec3f D_809B4EA0 = { 0.0f, 0.0f, -300.0f };
- Vec3f sp44;
- Vec3f sp38;
+ Vec3f posA;
+ Vec3f posB;
s32 addBlureVertex;
Matrix_MultVec3f(&D_809B4EA0, &this->unk_21C);
if (EnArrow_Fly == this->actionFunc) {
- Matrix_MultVec3f(&D_809B4E88, &sp44);
- Matrix_MultVec3f(&D_809B4E94, &sp38);
+ Matrix_MultVec3f(&sPosAOffset, &posA);
+ Matrix_MultVec3f(&sPosBOffset, &posB);
if (this->actor.params <= ARROW_SEED) {
addBlureVertex = this->actor.params <= ARROW_LIGHT;
if (this->hitActor == NULL) {
- addBlureVertex &= func_80090480(play, &this->collider, &this->weaponInfo, &sp44, &sp38);
+ addBlureVertex &= Player_UpdateWeaponInfo(play, &this->collider, &this->weaponInfo, &posA, &posB);
} else {
if (addBlureVertex) {
- if ((sp44.x == this->weaponInfo.tip.x) && (sp44.y == this->weaponInfo.tip.y) &&
- (sp44.z == this->weaponInfo.tip.z) && (sp38.x == this->weaponInfo.base.x) &&
- (sp38.y == this->weaponInfo.base.y) && (sp38.z == this->weaponInfo.base.z)) {
+ if ((posA.x == this->weaponInfo.posA.x) && (posA.y == this->weaponInfo.posA.y) &&
+ (posA.z == this->weaponInfo.posA.z) && (posB.x == this->weaponInfo.posB.x) &&
+ (posB.y == this->weaponInfo.posB.y) && (posB.z == this->weaponInfo.posB.z)) {
addBlureVertex = false;
}
}
}
if (addBlureVertex) {
- EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &sp44, &sp38);
+ EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &posA, &posB);
}
}
}
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 d70422b1d0..f679755105 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
@@ -257,22 +257,22 @@ void EnBoom_Update(Actor* thisx, PlayState* play) {
}
void EnBoom_Draw(Actor* thisx, PlayState* play) {
- static Vec3f sMultVec1 = { -960.0f, 0.0f, 0.0f };
- static Vec3f sMultVec2 = { 960.0f, 0.0f, 0.0f };
+ static Vec3f sPosAOffset = { -960.0f, 0.0f, 0.0f };
+ static Vec3f sPosBOffset = { 960.0f, 0.0f, 0.0f };
EnBoom* this = (EnBoom*)thisx;
- Vec3f vec1;
- Vec3f vec2;
+ Vec3f posA;
+ Vec3f posB;
OPEN_DISPS(play->state.gfxCtx, "../z_en_boom.c", 567);
Matrix_RotateY(BINANG_TO_RAD(this->actor.world.rot.y), MTXMODE_APPLY);
Matrix_RotateZ(BINANG_TO_RAD(0x1F40), MTXMODE_APPLY);
Matrix_RotateX(BINANG_TO_RAD(this->actor.world.rot.x), MTXMODE_APPLY);
- Matrix_MultVec3f(&sMultVec1, &vec1);
- Matrix_MultVec3f(&sMultVec2, &vec2);
+ Matrix_MultVec3f(&sPosAOffset, &posA);
+ Matrix_MultVec3f(&sPosBOffset, &posB);
- if (func_80090480(play, &this->collider, &this->boomerangInfo, &vec1, &vec2)) {
- EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &vec1, &vec2);
+ if (Player_UpdateWeaponInfo(play, &this->collider, &this->weaponInfo, &posA, &posB)) {
+ EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &posA, &posB);
}
Gfx_SetupDL_25Opa(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.h b/src/overlays/actors/ovl_En_Boom/z_en_boom.h
index f62edc7654..83b960bc66 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.h
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.h
@@ -17,7 +17,7 @@ typedef struct EnBoom {
/* 0x01D4 */ u8 returnTimer; // returns to Link when 0
/* 0x01D5 */ u8 activeTimer; // increments once every update
/* 0x01D8 */ s32 effectIndex;
- /* 0x01DC */ WeaponInfo boomerangInfo;
+ /* 0x01DC */ WeaponInfo weaponInfo;
/* 0x01F8 */ EnBoomActionFunc actionFunc;
} EnBoom; // size = 0x01FC
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 58a5392306..888ef865e1 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -318,9 +318,11 @@ void EnButte_FollowLink(EnButte* this, PlayState* play) {
minAnimSpeed = 0.0f;
if ((this->flightParamsIdx != 0) && (this->timer < 12)) {
- swordTip.x = player->meleeWeaponInfo[0].tip.x + Math_SinS(player->actor.shape.rot.y) * 10.0f;
- swordTip.y = player->meleeWeaponInfo[0].tip.y;
- swordTip.z = player->meleeWeaponInfo[0].tip.z + Math_CosS(player->actor.shape.rot.y) * 10.0f;
+ swordTip.x =
+ MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->x + Math_SinS(player->actor.shape.rot.y) * 10.0f;
+ swordTip.y = MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->y;
+ swordTip.z =
+ MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->z + Math_CosS(player->actor.shape.rot.y) * 10.0f;
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &swordTip) + (s16)(Rand_ZeroOne() * D_809CE410);
if (Math_ScaledStepToS(&this->actor.world.rot.y, yaw, 2000) != 0) {
@@ -332,7 +334,7 @@ void EnButte_FollowLink(EnButte* this, PlayState* play) {
}
}
- this->posYTarget = MAX(player->actor.world.pos.y + 30.0f, player->meleeWeaponInfo[0].tip.y);
+ this->posYTarget = MAX(player->actor.world.pos.y + 30.0f, MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->y);
EnButte_Turn(this);
@@ -352,7 +354,8 @@ void EnButte_FollowLink(EnButte* this, PlayState* play) {
(this->swordDownTimer <= 0) && (distSqFromHome < SQ(320.0f)))) {
EnButte_SetupFlyAround(this);
} else if (distSqFromHome > SQ(240.0f)) {
- distSqFromSword = Math3D_Dist2DSq(player->meleeWeaponInfo[0].tip.x, player->meleeWeaponInfo[0].tip.z,
+ distSqFromSword = Math3D_Dist2DSq(MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->x,
+ MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0])->z,
this->actor.world.pos.x, this->actor.world.pos.z);
if (distSqFromSword < SQ(60.0f)) {
EnButte_SetupTransformIntoFairy(this);
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 6237f84e06..0830301e04 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
@@ -10,6 +10,7 @@
#include "gfx_setupdl.h"
#include "printf.h"
#include "sys_matrix.h"
+#include "tex_len.h"
#include "play_state.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
@@ -35,7 +36,95 @@ ActorProfile En_Ganon_Organ_Profile = {
static u64 sForceAlignment = 0;
-#include "assets/overlays/ovl_En_Ganon_Organ/ovl_En_Ganon_Organ.c"
+#define sRoomCarpetTex_WIDTH 64
+#define sRoomCarpetTex_HEIGHT 16
+static u64 sRoomCarpetTex[TEX_LEN(u64, sRoomCarpetTex_WIDTH, sRoomCarpetTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomCarpetTex.rgba16.inc.c"
+};
+
+#define sRoomOrganPipeTex_WIDTH 16
+#define sRoomOrganPipeTex_HEIGHT 64
+static u64 sRoomOrganPipeTex[TEX_LEN(u64, sRoomOrganPipeTex_WIDTH, sRoomOrganPipeTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganPipeTex.i4.inc.c"
+};
+
+#define sRoomOrganCorbelsTex_WIDTH 16
+#define sRoomOrganCorbelsTex_HEIGHT 16
+static u64 sRoomOrganCorbelsTex[TEX_LEN(u64, sRoomOrganCorbelsTex_WIDTH, sRoomOrganCorbelsTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganCorbelsTex.i4.inc.c"
+};
+
+#define sRoomOrganGrillTex_WIDTH 16
+#define sRoomOrganGrillTex_HEIGHT 16
+static u64 sRoomOrganGrillTex[TEX_LEN(u64, sRoomOrganGrillTex_WIDTH, sRoomOrganGrillTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganGrillTex.rgba16.inc.c"
+};
+
+#define sRoomCrestFriezeTex_WIDTH 32
+#define sRoomCrestFriezeTex_HEIGHT 32
+static u64 sRoomCrestFriezeTex[TEX_LEN(u64, sRoomCrestFriezeTex_WIDTH, sRoomCrestFriezeTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomCrestFriezeTex.i4.inc.c"
+};
+
+#define sRoomColumnFriezeAndCanopyTex_WIDTH 16
+#define sRoomColumnFriezeAndCanopyTex_HEIGHT 16
+static u64 sRoomColumnFriezeAndCanopyTex[TEX_LEN(u64, sRoomColumnFriezeAndCanopyTex_WIDTH,
+ sRoomColumnFriezeAndCanopyTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomColumnFriezeAndCanopyTex.i4.inc.c"
+};
+
+#define sRoomColumnMetalEdgingTex_WIDTH 16
+#define sRoomColumnMetalEdgingTex_HEIGHT 16
+static u64
+ sRoomColumnMetalEdgingTex[TEX_LEN(u64, sRoomColumnMetalEdgingTex_WIDTH, sRoomColumnMetalEdgingTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomColumnMetalEdgingTex.rgba16.inc.c"
+ };
+
+#define sRoomStatueWingTex_WIDTH 16
+#define sRoomStatueWingTex_HEIGHT 16
+static u64 sRoomStatueWingTex[TEX_LEN(u64, sRoomStatueWingTex_WIDTH, sRoomStatueWingTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomStatueWingTex.rgba16.inc.c"
+};
+
+#define sRoomPillarTex_WIDTH 8
+#define sRoomPillarTex_HEIGHT 32
+static u64 sRoomPillarTex[TEX_LEN(u64, sRoomPillarTex_WIDTH, sRoomPillarTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomPillarTex.i8.inc.c"
+};
+
+#define sRoomOrganKeyboardTex_WIDTH 32
+#define sRoomOrganKeyboardTex_HEIGHT 8
+static u64 sRoomOrganKeyboardTex[TEX_LEN(u64, sRoomOrganKeyboardTex_WIDTH, sRoomOrganKeyboardTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganKeyboardTex.rgba16.inc.c"
+};
+
+#define sRoomOrganKeyEndTex_WIDTH 4
+#define sRoomOrganKeyEndTex_HEIGHT 8
+static u64 sRoomOrganKeyEndTex[TEX_LEN(u64, sRoomOrganKeyEndTex_WIDTH, sRoomOrganKeyEndTex_HEIGHT, 16)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganKeyEndTex.rgba16.inc.c"
+};
+
+#define sRoomStepTex_WIDTH 16
+#define sRoomStepTex_HEIGHT 16
+static u64 sRoomStepTex[TEX_LEN(u64, sRoomStepTex_WIDTH, sRoomStepTex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomStepTex.i4.inc.c"
+};
+
+static Vtx sRoomOrganAndFloorVtx[] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganAndFloorVtx.inc.c"
+};
+
+static Gfx sRoomOrganAndFloorDL[429] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomOrganAndFloorDL.inc.c"
+};
+
+static Vtx sRoomStatuesVtx[] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomStatuesVtx.inc.c"
+};
+
+static Gfx sRoomStatuesDL[152] = {
+#include "assets/overlays/ovl_En_Ganon_Organ/sRoomStatuesDL.inc.c"
+};
void EnGanonOrgan_Init(Actor* thisx, PlayState* play) {
thisx->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
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 88098c93bf..ed01e29e4a 100644
--- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
+++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.c
@@ -1,3 +1,9 @@
+/*
+ * File: z_en_ma2.c
+ * Overlay: En_Ma2
+ * Description: Adult Malon (Stables / Ranch Pre-Epona)
+ */
+
#include "z_en_ma2.h"
#include "gfx.h"
@@ -25,14 +31,14 @@ void EnMa2_Destroy(Actor* thisx, PlayState* play);
void EnMa2_Update(Actor* thisx, PlayState* play);
void EnMa2_Draw(Actor* thisx, PlayState* play);
-void func_80AA1AE4(EnMa2* this, PlayState* play);
-s32 func_80AA1C68(EnMa2* this);
+void EnMa2_UpdateTracking(EnMa2* this, PlayState* play);
+s32 EnMa2_IsSinging(EnMa2* this);
void EnMa2_UpdateEyes(EnMa2* this);
-void func_80AA1DB4(EnMa2* this, PlayState* play);
-void func_80AA2018(EnMa2* this, PlayState* play);
-void func_80AA204C(EnMa2* this, PlayState* play);
-void func_80AA20E4(EnMa2* this, PlayState* play);
-void func_80AA21C8(EnMa2* this, PlayState* play);
+void EnMa2_UpdateSinging(EnMa2* this, PlayState* play);
+void EnMa2_WaitToEndTalk(EnMa2* this, PlayState* play);
+void EnMa2_WaitForOcarina(EnMa2* this, PlayState* play);
+void EnMa2_WaitForEponasSong(EnMa2* this, PlayState* play);
+void EnMa2_ForceTalkAfterSong(EnMa2* this, PlayState* play);
ActorProfile En_Ma2_Profile = {
/**/ ACTOR_EN_MA2,
@@ -69,11 +75,11 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
typedef enum EnMa2Animation {
- /* 0 */ ENMA2_ANIM_0,
- /* 1 */ ENMA2_ANIM_1,
- /* 2 */ ENMA2_ANIM_2,
- /* 3 */ ENMA2_ANIM_3,
- /* 4 */ ENMA2_ANIM_4
+ /* 0 */ MALON_ADULT_ANIM_IDLE,
+ /* 1 */ MALON_ADULT_ANIM_IDLE_NOMORPH,
+ /* 2 */ MALON_ADULT_ANIM_STANDING,
+ /* 3 */ MALON_ADULT_ANIM_SING,
+ /* 4 */ MALON_ADULT_ANIM_SING_NOMORPH
} EnMa2Animation;
static AnimationFrameCountInfo sAnimationInfo[] = {
@@ -92,9 +98,9 @@ u16 EnMa2_GetTextId(PlayState* play, Actor* thisx) {
return 0x2056;
}
if (IS_NIGHT) {
- if (GET_INFTABLE(INFTABLE_8C)) {
+ if (GET_INFTABLE(INFTABLE_TALKED_TO_ADULT_MALON_AFTER_SONG)) {
return 0x2052;
- } else if (GET_INFTABLE(INFTABLE_8E)) {
+ } else if (GET_INFTABLE(INFTABLE_PLAYED_SONG_FOR_ADULT_MALON)) {
return 0x2051;
} else {
return 0x2050;
@@ -110,9 +116,10 @@ s16 EnMa2_UpdateTalkState(PlayState* play, Actor* thisx) {
case TEXT_STATE_CLOSING:
switch (thisx->textId) {
case 0x2051:
- SET_INFTABLE(INFTABLE_8C);
+ SET_INFTABLE(INFTABLE_TALKED_TO_ADULT_MALON_AFTER_SONG);
talkState = NPC_TALK_STATE_ACTION;
break;
+ // unreachable, 0x2053 is a text id for Gossip Stones, which EnMa2 never sets
case 0x2053:
SET_INFTABLE(INFTABLE_8D);
talkState = NPC_TALK_STATE_IDLE;
@@ -135,7 +142,7 @@ s16 EnMa2_UpdateTalkState(PlayState* play, Actor* thisx) {
return talkState;
}
-void func_80AA1AE4(EnMa2* this, PlayState* play) {
+void EnMa2_UpdateTracking(EnMa2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 trackingMode;
@@ -151,47 +158,58 @@ void func_80AA1AE4(EnMa2* this, PlayState* play) {
Npc_TrackPoint(&this->actor, &this->interactInfo, 0, trackingMode);
}
-u16 func_80AA1B58(EnMa2* this, PlayState* play) {
+typedef enum {
+ MALON_ADULT_SPAWN_NONE = 0,
+ MALON_ADULT_SPAWN_DAY_STABLES_NO_EPONA,
+ MALON_ADULT_SPAWN_NIGHT_RANCH_NO_EPONA,
+ MALON_ADULT_SPAWN_ALWAYS
+} EnMa2SpawnIndex;
+
+u16 EnMa2_GetSpawnIndex(EnMa2* this, PlayState* play) {
if (LINK_IS_CHILD) {
- return 0;
+ return MALON_ADULT_SPAWN_NONE;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (play->sceneId == SCENE_STABLE) && IS_DAY &&
(this->actor.shape.rot.z == 5)) {
- return 1;
+ return MALON_ADULT_SPAWN_DAY_STABLES_NO_EPONA;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (play->sceneId == SCENE_LON_LON_RANCH) && IS_NIGHT &&
(this->actor.shape.rot.z == 6)) {
- return 2;
+ return MALON_ADULT_SPAWN_NIGHT_RANCH_NO_EPONA;
}
if (!GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) || (play->sceneId != SCENE_LON_LON_RANCH)) {
- return 0;
+ return MALON_ADULT_SPAWN_NONE;
}
if ((this->actor.shape.rot.z == 7) && IS_DAY) {
- return 3;
+ return MALON_ADULT_SPAWN_ALWAYS;
}
if ((this->actor.shape.rot.z == 8) && IS_NIGHT) {
- return 3;
+ return MALON_ADULT_SPAWN_ALWAYS;
}
- return 0;
+ return MALON_ADULT_SPAWN_NONE;
}
-s32 func_80AA1C68(EnMa2* this) {
+s32 EnMa2_IsSinging(EnMa2* this) {
if (this->skelAnime.animation != &gMalonAdultSingAnim) {
- return 0;
+ return false;
}
+
if (this->interactInfo.talkState != NPC_TALK_STATE_IDLE) {
- return 0;
+ return false;
}
+
this->blinkTimer = 0;
+
if (this->eyeIndex != 2) {
- return 0;
+ return false;
}
+
this->mouthIndex = 2;
- return 1;
+ return true;
}
void EnMa2_UpdateEyes(EnMa2* this) {
- if ((!func_80AA1C68(this)) && (DECR(this->blinkTimer) == 0)) {
+ if ((!EnMa2_IsSinging(this)) && (DECR(this->blinkTimer) == 0)) {
this->eyeIndex++;
if (this->eyeIndex >= 3) {
this->blinkTimer = Rand_S16Offset(30, 30);
@@ -207,19 +225,19 @@ void EnMa2_ChangeAnim(EnMa2* this, s32 index) {
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
}
-void func_80AA1DB4(EnMa2* this, PlayState* play) {
+void EnMa2_UpdateSinging(EnMa2* this, PlayState* play) {
if (this->skelAnime.animation == &gMalonAdultSingAnim) {
if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) {
- if (this->isNotSinging) {
+ if (this->singingDisabled) {
// Turn on singing
Audio_ToggleMalonSinging(false);
- this->isNotSinging = false;
+ this->singingDisabled = false;
}
} else {
- if (!this->isNotSinging) {
+ if (!this->singingDisabled) {
// Turn off singing
Audio_ToggleMalonSinging(true);
- this->isNotSinging = true;
+ this->singingDisabled = true;
}
}
}
@@ -235,24 +253,24 @@ void EnMa2_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(22), &sColChkInfoInit);
- switch (func_80AA1B58(this, play)) {
- case 1:
- EnMa2_ChangeAnim(this, ENMA2_ANIM_2);
- this->actionFunc = func_80AA2018;
+ switch (EnMa2_GetSpawnIndex(this, play)) {
+ case MALON_ADULT_SPAWN_DAY_STABLES_NO_EPONA:
+ EnMa2_ChangeAnim(this, MALON_ADULT_ANIM_STANDING);
+ this->actionFunc = EnMa2_WaitToEndTalk;
break;
- case 2:
- EnMa2_ChangeAnim(this, ENMA2_ANIM_3);
- this->actionFunc = func_80AA204C;
+ case MALON_ADULT_SPAWN_NIGHT_RANCH_NO_EPONA:
+ EnMa2_ChangeAnim(this, MALON_ADULT_ANIM_SING);
+ this->actionFunc = EnMa2_WaitForOcarina;
break;
- case 3:
+ case MALON_ADULT_SPAWN_ALWAYS:
if (GET_INFTABLE(INFTABLE_8D)) {
- EnMa2_ChangeAnim(this, ENMA2_ANIM_0);
+ EnMa2_ChangeAnim(this, MALON_ADULT_ANIM_IDLE);
} else {
- EnMa2_ChangeAnim(this, ENMA2_ANIM_3);
+ EnMa2_ChangeAnim(this, MALON_ADULT_ANIM_SING);
}
- this->actionFunc = func_80AA2018;
+ this->actionFunc = EnMa2_WaitToEndTalk;
break;
- case 0:
+ case MALON_ADULT_SPAWN_NONE:
Actor_Kill(&this->actor);
return;
}
@@ -270,48 +288,48 @@ void EnMa2_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80AA2018(EnMa2* this, PlayState* play) {
+void EnMa2_WaitToEndTalk(EnMa2* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
}
}
-void func_80AA204C(EnMa2* this, PlayState* play) {
+void EnMa2_WaitForOcarina(EnMa2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (player->stateFlags2 & PLAYER_STATE2_24) {
player->stateFlags2 |= PLAYER_STATE2_25;
player->unk_6A8 = &this->actor;
Message_StartOcarina(play, OCARINA_ACTION_CHECK_EPONA);
- this->actionFunc = func_80AA20E4;
+ this->actionFunc = EnMa2_WaitForEponasSong;
} else if (this->actor.xzDistToPlayer < 30.0f + this->collider.dim.radius) {
player->stateFlags2 |= PLAYER_STATE2_23;
}
}
-void func_80AA20E4(EnMa2* this, PlayState* play) {
+void EnMa2_WaitForEponasSong(EnMa2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (play->msgCtx.ocarinaMode >= OCARINA_MODE_04) {
- this->actionFunc = func_80AA204C;
+ this->actionFunc = EnMa2_WaitForOcarina;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
} else if (play->msgCtx.ocarinaMode == OCARINA_MODE_03) {
Audio_PlaySfxGeneral(NA_SE_SY_CORRECT_CHIME, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- this->unk_208 = 0x1E;
- SET_INFTABLE(INFTABLE_8E);
- this->actionFunc = func_80AA21C8;
+ this->timer = 0x1E;
+ SET_INFTABLE(INFTABLE_PLAYED_SONG_FOR_ADULT_MALON);
+ this->actionFunc = EnMa2_ForceTalkAfterSong;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
} else {
player->stateFlags2 |= PLAYER_STATE2_23;
}
}
-void func_80AA21C8(EnMa2* this, PlayState* play) {
+void EnMa2_ForceTalkAfterSong(EnMa2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (DECR(this->unk_208)) {
+ if (DECR(this->timer)) {
player->stateFlags2 |= PLAYER_STATE2_23;
} else {
if (this->interactInfo.talkState == NPC_TALK_STATE_IDLE) {
@@ -319,7 +337,7 @@ void func_80AA21C8(EnMa2* this, PlayState* play) {
Message_CloseTextbox(play);
} else {
this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
- this->actionFunc = func_80AA2018;
+ this->actionFunc = EnMa2_WaitToEndTalk;
}
}
}
@@ -333,9 +351,9 @@ void EnMa2_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnMa2_UpdateEyes(this);
this->actionFunc(this, play);
- func_80AA1DB4(this, play);
- func_80AA1AE4(this, play);
- if (this->actionFunc != func_80AA20E4) {
+ EnMa2_UpdateSinging(this, play);
+ EnMa2_UpdateTracking(this, play);
+ if (this->actionFunc != EnMa2_WaitForEponasSong) {
Npc_UpdateTalking(play, &this->actor, &this->interactInfo.talkState, this->collider.dim.radius + 30.0f,
EnMa2_GetTextId, EnMa2_UpdateTalkState);
}
@@ -362,8 +380,8 @@ s32 EnMa2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
}
if ((limbIndex == MALON_ADULT_CHEST_AND_NECK_LIMB) || (limbIndex == MALON_ADULT_LEFT_SHOULDER_LIMB) ||
(limbIndex == MALON_ADULT_RIGHT_SHOULDER_LIMB)) {
- rot->y += Math_SinS(this->unk_212[limbIndex].y) * 200.0f;
- rot->z += Math_CosS(this->unk_212[limbIndex].z) * 200.0f;
+ rot->y += Math_SinS(this->upperBodyRot[limbIndex].y) * 200.0f;
+ rot->z += Math_CosS(this->upperBodyRot[limbIndex].z) * 200.0f;
}
return false;
}
diff --git a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.h b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.h
index c312591b94..3e2a9b4b86 100644
--- a/src/overlays/actors/ovl_En_Ma2/z_en_ma2.h
+++ b/src/overlays/actors/ovl_En_Ma2/z_en_ma2.h
@@ -37,12 +37,12 @@ typedef struct EnMa2 {
/* 0x0190 */ EnMa2ActionFunc actionFunc;
/* 0x0194 */ ColliderCylinder collider;
/* 0x01E0 */ NpcInteractInfo interactInfo;
- /* 0x0208 */ s16 unk_208;
- /* 0x020A */ s16 isNotSinging;
+ /* 0x0208 */ s16 timer;
+ /* 0x020A */ s16 singingDisabled;
/* 0x020C */ s16 blinkTimer;
/* 0x020E */ s16 eyeIndex;
/* 0x0210 */ s16 mouthIndex;
- /* 0x0212 */ Vec3s unk_212[MALON_ADULT_LIMB_MAX];
+ /* 0x0212 */ Vec3s upperBodyRot[MALON_ADULT_LIMB_MAX];
} EnMa2; // size = 0x0284
#endif
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 8c1413bc0f..56e96bf293 100644
--- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c
+++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
@@ -1514,7 +1514,7 @@ void EnMb_Update(Actor* thisx, PlayState* play) {
void EnMb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
static Vec3f unused = { 1100.0f, -700.0f, 0.0f };
static Vec3f feetPos = { 0.0f, 0.0f, 0.0f };
- static Vec3f effSpawnModelPos = { 0.0f, -8000.0f, 0.0f };
+ static Vec3f effSpawnOffsetFromLeftHand = { 0.0f, -8000.0f, 0.0f };
static Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
s32 bodyPart = -1;
EnMb* this = (EnMb*)thisx;
@@ -1522,7 +1522,7 @@ void EnMb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (this->actor.params == ENMB_TYPE_CLUB) {
if (limbIndex == ENMB_LIMB_LHAND) {
- Matrix_MultVec3f(&effSpawnModelPos, &this->effSpawnPos);
+ Matrix_MultVec3f(&effSpawnOffsetFromLeftHand, &this->effSpawnPos);
if (this->attack > ENMB_ATTACK_NONE) {
EnMb_ClubUpdateAttackCollider(&this->actor, play);
}
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 575755d445..6f897d28b0 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.c
@@ -90,28 +90,6 @@ void EnRu1_DrawNothing(EnRu1* this, PlayState* play);
void EnRu1_DrawOpa(EnRu1* this, PlayState* play);
void EnRu1_DrawXlu(EnRu1* this, PlayState* play);
-typedef enum EnRu1Eyes {
- /* 0 */ ENRU1_EYES_OPEN,
- /* 1 */ ENRU1_EYES_HALF_BLINK,
- /* 2 */ ENRU1_EYES_CLOSED,
- /* 3 */ ENRU1_EYES_UP,
- /* 4 */ ENRU1_EYES_GAZING,
- /* 5 */ ENRU1_EYES_BLUSH,
-} EnRu1Eyes;
-
-typedef enum EnRu1Mouth {
- /* 0 */ ENRU1_MOUTH_SMILING,
- /* 1 */ ENRU1_MOUTH_FROWNING,
- /* 2 */ ENRU1_MOUTH_OPEN,
-} EnRu1Mouth;
-
-typedef enum EnRu1WaterState {
- /* 0 */ ENRU1_WATER_OUTSIDE,
- /* 1 */ ENRU1_WATER_IMMERSED,
- /* 2 */ ENRU1_WATER_BOBBING,
- /* 3 */ ENRU1_WATER_SINKING,
-} EnRu1WaterState;
-
static ColliderCylinderInitType1 sStandingCylinderInit = {
{
COL_MATERIAL_HIT0,
@@ -154,13 +132,52 @@ static s32 sUnused = 0;
static u32 D_80AF1938 = 0;
static EnRu1ActionFunc sActionFuncs[] = {
- func_80AEC0B4, func_80AEC100, func_80AEC130, func_80AEC17C, func_80AEC1D4, func_80AEC244, func_80AEC2C0,
- func_80AECA94, func_80AECAB4, func_80AECAD4, func_80AECB18, func_80AECB60, func_80AECBB8, func_80AECC1C,
- func_80AECC84, func_80AED304, func_80AED324, func_80AED344, func_80AED374, func_80AED3A4, func_80AED3E0,
- func_80AED414, func_80AEF29C, func_80AEF2AC, func_80AEF2D0, func_80AEF354, func_80AEF3A8, func_80AEEBD4,
- func_80AEEC5C, func_80AEECF0, func_80AEED58, func_80AEEDCC, func_80AEEE34, func_80AEEE9C, func_80AEEF08,
- func_80AEEF5C, func_80AEF9D8, func_80AEFA2C, func_80AEFAAC, func_80AEFB04, func_80AEFB68, func_80AEFCE8,
- func_80AEFBC8, func_80AEFC24, func_80AEFECC, func_80AEFF40,
+ func_80AEC0B4, // ENRU1_ACTION_00
+ func_80AEC100, // ENRU1_ACTION_01
+ func_80AEC130, // ENRU1_ACTION_02
+ func_80AEC17C, // ENRU1_ACTION_03
+ func_80AEC1D4, // ENRU1_ACTION_04
+ func_80AEC244, // ENRU1_ACTION_05
+ func_80AEC2C0, // ENRU1_ACTION_06
+ func_80AECA94, // ENRU1_ACTION_07
+ func_80AECAB4, // ENRU1_ACTION_08
+ func_80AECAD4, // ENRU1_ACTION_09
+ func_80AECB18, // ENRU1_ACTION_10
+ func_80AECB60, // ENRU1_ACTION_11
+ func_80AECBB8, // ENRU1_ACTION_12
+ func_80AECC1C, // ENRU1_ACTION_13
+ func_80AECC84, // ENRU1_ACTION_14
+ func_80AED304, // ENRU1_ACTION_15
+ func_80AED324, // ENRU1_ACTION_16
+ func_80AED344, // ENRU1_ACTION_17
+ func_80AED374, // ENRU1_ACTION_18
+ func_80AED3A4, // ENRU1_ACTION_19
+ func_80AED3E0, // ENRU1_ACTION_20
+ func_80AED414, // ENRU1_ACTION_21
+ func_80AEF29C, // ENRU1_ACTION_22
+ func_80AEF2AC, // ENRU1_ACTION_23
+ func_80AEF2D0, // ENRU1_ACTION_24
+ func_80AEF354, // ENRU1_ACTION_25
+ func_80AEF3A8, // ENRU1_ACTION_26
+ func_80AEEBD4, // ENRU1_ACTION_27
+ func_80AEEC5C, // ENRU1_ACTION_28
+ func_80AEECF0, // ENRU1_ACTION_29
+ func_80AEED58, // ENRU1_ACTION_30
+ func_80AEEDCC, // ENRU1_ACTION_31
+ func_80AEEE34, // ENRU1_ACTION_32
+ func_80AEEE9C, // ENRU1_ACTION_33
+ func_80AEEF08, // ENRU1_ACTION_34
+ func_80AEEF5C, // ENRU1_ACTION_35
+ func_80AEF9D8, // ENRU1_ACTION_36
+ func_80AEFA2C, // ENRU1_ACTION_37
+ func_80AEFAAC, // ENRU1_ACTION_38
+ func_80AEFB04, // ENRU1_ACTION_39
+ func_80AEFB68, // ENRU1_ACTION_40
+ func_80AEFCE8, // ENRU1_ACTION_41
+ func_80AEFBC8, // ENRU1_ACTION_42
+ func_80AEFC24, // ENRU1_ACTION_43
+ func_80AEFECC, // ENRU1_ACTION_44
+ func_80AEFF40, // ENRU1_ACTION_45
};
static EnRu1PreLimbDrawFunc sPreLimbDrawFuncs[] = {
@@ -325,7 +342,8 @@ s32 func_80AEB020(EnRu1* this, PlayState* play) {
if (actorIt->id == ACTOR_EN_RU1) {
someEnRu1 = (EnRu1*)actorIt;
if (someEnRu1 != this) {
- if ((someEnRu1->action == 31) || (someEnRu1->action == 32) || (someEnRu1->action == 24)) {
+ if ((someEnRu1->action == ENRU1_ACTION_31) || (someEnRu1->action == ENRU1_ACTION_32) ||
+ (someEnRu1->action == ENRU1_ACTION_24)) {
return true;
}
}
@@ -385,8 +403,8 @@ s32 func_80AEB1B4(PlayState* play) {
#if DEBUG_FEATURES
void func_80AEB1D8(EnRu1* this) {
- this->action = 36;
- this->drawConfig = 0;
+ this->action = ENRU1_ACTION_36;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
this->actor.velocity.x = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.velocity.z = 0.0f;
@@ -426,7 +444,7 @@ void EnRu1_AnimationChange(EnRu1* this, AnimationHeader* animation, u8 mode, f32
s32 EnRu1_UpdateSkelAnime(EnRu1* this) {
// why?
- if (this->action != 32) {
+ if (this->action != ENRU1_ACTION_32) {
return SkelAnime_Update(&this->skelAnime);
} else {
return SkelAnime_Update(&this->skelAnime);
@@ -449,8 +467,8 @@ void func_80AEB3CC(EnRu1* this) {
void EnRu1_InitOutsideJabuJabu(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWaitHandsBehindBackAnim, ANIMMODE_LOOP, 0, false);
- this->action = 0;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_00;
+ this->drawConfig = ENRU1_DRAW_OPA;
EnRu1_SetEyes(this, ENRU1_EYES_GAZING);
EnRu1_SetMouth(this, ENRU1_MOUTH_SMILING);
}
@@ -653,8 +671,8 @@ void func_80AEBCB8(EnRu1* this, UNK_TYPE arg1) {
void func_80AEBD1C(EnRu1* this, PlayState* play) {
if (func_80AEB480(play, 2)) {
- this->action = 1;
- this->drawConfig = 0;
+ this->action = ENRU1_ACTION_01;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
func_80AEB914(this, play);
func_80AEAECC(this, play);
EnRu1_SpawnSplash(this, play);
@@ -671,8 +689,8 @@ void func_80AEBD94(EnRu1* this, PlayState* play) {
func_80AEB934(this, play);
func_80AEB738(this, play);
Animation_Change(&this->skelAnime, &gRutoChildResurfaceAnim, 1.0f, 0.0f, frameCount, ANIMMODE_ONCE, 0.0f);
- this->action = 2;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_02;
+ this->drawConfig = ENRU1_DRAW_OPA;
}
}
@@ -684,7 +702,7 @@ void func_80AEBE3C(EnRu1* this, PlayState* play, s32 arg2) {
func_80AEB7D0(this);
Animation_Change(&this->skelAnime, &gRutoChildTreadWaterAnim, 1.0f, 0, frameCount, ANIMMODE_LOOP, -8.0f);
- this->action = 3;
+ this->action = ENRU1_ACTION_03;
} else {
func_80AEB954(this, play);
}
@@ -699,7 +717,7 @@ void func_80AEBEC8(EnRu1* this, PlayState* play) {
func_80AEB738(this, play);
Animation_Change(&this->skelAnime, &gRutoChildTransitionToSwimOnBackAnim, 1.0f, 0, frameCount, ANIMMODE_ONCE,
-8.0f);
- this->action = 4;
+ this->action = ENRU1_ACTION_04;
}
}
@@ -708,7 +726,7 @@ void func_80AEBF60(EnRu1* this, PlayState* play) {
s32 pad;
func_80AEB7D0(this);
- this->action = 5;
+ this->action = ENRU1_ACTION_05;
this->unk_364 = this->actor.world.pos;
} else {
func_80AEBA0C(this, play);
@@ -729,7 +747,7 @@ void func_80AEBFD8(EnRu1* this, PlayState* play) {
frameCount = Animation_GetLastFrame(&gRutoChildTransitionFromSwimOnBackAnim);
Animation_Change(&this->skelAnime, &gRutoChildTransitionFromSwimOnBackAnim, 1.0, 0, frameCount,
ANIMMODE_ONCE, -8.0f);
- this->action = 6;
+ this->action = ENRU1_ACTION_06;
}
}
}
@@ -807,7 +825,7 @@ void func_80AEC2C0(EnRu1* this, PlayState* play) {
void EnRu1_InitInJabuJabuHolesRoom(EnRu1* this, PlayState* play) {
if (!GET_INFTABLE(INFTABLE_141)) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
- this->action = 7;
+ this->action = ENRU1_ACTION_07;
EnRu1_SetMouth(this, ENRU1_MOUTH_FROWNING);
} else if (GET_INFTABLE(INFTABLE_147) && !GET_INFTABLE(INFTABLE_140) && !GET_INFTABLE(INFTABLE_145)) {
if (!func_80AEB020(this, play)) {
@@ -815,9 +833,9 @@ void EnRu1_InitInJabuJabuHolesRoom(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
- this->action = 22;
+ this->action = ENRU1_ACTION_22;
this->actor.room = -1;
- this->drawConfig = 0;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
this->roomNum1 = actorRoom;
this->roomNum3 = actorRoom;
this->roomNum2 = actorRoom;
@@ -907,7 +925,7 @@ void func_80AEC780(EnRu1* this, PlayState* play) {
play->csCtx.script = gRutoFirstMeetingCs;
gSaveContext.cutsceneTrigger = 1;
player->speedXZ = 0.0f;
- this->action = 8;
+ this->action = ENRU1_ACTION_08;
}
}
@@ -923,8 +941,8 @@ void func_80AEC81C(EnRu1* this, PlayState* play) {
newRotY = cue->rot.y;
this->actor.shape.rot.y = newRotY;
this->actor.world.rot.y = newRotY;
- this->action = 9;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_09;
+ this->drawConfig = ENRU1_DRAW_OPA;
}
}
@@ -932,7 +950,7 @@ void func_80AEC8B8(EnRu1* this, PlayState* play) {
if (func_80AEAFA0(play, 3, 3)) {
Animation_Change(&this->skelAnime, &gRutoChildTurnAroundAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildTurnAroundAnim), ANIMMODE_ONCE, -8.0f);
- this->action = 10;
+ this->action = ENRU1_ACTION_10;
}
}
@@ -941,7 +959,7 @@ void func_80AEC93C(EnRu1* this, UNK_TYPE arg1) {
Animation_Change(&this->skelAnime, &gRutoChildWalkAnim, 1.0f, 0, Animation_GetLastFrame(&gRutoChildWalkAnim),
ANIMMODE_LOOP, -8.0f);
this->actor.world.rot.y += 0x8000;
- this->action = 0xB;
+ this->action = ENRU1_ACTION_11;
this->unk_26C = 0.0f;
}
}
@@ -949,7 +967,7 @@ void func_80AEC93C(EnRu1* this, UNK_TYPE arg1) {
void func_80AEC9C4(EnRu1* this) {
this->unk_26C += 1.0f;
if (this->unk_26C >= 8.0f) {
- this->action = 12;
+ this->action = ENRU1_ACTION_12;
this->unk_26C = 0.0f;
this->actor.velocity.y = -1.0f;
}
@@ -959,7 +977,7 @@ void func_80AECA18(EnRu1* this) {
if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
s32 pad;
- this->action = 13;
+ this->action = ENRU1_ACTION_13;
this->unk_26C = 0.0f;
this->actor.velocity.y = 0.0f;
}
@@ -968,7 +986,7 @@ void func_80AECA18(EnRu1* this) {
void func_80AECA44(EnRu1* this, PlayState* play) {
if (func_80AEAFA0(play, 5, 3)) {
SET_INFTABLE(INFTABLE_141);
- this->action = 14;
+ this->action = ENRU1_ACTION_14;
}
}
@@ -1051,7 +1069,7 @@ void func_80AECCB0(EnRu1* this, PlayState* play) {
void EnRu1_InitInBossRoom(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWaitHandsOnHipsAnim, ANIMMODE_LOOP, 0, false);
- this->action = 15;
+ this->action = ENRU1_ACTION_15;
this->actor.shape.yOffset = -10000.0f;
EnRu1_SetEyes(this, ENRU1_EYES_BLUSH);
EnRu1_SetMouth(this, ENRU1_MOUTH_OPEN);
@@ -1129,12 +1147,12 @@ void func_80AED0B0(EnRu1* this, s32 state) {
}
void func_80AED0C8(EnRu1* this, PlayState* play) {
- this->action = 16;
+ this->action = ENRU1_ACTION_16;
}
void func_80AED0D8(EnRu1* this, PlayState* play) {
- this->action = 17;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_17;
+ this->drawConfig = ENRU1_DRAW_OPA;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
func_80AECCB0(this, play);
@@ -1142,7 +1160,7 @@ void func_80AED0D8(EnRu1* this, PlayState* play) {
void func_80AED110(EnRu1* this) {
if (this->actor.shape.yOffset >= 0.0f) {
- this->action = 18;
+ this->action = ENRU1_ACTION_18;
this->actor.shape.yOffset = 0.0f;
func_80AED0B0(this, WARP_BLUE_RUTO_STATE_READY);
}
@@ -1150,7 +1168,7 @@ void func_80AED110(EnRu1* this) {
void func_80AED154(EnRu1* this, PlayState* play) {
if (func_80AED084(this, WARP_BLUE_RUTO_STATE_ENTERED)) {
- this->action = 0x13;
+ this->action = ENRU1_ACTION_19;
this->unk_26C = 0.0f;
func_80AECEB4(this, play);
}
@@ -1161,7 +1179,7 @@ void func_80AED19C(EnRu1* this, s32 cond) {
Animation_Change(&this->skelAnime, &gRutoChildTransitionHandsOnHipToCrossArmsAndLegsAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildTransitionHandsOnHipToCrossArmsAndLegsAnim), ANIMMODE_ONCE,
-8.0f);
- this->action = 20;
+ this->action = ENRU1_ACTION_20;
func_80AED0B0(this, WARP_BLUE_RUTO_STATE_3);
}
}
@@ -1175,7 +1193,7 @@ void func_80AED218(EnRu1* this, UNK_TYPE arg1) {
} else if (func_80AED084(this, WARP_BLUE_RUTO_STATE_WARPING)) {
Animation_Change(&this->skelAnime, &gRutoChildWaitInBlueWarpAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildWaitInBlueWarpAnim), ANIMMODE_ONCE, -8.0f);
- this->action = 21;
+ this->action = ENRU1_ACTION_21;
this->unk_27C = this->actor.xzDistToPlayer;
}
}
@@ -1223,7 +1241,7 @@ void EnRu1_InitInJabuJabuBasement(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
- this->action = 22;
+ this->action = ENRU1_ACTION_22;
this->actor.room = -1;
this->roomNum1 = actorRoom;
this->roomNum3 = actorRoom;
@@ -1273,9 +1291,9 @@ s32 func_80AED624(EnRu1* this, PlayState* play) {
Actor_Kill(&this->actor);
return false;
} else if (((this->roomNum1 != curRoomNum) || (this->roomNum2 != curRoomNum)) &&
- (this->actor.depthInWater > kREG(16) + 50.0f) && (this->action != 33)) {
- this->action = 33;
- this->drawConfig = 2;
+ (this->actor.depthInWater > kREG(16) + 50.0f) && (this->action != ENRU1_ACTION_33)) {
+ this->action = ENRU1_ACTION_33;
+ this->drawConfig = ENRU1_DRAW_XLU;
this->alpha = 0xFF;
this->unk_2A4 = 0.0f;
}
@@ -1598,8 +1616,8 @@ s32 func_80AEE394(EnRu1* this, PlayState* play) {
func_80AEE02C(this);
play->csCtx.script = gRutoObtainingSapphireCs;
gSaveContext.cutsceneTrigger = 1;
- this->action = 36;
- this->drawConfig = 0;
+ this->action = ENRU1_ACTION_36;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
this->bigOctoPlatform = (BgBdanObjects*)dynaPolyActor;
this->actor.shape.shadowAlpha = 0;
return true;
@@ -1614,14 +1632,14 @@ void func_80AEE488(EnRu1* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
curRoomNum = play->roomCtx.curRoom.num;
this->roomNum3 = curRoomNum;
- this->action = 31;
+ this->action = ENRU1_ACTION_31;
func_80AED520(this, play);
} else if (!func_80AEE394(this, play) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
s32 pad;
this->actor.minVelocityY = -((kREG(24) * 0.01f) + 6.8f);
this->actor.gravity = -((kREG(23) * 0.01f) + 1.3f);
- this->action = 28;
+ this->action = ENRU1_ACTION_28;
}
}
@@ -1633,13 +1651,13 @@ void func_80AEE568(EnRu1* this, PlayState* play) {
func_80AEE02C(this);
Actor_OfferCarry(&this->actor, play);
- this->action = 27;
+ this->action = ENRU1_ACTION_27;
EnRu1_DisableSittingOC(this);
return;
}
if (this->actor.depthInWater > 0.0f) {
- this->action = 29;
+ this->action = ENRU1_ACTION_29;
this->waterState = ENRU1_WATER_OUTSIDE;
}
}
@@ -1653,7 +1671,7 @@ void func_80AEE628(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildSittingAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildSittingAnim), ANIMMODE_LOOP, -8.0f);
SET_INFTABLE(INFTABLE_144);
- this->action = 31;
+ this->action = ENRU1_ACTION_31;
}
this->roomNum3 = curRoomNum;
}
@@ -1667,7 +1685,7 @@ s32 func_80AEE6D0(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildSeesSapphireAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildSquirmAnim), ANIMMODE_LOOP, -8.0f);
func_80AED600(this);
- this->action = 34;
+ this->action = ENRU1_ACTION_34;
this->unk_26C = 0.0f;
play->csCtx.script = gRutoFoundSapphireCs;
gSaveContext.cutsceneTrigger = 1;
@@ -1694,7 +1712,7 @@ void EnRu1_UpdateCarriedBehavior(EnRu1* this, PlayState* play) {
this->actor.minVelocityY = -((kREG(24) * 0.01f) + 6.8f);
this->actor.gravity = -((kREG(23) * 0.01f) + 1.3f);
func_80AED57C(this);
- this->action = 28;
+ this->action = ENRU1_ACTION_28;
*carryIdleTimer = 0.0f;
} else if (func_80AEE6D0(this, play)) {
s32 pad;
@@ -1704,7 +1722,7 @@ void EnRu1_UpdateCarriedBehavior(EnRu1* this, PlayState* play) {
player = GET_PLAYER(play);
if (player->stateFlags2 & PLAYER_STATE2_IDLE_FIDGET) {
this->carryIdleTimer += 1.0f;
- if (this->action != 32) {
+ if (this->action != ENRU1_ACTION_32) {
if (*carryIdleTimer > 30.0f) {
if (Rand_S16Offset(0, 3) == 0) {
f32 frameCount = Animation_GetLastFrame(&gRutoChildSquirmAnim);
@@ -1712,7 +1730,7 @@ void EnRu1_UpdateCarriedBehavior(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildSquirmAnim, 1.0f, 0, frameCount, ANIMMODE_LOOP,
-8.0f);
func_80AED5DC(this);
- this->action = 32;
+ this->action = ENRU1_ACTION_32;
}
*carryIdleTimer = 0.0f;
}
@@ -1722,7 +1740,7 @@ void EnRu1_UpdateCarriedBehavior(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildSittingAnim, 1.0f, 0, frameCount, ANIMMODE_LOOP,
-8.0f);
- this->action = 31;
+ this->action = ENRU1_ACTION_31;
*carryIdleTimer = 0.0f;
}
}
@@ -1741,7 +1759,7 @@ s32 EnRu1_CheckHitBottomUnderwater(EnRu1* this, PlayState* play) {
func_80AEE02C(this);
Actor_OfferCarry(&this->actor, play);
- this->action = 27;
+ this->action = ENRU1_ACTION_27;
EnRu1_DisableSittingOC(this);
return true;
}
@@ -1749,8 +1767,8 @@ s32 EnRu1_CheckHitBottomUnderwater(EnRu1* this, PlayState* play) {
}
void EnRu1_CheckSinkingState(EnRu1* this, PlayState* play) {
- if ((EnRu1_CheckHitBottomUnderwater(this, play) == 0) && (this->waterState == ENRU1_WATER_SINKING)) {
- this->action = 30;
+ if ((!EnRu1_CheckHitBottomUnderwater(this, play)) && (this->waterState == ENRU1_WATER_SINKING)) {
+ this->action = ENRU1_ACTION_30;
func_80AEE02C(this);
this->actor.gravity = -0.1f;
this->actor.minVelocityY = -((kREG(18) * 0.1f) + 0.7f);
@@ -1881,7 +1899,7 @@ s32 func_80AEF0BC(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildSitAnim, 1.0f, 0, frameCount, ANIMMODE_ONCE, -8.0f);
play->msgCtx.msgMode = MSGMODE_PAUSED;
- this->action = 26;
+ this->action = ENRU1_ACTION_26;
this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY);
return true;
}
@@ -1890,7 +1908,7 @@ s32 func_80AEF0BC(EnRu1* this, PlayState* play) {
void func_80AEF170(EnRu1* this, PlayState* play, s32 cond) {
if (cond) {
- this->action = 25;
+ this->action = ENRU1_ACTION_25;
}
}
@@ -1898,7 +1916,7 @@ void func_80AEF188(EnRu1* this, PlayState* play) {
if (func_80AEB174(play) && !func_80AEF0BC(this, play)) {
Message_CloseTextbox(play);
SET_INFTABLE(INFTABLE_142);
- this->action = 24;
+ this->action = ENRU1_ACTION_24;
}
}
@@ -1910,18 +1928,18 @@ void func_80AEF1F0(EnRu1* this, PlayState* play, UNK_TYPE arg2) {
SET_INFTABLE(INFTABLE_143);
func_80AED6DC(this, play);
Actor_OfferCarry(&this->actor, play);
- this->action = 27;
+ this->action = ENRU1_ACTION_27;
EnRu1_DisableSittingOC(this);
}
}
void func_80AEF29C(EnRu1* this, PlayState* play) {
- this->action = 23;
+ this->action = ENRU1_ACTION_23;
}
void func_80AEF2AC(EnRu1* this, PlayState* play) {
- this->action = 24;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_24;
+ this->drawConfig = ENRU1_DRAW_OPA;
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY;
}
@@ -2032,8 +2050,8 @@ void func_80AEF624(EnRu1* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gRutoChildWalkToAndHoldUpSapphireAnim, 1.0f, 0.0f, frameCount,
ANIMMODE_ONCE, 0.0f);
func_80AEB3A4(this, play);
- this->action = 37;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_37;
+ this->drawConfig = ENRU1_DRAW_OPA;
this->actor.shape.shadowAlpha = 0xFF;
}
}
@@ -2043,7 +2061,7 @@ void func_80AEF728(EnRu1* this, UNK_TYPE arg1) {
Animation_Change(&this->skelAnime, &gRutoChildHoldArmsUpAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gRutoChildHoldArmsUpAnim), ANIMMODE_LOOP, 0.0f);
func_80AEB3CC(this);
- this->action = 38;
+ this->action = ENRU1_ACTION_38;
}
}
@@ -2051,7 +2069,7 @@ void func_80AEF79C(EnRu1* this, PlayState* play) {
if (func_80AEAFE0(play, 2, 3)) {
Animation_Change(&this->skelAnime, &gRutoChildBringHandsDownAnim, 1.0f, 0,
Animation_GetLastFrame(&gRutoChildBringHandsDownAnim), ANIMMODE_ONCE, -8.0f);
- this->action = 39;
+ this->action = ENRU1_ACTION_39;
}
}
@@ -2059,7 +2077,7 @@ void func_80AEF820(EnRu1* this, UNK_TYPE arg1) {
if (arg1 != 0) {
Animation_Change(&this->skelAnime, &gRutoChildWait2Anim, 1.0f, 0, Animation_GetLastFrame(&gRutoChildWait2Anim),
ANIMMODE_LOOP, -8.0f);
- this->action = 40;
+ this->action = ENRU1_ACTION_40;
}
}
@@ -2072,7 +2090,7 @@ void func_80AEF890(EnRu1* this, PlayState* play) {
SET_INFTABLE(INFTABLE_145);
Flags_SetSwitch(play, EnRu1_GetSwitchFlag(this));
EnRu1_SetPlatformCamSetting(this, 1);
- this->action = 42;
+ this->action = ENRU1_ACTION_42;
this->actor.room = curRoomNum;
}
}
@@ -2087,8 +2105,8 @@ void func_80AEF930(EnRu1* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, NULL);
#endif
func_80AEF4A8(this, play);
- this->action = 43;
- this->drawConfig = 0;
+ this->action = ENRU1_ACTION_43;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
}
}
@@ -2178,7 +2196,7 @@ void EnRu1_InitInSapphireRoom(EnRu1* this, PlayState* play) {
s32 pad;
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
- this->action = 41;
+ this->action = ENRU1_ACTION_41;
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
EnRu1_SetPlatformCamSetting(this, 1);
this->actor.flags &= ~(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY);
@@ -2190,8 +2208,8 @@ void EnRu1_InitInSapphireRoom(EnRu1* this, PlayState* play) {
void func_80AEFCE8(EnRu1* this, PlayState* play) {
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
if (this->bigOctoPlatform != NULL) {
- this->action = 42;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_42;
+ this->drawConfig = ENRU1_DRAW_OPA;
EnRu1_SetPlatformCamSetting(this, 1);
}
}
@@ -2200,8 +2218,8 @@ void EnRu1_InitBesideKingZora(EnRu1* this, PlayState* play) {
if (GET_EVENTCHKINF(EVENTCHKINF_37) && LINK_IS_CHILD) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED;
- this->action = 44;
- this->drawConfig = 1;
+ this->action = ENRU1_ACTION_44;
+ this->drawConfig = ENRU1_DRAW_OPA;
} else {
Actor_Kill(&this->actor);
}
@@ -2230,13 +2248,13 @@ s32 func_80AEFE38(EnRu1* this, PlayState* play) {
void func_80AEFE84(EnRu1* this, PlayState* play, s32 cond) {
if (cond) {
- this->action = 45;
+ this->action = ENRU1_ACTION_45;
}
}
void func_80AEFE9C(EnRu1* this, PlayState* play) {
if (func_80AEFE38(this, play)) {
- this->action = 44;
+ this->action = ENRU1_ACTION_44;
}
}
@@ -2267,9 +2285,9 @@ void EnRu1_InitBesideDoorSwitch(EnRu1* this, PlayState* play) {
(!(func_80AEB020(this, play)))) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
actorRoom = this->actor.room;
- this->action = 22;
+ this->action = ENRU1_ACTION_22;
this->actor.room = -1;
- this->drawConfig = 0;
+ this->drawConfig = ENRU1_DRAW_NOTHING;
this->roomNum1 = actorRoom;
this->roomNum3 = actorRoom;
this->roomNum2 = actorRoom;
@@ -2283,7 +2301,7 @@ void EnRu1_InitBesideDoorSwitch(EnRu1* this, PlayState* play) {
#if DEBUG_FEATURES
void func_80AF0050(EnRu1* this, PlayState* play) {
EnRu1_AnimationChange(this, &gRutoChildWait2Anim, ANIMMODE_LOOP, 0, false);
- this->action = 36;
+ this->action = ENRU1_ACTION_36;
this->roomNum1 = this->actor.room;
this->bigOctoPlatform = EnRu1_FindBigOctoPlatform(play);
this->actor.room = -1;
diff --git a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
index 6968b6fb0d..52e89effd1 100644
--- a/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
+++ b/src/overlays/actors/ovl_En_Ru1/z_en_ru1.h
@@ -60,6 +60,61 @@ typedef struct EnRu1 {
/* 0x0374 */ NpcInteractInfo interactInfo;
} EnRu1; // size = 0x039C
+typedef enum EnRu1Action {
+ /* 0 */ ENRU1_ACTION_00,
+ /* 1 */ ENRU1_ACTION_01,
+ /* 2 */ ENRU1_ACTION_02,
+ /* 3 */ ENRU1_ACTION_03,
+ /* 4 */ ENRU1_ACTION_04,
+ /* 5 */ ENRU1_ACTION_05,
+ /* 6 */ ENRU1_ACTION_06,
+ /* 7 */ ENRU1_ACTION_07,
+ /* 8 */ ENRU1_ACTION_08,
+ /* 9 */ ENRU1_ACTION_09,
+ /* 10 */ ENRU1_ACTION_10,
+ /* 11 */ ENRU1_ACTION_11,
+ /* 12 */ ENRU1_ACTION_12,
+ /* 13 */ ENRU1_ACTION_13,
+ /* 14 */ ENRU1_ACTION_14,
+ /* 15 */ ENRU1_ACTION_15,
+ /* 16 */ ENRU1_ACTION_16,
+ /* 17 */ ENRU1_ACTION_17,
+ /* 18 */ ENRU1_ACTION_18,
+ /* 19 */ ENRU1_ACTION_19,
+ /* 20 */ ENRU1_ACTION_20,
+ /* 21 */ ENRU1_ACTION_21,
+ /* 22 */ ENRU1_ACTION_22,
+ /* 23 */ ENRU1_ACTION_23,
+ /* 24 */ ENRU1_ACTION_24,
+ /* 25 */ ENRU1_ACTION_25,
+ /* 26 */ ENRU1_ACTION_26,
+ /* 27 */ ENRU1_ACTION_27,
+ /* 28 */ ENRU1_ACTION_28,
+ /* 29 */ ENRU1_ACTION_29,
+ /* 30 */ ENRU1_ACTION_30,
+ /* 31 */ ENRU1_ACTION_31,
+ /* 32 */ ENRU1_ACTION_32,
+ /* 33 */ ENRU1_ACTION_33,
+ /* 34 */ ENRU1_ACTION_34,
+ /* 35 */ ENRU1_ACTION_35,
+ /* 36 */ ENRU1_ACTION_36,
+ /* 37 */ ENRU1_ACTION_37,
+ /* 38 */ ENRU1_ACTION_38,
+ /* 39 */ ENRU1_ACTION_39,
+ /* 40 */ ENRU1_ACTION_40,
+ /* 41 */ ENRU1_ACTION_41,
+ /* 42 */ ENRU1_ACTION_42,
+ /* 43 */ ENRU1_ACTION_43,
+ /* 44 */ ENRU1_ACTION_44,
+ /* 45 */ ENRU1_ACTION_45
+} EnRu1Action;
+
+typedef enum EnRu1DrawConfig {
+ /* 0 */ ENRU1_DRAW_NOTHING,
+ /* 1 */ ENRU1_DRAW_OPA,
+ /* 2 */ ENRU1_DRAW_XLU
+} EnRu1DrawConfig;
+
typedef enum EnRu1Type {
/* 0 */ ENRU1_TYPE_BOSS_ROOM,
/* 1 */ ENRU1_TYPE_FOUNTAIN,
@@ -73,6 +128,28 @@ typedef enum EnRu1Type {
#endif
} EnRu1Type;
+typedef enum EnRu1Eyes {
+ /* 0 */ ENRU1_EYES_OPEN,
+ /* 1 */ ENRU1_EYES_HALF_BLINK,
+ /* 2 */ ENRU1_EYES_CLOSED,
+ /* 3 */ ENRU1_EYES_UP,
+ /* 4 */ ENRU1_EYES_GAZING,
+ /* 5 */ ENRU1_EYES_BLUSH
+} EnRu1Eyes;
+
+typedef enum EnRu1Mouth {
+ /* 0 */ ENRU1_MOUTH_SMILING,
+ /* 1 */ ENRU1_MOUTH_FROWNING,
+ /* 2 */ ENRU1_MOUTH_OPEN
+} EnRu1Mouth;
+
+typedef enum EnRu1WaterState {
+ /* 0 */ ENRU1_WATER_OUTSIDE,
+ /* 1 */ ENRU1_WATER_IMMERSED,
+ /* 2 */ ENRU1_WATER_BOBBING,
+ /* 3 */ ENRU1_WATER_SINKING
+} EnRu1WaterState;
+
typedef enum RutoLimb {
/* 0 */ RUTO_CHILD_NONE,
/* 1 */ RUTO_CHILD_ROOT,
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 21827f32c0..13acab8d46 100644
--- a/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
+++ b/src/overlays/actors/ovl_Magic_Dark/z_magic_dark.c
@@ -11,6 +11,7 @@
#include "gfx_setupdl.h"
#include "sfx.h"
#include "sys_matrix.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
#include "player.h"
@@ -41,7 +42,23 @@ ActorProfile Magic_Dark_Profile = {
/**/ MagicDark_OrbDraw,
};
-#include "assets/overlays/ovl_Magic_Dark/ovl_Magic_Dark.c"
+#define sDiamondTex_WIDTH 32
+#define sDiamondTex_HEIGHT 64
+static u64 sDiamondTex[TEX_LEN(u64, sDiamondTex_WIDTH, sDiamondTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Magic_Dark/sDiamondTex.i8.inc.c"
+};
+
+static Vtx sDiamondVtx[] = {
+#include "assets/overlays/ovl_Magic_Dark/sDiamondVtx.inc.c"
+};
+
+static Gfx sDiamondMaterialDL[22] = {
+#include "assets/overlays/ovl_Magic_Dark/sDiamondMaterialDL.inc.c"
+};
+
+static Gfx sDiamondModelDL[8] = {
+#include "assets/overlays/ovl_Magic_Dark/sDiamondModelDL.inc.c"
+};
// unused
static Color_RGBA8 D_80B88B10[] = { { 50, 100, 150, 200 }, { 255, 200, 150, 100 } };
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 103a7ee1b8..a5938c8fca 100644
--- a/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c
+++ b/src/overlays/actors/ovl_Magic_Fire/z_magic_fire.c
@@ -11,6 +11,7 @@
#include "ichain.h"
#include "sfx.h"
#include "sys_matrix.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
#include "player.h"
@@ -51,7 +52,23 @@ ActorProfile Magic_Fire_Profile = {
/**/ MagicFire_Draw,
};
-#include "assets/overlays/ovl_Magic_Fire/ovl_Magic_Fire.c"
+#define sTex_WIDTH 64
+#define sTex_HEIGHT 64
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Magic_Fire/sTex.i8.inc.c"
+};
+
+static Vtx sSphereVtx[] = {
+#include "assets/overlays/ovl_Magic_Fire/sSphereVtx.inc.c"
+};
+
+static Gfx sMaterialDL[5] = {
+#include "assets/overlays/ovl_Magic_Fire/sMaterialDL.inc.c"
+};
+
+static Gfx sModelDL[45] = {
+#include "assets/overlays/ovl_Magic_Fire/sModelDL.inc.c"
+};
static ColliderCylinderInit sCylinderInit = {
{
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 9409ee0a52..ccebc0615e 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -188,7 +188,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
interactionType = 1;
}
} else if (player->heldItemAction == PLAYER_IA_DEKU_STICK) {
- Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &this->actor.world.pos, &tipToFlame);
+ Math_Vec3f_Diff(MELEE_WEAPON_INFO_TIP(&player->meleeWeaponInfo[0]), &this->actor.world.pos, &tipToFlame);
tipToFlame.y -= 67.0f;
if ((SQ(tipToFlame.x) + SQ(tipToFlame.y) + SQ(tipToFlame.z)) < SQ(20.0f)) {
interactionType = -1;
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 61772fa0c1..15f6308e1e 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -13,6 +13,7 @@
#include "regs.h"
#include "sys_matrix.h"
#include "terminal.h"
+#include "tex_len.h"
#include "translation.h"
#include "z_lib.h"
#include "light.h"
@@ -42,7 +43,23 @@ ActorProfile Oceff_Spot_Profile = {
/**/ OceffSpot_Draw,
};
-#include "assets/overlays/ovl_Oceff_Spot/ovl_Oceff_Spot.c"
+#define sTex_WIDTH 32
+#define sTex_HEIGHT 32
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Oceff_Spot/sTex.i8.inc.c"
+};
+
+static Vtx sCylinderVtx[] = {
+#include "assets/overlays/ovl_Oceff_Spot/sCylinderVtx.inc.c"
+};
+
+static Gfx sCylinderMaterialDL[19] = {
+#include "assets/overlays/ovl_Oceff_Spot/sCylinderMaterialDL.inc.c"
+};
+
+static Gfx sCylinderModelDL[18] = {
+#include "assets/overlays/ovl_Oceff_Spot/sCylinderModelDL.inc.c"
+};
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE),
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 036349d0e9..e7e623f024 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
@@ -9,10 +9,13 @@
#include "gfx.h"
#include "gfx_setupdl.h"
#include "sys_matrix.h"
+#include "tex_len.h"
#include "play_state.h"
#include "player.h"
#include "save.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
+
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffStorm_Init(Actor* thisx, PlayState* play);
@@ -127,7 +130,27 @@ void OceffStorm_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
}
-#include "assets/overlays/ovl_Oceff_Storm/ovl_Oceff_Storm.c"
+#define sTex_WIDTH 64
+#define sTex_HEIGHT 64
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Oceff_Storm/sTex.i8.inc.c"
+};
+
+static Gfx sMaterialDL[21] = {
+#include "assets/overlays/ovl_Oceff_Storm/sMaterialDL.inc.c"
+};
+
+static Vtx sCylinderVtx[] = {
+#include "assets/overlays/ovl_Oceff_Storm/sCylinderVtx.inc.c"
+};
+
+static Gfx sCylinderMaterialDL[21] = {
+#include "assets/overlays/ovl_Oceff_Storm/sCylinderMaterialDL.inc.c"
+};
+
+static Gfx sCylinderModelDL[18] = {
+#include "assets/overlays/ovl_Oceff_Storm/sCylinderModelDL.inc.c"
+};
void OceffStorm_Draw2(Actor* thisx, PlayState* play) {
u32 scroll = play->state.frames & 0xFFF;
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 8346407c9a..e07daebbfd 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
@@ -11,6 +11,7 @@
#include "printf.h"
#include "sys_matrix.h"
#include "terminal.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
#include "player.h"
@@ -65,7 +66,23 @@ void OceffWipe_Update(Actor* thisx, PlayState* play) {
}
}
-#include "assets/overlays/ovl_Oceff_Wipe/ovl_Oceff_Wipe.c"
+#define sTex_WIDTH 32
+#define sTex_HEIGHT 32
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Oceff_Wipe/sTex.i8.inc.c"
+};
+
+static Vtx sFrustumVtx[] = {
+#include "assets/overlays/ovl_Oceff_Wipe/sFrustumVtx.inc.c"
+};
+
+static Gfx sMaterialDL[17] = {
+#include "assets/overlays/ovl_Oceff_Wipe/sMaterialDL.inc.c"
+};
+
+static Gfx sFrustumDL[23] = {
+#include "assets/overlays/ovl_Oceff_Wipe/sFrustumDL.inc.c"
+};
static u8 sAlphaIndices[] = {
0x01, 0x10, 0x22, 0x01, 0x20, 0x12, 0x01, 0x20, 0x12, 0x01,
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 71498caa13..b71ddef91a 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
@@ -11,6 +11,7 @@
#include "printf.h"
#include "sys_matrix.h"
#include "terminal.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
#include "player.h"
@@ -65,7 +66,29 @@ void OceffWipe2_Update(Actor* thisx, PlayState* play) {
}
}
-#include "assets/overlays/ovl_Oceff_Wipe2/ovl_Oceff_Wipe2.c"
+#define s1Tex_WIDTH 64
+#define s1Tex_HEIGHT 64
+static u64 s1Tex[TEX_LEN(u64, s1Tex_WIDTH, s1Tex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_Oceff_Wipe2/s1Tex.i4.inc.c"
+};
+
+#define s2Tex_WIDTH 64
+#define s2Tex_HEIGHT 64
+static u64 s2Tex[TEX_LEN(u64, s2Tex_WIDTH, s2Tex_HEIGHT, 4)] = {
+#include "assets/overlays/ovl_Oceff_Wipe2/s2Tex.i4.inc.c"
+};
+
+static Vtx sFrustumVtx[] = {
+#include "assets/overlays/ovl_Oceff_Wipe2/sFrustumVtx.inc.c"
+};
+
+static Gfx sMaterialDL[21] = {
+#include "assets/overlays/ovl_Oceff_Wipe2/sMaterialDL.inc.c"
+};
+
+static Gfx sFrustumDL[12] = {
+#include "assets/overlays/ovl_Oceff_Wipe2/sFrustumDL.inc.c"
+};
void OceffWipe2_Draw(Actor* thisx, PlayState* play) {
u32 scroll = play->state.frames & 0xFF;
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 6ec42324a2..eb62318ce7 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
@@ -11,6 +11,7 @@
#include "printf.h"
#include "sys_matrix.h"
#include "terminal.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
#include "player.h"
@@ -35,7 +36,23 @@ ActorProfile Oceff_Wipe3_Profile = {
/**/ OceffWipe3_Draw,
};
-#include "assets/overlays/ovl_Oceff_Wipe3/ovl_Oceff_Wipe3.c"
+#define sTex_WIDTH 64
+#define sTex_HEIGHT 64
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Oceff_Wipe3/sTex.i8.inc.c"
+};
+
+static Vtx sFrustumVtx[] = {
+#include "assets/overlays/ovl_Oceff_Wipe3/sFrustumVtx.inc.c"
+};
+
+static Gfx sMaterialDL[17] = {
+#include "assets/overlays/ovl_Oceff_Wipe3/sMaterialDL.inc.c"
+};
+
+static Gfx sFrustumDL[12] = {
+#include "assets/overlays/ovl_Oceff_Wipe3/sFrustumDL.inc.c"
+};
void OceffWipe3_Init(Actor* thisx, PlayState* play) {
OceffWipe3* this = (OceffWipe3*)thisx;
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 8b860cc0c1..00b97cc756 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
@@ -11,9 +11,12 @@
#include "printf.h"
#include "sys_matrix.h"
#include "terminal.h"
+#include "tex_len.h"
#include "z_lib.h"
#include "play_state.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
+
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_UPDATE_DURING_OCARINA)
void OceffWipe4_Init(Actor* thisx, PlayState* play);
@@ -62,7 +65,27 @@ void OceffWipe4_Update(Actor* thisx, PlayState* play) {
}
}
-#include "assets/overlays/ovl_Oceff_Wipe4/ovl_Oceff_Wipe4.c"
+#define sTex_WIDTH 32
+#define sTex_HEIGHT 64
+static u64 sTex[TEX_LEN(u64, sTex_WIDTH, sTex_HEIGHT, 8)] = {
+#include "assets/overlays/ovl_Oceff_Wipe4/sTex.i8.inc.c"
+};
+
+static Vtx sFrustumVtx[] = {
+#include "assets/overlays/ovl_Oceff_Wipe4/sFrustumVtx.inc.c"
+};
+
+static Gfx sMaterialDL[13] = {
+#include "assets/overlays/ovl_Oceff_Wipe4/sMaterialDL.inc.c"
+};
+
+static Gfx sUnusedMaterialDL[13] = {
+#include "assets/overlays/ovl_Oceff_Wipe4/sUnusedMaterialDL.inc.c"
+};
+
+static Gfx sMaterial2DL[23] = {
+#include "assets/overlays/ovl_Oceff_Wipe4/sMaterial2DL.inc.c"
+};
void OceffWipe4_Draw(Actor* thisx, PlayState* play) {
u32 scroll = play->state.frames & 0xFFF;
diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c
index 46e94bc998..05f4ec93f9 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -1766,7 +1766,7 @@ void Player_ApplyYawFromAnim(Player* this) {
void func_80832318(Player* this) {
this->stateFlags2 &= ~PLAYER_STATE2_17;
this->meleeWeaponState = 0;
- this->meleeWeaponInfo[0].active = this->meleeWeaponInfo[1].active = this->meleeWeaponInfo[2].active = 0;
+ this->meleeWeaponInfo[0].active = this->meleeWeaponInfo[1].active = this->meleeWeaponInfo[2].active = false;
}
void func_80832340(PlayState* play, Player* this) {
@@ -9071,7 +9071,7 @@ s32 func_80842DF4(PlayState* play, Player* this) {
s32 bgId;
Vec3f sp68;
Vec3f sp5C;
- Vec3f sp50;
+ Vec3f baseToTip;
s32 temp1;
s32 surfaceMaterial;
@@ -9081,18 +9081,19 @@ s32 func_80842DF4(PlayState* play, Player* this) {
!(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) {
if (this->skelAnime.curFrame >= 2.0f) {
- phi_f2 = Math_Vec3f_DistXYZAndStoreDiff(&this->meleeWeaponInfo[0].tip,
- &this->meleeWeaponInfo[0].base, &sp50);
+ phi_f2 =
+ Math_Vec3f_DistXYZAndStoreDiff(MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0]),
+ MELEE_WEAPON_INFO_BASE(&this->meleeWeaponInfo[0]), &baseToTip);
if (phi_f2 != 0.0f) {
phi_f2 = (phi_f2 + 10.0f) / phi_f2;
}
- sp68.x = this->meleeWeaponInfo[0].tip.x + (sp50.x * phi_f2);
- sp68.y = this->meleeWeaponInfo[0].tip.y + (sp50.y * phi_f2);
- sp68.z = this->meleeWeaponInfo[0].tip.z + (sp50.z * phi_f2);
+ sp68.x = MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0])->x + (baseToTip.x * phi_f2);
+ sp68.y = MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0])->y + (baseToTip.y * phi_f2);
+ sp68.z = MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0])->z + (baseToTip.z * phi_f2);
- if (BgCheck_EntityLineTest1(&play->colCtx, &sp68, &this->meleeWeaponInfo[0].tip, &sp5C, &groundPoly,
- true, false, false, true, &bgId) &&
+ if (BgCheck_EntityLineTest1(&play->colCtx, &sp68, MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0]),
+ &sp5C, &groundPoly, true, false, false, true, &bgId) &&
!SurfaceType_IsIgnoredByEntities(&play->colCtx, groundPoly, bgId) &&
(SurfaceType_GetFloorType(&play->colCtx, groundPoly, bgId) != FLOOR_TYPE_6) &&
(func_8002F9EC(play, &this->actor, groundPoly, bgId, &sp5C) == 0)) {
@@ -11475,8 +11476,8 @@ void Player_UpdateBurningDekuStick(PlayState* play, Player* this) {
this->unk_85C = temp;
}
- func_8002836C(play, &this->meleeWeaponInfo[0].tip, &D_808547A4, &D_808547B0, &D_808547BC, &D_808547C0,
- temp * 200.0f, 0, 8);
+ func_8002836C(play, MELEE_WEAPON_INFO_TIP(&this->meleeWeaponInfo[0]), &D_808547A4, &D_808547B0, &D_808547BC,
+ &D_808547C0, temp * 200.0f, 0, 8);
}
void Player_UpdateBodyShock(PlayState* play, Player* this) {
diff --git a/tools/assets/extract/write_source.txt b/tools/assets/extract/write_source.txt
index 5d19b2a10a..640767216e 100644
--- a/tools/assets/extract/write_source.txt
+++ b/tools/assets/extract/write_source.txt
@@ -382,29 +382,17 @@ assets/objects/object_zl2_anime2/object_zl2_anime2.c
assets/objects/object_zl2/object_zl2.c
assets/objects/object_zl4/object_zl4.c
assets/objects/object_zo/object_zo.c
-assets/overlays/ovl_Boss_Ganon2/ovl_Boss_Ganon2.c
assets/overlays/ovl_Boss_Ganon/ovl_Boss_Ganon.c
assets/overlays/ovl_Boss_Sst/ovl_Boss_Sst.c
assets/overlays/ovl_Demo_Shd/ovl_Demo_Shd.c
-assets/overlays/ovl_Elf_Msg2/ovl_Elf_Msg2.c
-assets/overlays/ovl_Elf_Msg/ovl_Elf_Msg.c
assets/overlays/ovl_En_Bili/ovl_En_Bili.c
assets/overlays/ovl_En_Clear_Tag/ovl_En_Clear_Tag.c
-assets/overlays/ovl_En_Ganon_Organ/ovl_En_Ganon_Organ.c
assets/overlays/ovl_En_Mag/ovl_En_Mag.c
assets/overlays/ovl_En_Sda/ovl_En_Sda.c
assets/overlays/ovl_En_Ssh/ovl_En_Ssh.c
assets/overlays/ovl_En_Sth/ovl_En_Sth.c
assets/overlays/ovl_file_choose/ovl_file_choose.c
-assets/overlays/ovl_Magic_Dark/ovl_Magic_Dark.c
-assets/overlays/ovl_Magic_Fire/ovl_Magic_Fire.c
assets/overlays/ovl_Magic_Wind/ovl_Magic_Wind.c
-assets/overlays/ovl_Oceff_Spot/ovl_Oceff_Spot.c
-assets/overlays/ovl_Oceff_Storm/ovl_Oceff_Storm.c
-assets/overlays/ovl_Oceff_Wipe2/ovl_Oceff_Wipe2.c
-assets/overlays/ovl_Oceff_Wipe3/ovl_Oceff_Wipe3.c
-assets/overlays/ovl_Oceff_Wipe4/ovl_Oceff_Wipe4.c
-assets/overlays/ovl_Oceff_Wipe/ovl_Oceff_Wipe.c
assets/scenes/dungeons/bdan/bdan_room_0.c
assets/scenes/dungeons/bdan/bdan_room_10.c
assets/scenes/dungeons/bdan/bdan_room_11.c
@@ -960,7 +948,6 @@ assets/textures/backgrounds/vr_TTVR_pal_static.c
assets/textures/backgrounds/vr_TTVR_static.c
assets/textures/backgrounds/vr_ZRVR_pal_static.c
assets/textures/backgrounds/vr_ZRVR_static.c
-assets/textures/do_action_static/do_action_static.c
assets/textures/icon_item_dungeon_static/icon_item_dungeon_static.c
assets/textures/icon_item_field_static/icon_item_field_static.c
assets/textures/icon_item_gameover_static/icon_item_gameover_static.c