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/objects/object_ganon_anime3/gGanonRoarAnim.c b/assets/objects/object_ganon_anime3/gGanonRoarAnim.c
new file mode 100644
index 0000000000..cbc274b118
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanonRoarAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanonRoarFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanonRoarFrameData.inc.c"
+};
+
+JointIndex gGanonRoarJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanonRoarJointIndices.inc.c"
+};
+
+AnimationHeader gGanonRoarAnim = {
+#include "assets/objects/object_ganon_anime3/gGanonRoarAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanonUncurlAndFlailAnim.c b/assets/objects/object_ganon_anime3/gGanonUncurlAndFlailAnim.c
new file mode 100644
index 0000000000..a19de40d93
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanonUncurlAndFlailAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanonUncurlAndFlailFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanonUncurlAndFlailFrameData.inc.c"
+};
+
+JointIndex gGanonUncurlAndFlailJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanonUncurlAndFlailJointIndices.inc.c"
+};
+
+AnimationHeader gGanonUncurlAndFlailAnim = {
+#include "assets/objects/object_ganon_anime3/gGanonUncurlAndFlailAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfBurstOutAnim.c b/assets/objects/object_ganon_anime3/gGanondorfBurstOutAnim.c
new file mode 100644
index 0000000000..a3a6625c0a
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfBurstOutAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfBurstOutFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfBurstOutFrameData.inc.c"
+};
+
+JointIndex gGanondorfBurstOutJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfBurstOutJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfBurstOutAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfBurstOutAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingAnim.c b/assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingAnim.c
new file mode 100644
index 0000000000..bbfa588465
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfFloatingHeavyBreathingFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingFrameData.inc.c"
+};
+
+JointIndex gGanondorfFloatingHeavyBreathingJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfFloatingHeavyBreathingAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopAnim.c b/assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopAnim.c
new file mode 100644
index 0000000000..5505f1aa08
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfShowTriforceLoopFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopFrameData.inc.c"
+};
+
+JointIndex gGanondorfShowTriforceLoopJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfShowTriforceLoopAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartAnim.c b/assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartAnim.c
new file mode 100644
index 0000000000..3092cccff4
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfShowTriforceStartFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartFrameData.inc.c"
+};
+
+JointIndex gGanondorfShowTriforceStartJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfShowTriforceStartAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfTransformEndAnim.c b/assets/objects/object_ganon_anime3/gGanondorfTransformEndAnim.c
new file mode 100644
index 0000000000..21a0913e97
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfTransformEndAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfTransformEndFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformEndFrameData.inc.c"
+};
+
+JointIndex gGanondorfTransformEndJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformEndJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfTransformEndAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformEndAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfTransformLoopAnim.c b/assets/objects/object_ganon_anime3/gGanondorfTransformLoopAnim.c
new file mode 100644
index 0000000000..464178153d
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfTransformLoopAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfTransformLoopFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformLoopFrameData.inc.c"
+};
+
+JointIndex gGanondorfTransformLoopJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformLoopJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfTransformLoopAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformLoopAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/gGanondorfTransformStartAnim.c b/assets/objects/object_ganon_anime3/gGanondorfTransformStartAnim.c
new file mode 100644
index 0000000000..dc5b31a367
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/gGanondorfTransformStartAnim.c
@@ -0,0 +1,15 @@
+#include "object_ganon_anime3.h"
+
+#include "ultra64.h"
+
+s16 gGanondorfTransformStartFrameData[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformStartFrameData.inc.c"
+};
+
+JointIndex gGanondorfTransformStartJointIndices[] = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformStartJointIndices.inc.c"
+};
+
+AnimationHeader gGanondorfTransformStartAnim = {
+#include "assets/objects/object_ganon_anime3/gGanondorfTransformStartAnim.inc.c"
+};
diff --git a/assets/objects/object_ganon_anime3/object_ganon_anime3.h b/assets/objects/object_ganon_anime3/object_ganon_anime3.h
new file mode 100644
index 0000000000..80fcc0bc56
--- /dev/null
+++ b/assets/objects/object_ganon_anime3/object_ganon_anime3.h
@@ -0,0 +1,16 @@
+#ifndef OBJECT_GANON_ANIME3_H
+#define OBJECT_GANON_ANIME3_H
+
+#include "animation.h"
+
+extern AnimationHeader gGanondorfShowTriforceStartAnim;
+extern AnimationHeader gGanondorfBurstOutAnim;
+extern AnimationHeader gGanondorfTransformEndAnim;
+extern AnimationHeader gGanondorfFloatingHeavyBreathingAnim;
+extern AnimationHeader gGanondorfTransformStartAnim;
+extern AnimationHeader gGanondorfTransformLoopAnim;
+extern AnimationHeader gGanondorfShowTriforceLoopAnim;
+extern AnimationHeader gGanonUncurlAndFlailAnim;
+extern AnimationHeader gGanonRoarAnim;
+
+#endif
diff --git a/assets/objects/object_zo/effect_bubbles.c b/assets/objects/object_zo/effect_bubbles.c
new file mode 100644
index 0000000000..9f88bfce82
--- /dev/null
+++ b/assets/objects/object_zo/effect_bubbles.c
@@ -0,0 +1,20 @@
+#include "object_zo.h"
+#include "gfx.h"
+
+#define gZoraBubblesTex_WIDTH 16
+#define gZoraBubblesTex_HEIGHT 16
+u64 gZoraBubblesTex[TEX_LEN(u64, gZoraBubblesTex_WIDTH, gZoraBubblesTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraBubblesTex.ia8.inc.c"
+};
+
+Vtx gZoraBubblesModelVtx[] = {
+#include "assets/objects/object_zo/gZoraBubblesModelVtx.inc.c"
+};
+
+Gfx gZoraBubblesMaterialDL[12] = {
+#include "assets/objects/object_zo/gZoraBubblesMaterialDL.inc.c"
+};
+
+Gfx gZoraBubblesModelDL[3] = {
+#include "assets/objects/object_zo/gZoraBubblesModelDL.inc.c"
+};
diff --git a/assets/objects/object_zo/effect_ripples.c b/assets/objects/object_zo/effect_ripples.c
new file mode 100644
index 0000000000..7fb878f2b0
--- /dev/null
+++ b/assets/objects/object_zo/effect_ripples.c
@@ -0,0 +1,10 @@
+#include "object_zo.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
+
+Gfx gZoraRipplesMaterialDL[13] = {
+#include "assets/objects/object_zo/gZoraRipplesMaterialDL.inc.c"
+};
+
+Gfx gZoraRipplesModelDL[3] = {
+#include "assets/objects/object_zo/gZoraRipplesModelDL.inc.c"
+};
diff --git a/assets/objects/object_zo/effect_splashes.c b/assets/objects/object_zo/effect_splashes.c
new file mode 100644
index 0000000000..557830eba1
--- /dev/null
+++ b/assets/objects/object_zo/effect_splashes.c
@@ -0,0 +1,20 @@
+#include "object_zo.h"
+#include "gfx.h"
+
+#define gZoraSplashesTex_WIDTH 16
+#define gZoraSplashesTex_HEIGHT 16
+u64 gZoraSplashesTex[TEX_LEN(u64, gZoraSplashesTex_WIDTH, gZoraSplashesTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraSplashesTex.i8.inc.c"
+};
+
+Vtx gZoraSplashesModelVtx[] = {
+#include "assets/objects/object_zo/gZoraSplashesModelVtx.inc.c"
+};
+
+Gfx gZoraSplashesMaterialDL[14] = {
+#include "assets/objects/object_zo/gZoraSplashesMaterialDL.inc.c"
+};
+
+Gfx gZoraSplashesModelDL[3] = {
+#include "assets/objects/object_zo/gZoraSplashesModelDL.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraHandsOnHipsTappingFootAnim.c b/assets/objects/object_zo/gZoraHandsOnHipsTappingFootAnim.c
new file mode 100644
index 0000000000..de19ceac14
--- /dev/null
+++ b/assets/objects/object_zo/gZoraHandsOnHipsTappingFootAnim.c
@@ -0,0 +1,14 @@
+#include "object_zo.h"
+#include "array_count.h"
+
+s16 gZoraHandsOnHipsTappingFootFrameData[] = {
+#include "assets/objects/object_zo/gZoraHandsOnHipsTappingFootFrameData.inc.c"
+};
+
+JointIndex gZoraHandsOnHipsTappingFootJointIndices[] = {
+#include "assets/objects/object_zo/gZoraHandsOnHipsTappingFootJointIndices.inc.c"
+};
+
+AnimationHeader gZoraHandsOnHipsTappingFootAnim = {
+#include "assets/objects/object_zo/gZoraHandsOnHipsTappingFootAnim.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraIdleAnim.c b/assets/objects/object_zo/gZoraIdleAnim.c
new file mode 100644
index 0000000000..0be4d26b2c
--- /dev/null
+++ b/assets/objects/object_zo/gZoraIdleAnim.c
@@ -0,0 +1,14 @@
+#include "object_zo.h"
+#include "array_count.h"
+
+s16 gZoraIdleFrameData[] = {
+#include "assets/objects/object_zo/gZoraIdleFrameData.inc.c"
+};
+
+JointIndex gZoraIdleJointIndices[] = {
+#include "assets/objects/object_zo/gZoraIdleJointIndices.inc.c"
+};
+
+AnimationHeader gZoraIdleAnim = {
+#include "assets/objects/object_zo/gZoraIdleAnim.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraOpenArmsAnim.c b/assets/objects/object_zo/gZoraOpenArmsAnim.c
new file mode 100644
index 0000000000..5be007b12b
--- /dev/null
+++ b/assets/objects/object_zo/gZoraOpenArmsAnim.c
@@ -0,0 +1,14 @@
+#include "object_zo.h"
+#include "array_count.h"
+
+s16 gZoraOpenArmsFrameData[] = {
+#include "assets/objects/object_zo/gZoraOpenArmsFrameData.inc.c"
+};
+
+JointIndex gZoraOpenArmsJointIndices[] = {
+#include "assets/objects/object_zo/gZoraOpenArmsJointIndices.inc.c"
+};
+
+AnimationHeader gZoraOpenArmsAnim = {
+#include "assets/objects/object_zo/gZoraOpenArmsAnim.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraSkel.c b/assets/objects/object_zo/gZoraSkel.c
new file mode 100644
index 0000000000..8ea991044a
--- /dev/null
+++ b/assets/objects/object_zo/gZoraSkel.c
@@ -0,0 +1,291 @@
+#include "object_zo.h"
+#include "array_count.h"
+#include "gfx.h"
+
+u64 gZoraTLUT[] = {
+#include "assets/objects/object_zo/gZoraTLUT.tlut.rgba16.inc.c"
+};
+
+#define gZoraFinTex_WIDTH 32
+#define gZoraFinTex_HEIGHT 32
+u64 gZoraFinTex[TEX_LEN(u64, gZoraFinTex_WIDTH, gZoraFinTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraFinTex.ci8.tlut_gZoraTLUT.inc.c"
+};
+
+#define gZoraHeadTailTex_WIDTH 32
+#define gZoraHeadTailTex_HEIGHT 64
+u64 gZoraHeadTailTex[TEX_LEN(u64, gZoraHeadTailTex_WIDTH, gZoraHeadTailTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraHeadTailTex.ci8.tlut_gZoraTLUT.inc.c"
+};
+
+#define gZoraHeadTex_WIDTH 8
+#define gZoraHeadTex_HEIGHT 8
+u64 gZoraHeadTex[TEX_LEN(u64, gZoraHeadTex_WIDTH, gZoraHeadTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraHeadTex.ci8.tlut_gZoraTLUT.inc.c"
+};
+
+u64 gZoraEyeOpenTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)] = {
+#include "assets/objects/object_zo/gZoraEyeOpenTex.rgba16.inc.c"
+};
+
+u64 gZoraEyeHalfTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)] = {
+#include "assets/objects/object_zo/gZoraEyeHalfTex.rgba16.inc.c"
+};
+
+u64 gZoraEyeClosedTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)] = {
+#include "assets/objects/object_zo/gZoraEyeClosedTex.rgba16.inc.c"
+};
+
+#define gZoraMouthTex_WIDTH 32
+#define gZoraMouthTex_HEIGHT 32
+u64 gZoraMouthTex[TEX_LEN(u64, gZoraMouthTex_WIDTH, gZoraMouthTex_HEIGHT, 16)] = {
+#include "assets/objects/object_zo/gZoraMouthTex.rgba16.inc.c"
+};
+
+#define gZoraHandTex_WIDTH 16
+#define gZoraHandTex_HEIGHT 16
+u64 gZoraHandTex[TEX_LEN(u64, gZoraHandTex_WIDTH, gZoraHandTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraHandTex.ci8.tlut_gZoraTLUT.inc.c"
+};
+
+#define gZoraKneeTex_WIDTH 8
+#define gZoraKneeTex_HEIGHT 8
+u64 gZoraKneeTex[TEX_LEN(u64, gZoraKneeTex_WIDTH, gZoraKneeTex_HEIGHT, 8)] = {
+#include "assets/objects/object_zo/gZoraKneeTex.ci8.tlut_gZoraTLUT.inc.c"
+};
+
+Vtx gZoraHeadTailFinVtx[] = {
+#include "assets/objects/object_zo/gZoraHeadTailFinVtx.inc.c"
+};
+
+Vtx gZoraHeadTail3Vtx[] = {
+#include "assets/objects/object_zo/gZoraHeadTail3Vtx.inc.c"
+};
+
+Vtx gZoraHeadTail2Vtx[] = {
+#include "assets/objects/object_zo/gZoraHeadTail2Vtx.inc.c"
+};
+
+Vtx gZoraHeadTail1Vtx[] = {
+#include "assets/objects/object_zo/gZoraHeadTail1Vtx.inc.c"
+};
+
+Vtx gZoraHeadVtx[] = {
+#include "assets/objects/object_zo/gZoraHeadVtx.inc.c"
+};
+
+Vtx gZoraLeftHandVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftHandVtx.inc.c"
+};
+
+Vtx gZoraLeftForearmVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftForearmVtx.inc.c"
+};
+
+Vtx gZoraLeftArmVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftArmVtx.inc.c"
+};
+
+Vtx gZoraRightHandVtx[] = {
+#include "assets/objects/object_zo/gZoraRightHandVtx.inc.c"
+};
+
+Vtx gZoraRightForearmVtx[] = {
+#include "assets/objects/object_zo/gZoraRightForearmVtx.inc.c"
+};
+
+Vtx gZoraRightArmVtx[] = {
+#include "assets/objects/object_zo/gZoraRightArmVtx.inc.c"
+};
+
+Vtx gZoraTorsoVtx[] = {
+#include "assets/objects/object_zo/gZoraTorsoVtx.inc.c"
+};
+
+Vtx gZoraLeftFootVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftFootVtx.inc.c"
+};
+
+Vtx gZoraLeftShinVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftShinVtx.inc.c"
+};
+
+Vtx gZoraLeftThighsVtx[] = {
+#include "assets/objects/object_zo/gZoraLeftThighsVtx.inc.c"
+};
+
+Vtx gZoraRightFootVtx[] = {
+#include "assets/objects/object_zo/gZoraRightFootVtx.inc.c"
+};
+
+Vtx gZoraRightShinVtx[] = {
+#include "assets/objects/object_zo/gZoraRightShinVtx.inc.c"
+};
+
+Vtx gZoraRightThighsVtx[] = {
+#include "assets/objects/object_zo/gZoraRightThighsVtx.inc.c"
+};
+
+Vtx gZoraPelvisVtx[] = {
+#include "assets/objects/object_zo/gZoraPelvisVtx.inc.c"
+};
+
+Gfx gZoraPelvisDL[53] = {
+#include "assets/objects/object_zo/gZoraPelvisDL.inc.c"
+};
+
+Gfx gZoraTorsoDL[111] = {
+#include "assets/objects/object_zo/gZoraTorsoDL.inc.c"
+};
+
+Gfx gZoraHeadDL[79] = {
+#include "assets/objects/object_zo/gZoraHeadDL.inc.c"
+};
+
+Gfx gZoraHeadTail1DL[52] = {
+#include "assets/objects/object_zo/gZoraHeadTail1DL.inc.c"
+};
+
+Gfx gZoraHeadTail2DL[51] = {
+#include "assets/objects/object_zo/gZoraHeadTail2DL.inc.c"
+};
+
+Gfx gZoraHeadTail3DL[51] = {
+#include "assets/objects/object_zo/gZoraHeadTail3DL.inc.c"
+};
+
+Gfx gZoraHeadTailFinDL[72] = {
+#include "assets/objects/object_zo/gZoraHeadTailFinDL.inc.c"
+};
+
+Gfx gZoraRightArmDL[76] = {
+#include "assets/objects/object_zo/gZoraRightArmDL.inc.c"
+};
+
+Gfx gZoraRightForearmDL[92] = {
+#include "assets/objects/object_zo/gZoraRightForearmDL.inc.c"
+};
+
+Gfx gZoraRightHandDL[65] = {
+#include "assets/objects/object_zo/gZoraRightHandDL.inc.c"
+};
+
+Gfx gZoraLeftArmDL[76] = {
+#include "assets/objects/object_zo/gZoraLeftArmDL.inc.c"
+};
+
+Gfx gZoraLeftForearmDL[92] = {
+#include "assets/objects/object_zo/gZoraLeftForearmDL.inc.c"
+};
+
+Gfx gZoraLeftHandDL[65] = {
+#include "assets/objects/object_zo/gZoraLeftHandDL.inc.c"
+};
+
+Gfx gZoraRightThighsDL[92] = {
+#include "assets/objects/object_zo/gZoraRightThighsDL.inc.c"
+};
+
+Gfx gZoraRightShinDL[91] = {
+#include "assets/objects/object_zo/gZoraRightShinDL.inc.c"
+};
+
+Gfx gZoraRightFootDL[89] = {
+#include "assets/objects/object_zo/gZoraRightFootDL.inc.c"
+};
+
+Gfx gZoraLeftThighsDL[92] = {
+#include "assets/objects/object_zo/gZoraLeftThighsDL.inc.c"
+};
+
+Gfx gZoraLeftShinDL[91] = {
+#include "assets/objects/object_zo/gZoraLeftShinDL.inc.c"
+};
+
+Gfx gZoraLeftFootDL[89] = {
+#include "assets/objects/object_zo/gZoraLeftFootDL.inc.c"
+};
+
+StandardLimb gZoraPelvisLimb = {
+#include "assets/objects/object_zo/gZoraPelvisLimb.inc.c"
+};
+
+StandardLimb gZoraLeftThighsLimb = {
+#include "assets/objects/object_zo/gZoraLeftThighsLimb.inc.c"
+};
+
+StandardLimb gZoraLeftShinLimb = {
+#include "assets/objects/object_zo/gZoraLeftShinLimb.inc.c"
+};
+
+StandardLimb gZoraLeftFootLimb = {
+#include "assets/objects/object_zo/gZoraLeftFootLimb.inc.c"
+};
+
+StandardLimb gZoraRightThighsLimb = {
+#include "assets/objects/object_zo/gZoraRightThighsLimb.inc.c"
+};
+
+StandardLimb gZoraRightShinLimb = {
+#include "assets/objects/object_zo/gZoraRightShinLimb.inc.c"
+};
+
+StandardLimb gZoraRightFootLimb = {
+#include "assets/objects/object_zo/gZoraRightFootLimb.inc.c"
+};
+
+StandardLimb gZoraTorsoLimb = {
+#include "assets/objects/object_zo/gZoraTorsoLimb.inc.c"
+};
+
+StandardLimb gZoraLeftArmLimb = {
+#include "assets/objects/object_zo/gZoraLeftArmLimb.inc.c"
+};
+
+StandardLimb gZoraLeftForearmLimb = {
+#include "assets/objects/object_zo/gZoraLeftForearmLimb.inc.c"
+};
+
+StandardLimb gZoraLeftHandLimb = {
+#include "assets/objects/object_zo/gZoraLeftHandLimb.inc.c"
+};
+
+StandardLimb gZoraRightArmLimb = {
+#include "assets/objects/object_zo/gZoraRightArmLimb.inc.c"
+};
+
+StandardLimb gZoraRightForearmLimb = {
+#include "assets/objects/object_zo/gZoraRightForearmLimb.inc.c"
+};
+
+StandardLimb gZoraRightHandLimb = {
+#include "assets/objects/object_zo/gZoraRightHandLimb.inc.c"
+};
+
+StandardLimb gZoraHeadLimb = {
+#include "assets/objects/object_zo/gZoraHeadLimb.inc.c"
+};
+
+StandardLimb gZoraHeadTail1Limb = {
+#include "assets/objects/object_zo/gZoraHeadTail1Limb.inc.c"
+};
+
+StandardLimb gZoraHeadTail2Limb = {
+#include "assets/objects/object_zo/gZoraHeadTail2Limb.inc.c"
+};
+
+StandardLimb gZoraHeadTail3Limb = {
+#include "assets/objects/object_zo/gZoraHeadTail3Limb.inc.c"
+};
+
+StandardLimb gZoraHeadTailFinLimb = {
+#include "assets/objects/object_zo/gZoraHeadTailFinLimb.inc.c"
+};
+
+void* gZoraLimbs[] = {
+#include "assets/objects/object_zo/gZoraLimbs.inc.c"
+};
+
+FlexSkeletonHeader gZoraSkel = {
+#include "assets/objects/object_zo/gZoraSkel.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraSurfaceAnim.c b/assets/objects/object_zo/gZoraSurfaceAnim.c
new file mode 100644
index 0000000000..f0fd1eefdb
--- /dev/null
+++ b/assets/objects/object_zo/gZoraSurfaceAnim.c
@@ -0,0 +1,14 @@
+#include "object_zo.h"
+#include "array_count.h"
+
+s16 gZoraSurfaceFrameData[] = {
+#include "assets/objects/object_zo/gZoraSurfaceFrameData.inc.c"
+};
+
+JointIndex gZoraSurfaceJointIndices[] = {
+#include "assets/objects/object_zo/gZoraSurfaceJointIndices.inc.c"
+};
+
+AnimationHeader gZoraSurfaceAnim = {
+#include "assets/objects/object_zo/gZoraSurfaceAnim.inc.c"
+};
diff --git a/assets/objects/object_zo/gZoraThrowRupeesAnim.c b/assets/objects/object_zo/gZoraThrowRupeesAnim.c
new file mode 100644
index 0000000000..8c1ac64a86
--- /dev/null
+++ b/assets/objects/object_zo/gZoraThrowRupeesAnim.c
@@ -0,0 +1,14 @@
+#include "object_zo.h"
+#include "array_count.h"
+
+s16 gZoraThrowRupeesFrameData[] = {
+#include "assets/objects/object_zo/gZoraThrowRupeesFrameData.inc.c"
+};
+
+JointIndex gZoraThrowRupeesJointIndices[] = {
+#include "assets/objects/object_zo/gZoraThrowRupeesJointIndices.inc.c"
+};
+
+AnimationHeader gZoraThrowRupeesAnim = {
+#include "assets/objects/object_zo/gZoraThrowRupeesAnim.inc.c"
+};
diff --git a/assets/objects/object_zo/object_zo.h b/assets/objects/object_zo/object_zo.h
new file mode 100644
index 0000000000..b68a1223d0
--- /dev/null
+++ b/assets/objects/object_zo/object_zo.h
@@ -0,0 +1,55 @@
+#ifndef OBJECT_ZO_H
+#define OBJECT_ZO_H
+
+#include "ultra64.h"
+#include "animation.h"
+#include "tex_len.h"
+
+extern Gfx gZoraBubblesMaterialDL[12];
+extern Gfx gZoraBubblesModelDL[3];
+
+extern Gfx gZoraSplashesMaterialDL[14];
+extern Gfx gZoraSplashesModelDL[3];
+
+extern Gfx gZoraRipplesMaterialDL[13];
+extern Gfx gZoraRipplesModelDL[3];
+
+extern AnimationHeader gZoraHandsOnHipsTappingFootAnim;
+extern AnimationHeader gZoraOpenArmsAnim;
+extern AnimationHeader gZoraThrowRupeesAnim;
+extern AnimationHeader gZoraSurfaceAnim;
+extern AnimationHeader gZoraIdleAnim;
+
+#define ZORA_EYE_TEX_WIDTH 32
+#define ZORA_EYE_TEX_HEIGHT 32
+extern u64 gZoraEyeOpenTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)];
+extern u64 gZoraEyeHalfTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)];
+extern u64 gZoraEyeClosedTex[TEX_LEN(u64, ZORA_EYE_TEX_WIDTH, ZORA_EYE_TEX_HEIGHT, 16)];
+
+typedef enum ZoraLimb {
+ /* 0 */ ZORA_LIMB_NONE,
+ /* 1 */ ZORA_LIMB_PELVIS,
+ /* 2 */ ZORA_LIMB_LEFT_THIGHS,
+ /* 3 */ ZORA_LIMB_LEFT_SHIN,
+ /* 4 */ ZORA_LIMB_LEFT_FOOT,
+ /* 5 */ ZORA_LIMB_RIGHT_THIGHS,
+ /* 6 */ ZORA_LIMB_RIGHT_SHIN,
+ /* 7 */ ZORA_LIMB_RIGHT_FOOT,
+ /* 8 */ ZORA_LIMB_TORSO,
+ /* 9 */ ZORA_LIMB_LEFT_ARM,
+ /* 10 */ ZORA_LIMB_LEFT_FOREARM,
+ /* 11 */ ZORA_LIMB_LEFT_HAND,
+ /* 12 */ ZORA_LIMB_RIGHT_ARM,
+ /* 13 */ ZORA_LIMB_RIGHT_FOREARM,
+ /* 14 */ ZORA_LIMB_RIGHT_HAND,
+ /* 15 */ ZORA_LIMB_HEAD,
+ /* 16 */ ZORA_LIMB_HEAD_TAIL_1,
+ /* 17 */ ZORA_LIMB_HEAD_TAIL_2,
+ /* 18 */ ZORA_LIMB_HEAD_TAIL_3,
+ /* 19 */ ZORA_LIMB_HEAD_TAIL_FIN,
+ /* 20 */ ZORA_LIMB_MAX
+} ZoraLimb;
+
+extern FlexSkeletonHeader gZoraSkel;
+
+#endif
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_link_boy.xml b/assets/xml/objects/object_link_boy.xml
index a0052722f3..21a1d407c2 100644
--- a/assets/xml/objects/object_link_boy.xml
+++ b/assets/xml/objects/object_link_boy.xml
@@ -556,17 +556,17 @@
-
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_link_child.xml b/assets/xml/objects/object_link_child.xml
index 476c5f568d..25ad178c3c 100644
--- a/assets/xml/objects/object_link_child.xml
+++ b/assets/xml/objects/object_link_child.xml
@@ -450,27 +450,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
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/objects/object_zo.xml b/assets/xml/objects/object_zo.xml
index 45c9601284..92aefa8949 100644
--- a/assets/xml/objects/object_zo.xml
+++ b/assets/xml/objects/object_zo.xml
@@ -1,110 +1,110 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/assets/xml/overlays/ovl_Arrow_Fire.xml b/assets/xml/overlays/ovl_Arrow_Fire.xml
index 58e8853f7f..8f7eba2573 100644
--- a/assets/xml/overlays/ovl_Arrow_Fire.xml
+++ b/assets/xml/overlays/ovl_Arrow_Fire.xml
@@ -1,11 +1,11 @@
-
-
-
+
+
+
-
-
+
+
diff --git a/assets/xml/overlays/ovl_Arrow_Ice.xml b/assets/xml/overlays/ovl_Arrow_Ice.xml
index d7657506b1..e2f239c15d 100644
--- a/assets/xml/overlays/ovl_Arrow_Ice.xml
+++ b/assets/xml/overlays/ovl_Arrow_Ice.xml
@@ -1,11 +1,11 @@
-
-
-
+
+
+
-
-
+
+
diff --git a/assets/xml/overlays/ovl_Arrow_Light.xml b/assets/xml/overlays/ovl_Arrow_Light.xml
index 101e37f227..93371024a7 100644
--- a/assets/xml/overlays/ovl_Arrow_Light.xml
+++ b/assets/xml/overlays/ovl_Arrow_Light.xml
@@ -1,11 +1,11 @@
-
-
-
+
+
+
-
-
+
+
diff --git a/assets/xml/overlays/ovl_Boss_Ganon.xml b/assets/xml/overlays/ovl_Boss_Ganon.xml
index 229ab58e1b..f028b92050 100644
--- a/assets/xml/overlays/ovl_Boss_Ganon.xml
+++ b/assets/xml/overlays/ovl_Boss_Ganon.xml
@@ -1,53 +1,137 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_Boss_Ganon2.xml b/assets/xml/overlays/ovl_Boss_Ganon2.xml
index 6b92b19a09..4a1ddd43c2 100644
--- a/assets/xml/overlays/ovl_Boss_Ganon2.xml
+++ b/assets/xml/overlays/ovl_Boss_Ganon2.xml
@@ -1,29 +1,53 @@
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml
index 8808ab4281..f47e1f46ee 100644
--- a/assets/xml/overlays/ovl_file_choose.xml
+++ b/assets/xml/overlays/ovl_file_choose.xml
@@ -1,33 +1,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/assets/xml/overlays/ovl_file_choose_pal_gc.xml b/assets/xml/overlays/ovl_file_choose_pal_gc.xml
index 3c4c24cdab..58b22b8608 100644
--- a/assets/xml/overlays/ovl_file_choose_pal_gc.xml
+++ b/assets/xml/overlays/ovl_file_choose_pal_gc.xml
@@ -1,30 +1,30 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/assets/xml/overlays/ovl_file_choose_pal_n64.xml b/assets/xml/overlays/ovl_file_choose_pal_n64.xml
index 282fad0c37..2c61750279 100644
--- a/assets/xml/overlays/ovl_file_choose_pal_n64.xml
+++ b/assets/xml/overlays/ovl_file_choose_pal_n64.xml
@@ -1,33 +1,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
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/camera.h b/include/camera.h
index 9d4783de06..ec33d47807 100644
--- a/include/camera.h
+++ b/include/camera.h
@@ -119,6 +119,12 @@ struct View;
#define CAM_VIEW_FOV (1 << 5) // camera->fov
#define CAM_VIEW_ROLL (1 << 6) // camera->roll
+#define CAM_DATA_SET_0 (1 << 0)
+#define CAM_DATA_SET_1 (1 << 1)
+#define CAM_DATA_SET_2 (1 << 2)
+#define CAM_DATA_SET_3 (1 << 3)
+#define CAM_DATA_SET_4 (1 << 4)
+
// All scenes using `SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT` or `SCENE_CAM_TYPE_FIXED_TOGGLE_VIEWPOINT` are expected
// to have their first two bgCamInfo entries be the following:
#define BGCAM_INDEX_TOGGLE_LOCKED 0
@@ -851,6 +857,22 @@ typedef struct KeepOn4ReadOnlyData {
/* 0x1E */ s16 unk_1E;
} KeepOn4ReadOnlyData; // size = 0x20
+typedef enum CameraItemType {
+ /* 1 */ CAM_ITEM_TYPE_1 = 1,
+ /* 2 */ CAM_ITEM_TYPE_2,
+ /* 3 */ CAM_ITEM_TYPE_3,
+ /* 4 */ CAM_ITEM_TYPE_4,
+ /* 5 */ CAM_ITEM_TYPE_5,
+ /* 8 */ CAM_ITEM_TYPE_8 = 8,
+ /* 9 */ CAM_ITEM_TYPE_9,
+ /* 10 */ CAM_ITEM_TYPE_10,
+ /* 11 */ CAM_ITEM_TYPE_11,
+ /* 12 */ CAM_ITEM_TYPE_12,
+ /* 81 */ CAM_ITEM_TYPE_81 = 81,
+ /* 90 */ CAM_ITEM_TYPE_90 = 90,
+ /* 91 */ CAM_ITEM_TYPE_91
+} CameraItemType;
+
typedef struct KeepOn4ReadWriteData {
/* 0x00 */ f32 unk_00;
/* 0x04 */ f32 unk_04;
@@ -1648,8 +1670,7 @@ s32 Camera_ChangeDoorCam(Camera* camera, struct Actor* doorActor, s16 bgCamIndex
s16 timer3);
s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera);
Vec3f Camera_GetQuakeOffset(Camera* camera);
-void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3,
- UNK_TYPE arg6);
+void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3, s32 data4);
s32 func_8005B198(void);
s16 Camera_SetFinishedFlag(Camera* camera);
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/spec/spec b/spec/spec
index 60437c4bf9..ea8bd6058b 100644
--- a/spec/spec
+++ b/spec/spec
@@ -2859,7 +2859,15 @@ beginseg
name "object_zo"
compress
romalign 0x1000
- include "$(BUILD_DIR)/assets/objects/object_zo/object_zo.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraHandsOnHipsTappingFootAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraOpenArmsAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraThrowRupeesAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/effect_bubbles.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/effect_splashes.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraSurfaceAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraIdleAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/gZoraSkel.o"
+ include "$(BUILD_DIR)/assets/objects/object_zo/effect_ripples.o"
number 6
endseg
@@ -3875,7 +3883,15 @@ beginseg
name "object_ganon_anime3"
compress
romalign 0x1000
- include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/object_ganon_anime3.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfShowTriforceStartAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfBurstOutAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfTransformEndAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfFloatingHeavyBreathingAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfTransformStartAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfTransformLoopAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanondorfShowTriforceLoopAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanonUncurlAndFlailAnim.o"
+ include "$(BUILD_DIR)/assets/objects/object_ganon_anime3/gGanonRoarAnim.o"
number 6
endseg
diff --git a/src/code/game.c b/src/code/game.c
index 1f4ff8cdbf..1636633f97 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -32,7 +32,7 @@
#include "play_state.h"
#include "vis.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"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0"
SpeedMeter D_801664D0;
VisCvg sVisCvg;
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 36c3f0b15f..71f6a0b82e 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -27,7 +27,7 @@
#include "overlays/actors/ovl_En_Horse/z_en_horse.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"
+ "ique-cn:64 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
s16 Camera_RequestSettingImpl(Camera* camera, s16 requestedSetting, s16 flags);
s32 Camera_RequestModeImpl(Camera* camera, s16 requestedMode, u8 forceModeChange);
@@ -3661,7 +3661,7 @@ s32 Camera_KeepOn3(Camera* camera) {
}
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 ntsc-1.0:82 ntsc-1.1:82 ntsc-1.2:82 pal-1.0:82 pal-1.1:82"
+ "ique-cn:128 ntsc-1.0:79 ntsc-1.1:79 ntsc-1.2:79 pal-1.0:79 pal-1.1:79"
s32 Camera_KeepOn4(Camera* camera) {
static Vec3f D_8015BD50;
@@ -3677,7 +3677,7 @@ s32 Camera_KeepOn4(Camera* camera) {
VecGeo spB8;
UNUSED VecGeo spB0;
VecGeo spA8;
- s16* temp_s0 = &camera->data2;
+ s16* itemType = &camera->data2;
s16 spA2;
s16 spA0;
s16 sp9E;
@@ -3698,12 +3698,12 @@ s32 Camera_KeepOn4(Camera* camera) {
camera->play->view.unk_124 = camera->camId | 0x50;
return 1;
}
- rwData->unk_14 = *temp_s0;
+ rwData->unk_14 = *itemType;
camera->stateFlags &= ~CAM_STATE_LOCK_MODE;
}
- if (rwData->unk_14 != *temp_s0) {
- PRINTF(VT_COL(YELLOW, BLACK) "camera: item: item type changed %d -> %d\n" VT_RST, rwData->unk_14, *temp_s0);
+ if (rwData->unk_14 != *itemType) {
+ PRINTF(VT_COL(YELLOW, BLACK) "camera: item: item type changed %d -> %d\n" VT_RST, rwData->unk_14, *itemType);
camera->animState = 20;
camera->stateFlags |= CAM_STATE_LOCK_MODE;
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
@@ -3726,33 +3726,33 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->interfaceField = GET_NEXT_RO_DATA(values);
roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values);
roData->unk_1E = GET_NEXT_RO_DATA(values);
- PRINTF("camera: item: type %d\n", *temp_s0);
- switch (*temp_s0) {
- case 1:
+ PRINTF("camera: item: type %d\n", *itemType);
+ switch (*itemType) {
+ case CAM_ITEM_TYPE_1:
roData->unk_00 = playerHeight * -0.6f * yNormal;
roData->unk_04 = playerHeight * 2.0f * yNormal;
roData->unk_08 = 10.0f;
break;
- case 2:
- case 3:
+ case CAM_ITEM_TYPE_2:
+ case CAM_ITEM_TYPE_3:
roData->unk_08 = -20.0f;
roData->unk_18 = 80.0f;
break;
- case 4:
+ case CAM_ITEM_TYPE_4:
roData->unk_00 = playerHeight * -0.2f * yNormal;
roData->unk_08 = 25.0f;
break;
- case 8:
+ case CAM_ITEM_TYPE_8:
roData->unk_00 = playerHeight * -0.2f * yNormal;
roData->unk_04 = playerHeight * 0.8f * yNormal;
roData->unk_08 = 50.0f;
roData->unk_18 = 70.0f;
break;
- case 9:
+ case CAM_ITEM_TYPE_9:
roData->unk_00 = playerHeight * 0.1f * yNormal;
roData->unk_04 = playerHeight * 0.5f * yNormal;
roData->unk_08 = -20.0f;
@@ -3761,7 +3761,7 @@ s32 Camera_KeepOn4(Camera* camera) {
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_6);
break;
- case 5:
+ case CAM_ITEM_TYPE_5:
roData->unk_00 = playerHeight * -0.4f * yNormal;
roData->unk_08 = -10.0f;
roData->unk_0C = 45.0f;
@@ -3769,7 +3769,7 @@ s32 Camera_KeepOn4(Camera* camera) {
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON4_FLAG_1);
break;
- case 10:
+ case CAM_ITEM_TYPE_10:
roData->unk_00 = playerHeight * -0.5f * yNormal;
roData->unk_04 = playerHeight * 1.5f * yNormal;
roData->unk_08 = -15.0f;
@@ -3780,7 +3780,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->unk_1E = 0x3C;
break;
- case 12:
+ case CAM_ITEM_TYPE_12:
roData->unk_00 = playerHeight * -0.6f * yNormal;
roData->unk_04 = playerHeight * 1.6f * yNormal;
roData->unk_08 = -2.0f;
@@ -3792,14 +3792,14 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->unk_18 = 50.0f;
break;
- case 0x5A:
+ case CAM_ITEM_TYPE_90:
roData->unk_00 = playerHeight * -0.3f * yNormal;
roData->unk_18 = 45.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1);
break;
- case 0x5B:
+ case CAM_ITEM_TYPE_91:
roData->unk_00 = playerHeight * -0.1f * yNormal;
roData->unk_04 = playerHeight * 1.5f * yNormal;
roData->unk_08 = -3.0f;
@@ -3809,7 +3809,7 @@ s32 Camera_KeepOn4(Camera* camera) {
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3);
break;
- case 0x51:
+ case CAM_ITEM_TYPE_81:
roData->unk_00 = playerHeight * -0.3f * yNormal;
roData->unk_04 = playerHeight * 1.5f * yNormal;
roData->unk_08 = 2.0f;
@@ -3821,7 +3821,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->unk_1E = 0x1E;
break;
- case 11:
+ case CAM_ITEM_TYPE_11:
roData->unk_00 = playerHeight * -0.19f * yNormal;
roData->unk_04 = playerHeight * 0.7f * yNormal;
roData->unk_0C = 130.0f;
@@ -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);
}
@@ -8874,25 +8874,24 @@ Vec3f Camera_GetQuakeOffset(Camera* camera) {
return camera->quakeOffset;
}
-void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3,
- UNK_TYPE arg6) {
- if (setDataFlags & 0x1) {
+void Camera_SetCameraData(Camera* camera, s16 setDataFlags, void* data0, void* data1, s16 data2, s16 data3, s32 data4) {
+ if (setDataFlags & CAM_DATA_SET_0) {
camera->data0 = data0;
}
- if (setDataFlags & 0x2) {
+ if (setDataFlags & CAM_DATA_SET_1) {
camera->data1 = data1;
}
- if (setDataFlags & 0x4) {
+ if (setDataFlags & CAM_DATA_SET_2) {
camera->data2 = data2;
}
- if (setDataFlags & 0x8) {
+ if (setDataFlags & CAM_DATA_SET_3) {
camera->data3 = data3;
}
- if (setDataFlags & 0x10) {
+ if (setDataFlags & CAM_DATA_SET_4) {
PRINTF(VT_COL(RED, WHITE) "camera: setCameraData: last argument not alive!\n" VT_RST);
}
}
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index 158948a2eb..75e6ebef7d 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -17,7 +17,7 @@
#include "z_lib.h"
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ique-cn:192 ntsc-1.0:168 ntsc-1.1:168 ntsc-1.2:168 pal-1.0:168 pal-1.1:168"
+ "ique-cn:192 ntsc-1.0:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:160 pal-1.1:160"
typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
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_onepointdemo.c b/src/code/z_onepointdemo.c
index 12dc2d2568..12915e9a80 100644
--- a/src/code/z_onepointdemo.c
+++ b/src/code/z_onepointdemo.c
@@ -4293,7 +4293,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
subCam->timer = -99;
if (Play_CamIsNotFixed(play)) {
Play_InitCameraDataUsingPlayer(play, subCamId, player, CAM_SET_TURN_AROUND);
- subCam->data2 = 0xC;
+ subCam->data2 = CAM_ITEM_TYPE_12;
} else {
Play_CopyCamera(play, subCamId, CAM_ID_MAIN);
Play_RequestCameraSetting(play, subCamId, CAM_SET_FREE2);
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_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c b/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
index 8693802846..3d68864291 100644
--- a/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
+++ b/src/overlays/actors/ovl_Bg_Mori_Rakkatenjo/z_bg_mori_rakkatenjo.c
@@ -228,7 +228,7 @@ void BgMoriRakkatenjo_Update(Actor* thisx, PlayState* play2) {
if (sCamSetting == CAM_SET_NONE) {
PRINTF("camera changed (mori rakka tenjyo) ... \n");
sCamSetting = play->cameraPtrs[CAM_ID_MAIN]->setting;
- Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], 1, &this->dyna.actor, NULL, 0, 0, 0);
+ Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], CAM_DATA_SET_0, &this->dyna.actor, NULL, 0, 0, 0);
Camera_RequestSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_FOREST_BIRDS_EYE);
}
} else if (sCamSetting != CAM_SET_NONE) {
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..cafa822410 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,10 +29,10 @@
#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"
+#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ique-cn:128" \
+ "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
@@ -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 367b4f765f..191de748bb 100644
--- a/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
+++ b/src/overlays/actors/ovl_Boss_Sst/z_boss_sst.c
@@ -34,7 +34,7 @@
#include "assets/objects/gameplay_keep/gameplay_keep.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
- "ique-cn:128 pal-1.0:128 pal-1.1:128"
+ "ique-cn:128 pal-1.0:0 pal-1.1:0"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
@@ -2770,7 +2770,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,
@@ -2796,7 +2796,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);
@@ -2905,7 +2905,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);
@@ -2957,7 +2957,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);
@@ -3258,7 +3258,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 7fb7a96c89..ca9f9cc231 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -320,9 +320,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) {
@@ -334,7 +336,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);
@@ -354,7 +356,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_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
index e3359b4181..68be05297e 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -1777,7 +1777,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) {
// Focus the camera on Epona
Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor);
Camera_RequestSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_TURN_AROUND);
- Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], 4, NULL, NULL, 0x51, 0, 0);
+ Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], CAM_DATA_SET_2, NULL, NULL, CAM_ITEM_TYPE_81, 0, 0);
}
}
if (!(this->stateFlags & ENHORSE_INACTIVE)) {
@@ -1853,7 +1853,7 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
EnHorse_SetFollowAnimation(this, play);
Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor);
Camera_RequestSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_TURN_AROUND);
- Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], 4, NULL, NULL, 0x51, 0, 0);
+ Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], CAM_DATA_SET_2, NULL, NULL, CAM_ITEM_TYPE_81, 0, 0);
}
} else {
Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
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 d236548a4d..df33e793e1 100644
--- a/src/overlays/actors/ovl_En_Mb/z_en_mb.c
+++ b/src/overlays/actors/ovl_En_Mb/z_en_mb.c
@@ -1515,7 +1515,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;
@@ -1523,7 +1523,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_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
index ab3c142984..33b5886a26 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -569,7 +569,7 @@ void EnOssan_TalkHappyMaskShopkeeper(PlayState* play) {
void EnOssan_UpdateCameraDirection(EnOssan* this, PlayState* play, f32 cameraFaceAngle) {
this->cameraFaceAngle = cameraFaceAngle;
- Camera_SetCameraData(GET_ACTIVE_CAM(play), 0xC, NULL, NULL, cameraFaceAngle, 0, 0);
+ Camera_SetCameraData(GET_ACTIVE_CAM(play), CAM_DATA_SET_2 | CAM_DATA_SET_3, NULL, NULL, cameraFaceAngle, 0, 0);
}
s32 EnOssan_TryGetObjBankIndices(EnOssan* this, PlayState* play, s16* objectIds) {
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 d7e93a84b8..457c53503d 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_En_Xc/z_en_xc.c b/src/overlays/actors/ovl_En_Xc/z_en_xc.c
index 2820225931..60a247490b 100644
--- a/src/overlays/actors/ovl_En_Xc/z_en_xc.c
+++ b/src/overlays/actors/ovl_En_Xc/z_en_xc.c
@@ -1416,7 +1416,7 @@ void func_80B3F3D8(void) {
}
#pragma increment_block_number "gc-eu:64 gc-eu-mq:64 gc-jp:64 gc-jp-ce:64 gc-jp-mq:64 gc-us:64 gc-us-mq:64 ique-cn:64" \
- "ntsc-1.0:64 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+ "ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
void EnXc_PlayDiveSFX(Vec3f* src, PlayState* play) {
static Vec3f D_80B42DA0;
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 e6e017490a..2acc07c120 100644
--- a/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/src/overlays/actors/ovl_player_actor/z_player.c
@@ -377,7 +377,7 @@ static Vec3f sInteractWallCheckResult;
static Input* sControlInput;
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
- "ique-cn:192 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
+ "ique-cn:160 ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128 pal-1.0:128 pal-1.1:128"
// .data
@@ -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) {
@@ -3498,7 +3498,7 @@ void Player_SetupActionPreserveItemAction(PlayState* play, Player* this, PlayerA
}
}
-void func_80835E44(PlayState* play, s16 camSetting) {
+void Player_RequestCameraSetting(PlayState* play, s16 camSetting) {
if (!Play_CamIsNotFixed(play)) {
if (camSetting == CAM_SET_SCENE_TRANSITION) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
@@ -3508,9 +3508,9 @@ void func_80835E44(PlayState* play, s16 camSetting) {
}
}
-void func_80835EA4(PlayState* play, s32 arg1) {
- func_80835E44(play, CAM_SET_TURN_AROUND);
- Camera_SetCameraData(Play_GetCamera(play, CAM_ID_MAIN), 4, NULL, NULL, arg1, 0, 0);
+void Player_SetTurnAroundCamera(PlayState* play, s32 camItemType) {
+ Player_RequestCameraSetting(play, CAM_SET_TURN_AROUND);
+ Camera_SetCameraData(Play_GetCamera(play, CAM_ID_MAIN), CAM_DATA_SET_2, NULL, NULL, camItemType, 0, 0);
}
void Player_DestroyHookshot(Player* this) {
@@ -5270,7 +5270,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
this->stateFlags1 |= PLAYER_STATE1_0 | PLAYER_STATE1_29;
- func_80835E44(play, CAM_SET_SCENE_TRANSITION);
+ Player_RequestCameraSetting(play, CAM_SET_SCENE_TRANSITION);
return 1;
} else {
@@ -5973,7 +5973,7 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) {
if (magicSpell == 5) {
this->subCamId = OnePointCutscene_Init(play, 1100, -101, NULL, CAM_ID_MAIN);
} else {
- func_80835EA4(play, 10);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_10);
}
}
@@ -6041,7 +6041,7 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
Player_SetupAction(play, this, Player_Action_8085063C, 1);
this->stateFlags1 |= PLAYER_STATE1_28 | PLAYER_STATE1_29;
Player_AnimPlayOnce(play, this, Player_GetIdleAnim(this));
- func_80835EA4(play, 4);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_4);
}
func_80832224(this);
@@ -6095,11 +6095,11 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
} else if (sp2C == EXCH_ITEM_BOTTLE_RUTOS_LETTER) {
this->av1.actionVar1 = 1;
this->actor.textId = 0x4005;
- func_80835EA4(play, 1);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_1);
} else {
this->av1.actionVar1 = 2;
this->actor.textId = 0xCF;
- func_80835EA4(play, 4);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_4);
}
this->actor.flags |= ACTOR_FLAG_TALK;
@@ -6122,21 +6122,21 @@ s32 Player_ActionHandler_13(Player* this, PlayState* play) {
if (sp2C == 0xC) {
Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EED8, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_bug_out);
- func_80835EA4(play, 3);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_3);
} else if ((sp2C > 0) && (sp2C < 4)) {
Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EFC0, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_bottle_fish_out);
- func_80835EA4(play, (sp2C == 1) ? 1 : 5);
+ Player_SetTurnAroundCamera(play, (sp2C == 1) ? CAM_ITEM_TYPE_1 : CAM_ITEM_TYPE_5);
} else {
Player_SetupActionPreserveItemAction(play, this, Player_Action_8084EAC0, 0);
Player_AnimChangeOnceMorphAdjusted(play, this, &gPlayerAnim_link_bottle_drink_demo_start);
- func_80835EA4(play, 2);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_2);
}
} else {
Player_SetupActionPreserveItemAction(play, this, Player_Action_8084E3C4, 0);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_normal_okarina_start);
this->stateFlags2 |= PLAYER_STATE2_USING_OCARINA;
- func_80835EA4(play, (this->unk_6A8 != NULL) ? 0x5B : 0x5A);
+ Player_SetTurnAroundCamera(play, (this->unk_6A8 != NULL) ? CAM_ITEM_TYPE_91 : CAM_ITEM_TYPE_90);
if (this->unk_6A8 != NULL) {
this->stateFlags2 |= PLAYER_STATE2_25;
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->unk_6A8);
@@ -7353,7 +7353,7 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) {
if (!(this->stateFlags2 & PLAYER_STATE2_10) || (this->currentBoots == PLAYER_BOOTS_IRON)) {
Player_SetupWaitForPutAway(play, this, func_8083A434);
Player_AnimPlayOnceAdjusted(play, this, &gPlayerAnim_link_demo_get_itemB);
- func_80835EA4(play, 9);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_9);
}
this->stateFlags1 |= PLAYER_STATE1_10 | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_29;
@@ -9070,7 +9070,7 @@ s32 func_80842DF4(PlayState* play, Player* this) {
s32 bgId;
Vec3f sp68;
Vec3f sp5C;
- Vec3f sp50;
+ Vec3f baseToTip;
s32 temp1;
s32 surfaceMaterial;
@@ -9080,18 +9080,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)) {
@@ -11474,8 +11475,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) {
@@ -13747,7 +13748,7 @@ void Player_Action_8084E1EC(Player* this, PlayState* play) {
if ((this->stateFlags1 & PLAYER_STATE1_10) && LinkAnimation_OnFrame(&this->skelAnime, 10.0f)) {
func_808332F4(this, play);
func_80832340(play, this);
- func_80835EA4(play, 8);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_8);
} else if (LinkAnimation_OnFrame(&this->skelAnime, 5.0f)) {
Player_PlayVoiceSfx(this, NA_SE_VO_LI_BREATH_DRINK);
}
@@ -13917,7 +13918,7 @@ void Player_Action_8084E6D4(Player* this, PlayState* play) {
}
this->av2.actionVar2 = 2;
- func_80835EA4(play, 9);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_9);
}
} else {
if (this->av2.actionVar2 == 0) {
@@ -14119,7 +14120,7 @@ void Player_Action_SwingBottle(Player* this, PlayState* play) {
Player_UpdateBottleHeld(play, this, catchInfo->itemId, ABS(catchInfo->itemAction));
Player_AnimPlayOnceAdjusted(play, this, swingEntry->catchAnimation);
- func_80835EA4(play, 4);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_4);
}
}
}
@@ -16218,6 +16219,6 @@ void Player_StartTalking(PlayState* play, Actor* actor) {
if ((this->naviActor == this->talkActor) && ((this->talkActor->textId & 0xFF00) != 0x200)) {
this->naviActor->flags |= ACTOR_FLAG_TALK;
- func_80835EA4(play, 0xB);
+ Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_11);
}
}
diff --git a/tools/assets/extract/write_source.txt b/tools/assets/extract/write_source.txt
index 5d19b2a10a..35b876ee4b 100644
--- a/tools/assets/extract/write_source.txt
+++ b/tools/assets/extract/write_source.txt
@@ -87,7 +87,6 @@ assets/objects/object_fz/object_fz.c
assets/objects/object_ganon2/object_ganon2.c
assets/objects/object_ganon_anime1/object_ganon_anime1.c
assets/objects/object_ganon_anime2/object_ganon_anime2.c
-assets/objects/object_ganon_anime3/object_ganon_anime3.c
assets/objects/object_ganon/object_ganon.c
assets/objects/object_ganon_objects/object_ganon_objects.c
assets/objects/object_ge1/object_ge1.c
@@ -381,30 +380,17 @@ assets/objects/object_zl2_anime1/object_zl2_anime1.c
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 +946,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